[PATCH v5 5/5] ARM: exynos: add thermal sensor driver platform data support

2012-07-13 Thread Amit Daniel Kachhap
Add necessary default platform data support needed for TMU driver.  This
dt/non-dt values are tested for origen exynos4210 and smdk exynos5250
platforms.

Signed-off-by: Amit Daniel Kachhap 
Cc: Donggeun Kim 
Acked-by: Guenter Roeck 
Cc: SangWook Ju 
Cc: Durgadoss 
Cc: Len Brown 
Cc: Jean Delvare 
Signed-off-by: Andrew Morton 
---
 drivers/thermal/exynos_thermal.c |  111 +-
 1 files changed, 110 insertions(+), 1 deletions(-)

diff --git a/drivers/thermal/exynos_thermal.c b/drivers/thermal/exynos_thermal.c
index 9ef8c37..07736ea 100644
--- a/drivers/thermal/exynos_thermal.c
+++ b/drivers/thermal/exynos_thermal.c
@@ -662,14 +662,121 @@ static irqreturn_t exynos_tmu_irq(int irq, void *id)
 static struct thermal_sensor_conf exynos_sensor_conf = {
.name   = "exynos-therm",
.read_temperature   = (int (*)(void *))exynos_tmu_read,
+};
+
+#if defined(CONFIG_CPU_EXYNOS4210)
+static struct exynos_tmu_platform_data const exynos4_default_tmu_data = {
+   .threshold = 80,
+   .trigger_levels[0] = 5,
+   .trigger_levels[1] = 20,
+   .trigger_levels[2] = 30,
+   .trigger_level0_en = 1,
+   .trigger_level1_en = 1,
+   .trigger_level2_en = 1,
+   .trigger_level3_en = 0,
+   .gain = 15,
+   .reference_voltage = 7,
+   .cal_type = TYPE_ONE_POINT_TRIMMING,
+   .freq_tab[0] = {
+   .freq_clip_max = 800 * 1000,
+   .temp_level = 85,
+   },
+   .freq_tab[1] = {
+   .freq_clip_max = 200 * 1000,
+   .temp_level = 100,
+   },
+   .freq_tab_count = 2,
+   .type = SOC_ARCH_EXYNOS4,
+};
+#define EXYNOS4_TMU_DRV_DATA (&exynos4_default_tmu_data)
+#else
+#define EXYNOS4_TMU_DRV_DATA (NULL)
+#endif
+
+#if defined(CONFIG_SOC_EXYNOS5250)
+static struct exynos_tmu_platform_data const exynos5_default_tmu_data = {
+   .trigger_levels[0] = 85,
+   .trigger_levels[1] = 103,
+   .trigger_levels[2] = 110,
+   .trigger_level0_en = 1,
+   .trigger_level1_en = 1,
+   .trigger_level2_en = 1,
+   .trigger_level3_en = 0,
+   .gain = 8,
+   .reference_voltage = 16,
+   .noise_cancel_mode = 4,
+   .cal_type = TYPE_ONE_POINT_TRIMMING,
+   .efuse_value = 55,
+   .freq_tab[0] = {
+   .freq_clip_max = 800 * 1000,
+   .temp_level = 85,
+   },
+   .freq_tab[1] = {
+   .freq_clip_max = 200 * 1000,
+   .temp_level = 103,
+   },
+   .freq_tab_count = 2,
+   .type = SOC_ARCH_EXYNOS5,
+};
+#define EXYNOS5_TMU_DRV_DATA (&exynos5_default_tmu_data)
+#else
+#define EXYNOS5_TMU_DRV_DATA (NULL)
+#endif
+
+#ifdef CONFIG_OF
+static const struct of_device_id exynos_tmu_match[] = {
+   {
+   .compatible = "samsung,exynos4-tmu",
+   .data = (void *)EXYNOS4_TMU_DRV_DATA,
+   },
+   {
+   .compatible = "samsung,exynos5-tmu",
+   .data = (void *)EXYNOS5_TMU_DRV_DATA,
+   },
+   {},
+};
+MODULE_DEVICE_TABLE(of, exynos_tmu_match);
+#else
+#define  exynos_tmu_match NULL
+#endif
+
+static struct platform_device_id exynos_tmu_driver_ids[] = {
+   {
+   .name   = "exynos4-tmu",
+   .driver_data= (kernel_ulong_t)EXYNOS4_TMU_DRV_DATA,
+   },
+   {
+   .name   = "exynos5-tmu",
+   .driver_data= (kernel_ulong_t)EXYNOS5_TMU_DRV_DATA,
+   },
+   { },
+};
+MODULE_DEVICE_TABLE(platform, exynos4_tmu_driver_ids);
+
+static inline struct  exynos_tmu_platform_data *exynos_get_driver_data(
+   struct platform_device *pdev)
+{
+#ifdef CONFIG_OF
+   if (pdev->dev.of_node) {
+   const struct of_device_id *match;
+   match = of_match_node(exynos_tmu_match, pdev->dev.of_node);
+   if (!match)
+   return NULL;
+   return (struct exynos_tmu_platform_data *) match->data;
+   }
+#endif
+   return (struct exynos_tmu_platform_data *)
+   platform_get_device_id(pdev)->driver_data;
 }
-;
 static int __devinit exynos_tmu_probe(struct platform_device *pdev)
 {
struct exynos_tmu_data *data;
struct exynos_tmu_platform_data *pdata = pdev->dev.platform_data;
int ret, i;
 
+   if (!pdata)
+   pdata = exynos_get_driver_data(pdev);
+
if (!pdata) {
dev_err(&pdev->dev, "No platform init data supplied.\n");
return -ENODEV;
@@ -838,9 +945,11 @@ static struct platform_driver exynos_tmu_driver = {
.name   = "exynos-tmu",
.owner  = THIS_MODULE,
.pm = EXYNOS_TMU_PM,
+   .of_match_table = exynos_tmu_match,
},
.probe = exynos_tmu_probe,
.remove = __devexit_p(exynos_tmu_remove),
+   .id_table = exynos_tmu_driver_ids,
 };
 
 module_platform_driver(exynos_tmu_driver);
-- 
1.7.1

--
To uns

Re: [PATCH v5 5/5] ARM: exynos: add thermal sensor driver platform data support

2012-07-13 Thread Kyungmin Park
On Fri, Jul 13, 2012 at 8:10 PM, Amit Daniel Kachhap
 wrote:
> Add necessary default platform data support needed for TMU driver.  This
> dt/non-dt values are tested for origen exynos4210 and smdk exynos5250
> platforms.
Looks good to me.
just nitpicks below.

Thank you,
Kyungmin Park
>
> Signed-off-by: Amit Daniel Kachhap 
> Cc: Donggeun Kim 
> Acked-by: Guenter Roeck 
> Cc: SangWook Ju 
> Cc: Durgadoss 
> Cc: Len Brown 
> Cc: Jean Delvare 
> Signed-off-by: Andrew Morton 
> ---
>  drivers/thermal/exynos_thermal.c |  111 
> +-
>  1 files changed, 110 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/thermal/exynos_thermal.c 
> b/drivers/thermal/exynos_thermal.c
> index 9ef8c37..07736ea 100644
> --- a/drivers/thermal/exynos_thermal.c
> +++ b/drivers/thermal/exynos_thermal.c
> @@ -662,14 +662,121 @@ static irqreturn_t exynos_tmu_irq(int irq, void *id)
>  static struct thermal_sensor_conf exynos_sensor_conf = {
> .name   = "exynos-therm",
> .read_temperature   = (int (*)(void *))exynos_tmu_read,
> +};
> +
> +#if defined(CONFIG_CPU_EXYNOS4210)
BTW, doesn't it same as exynos4412? does it different from exynos4412?
If it's same, it's better to use CONFIG_SOC_EXYNOS4?
> +static struct exynos_tmu_platform_data const exynos4_default_tmu_data = {
> +   .threshold = 80,
> +   .trigger_levels[0] = 5,
> +   .trigger_levels[1] = 20,
> +   .trigger_levels[2] = 30,
> +   .trigger_level0_en = 1,
> +   .trigger_level1_en = 1,
> +   .trigger_level2_en = 1,
> +   .trigger_level3_en = 0,
> +   .gain = 15,
> +   .reference_voltage = 7,
> +   .cal_type = TYPE_ONE_POINT_TRIMMING,
> +   .freq_tab[0] = {
> +   .freq_clip_max = 800 * 1000,
> +   .temp_level = 85,
> +   },
> +   .freq_tab[1] = {
> +   .freq_clip_max = 200 * 1000,
> +   .temp_level = 100,
> +   },
> +   .freq_tab_count = 2,
> +   .type = SOC_ARCH_EXYNOS4,
> +};
> +#define EXYNOS4_TMU_DRV_DATA (&exynos4_default_tmu_data)
> +#else
> +#define EXYNOS4_TMU_DRV_DATA (NULL)
> +#endif
> +
> +#if defined(CONFIG_SOC_EXYNOS5250)
similar.
> +static struct exynos_tmu_platform_data const exynos5_default_tmu_data = {
> +   .trigger_levels[0] = 85,
> +   .trigger_levels[1] = 103,
> +   .trigger_levels[2] = 110,
> +   .trigger_level0_en = 1,
> +   .trigger_level1_en = 1,
> +   .trigger_level2_en = 1,
> +   .trigger_level3_en = 0,
> +   .gain = 8,
> +   .reference_voltage = 16,
> +   .noise_cancel_mode = 4,
> +   .cal_type = TYPE_ONE_POINT_TRIMMING,
> +   .efuse_value = 55,
> +   .freq_tab[0] = {
> +   .freq_clip_max = 800 * 1000,
> +   .temp_level = 85,
> +   },
> +   .freq_tab[1] = {
> +   .freq_clip_max = 200 * 1000,
> +   .temp_level = 103,
> +   },
> +   .freq_tab_count = 2,
> +   .type = SOC_ARCH_EXYNOS5,
> +};
> +#define EXYNOS5_TMU_DRV_DATA (&exynos5_default_tmu_data)
> +#else
> +#define EXYNOS5_TMU_DRV_DATA (NULL)
> +#endif
> +
> +#ifdef CONFIG_OF
> +static const struct of_device_id exynos_tmu_match[] = {
> +   {
> +   .compatible = "samsung,exynos4-tmu",
> +   .data = (void *)EXYNOS4_TMU_DRV_DATA,
> +   },
> +   {
> +   .compatible = "samsung,exynos5-tmu",
> +   .data = (void *)EXYNOS5_TMU_DRV_DATA,
> +   },
> +   {},
> +};
> +MODULE_DEVICE_TABLE(of, exynos_tmu_match);
> +#else
> +#define  exynos_tmu_match NULL
> +#endif
> +
> +static struct platform_device_id exynos_tmu_driver_ids[] = {
> +   {
> +   .name   = "exynos4-tmu",
> +   .driver_data= (kernel_ulong_t)EXYNOS4_TMU_DRV_DATA,
> +   },
> +   {
> +   .name   = "exynos5-tmu",
> +   .driver_data= (kernel_ulong_t)EXYNOS5_TMU_DRV_DATA,
> +   },
> +   { },
> +};
> +MODULE_DEVICE_TABLE(platform, exynos4_tmu_driver_ids);
> +
> +static inline struct  exynos_tmu_platform_data *exynos_get_driver_data(
> +   struct platform_device *pdev)
> +{
> +#ifdef CONFIG_OF
> +   if (pdev->dev.of_node) {
> +   const struct of_device_id *match;
> +   match = of_match_node(exynos_tmu_match, pdev->dev.of_node);
> +   if (!match)
> +   return NULL;
> +   return (struct exynos_tmu_platform_data *) match->data;
> +   }
> +#endif
> +   return (struct exynos_tmu_platform_data *)
> +   platform_get_device_id(pdev)->driver_data;
>  }
> -;
>  static int __devinit exynos_tmu_probe(struct platform_device *pdev)
>  {
> struct exynos_tmu_data *data;
> struct exynos_tmu_platform_data *pdata = pdev->dev.platform_data;
> int ret, i;
>
> +   if (!pdata)
> +   pdata = exynos_get_driver_data(pdev);
> +
> if (!pdata) {
>

Re: [PATCH v5 5/5] ARM: exynos: add thermal sensor driver platform data support

2012-07-14 Thread amit kachhap
On Sat, Jul 14, 2012 at 7:03 AM, Kyungmin Park  wrote:
> On Fri, Jul 13, 2012 at 8:10 PM, Amit Daniel Kachhap
>  wrote:
>> Add necessary default platform data support needed for TMU driver.  This
>> dt/non-dt values are tested for origen exynos4210 and smdk exynos5250
>> platforms.
> Looks good to me.

Thanks.

> just nitpicks below.
>
> Thank you,
> Kyungmin Park
>>
>> Signed-off-by: Amit Daniel Kachhap 
>> Cc: Donggeun Kim 
>> Acked-by: Guenter Roeck 
>> Cc: SangWook Ju 
>> Cc: Durgadoss 
>> Cc: Len Brown 
>> Cc: Jean Delvare 
>> Signed-off-by: Andrew Morton 
>> ---
>>  drivers/thermal/exynos_thermal.c |  111 
>> +-
>>  1 files changed, 110 insertions(+), 1 deletions(-)
>>
>> diff --git a/drivers/thermal/exynos_thermal.c 
>> b/drivers/thermal/exynos_thermal.c
>> index 9ef8c37..07736ea 100644
>> --- a/drivers/thermal/exynos_thermal.c
>> +++ b/drivers/thermal/exynos_thermal.c
>> @@ -662,14 +662,121 @@ static irqreturn_t exynos_tmu_irq(int irq, void *id)
>>  static struct thermal_sensor_conf exynos_sensor_conf = {
>> .name   = "exynos-therm",
>> .read_temperature   = (int (*)(void *))exynos_tmu_read,
>> +};
>> +
>> +#if defined(CONFIG_CPU_EXYNOS4210)
> BTW, doesn't it same as exynos4412? does it different from exynos4412?
Currently I only tested this only for origen and exynos5250 board.
Maybe somebody can add 4412 support also.
> If it's same, it's better to use CONFIG_SOC_EXYNOS4?
>> +static struct exynos_tmu_platform_data const exynos4_default_tmu_data = {
>> +   .threshold = 80,
>> +   .trigger_levels[0] = 5,
>> +   .trigger_levels[1] = 20,
>> +   .trigger_levels[2] = 30,
>> +   .trigger_level0_en = 1,
>> +   .trigger_level1_en = 1,
>> +   .trigger_level2_en = 1,
>> +   .trigger_level3_en = 0,
>> +   .gain = 15,
>> +   .reference_voltage = 7,
>> +   .cal_type = TYPE_ONE_POINT_TRIMMING,
>> +   .freq_tab[0] = {
>> +   .freq_clip_max = 800 * 1000,
>> +   .temp_level = 85,
>> +   },
>> +   .freq_tab[1] = {
>> +   .freq_clip_max = 200 * 1000,
>> +   .temp_level = 100,
>> +   },
>> +   .freq_tab_count = 2,
>> +   .type = SOC_ARCH_EXYNOS4,
>> +};
>> +#define EXYNOS4_TMU_DRV_DATA (&exynos4_default_tmu_data)
>> +#else
>> +#define EXYNOS4_TMU_DRV_DATA (NULL)
>> +#endif
>> +
>> +#if defined(CONFIG_SOC_EXYNOS5250)
> similar.
>> +static struct exynos_tmu_platform_data const exynos5_default_tmu_data = {
>> +   .trigger_levels[0] = 85,
>> +   .trigger_levels[1] = 103,
>> +   .trigger_levels[2] = 110,
>> +   .trigger_level0_en = 1,
>> +   .trigger_level1_en = 1,
>> +   .trigger_level2_en = 1,
>> +   .trigger_level3_en = 0,
>> +   .gain = 8,
>> +   .reference_voltage = 16,
>> +   .noise_cancel_mode = 4,
>> +   .cal_type = TYPE_ONE_POINT_TRIMMING,
>> +   .efuse_value = 55,
>> +   .freq_tab[0] = {
>> +   .freq_clip_max = 800 * 1000,
>> +   .temp_level = 85,
>> +   },
>> +   .freq_tab[1] = {
>> +   .freq_clip_max = 200 * 1000,
>> +   .temp_level = 103,
>> +   },
>> +   .freq_tab_count = 2,
>> +   .type = SOC_ARCH_EXYNOS5,
>> +};
>> +#define EXYNOS5_TMU_DRV_DATA (&exynos5_default_tmu_data)
>> +#else
>> +#define EXYNOS5_TMU_DRV_DATA (NULL)
>> +#endif
>> +
>> +#ifdef CONFIG_OF
>> +static const struct of_device_id exynos_tmu_match[] = {
>> +   {
>> +   .compatible = "samsung,exynos4-tmu",
>> +   .data = (void *)EXYNOS4_TMU_DRV_DATA,
>> +   },
>> +   {
>> +   .compatible = "samsung,exynos5-tmu",
>> +   .data = (void *)EXYNOS5_TMU_DRV_DATA,
>> +   },
>> +   {},
>> +};
>> +MODULE_DEVICE_TABLE(of, exynos_tmu_match);
>> +#else
>> +#define  exynos_tmu_match NULL
>> +#endif
>> +
>> +static struct platform_device_id exynos_tmu_driver_ids[] = {
>> +   {
>> +   .name   = "exynos4-tmu",
>> +   .driver_data= (kernel_ulong_t)EXYNOS4_TMU_DRV_DATA,
>> +   },
>> +   {
>> +   .name   = "exynos5-tmu",
>> +   .driver_data= (kernel_ulong_t)EXYNOS5_TMU_DRV_DATA,
>> +   },
>> +   { },
>> +};
>> +MODULE_DEVICE_TABLE(platform, exynos4_tmu_driver_ids);
>> +
>> +static inline struct  exynos_tmu_platform_data *exynos_get_driver_data(
>> +   struct platform_device *pdev)
>> +{
>> +#ifdef CONFIG_OF
>> +   if (pdev->dev.of_node) {
>> +   const struct of_device_id *match;
>> +   match = of_match_node(exynos_tmu_match, pdev->dev.of_node);
>> +   if (!match)
>> +   return NULL;
>> +   return (struct exynos_tmu_platform_data *) match->data;
>> +   }
>> +#endif
>> +   return (struct exynos_tmu_platform_data *)
>> +   platform_get_device_id(pdev)->driver_data;
>>  }
>> -;
>>  static in

Re: [PATCH v5 5/5] ARM: exynos: add thermal sensor driver platform data support

2012-07-17 Thread jonghwa3 . lee
Hi, Amit,
On 2012년 07월 14일 16:30, amit kachhap wrote:
> On Sat, Jul 14, 2012 at 7:03 AM, Kyungmin Park  wrote:
>> On Fri, Jul 13, 2012 at 8:10 PM, Amit Daniel Kachhap
>>  wrote:
>>> Add necessary default platform data support needed for TMU driver.  This
>>> dt/non-dt values are tested for origen exynos4210 and smdk exynos5250
>>> platforms.
>> Looks good to me.
> Thanks.
>
>> just nitpicks below.
>>
>> Thank you,
>> Kyungmin Park
>>> Signed-off-by: Amit Daniel Kachhap 
>>> Cc: Donggeun Kim 
>>> Acked-by: Guenter Roeck 
>>> Cc: SangWook Ju 
>>> Cc: Durgadoss 
>>> Cc: Len Brown 
>>> Cc: Jean Delvare 
>>> Signed-off-by: Andrew Morton 
>>> ---
>>>  drivers/thermal/exynos_thermal.c |  111 
>>> +-
>>>  1 files changed, 110 insertions(+), 1 deletions(-)
>>>
>>> diff --git a/drivers/thermal/exynos_thermal.c 
>>> b/drivers/thermal/exynos_thermal.c
>>> index 9ef8c37..07736ea 100644
>>> --- a/drivers/thermal/exynos_thermal.c
>>> +++ b/drivers/thermal/exynos_thermal.c
>>> @@ -662,14 +662,121 @@ static irqreturn_t exynos_tmu_irq(int irq, void *id)
>>>  static struct thermal_sensor_conf exynos_sensor_conf = {
>>> .name   = "exynos-therm",
>>> .read_temperature   = (int (*)(void *))exynos_tmu_read,
>>> +};
>>> +
>>> +#if defined(CONFIG_CPU_EXYNOS4210)
>> BTW, doesn't it same as exynos4412? does it different from exynos4412?
> Currently I only tested this only for origen and exynos5250 board.
> Maybe somebody can add 4412 support also.
Recently, I applied this patchset with exynos4412 and found it uses same
register map with exynos5250.
So, I think it should rename the any type of name containing exynos4 and
exynos5 (e.g. SOC_ARCH_EXYNOS4)
In my local, i renamed SOC_ARCH_EXYNOS4 to SOC_ARCH_EXYNOS4210 and
SOC_ARCH_EXYNOS5 to SOC_ARCH_EXYNOS and
other related name also. I recommend you to change all of name
>> If it's same, it's better to use CONFIG_SOC_EXYNOS4?
>>> +static struct exynos_tmu_platform_data const exynos4_default_tmu_data = {
>>> +   .threshold = 80,
>>> +   .trigger_levels[0] = 5,
>>> +   .trigger_levels[1] = 20,
>>> +   .trigger_levels[2] = 30,
>>> +   .trigger_level0_en = 1,
>>> +   .trigger_level1_en = 1,
>>> +   .trigger_level2_en = 1,
>>> +   .trigger_level3_en = 0,
>>> +   .gain = 15,
>>> +   .reference_voltage = 7,
>>> +   .cal_type = TYPE_ONE_POINT_TRIMMING,
>>> +   .freq_tab[0] = {
>>> +   .freq_clip_max = 800 * 1000,
>>> +   .temp_level = 85,
>>> +   },
>>> +   .freq_tab[1] = {
>>> +   .freq_clip_max = 200 * 1000,
>>> +   .temp_level = 100,
>>> +   },
>>> +   .freq_tab_count = 2,
>>> +   .type = SOC_ARCH_EXYNOS4,
>>> +};
>>> +#define EXYNOS4_TMU_DRV_DATA (&exynos4_default_tmu_data)
>>> +#else
>>> +#define EXYNOS4_TMU_DRV_DATA (NULL)
>>> +#endif
>>> +
>>> +#if defined(CONFIG_SOC_EXYNOS5250)
>> similar.
>>> +static struct exynos_tmu_platform_data const exynos5_default_tmu_data = {
>>> +   .trigger_levels[0] = 85,
>>> +   .trigger_levels[1] = 103,
>>> +   .trigger_levels[2] = 110,
>>> +   .trigger_level0_en = 1,
>>> +   .trigger_level1_en = 1,
>>> +   .trigger_level2_en = 1,
>>> +   .trigger_level3_en = 0,
>>> +   .gain = 8,
>>> +   .reference_voltage = 16,
>>> +   .noise_cancel_mode = 4,
>>> +   .cal_type = TYPE_ONE_POINT_TRIMMING,
>>> +   .efuse_value = 55,
>>> +   .freq_tab[0] = {
>>> +   .freq_clip_max = 800 * 1000,
>>> +   .temp_level = 85,
>>> +   },
>>> +   .freq_tab[1] = {
>>> +   .freq_clip_max = 200 * 1000,
>>> +   .temp_level = 103,
>>> +   },
>>> +   .freq_tab_count = 2,
>>> +   .type = SOC_ARCH_EXYNOS5,
>>> +};
>>> +#define EXYNOS5_TMU_DRV_DATA (&exynos5_default_tmu_data)
>>> +#else
>>> +#define EXYNOS5_TMU_DRV_DATA (NULL)
>>> +#endif
>>> +
>>> +#ifdef CONFIG_OF
>>> +static const struct of_device_id exynos_tmu_match[] = {
>>> +   {
>>> +   .compatible = "samsung,exynos4-tmu",
>>> +   .data = (void *)EXYNOS4_TMU_DRV_DATA,
>>> +   },
>>> +   {
>>> +   .compatible = "samsung,exynos5-tmu",
>>> +   .data = (void *)EXYNOS5_TMU_DRV_DATA,
>>> +   },
>>> +   {},
>>> +};
>>> +MODULE_DEVICE_TABLE(of, exynos_tmu_match);
>>> +#else
>>> +#define  exynos_tmu_match NULL
>>> +#endif
>>> +
>>> +static struct platform_device_id exynos_tmu_driver_ids[] = {
>>> +   {
>>> +   .name   = "exynos4-tmu",
>>> +   .driver_data= (kernel_ulong_t)EXYNOS4_TMU_DRV_DATA,
>>> +   },
>>> +   {
>>> +   .name   = "exynos5-tmu",
>>> +   .driver_data= (kernel_ulong_t)EXYNOS5_TMU_DRV_DATA,
>>> +   },
>>> +   { },
>>> +};
>>> +MODULE_DEVICE_TABLE(platform, exynos4_tmu_driver_ids);
>>> +
>>> +static inline struct  exynos_tmu_platform_data *exynos_get_driver_data(
>>> +