diff mbox

[4/6,V4] OMAP4: Hwmod: OMAP temperature sensor

Message ID 1314811510-15595-5-git-send-email-j-keerthy@ti.com (mailing list archive)
State New, archived
Headers show

Commit Message

J, KEERTHY Aug. 31, 2011, 5:25 p.m. UTC
From: Benoit Cousson <b-cousson@ti.com>

OMAP4460 temperature sensor hwmod cannot be auto generated
since it is part of ctrl module. Hence populating the
necessary hwmod info manually.

Signed-off-by: Benoit Cousson <b-cousson@ti.com>
Signed-off-by: Keerthy <j-keerthy@ti.com>
Cc: tony@atomide.com
Cc: b-cousson@ti.com
---
 arch/arm/mach-omap2/omap_hwmod_44xx_data.c |   61 ++++++++++++++++++++++++++++
 1 files changed, 61 insertions(+), 0 deletions(-)

Comments

Paul Walmsley Aug. 31, 2011, 11:16 p.m. UTC | #1
Hi Keerthy, Benoît,

On Wed, 31 Aug 2011, Keerthy wrote:

> From: Benoit Cousson <b-cousson@ti.com>
> 
> OMAP4460 temperature sensor hwmod cannot be auto generated
> since it is part of ctrl module. Hence populating the
> necessary hwmod info manually.

Looking at the 4460 1.x TRM Rev H, does it makes sense to create a 
separate hwmod structure for this IP block?  It looks to me like these 
registers are integrated pretty tightly inside the SYSCTRL_GENERAL_CORE IP 
block.  So from a hwmod perspective, it seems to be a different situation 
than, say, the RFBI block inside the DSS subsystem?

Just based on looking at Table 18-110 "Control Module Instance Summary" 
and Table 18-111 "SYSCTRL_GENERAL_CORE Register Mapping Summary", it seems 
to me that this IP block is best represented as an MFD.  Something like 
drivers/mfd/wm8350-core.c, which registers a hwmon device, which is then 
driven by drivers/hwmon/wm8350-hwmon.c.

That should avoid the need for this hwmod entry too.

> 
> Signed-off-by: Benoit Cousson <b-cousson@ti.com>
> Signed-off-by: Keerthy <j-keerthy@ti.com>
> Cc: tony@atomide.com
> Cc: b-cousson@ti.com
> ---
>  arch/arm/mach-omap2/omap_hwmod_44xx_data.c |   61 ++++++++++++++++++++++++++++
>  1 files changed, 61 insertions(+), 0 deletions(-)
> 
> diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
> index 6201422..28bf6d3 100644
> --- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
> +++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
> @@ -29,6 +29,7 @@
>  #include <plat/mcbsp.h>
>  #include <plat/mmc.h>
>  #include <plat/i2c.h>
> +#include <plat/temperature_sensor.h>
>  
>  #include "omap_hwmod_common_data.h"
>  
> @@ -832,6 +833,63 @@ static struct omap_hwmod omap44xx_aess_hwmod = {
>  };
>  
>  /*
> + * 'temperature_sensor' class
> + * temperature sensor module inside the bandgap / control module
> + */
> +
> +static struct omap_hwmod_class omap44xx_temperature_sensor_hwmod_class = {
> +	.name   = "temperature_sensor",
> +};
> +
> +static struct omap_hwmod_irq_info omap44xx_temperature_sensor_irqs[] = {
> +	{ .name = "thermal_alert", .irq = 126 + OMAP44XX_IRQ_GIC_START },
> +};
> +
> +static struct omap_hwmod_addr_space omap44xx_temperature_sensor_addrs[] = {
> +	{
> +		.pa_start       = 0x4a00232c,
> +		.pa_end         = 0x4a00238b,
> +	},
> +};
> +
> +static struct omap_hwmod omap44xx_temperature_sensor_hwmod;
> +/* l4_cfg -> ctrl_module_core */
> +static struct omap_hwmod_ocp_if omap44xx_l4_cfg__temperature_sensor = {
> +	.master         = &omap44xx_l4_cfg_hwmod,
> +	.slave          = &omap44xx_temperature_sensor_hwmod,
> +	.clk            = "l4_div_ck",
> +	.addr           = omap44xx_temperature_sensor_addrs,
> +	.user           = OCP_USER_MPU | OCP_USER_SDMA,
> +};
> +
> +/* ctrl_module_core slave ports */
> +static struct omap_hwmod_ocp_if *omap44xx_temperature_sensor_slaves[] = {
> +	&omap44xx_l4_cfg__temperature_sensor,
> +};
> +
> +/* temperature sensor dev_attr */
> +static struct omap_temp_sensor_dev_attr temp_sensor_dev_attr = {
> +	.name	= "mpu",
> +};
> +
> +static struct omap_hwmod omap44xx_temperature_sensor_hwmod = {
> +	.name           = "temperature_sensor_mpu",
> +	.class          = &omap44xx_temperature_sensor_hwmod_class,
> +	.mpu_irqs       = omap44xx_temperature_sensor_irqs,
> +	.main_clk       = "bandgap_ts_fclk",
> +	.slaves		= omap44xx_temperature_sensor_slaves,
> +	.slaves_cnt     = ARRAY_SIZE(omap44xx_temperature_sensor_slaves),
> +	.clkdm_name     = "l4_wkup_clkdm",
> +	.prcm           = {
> +		.omap4 = {
> +		.clkctrl_offs = OMAP4_CM_WKUP_BANDGAP_CLKCTRL_OFFSET,
> +		},
> +	},
> +	.dev_attr	= &temp_sensor_dev_attr,
> +	.omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
> +};
> +
> +/*
>   * 'bandgap' class
>   * bangap reference for ldo regulators
>   */
> @@ -5469,6 +5527,9 @@ static __initdata struct omap_hwmod *omap44xx_hwmods[] = {
>  	&omap44xx_timer10_hwmod,
>  	&omap44xx_timer11_hwmod,
>  
> +	/* temperature sensor hwmod */
> +	&omap44xx_temperature_sensor_hwmod,
> +
>  	/* uart class */
>  	&omap44xx_uart1_hwmod,
>  	&omap44xx_uart2_hwmod,
> -- 
> 1.7.0.4
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 


- Paul
J, KEERTHY Sept. 6, 2011, 6:24 p.m. UTC | #2
On Thu, Sep 1, 2011 at 4:46 AM, Paul Walmsley <paul@pwsan.com> wrote:
> Hi Keerthy, Benoît,
>
> On Wed, 31 Aug 2011, Keerthy wrote:
>
>> From: Benoit Cousson <b-cousson@ti.com>
>>
>> OMAP4460 temperature sensor hwmod cannot be auto generated
>> since it is part of ctrl module. Hence populating the
>> necessary hwmod info manually.
>
> Looking at the 4460 1.x TRM Rev H, does it makes sense to create a
> separate hwmod structure for this IP block?  It looks to me like these
> registers are integrated pretty tightly inside the SYSCTRL_GENERAL_CORE IP
> block.  So from a hwmod perspective, it seems to be a different situation
> than, say, the RFBI block inside the DSS subsystem?
>
> Just based on looking at Table 18-110 "Control Module Instance Summary"
> and Table 18-111 "SYSCTRL_GENERAL_CORE Register Mapping Summary", it seems
> to me that this IP block is best represented as an MFD.  Something like
> drivers/mfd/wm8350-core.c, which registers a hwmon device, which is then
> driven by drivers/hwmon/wm8350-hwmon.c.

In case of OMAP4460 only one instance of thermal sensor is present.
If i take the case of OMAP5 multiple (3) instances are present. I agree
all the registers are part of SYSCTRL. Defining a hwmod i could easily
call omap_hwmod_for_each_by_class() for multiple instances. WIthout
hwmod i am not sure how to cater to this requirement. Any inputs?

>
> That should avoid the need for this hwmod entry too.
>
>>
>> Signed-off-by: Benoit Cousson <b-cousson@ti.com>
>> Signed-off-by: Keerthy <j-keerthy@ti.com>
>> Cc: tony@atomide.com
>> Cc: b-cousson@ti.com
>> ---
>>  arch/arm/mach-omap2/omap_hwmod_44xx_data.c |   61 ++++++++++++++++++++++++++++
>>  1 files changed, 61 insertions(+), 0 deletions(-)
>>
>> diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
>> index 6201422..28bf6d3 100644
>> --- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
>> +++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
>> @@ -29,6 +29,7 @@
>>  #include <plat/mcbsp.h>
>>  #include <plat/mmc.h>
>>  #include <plat/i2c.h>
>> +#include <plat/temperature_sensor.h>
>>
>>  #include "omap_hwmod_common_data.h"
>>
>> @@ -832,6 +833,63 @@ static struct omap_hwmod omap44xx_aess_hwmod = {
>>  };
>>
>>  /*
>> + * 'temperature_sensor' class
>> + * temperature sensor module inside the bandgap / control module
>> + */
>> +
>> +static struct omap_hwmod_class omap44xx_temperature_sensor_hwmod_class = {
>> +     .name   = "temperature_sensor",
>> +};
>> +
>> +static struct omap_hwmod_irq_info omap44xx_temperature_sensor_irqs[] = {
>> +     { .name = "thermal_alert", .irq = 126 + OMAP44XX_IRQ_GIC_START },
>> +};
>> +
>> +static struct omap_hwmod_addr_space omap44xx_temperature_sensor_addrs[] = {
>> +     {
>> +             .pa_start       = 0x4a00232c,
>> +             .pa_end         = 0x4a00238b,
>> +     },
>> +};
>> +
>> +static struct omap_hwmod omap44xx_temperature_sensor_hwmod;
>> +/* l4_cfg -> ctrl_module_core */
>> +static struct omap_hwmod_ocp_if omap44xx_l4_cfg__temperature_sensor = {
>> +     .master         = &omap44xx_l4_cfg_hwmod,
>> +     .slave          = &omap44xx_temperature_sensor_hwmod,
>> +     .clk            = "l4_div_ck",
>> +     .addr           = omap44xx_temperature_sensor_addrs,
>> +     .user           = OCP_USER_MPU | OCP_USER_SDMA,
>> +};
>> +
>> +/* ctrl_module_core slave ports */
>> +static struct omap_hwmod_ocp_if *omap44xx_temperature_sensor_slaves[] = {
>> +     &omap44xx_l4_cfg__temperature_sensor,
>> +};
>> +
>> +/* temperature sensor dev_attr */
>> +static struct omap_temp_sensor_dev_attr temp_sensor_dev_attr = {
>> +     .name   = "mpu",
>> +};
>> +
>> +static struct omap_hwmod omap44xx_temperature_sensor_hwmod = {
>> +     .name           = "temperature_sensor_mpu",
>> +     .class          = &omap44xx_temperature_sensor_hwmod_class,
>> +     .mpu_irqs       = omap44xx_temperature_sensor_irqs,
>> +     .main_clk       = "bandgap_ts_fclk",
>> +     .slaves         = omap44xx_temperature_sensor_slaves,
>> +     .slaves_cnt     = ARRAY_SIZE(omap44xx_temperature_sensor_slaves),
>> +     .clkdm_name     = "l4_wkup_clkdm",
>> +     .prcm           = {
>> +             .omap4 = {
>> +             .clkctrl_offs = OMAP4_CM_WKUP_BANDGAP_CLKCTRL_OFFSET,
>> +             },
>> +     },
>> +     .dev_attr       = &temp_sensor_dev_attr,
>> +     .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
>> +};
>> +
>> +/*
>>   * 'bandgap' class
>>   * bangap reference for ldo regulators
>>   */
>> @@ -5469,6 +5527,9 @@ static __initdata struct omap_hwmod *omap44xx_hwmods[] = {
>>       &omap44xx_timer10_hwmod,
>>       &omap44xx_timer11_hwmod,
>>
>> +     /* temperature sensor hwmod */
>> +     &omap44xx_temperature_sensor_hwmod,
>> +
>>       /* uart class */
>>       &omap44xx_uart1_hwmod,
>>       &omap44xx_uart2_hwmod,
>> --
>> 1.7.0.4
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>
>
>
> - Paul
diff mbox

Patch

diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
index 6201422..28bf6d3 100644
--- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
@@ -29,6 +29,7 @@ 
 #include <plat/mcbsp.h>
 #include <plat/mmc.h>
 #include <plat/i2c.h>
+#include <plat/temperature_sensor.h>
 
 #include "omap_hwmod_common_data.h"
 
@@ -832,6 +833,63 @@  static struct omap_hwmod omap44xx_aess_hwmod = {
 };
 
 /*
+ * 'temperature_sensor' class
+ * temperature sensor module inside the bandgap / control module
+ */
+
+static struct omap_hwmod_class omap44xx_temperature_sensor_hwmod_class = {
+	.name   = "temperature_sensor",
+};
+
+static struct omap_hwmod_irq_info omap44xx_temperature_sensor_irqs[] = {
+	{ .name = "thermal_alert", .irq = 126 + OMAP44XX_IRQ_GIC_START },
+};
+
+static struct omap_hwmod_addr_space omap44xx_temperature_sensor_addrs[] = {
+	{
+		.pa_start       = 0x4a00232c,
+		.pa_end         = 0x4a00238b,
+	},
+};
+
+static struct omap_hwmod omap44xx_temperature_sensor_hwmod;
+/* l4_cfg -> ctrl_module_core */
+static struct omap_hwmod_ocp_if omap44xx_l4_cfg__temperature_sensor = {
+	.master         = &omap44xx_l4_cfg_hwmod,
+	.slave          = &omap44xx_temperature_sensor_hwmod,
+	.clk            = "l4_div_ck",
+	.addr           = omap44xx_temperature_sensor_addrs,
+	.user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* ctrl_module_core slave ports */
+static struct omap_hwmod_ocp_if *omap44xx_temperature_sensor_slaves[] = {
+	&omap44xx_l4_cfg__temperature_sensor,
+};
+
+/* temperature sensor dev_attr */
+static struct omap_temp_sensor_dev_attr temp_sensor_dev_attr = {
+	.name	= "mpu",
+};
+
+static struct omap_hwmod omap44xx_temperature_sensor_hwmod = {
+	.name           = "temperature_sensor_mpu",
+	.class          = &omap44xx_temperature_sensor_hwmod_class,
+	.mpu_irqs       = omap44xx_temperature_sensor_irqs,
+	.main_clk       = "bandgap_ts_fclk",
+	.slaves		= omap44xx_temperature_sensor_slaves,
+	.slaves_cnt     = ARRAY_SIZE(omap44xx_temperature_sensor_slaves),
+	.clkdm_name     = "l4_wkup_clkdm",
+	.prcm           = {
+		.omap4 = {
+		.clkctrl_offs = OMAP4_CM_WKUP_BANDGAP_CLKCTRL_OFFSET,
+		},
+	},
+	.dev_attr	= &temp_sensor_dev_attr,
+	.omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
+};
+
+/*
  * 'bandgap' class
  * bangap reference for ldo regulators
  */
@@ -5469,6 +5527,9 @@  static __initdata struct omap_hwmod *omap44xx_hwmods[] = {
 	&omap44xx_timer10_hwmod,
 	&omap44xx_timer11_hwmod,
 
+	/* temperature sensor hwmod */
+	&omap44xx_temperature_sensor_hwmod,
+
 	/* uart class */
 	&omap44xx_uart1_hwmod,
 	&omap44xx_uart2_hwmod,