aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/thermal/samsung/exynos_thermal_common.h1
-rw-r--r--drivers/thermal/samsung/exynos_tmu.c158
-rw-r--r--drivers/thermal/samsung/exynos_tmu.h13
-rw-r--r--drivers/thermal/samsung/exynos_tmu_data.c145
-rw-r--r--drivers/thermal/samsung/exynos_tmu_data.h4
5 files changed, 203 insertions, 118 deletions
diff --git a/drivers/thermal/samsung/exynos_thermal_common.h b/drivers/thermal/samsung/exynos_thermal_common.h
index bfcf69ecd123..bc3016e6e9d6 100644
--- a/drivers/thermal/samsung/exynos_thermal_common.h
+++ b/drivers/thermal/samsung/exynos_thermal_common.h
@@ -85,6 +85,7 @@ struct thermal_sensor_conf {
85 struct thermal_cooling_conf cooling_data; 85 struct thermal_cooling_conf cooling_data;
86 void *driver_data; 86 void *driver_data;
87 void *pzone_data; 87 void *pzone_data;
88 struct device *dev;
88}; 89};
89 90
90/*Functions used exynos based thermal sensor driver*/ 91/*Functions used exynos based thermal sensor driver*/
diff --git a/drivers/thermal/samsung/exynos_tmu.c b/drivers/thermal/samsung/exynos_tmu.c
index 4356118bab01..7f65fe088d24 100644
--- a/drivers/thermal/samsung/exynos_tmu.c
+++ b/drivers/thermal/samsung/exynos_tmu.c
@@ -26,15 +26,32 @@
26#include <linux/interrupt.h> 26#include <linux/interrupt.h>
27#include <linux/module.h> 27#include <linux/module.h>
28#include <linux/of.h> 28#include <linux/of.h>
29#include <linux/of_address.h>
30#include <linux/of_irq.h>
29#include <linux/platform_device.h> 31#include <linux/platform_device.h>
30 32
31#include "exynos_thermal_common.h" 33#include "exynos_thermal_common.h"
32#include "exynos_tmu.h" 34#include "exynos_tmu.h"
33#include "exynos_tmu_data.h" 35#include "exynos_tmu_data.h"
34 36
37/**
38 * struct exynos_tmu_data : A structure to hold the private data of the TMU
39 driver
40 * @id: identifier of the one instance of the TMU controller.
41 * @pdata: pointer to the tmu platform/configuration data
42 * @base: base address of the single instance of the TMU controller.
43 * @irq: irq number of the TMU controller.
44 * @soc: id of the SOC type.
45 * @irq_work: pointer to the irq work structure.
46 * @lock: lock to implement synchronization.
47 * @clk: pointer to the clock structure.
48 * @temp_error1: fused value of the first point trim.
49 * @temp_error2: fused value of the second point trim.
50 * @reg_conf: pointer to structure to register with core thermal.
51 */
35struct exynos_tmu_data { 52struct exynos_tmu_data {
53 int id;
36 struct exynos_tmu_platform_data *pdata; 54 struct exynos_tmu_platform_data *pdata;
37 struct resource *mem;
38 void __iomem *base; 55 void __iomem *base;
39 int irq; 56 int irq;
40 enum soc_type soc; 57 enum soc_type soc;
@@ -42,6 +59,7 @@ struct exynos_tmu_data {
42 struct mutex lock; 59 struct mutex lock;
43 struct clk *clk; 60 struct clk *clk;
44 u8 temp_error1, temp_error2; 61 u8 temp_error1, temp_error2;
62 struct thermal_sensor_conf *reg_conf;
45}; 63};
46 64
47/* 65/*
@@ -345,12 +363,6 @@ static int exynos_tmu_set_emulation(void *drv_data, unsigned long temp)
345 { return -EINVAL; } 363 { return -EINVAL; }
346#endif/*CONFIG_THERMAL_EMULATION*/ 364#endif/*CONFIG_THERMAL_EMULATION*/
347 365
348static struct thermal_sensor_conf exynos_sensor_conf = {
349 .name = "exynos-therm",
350 .read_temperature = (int (*)(void *))exynos_tmu_read,
351 .write_emul_temp = exynos_tmu_set_emulation,
352};
353
354static void exynos_tmu_work(struct work_struct *work) 366static void exynos_tmu_work(struct work_struct *work)
355{ 367{
356 struct exynos_tmu_data *data = container_of(work, 368 struct exynos_tmu_data *data = container_of(work,
@@ -359,7 +371,7 @@ static void exynos_tmu_work(struct work_struct *work)
359 const struct exynos_tmu_registers *reg = pdata->registers; 371 const struct exynos_tmu_registers *reg = pdata->registers;
360 unsigned int val_irq; 372 unsigned int val_irq;
361 373
362 exynos_report_trigger(&exynos_sensor_conf); 374 exynos_report_trigger(data->reg_conf);
363 mutex_lock(&data->lock); 375 mutex_lock(&data->lock);
364 clk_enable(data->clk); 376 clk_enable(data->clk);
365 377
@@ -404,33 +416,73 @@ MODULE_DEVICE_TABLE(of, exynos_tmu_match);
404#endif 416#endif
405 417
406static inline struct exynos_tmu_platform_data *exynos_get_driver_data( 418static inline struct exynos_tmu_platform_data *exynos_get_driver_data(
407 struct platform_device *pdev) 419 struct platform_device *pdev, int id)
408{ 420{
409#ifdef CONFIG_OF 421#ifdef CONFIG_OF
422 struct exynos_tmu_init_data *data_table;
423 struct exynos_tmu_platform_data *tmu_data;
410 if (pdev->dev.of_node) { 424 if (pdev->dev.of_node) {
411 const struct of_device_id *match; 425 const struct of_device_id *match;
412 match = of_match_node(exynos_tmu_match, pdev->dev.of_node); 426 match = of_match_node(exynos_tmu_match, pdev->dev.of_node);
413 if (!match) 427 if (!match)
414 return NULL; 428 return NULL;
415 return (struct exynos_tmu_platform_data *) match->data; 429 data_table = (struct exynos_tmu_init_data *) match->data;
430 if (!data_table || id >= data_table->tmu_count)
431 return NULL;
432 tmu_data = data_table->tmu_data;
433 return (struct exynos_tmu_platform_data *) (tmu_data + id);
416 } 434 }
417#endif 435#endif
418 return NULL; 436 return NULL;
419} 437}
420 438
421static int exynos_tmu_probe(struct platform_device *pdev) 439static int exynos_map_dt_data(struct platform_device *pdev)
422{ 440{
423 struct exynos_tmu_data *data; 441 struct exynos_tmu_data *data = platform_get_drvdata(pdev);
424 struct exynos_tmu_platform_data *pdata = pdev->dev.platform_data; 442 struct exynos_tmu_platform_data *pdata;
425 int ret, i; 443 struct resource res;
444
445 if (!data)
446 return -ENODEV;
426 447
427 if (!pdata) 448 data->id = of_alias_get_id(pdev->dev.of_node, "tmuctrl");
428 pdata = exynos_get_driver_data(pdev); 449 if (data->id < 0)
450 data->id = 0;
429 451
452 data->irq = irq_of_parse_and_map(pdev->dev.of_node, 0);
453 if (data->irq <= 0) {
454 dev_err(&pdev->dev, "failed to get IRQ\n");
455 return -ENODEV;
456 }
457
458 if (of_address_to_resource(pdev->dev.of_node, 0, &res)) {
459 dev_err(&pdev->dev, "failed to get Resource 0\n");
460 return -ENODEV;
461 }
462
463 data->base = devm_ioremap(&pdev->dev, res.start, resource_size(&res));
464 if (!data->base) {
465 dev_err(&pdev->dev, "Failed to ioremap memory\n");
466 return -EADDRNOTAVAIL;
467 }
468
469 pdata = exynos_get_driver_data(pdev, data->id);
430 if (!pdata) { 470 if (!pdata) {
431 dev_err(&pdev->dev, "No platform init data supplied.\n"); 471 dev_err(&pdev->dev, "No platform init data supplied.\n");
432 return -ENODEV; 472 return -ENODEV;
433 } 473 }
474 data->pdata = pdata;
475
476 return 0;
477}
478
479static int exynos_tmu_probe(struct platform_device *pdev)
480{
481 struct exynos_tmu_data *data;
482 struct exynos_tmu_platform_data *pdata;
483 struct thermal_sensor_conf *sensor_conf;
484 int ret, i;
485
434 data = devm_kzalloc(&pdev->dev, sizeof(struct exynos_tmu_data), 486 data = devm_kzalloc(&pdev->dev, sizeof(struct exynos_tmu_data),
435 GFP_KERNEL); 487 GFP_KERNEL);
436 if (!data) { 488 if (!data) {
@@ -438,25 +490,16 @@ static int exynos_tmu_probe(struct platform_device *pdev)
438 return -ENOMEM; 490 return -ENOMEM;
439 } 491 }
440 492
441 data->irq = platform_get_irq(pdev, 0); 493 platform_set_drvdata(pdev, data);
442 if (data->irq < 0) { 494 mutex_init(&data->lock);
443 dev_err(&pdev->dev, "Failed to get platform irq\n");
444 return data->irq;
445 }
446 495
447 INIT_WORK(&data->irq_work, exynos_tmu_work); 496 ret = exynos_map_dt_data(pdev);
497 if (ret)
498 return ret;
448 499
449 data->mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 500 pdata = data->pdata;
450 data->base = devm_ioremap_resource(&pdev->dev, data->mem);
451 if (IS_ERR(data->base))
452 return PTR_ERR(data->base);
453 501
454 ret = devm_request_irq(&pdev->dev, data->irq, exynos_tmu_irq, 502 INIT_WORK(&data->irq_work, exynos_tmu_work);
455 IRQF_TRIGGER_RISING, "exynos-tmu", data);
456 if (ret) {
457 dev_err(&pdev->dev, "Failed to request irq: %d\n", data->irq);
458 return ret;
459 }
460 503
461 data->clk = devm_clk_get(&pdev->dev, "tmu_apbif"); 504 data->clk = devm_clk_get(&pdev->dev, "tmu_apbif");
462 if (IS_ERR(data->clk)) { 505 if (IS_ERR(data->clk)) {
@@ -477,10 +520,6 @@ static int exynos_tmu_probe(struct platform_device *pdev)
477 goto err_clk; 520 goto err_clk;
478 } 521 }
479 522
480 data->pdata = pdata;
481 platform_set_drvdata(pdev, data);
482 mutex_init(&data->lock);
483
484 ret = exynos_tmu_initialize(pdev); 523 ret = exynos_tmu_initialize(pdev);
485 if (ret) { 524 if (ret) {
486 dev_err(&pdev->dev, "Failed to initialize TMU\n"); 525 dev_err(&pdev->dev, "Failed to initialize TMU\n");
@@ -489,35 +528,54 @@ static int exynos_tmu_probe(struct platform_device *pdev)
489 528
490 exynos_tmu_control(pdev, true); 529 exynos_tmu_control(pdev, true);
491 530
492 /* Register the sensor with thermal management interface */ 531 /* Allocate a structure to register with the exynos core thermal */
493 (&exynos_sensor_conf)->driver_data = data; 532 sensor_conf = devm_kzalloc(&pdev->dev,
494 exynos_sensor_conf.trip_data.trip_count = pdata->trigger_enable[0] + 533 sizeof(struct thermal_sensor_conf), GFP_KERNEL);
534 if (!sensor_conf) {
535 dev_err(&pdev->dev, "Failed to allocate registration struct\n");
536 ret = -ENOMEM;
537 goto err_clk;
538 }
539 sprintf(sensor_conf->name, "therm_zone%d", data->id);
540 sensor_conf->read_temperature = (int (*)(void *))exynos_tmu_read;
541 sensor_conf->write_emul_temp =
542 (int (*)(void *, unsigned long))exynos_tmu_set_emulation;
543 sensor_conf->driver_data = data;
544 sensor_conf->trip_data.trip_count = pdata->trigger_enable[0] +
495 pdata->trigger_enable[1] + pdata->trigger_enable[2]+ 545 pdata->trigger_enable[1] + pdata->trigger_enable[2]+
496 pdata->trigger_enable[3]; 546 pdata->trigger_enable[3];
497 547
498 for (i = 0; i < exynos_sensor_conf.trip_data.trip_count; i++) { 548 for (i = 0; i < sensor_conf->trip_data.trip_count; i++) {
499 exynos_sensor_conf.trip_data.trip_val[i] = 549 sensor_conf->trip_data.trip_val[i] =
500 pdata->threshold + pdata->trigger_levels[i]; 550 pdata->threshold + pdata->trigger_levels[i];
501 exynos_sensor_conf.trip_data.trip_type[i] = 551 sensor_conf->trip_data.trip_type[i] =
502 pdata->trigger_type[i]; 552 pdata->trigger_type[i];
503 } 553 }
504 554
505 exynos_sensor_conf.trip_data.trigger_falling = pdata->threshold_falling; 555 sensor_conf->trip_data.trigger_falling = pdata->threshold_falling;
506 556
507 exynos_sensor_conf.cooling_data.freq_clip_count = 557 sensor_conf->cooling_data.freq_clip_count = pdata->freq_tab_count;
508 pdata->freq_tab_count;
509 for (i = 0; i < pdata->freq_tab_count; i++) { 558 for (i = 0; i < pdata->freq_tab_count; i++) {
510 exynos_sensor_conf.cooling_data.freq_data[i].freq_clip_max = 559 sensor_conf->cooling_data.freq_data[i].freq_clip_max =
511 pdata->freq_tab[i].freq_clip_max; 560 pdata->freq_tab[i].freq_clip_max;
512 exynos_sensor_conf.cooling_data.freq_data[i].temp_level = 561 sensor_conf->cooling_data.freq_data[i].temp_level =
513 pdata->freq_tab[i].temp_level; 562 pdata->freq_tab[i].temp_level;
514 } 563 }
515 564 sensor_conf->dev = &pdev->dev;
516 ret = exynos_register_thermal(&exynos_sensor_conf); 565 /* Register the sensor with thermal management interface */
566 ret = exynos_register_thermal(sensor_conf);
517 if (ret) { 567 if (ret) {
518 dev_err(&pdev->dev, "Failed to register thermal interface\n"); 568 dev_err(&pdev->dev, "Failed to register thermal interface\n");
519 goto err_clk; 569 goto err_clk;
520 } 570 }
571 data->reg_conf = sensor_conf;
572
573 ret = devm_request_irq(&pdev->dev, data->irq, exynos_tmu_irq,
574 IRQF_TRIGGER_RISING | IRQF_SHARED, dev_name(&pdev->dev), data);
575 if (ret) {
576 dev_err(&pdev->dev, "Failed to request irq: %d\n", data->irq);
577 goto err_clk;
578 }
521 579
522 return 0; 580 return 0;
523err_clk: 581err_clk:
@@ -531,7 +589,7 @@ static int exynos_tmu_remove(struct platform_device *pdev)
531 589
532 exynos_tmu_control(pdev, false); 590 exynos_tmu_control(pdev, false);
533 591
534 exynos_unregister_thermal(&exynos_sensor_conf); 592 exynos_unregister_thermal(data->reg_conf);
535 593
536 clk_unprepare(data->clk); 594 clk_unprepare(data->clk);
537 595
diff --git a/drivers/thermal/samsung/exynos_tmu.h b/drivers/thermal/samsung/exynos_tmu.h
index ef5dc0ebff75..53fa7024090a 100644
--- a/drivers/thermal/samsung/exynos_tmu.h
+++ b/drivers/thermal/samsung/exynos_tmu.h
@@ -250,4 +250,17 @@ struct exynos_tmu_platform_data {
250 unsigned int freq_tab_count; 250 unsigned int freq_tab_count;
251 const struct exynos_tmu_registers *registers; 251 const struct exynos_tmu_registers *registers;
252}; 252};
253
254/**
255 * struct exynos_tmu_init_data
256 * @tmu_count: number of TMU instances.
257 * @tmu_data: platform data of all TMU instances.
258 * This structure is required to store data for multi-instance exynos tmu
259 * driver.
260 */
261struct exynos_tmu_init_data {
262 int tmu_count;
263 struct exynos_tmu_platform_data tmu_data[];
264};
265
253#endif /* _EXYNOS_TMU_H */ 266#endif /* _EXYNOS_TMU_H */
diff --git a/drivers/thermal/samsung/exynos_tmu_data.c b/drivers/thermal/samsung/exynos_tmu_data.c
index 217b8f522d32..a5c25b4bb0c0 100644
--- a/drivers/thermal/samsung/exynos_tmu_data.c
+++ b/drivers/thermal/samsung/exynos_tmu_data.c
@@ -48,38 +48,44 @@ static const struct exynos_tmu_registers exynos4210_tmu_registers = {
48 .tmu_intstat = EXYNOS_TMU_REG_INTSTAT, 48 .tmu_intstat = EXYNOS_TMU_REG_INTSTAT,
49 .tmu_intclear = EXYNOS_TMU_REG_INTCLEAR, 49 .tmu_intclear = EXYNOS_TMU_REG_INTCLEAR,
50}; 50};
51struct exynos_tmu_platform_data const exynos4210_default_tmu_data = { 51
52 .threshold = 80, 52struct exynos_tmu_init_data const exynos4210_default_tmu_data = {
53 .trigger_levels[0] = 5, 53 .tmu_data = {
54 .trigger_levels[1] = 20, 54 {
55 .trigger_levels[2] = 30, 55 .threshold = 80,
56 .trigger_enable[0] = true, 56 .trigger_levels[0] = 5,
57 .trigger_enable[1] = true, 57 .trigger_levels[1] = 20,
58 .trigger_enable[2] = true, 58 .trigger_levels[2] = 30,
59 .trigger_enable[3] = false, 59 .trigger_enable[0] = true,
60 .trigger_type[0] = THROTTLE_ACTIVE, 60 .trigger_enable[1] = true,
61 .trigger_type[1] = THROTTLE_ACTIVE, 61 .trigger_enable[2] = true,
62 .trigger_type[2] = SW_TRIP, 62 .trigger_enable[3] = false,
63 .max_trigger_level = 4, 63 .trigger_type[0] = THROTTLE_ACTIVE,
64 .gain = 15, 64 .trigger_type[1] = THROTTLE_ACTIVE,
65 .reference_voltage = 7, 65 .trigger_type[2] = SW_TRIP,
66 .cal_type = TYPE_ONE_POINT_TRIMMING, 66 .max_trigger_level = 4,
67 .min_efuse_value = 40, 67 .gain = 15,
68 .max_efuse_value = 100, 68 .reference_voltage = 7,
69 .first_point_trim = 25, 69 .cal_type = TYPE_ONE_POINT_TRIMMING,
70 .second_point_trim = 85, 70 .min_efuse_value = 40,
71 .default_temp_offset = 50, 71 .max_efuse_value = 100,
72 .freq_tab[0] = { 72 .first_point_trim = 25,
73 .freq_clip_max = 800 * 1000, 73 .second_point_trim = 85,
74 .temp_level = 85, 74 .default_temp_offset = 50,
75 }, 75 .freq_tab[0] = {
76 .freq_tab[1] = { 76 .freq_clip_max = 800 * 1000,
77 .freq_clip_max = 200 * 1000, 77 .temp_level = 85,
78 .temp_level = 100, 78 },
79 .freq_tab[1] = {
80 .freq_clip_max = 200 * 1000,
81 .temp_level = 100,
82 },
83 .freq_tab_count = 2,
84 .type = SOC_ARCH_EXYNOS4210,
85 .registers = &exynos4210_tmu_registers,
86 },
79 }, 87 },
80 .freq_tab_count = 2, 88 .tmu_count = 1,
81 .type = SOC_ARCH_EXYNOS4210,
82 .registers = &exynos4210_tmu_registers,
83}; 89};
84#endif 90#endif
85 91
@@ -120,41 +126,48 @@ static const struct exynos_tmu_registers exynos5250_tmu_registers = {
120 .emul_time_shift = EXYNOS_EMUL_TIME_SHIFT, 126 .emul_time_shift = EXYNOS_EMUL_TIME_SHIFT,
121 .emul_time_mask = EXYNOS_EMUL_TIME_MASK, 127 .emul_time_mask = EXYNOS_EMUL_TIME_MASK,
122}; 128};
123struct exynos_tmu_platform_data const exynos5250_default_tmu_data = { 129
124 .threshold_falling = 10, 130#define EXYNOS5250_TMU_DATA \
125 .trigger_levels[0] = 85, 131 .threshold_falling = 10, \
126 .trigger_levels[1] = 103, 132 .trigger_levels[0] = 85, \
127 .trigger_levels[2] = 110, 133 .trigger_levels[1] = 103, \
128 .trigger_levels[3] = 120, 134 .trigger_levels[2] = 110, \
129 .trigger_enable[0] = true, 135 .trigger_levels[3] = 120, \
130 .trigger_enable[1] = true, 136 .trigger_enable[0] = true, \
131 .trigger_enable[2] = true, 137 .trigger_enable[1] = true, \
132 .trigger_enable[3] = false, 138 .trigger_enable[2] = true, \
133 .trigger_type[0] = THROTTLE_ACTIVE, 139 .trigger_enable[3] = false, \
134 .trigger_type[1] = THROTTLE_ACTIVE, 140 .trigger_type[0] = THROTTLE_ACTIVE, \
135 .trigger_type[2] = SW_TRIP, 141 .trigger_type[1] = THROTTLE_ACTIVE, \
136 .trigger_type[3] = HW_TRIP, 142 .trigger_type[2] = SW_TRIP, \
137 .max_trigger_level = 4, 143 .trigger_type[3] = HW_TRIP, \
138 .gain = 8, 144 .max_trigger_level = 4, \
139 .reference_voltage = 16, 145 .gain = 8, \
140 .noise_cancel_mode = 4, 146 .reference_voltage = 16, \
141 .cal_type = TYPE_ONE_POINT_TRIMMING, 147 .noise_cancel_mode = 4, \
142 .efuse_value = 55, 148 .cal_type = TYPE_ONE_POINT_TRIMMING, \
143 .min_efuse_value = 40, 149 .efuse_value = 55, \
144 .max_efuse_value = 100, 150 .min_efuse_value = 40, \
145 .first_point_trim = 25, 151 .max_efuse_value = 100, \
146 .second_point_trim = 85, 152 .first_point_trim = 25, \
147 .default_temp_offset = 50, 153 .second_point_trim = 85, \
148 .freq_tab[0] = { 154 .default_temp_offset = 50, \
149 .freq_clip_max = 800 * 1000, 155 .freq_tab[0] = { \
150 .temp_level = 85, 156 .freq_clip_max = 800 * 1000, \
151 }, 157 .temp_level = 85, \
152 .freq_tab[1] = { 158 }, \
153 .freq_clip_max = 200 * 1000, 159 .freq_tab[1] = { \
154 .temp_level = 103, 160 .freq_clip_max = 200 * 1000, \
155 }, 161 .temp_level = 103, \
156 .freq_tab_count = 2, 162 }, \
157 .type = SOC_ARCH_EXYNOS, 163 .freq_tab_count = 2, \
164 .type = SOC_ARCH_EXYNOS, \
158 .registers = &exynos5250_tmu_registers, 165 .registers = &exynos5250_tmu_registers,
166
167struct exynos_tmu_init_data const exynos5250_default_tmu_data = {
168 .tmu_data = {
169 { EXYNOS5250_TMU_DATA },
170 },
171 .tmu_count = 1,
159}; 172};
160#endif 173#endif
diff --git a/drivers/thermal/samsung/exynos_tmu_data.h b/drivers/thermal/samsung/exynos_tmu_data.h
index 4acf070c4817..139dbbb1e264 100644
--- a/drivers/thermal/samsung/exynos_tmu_data.h
+++ b/drivers/thermal/samsung/exynos_tmu_data.h
@@ -94,14 +94,14 @@
94#define EXYNOS_MAX_TRIGGER_PER_REG 4 94#define EXYNOS_MAX_TRIGGER_PER_REG 4
95 95
96#if defined(CONFIG_CPU_EXYNOS4210) 96#if defined(CONFIG_CPU_EXYNOS4210)
97extern struct exynos_tmu_platform_data const exynos4210_default_tmu_data; 97extern struct exynos_tmu_init_data const exynos4210_default_tmu_data;
98#define EXYNOS4210_TMU_DRV_DATA (&exynos4210_default_tmu_data) 98#define EXYNOS4210_TMU_DRV_DATA (&exynos4210_default_tmu_data)
99#else 99#else
100#define EXYNOS4210_TMU_DRV_DATA (NULL) 100#define EXYNOS4210_TMU_DRV_DATA (NULL)
101#endif 101#endif
102 102
103#if (defined(CONFIG_SOC_EXYNOS5250) || defined(CONFIG_SOC_EXYNOS4412)) 103#if (defined(CONFIG_SOC_EXYNOS5250) || defined(CONFIG_SOC_EXYNOS4412))
104extern struct exynos_tmu_platform_data const exynos5250_default_tmu_data; 104extern struct exynos_tmu_init_data const exynos5250_default_tmu_data;
105#define EXYNOS5250_TMU_DRV_DATA (&exynos5250_default_tmu_data) 105#define EXYNOS5250_TMU_DRV_DATA (&exynos5250_default_tmu_data)
106#else 106#else
107#define EXYNOS5250_TMU_DRV_DATA (NULL) 107#define EXYNOS5250_TMU_DRV_DATA (NULL)