ARM: OMAP: SmartReflex: pass device dependent data via platform data
Subsystems (7)
cover ARM: OMAP: SmartReflex: pass device dependent data via platform data
From: Jean Pihet <[email protected]>
Remove the device dependent code (ex. cpu_is_xxx()) and settings from the driver code and instead pass them via the platform data. This allows a clean separation of the driver code and the platform code, as required by the move of the platform header files to include/linux/platform_data.
Note about the smartreflex functional clocks: the smartreflex fclks are derived from sys_clk and have the same name as the main_clk from the hwmod entry, in order for the SmartReflex driver to request the fclk (using clk_get(dev, "fck")).
Based on mainline 3.6.0. Boot tested on OMAP3&4 platforms.
Jean Pihet (2):
ARM: OMAP: hwmod: align the SmartReflex fck names
ARM: OMAP: SmartReflex: pass device dependent data via platform data
arch/arm/mach-omap2/clock33xx_data.c | 12 +++---- arch/arm/mach-omap2/clock3xxx_data.c | 12 +++---- arch/arm/mach-omap2/clock44xx_data.c | 6 ++-- arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 8 ++--- arch/arm/mach-omap2/sr_device.c | 13 +++++++ drivers/power/avs/smartreflex.c | 54 +++++++++------------------- include/linux/power/smartreflex.h | 14 ++++++-- 7 files changed, 61 insertions(+), 58 deletions(-)
Signature · 1 line
1.7.10.4
PATCH 1/2 ARM: OMAP: hwmod: align the SmartReflex fck names
From: Jean Pihet <[email protected]>
Rename the smartreflex fck names for consistency and better readability; rename the clock aliases so that they match the hwmod main_clk names.
--- arch/arm/mach-omap2/clock33xx_data.c | 12 ++++++------ arch/arm/mach-omap2/clock3xxx_data.c | 12 ++++++------ arch/arm/mach-omap2/clock44xx_data.c | 6 +++--- arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 8 ++++---- 4 files changed, 19 insertions(+), 19 deletions(-)
arch/arm/mach-omap2/clock33xx_data.c +6 -6
@@ -548,16 +548,16 @@ static struct clk mcasp1_fck = { .recalc = &followparent_recalc, }; -static struct clk smartreflex0_fck = { - .name ="smartreflex0_fck" , +static struct clk smartreflex_mpu_fck = { + .name ="smartreflex_mpu_fck" , .clkdm_name ="l4_wkup_clkdm" , .parent = &sys_clkin_ck, .ops = &clkops_null, .recalc = &followparent_recalc, }; -static struct clk smartreflex1_fck = { - .name ="smartreflex1_fck" , +static struct clk smartreflex_core_fck = { + .name ="smartreflex_core_fck" , .clkdm_name ="l4_wkup_clkdm" , .parent = &sys_clkin_ck, .ops = &clkops_null,
@@ -1036,8 +1036,8 @@ static struct omap_clk am33xx_clks[] = {CLK ("davinci-mcasp.1" ,NULL , &mcasp1_fck,CK_AM33XX ),CLK ("NULL" ,"mmc2_fck" , &mmc2_fck,CK_AM33XX ),CLK (NULL ,"mmu_fck" , &mmu_fck,CK_AM33XX ), -CLK (NULL ,"smartreflex0_fck" , &smartreflex0_fck,CK_AM33XX ), -CLK (NULL ,"smartreflex1_fck" , &smartreflex1_fck,CK_AM33XX ), +CLK (NULL ,"smartreflex_mpu_fck" , &smartreflex_mpu_fck,CK_AM33XX ), +CLK (NULL ,"smartreflex_core_fck" , &smartreflex_core_fck,CK_AM33XX ),CLK (NULL ,"timer1_fck" , &timer1_fck,CK_AM33XX ),CLK (NULL ,"timer2_fck" , &timer2_fck,CK_AM33XX ), CLK(NULL, "timer3_fck", &timer3_fck, CK_AM33XX),
arch/arm/mach-omap2/clock3xxx_data.c +6 -6
@@ -3050,8 +3050,8 @@ static struct clk traceclk_fck = {/* SR clocks */ /* SmartReflex fclk (VDD1) */ -static struct clk sr1_fck = { - .name ="sr1_fck" , +static struct clk smartreflex_mpu_iva_fck = { + .name ="smartreflex_mpu_iva_fck" , .ops = &clkops_omap2_dflt_wait, .parent = &sys_ck, .enable_reg =OMAP_CM_REGADDR (WKUP_MOD ,CM_FCLKEN ),
@@ -3061,8 +3061,8 @@ static struct clk sr1_fck = { };/* SmartReflex fclk (VDD2) */ -static struct clk sr2_fck = { - .name ="sr2_fck" , +static struct clk smartreflex_core_fck = { + .name ="smartreflex_core_fck" , .ops = &clkops_omap2_dflt_wait, .parent = &sys_ck, .enable_reg =OMAP_CM_REGADDR (WKUP_MOD ,CM_FCLKEN ),
@@ -3448,8 +3448,8 @@ static struct omap_clk omap3xxx_clks[] = {CLK (NULL ,"atclk_fck" , &atclk_fck,CK_3XXX ),CLK (NULL ,"traceclk_src_fck" , &traceclk_src_fck,CK_3XXX ),CLK (NULL ,"traceclk_fck" , &traceclk_fck,CK_3XXX ), -CLK (NULL ,"sr1_fck" , &sr1_fck,CK_34XX |CK_36XX ), -CLK (NULL ,"sr2_fck" , &sr2_fck,CK_34XX |CK_36XX ), +CLK (NULL ,"smartreflex_mpu_iva_fck" , &smartreflex_mpu_iva_fck,CK_34XX |CK_36XX ), +CLK (NULL ,"smartreflex_core_fck" , &smartreflex_core_fck,CK_34XX |CK_36XX ),CLK (NULL ,"sr_l4_ick" , &sr_l4_ick,CK_34XX |CK_36XX ),CLK (NULL ,"secure_32k_fck" , &secure_32k_fck,CK_3XXX ), CLK(NULL, "gpt12_fck", &gpt12_fck, CK_3XXX),
arch/arm/mach-omap2/clock44xx_data.c +3 -3
@@ -3224,9 +3224,9 @@ static struct omap_clk omap44xx_clks[] = {CLK (NULL ,"slimbus2_fclk_0" , &slimbus2_fclk_0,CK_443X ),CLK (NULL ,"slimbus2_slimbus_clk" , &slimbus2_slimbus_clk,CK_443X ),CLK (NULL ,"slimbus2_fck" , &slimbus2_fck,CK_443X ), -CLK (NULL ,"smartreflex_core_fck" , &smartreflex_core_fck,CK_443X ), -CLK (NULL ,"smartreflex_iva_fck" , &smartreflex_iva_fck,CK_443X ), -CLK (NULL ,"smartreflex_mpu_fck" , &smartreflex_mpu_fck,CK_443X ), +CLK (NULL ,"smartreflex_core_fck" , &smartreflex_core_fck,CK_443X ), +CLK (NULL ,"smartreflex_iva_fck" , &smartreflex_iva_fck,CK_443X ), +CLK (NULL ,"smartreflex_mpu_fck" , &smartreflex_mpu_fck,CK_443X ),CLK (NULL ,"timer1_fck" , &timer1_fck,CK_443X ),CLK (NULL ,"timer10_fck" , &timer10_fck,CK_443X ), CLK(NULL, "timer11_fck", &timer11_fck, CK_443X),
arch/arm/mach-omap2/omap_hwmod_3xxx_data.c +4 -4
@@ -1368,7 +1368,7 @@ static struct omap_hwmod_irq_info omap3_smartreflex_mpu_irqs[] = {static struct omap_hwmod omap34xx_sr1_hwmod = { .name ="smartreflex_mpu_iva" , .class = &omap34xx_smartreflex_hwmod_class, - .main_clk ="sr1_fck" , + .main_clk ="smartreflex_mpu_iva_fck" , .prcm = { .omap2 = { .prcm_reg_id =1 ,
@@ -1386,7 +1386,7 @@ static struct omap_hwmod omap34xx_sr1_hwmod = {static struct omap_hwmod omap36xx_sr1_hwmod = { .name ="smartreflex_mpu_iva" , .class = &omap36xx_smartreflex_hwmod_class, - .main_clk ="sr1_fck" , + .main_clk ="smartreflex_mpu_iva_fck" , .prcm = { .omap2 = { .prcm_reg_id =1 ,
@@ -1413,7 +1413,7 @@ static struct omap_hwmod_irq_info omap3_smartreflex_core_irqs[] = {static struct omap_hwmod omap34xx_sr2_hwmod = { .name ="smartreflex_core" , .class = &omap34xx_smartreflex_hwmod_class, - .main_clk ="sr2_fck" , + .main_clk ="smartreflex_core_fck" , .prcm = { .omap2 = { .prcm_reg_id =1 ,
@@ -1431,7 +1431,7 @@ static struct omap_hwmod omap34xx_sr2_hwmod = {static struct omap_hwmod omap36xx_sr2_hwmod = { .name ="smartreflex_core" , .class = &omap36xx_smartreflex_hwmod_class, - .main_clk ="sr2_fck" , + .main_clk ="smartreflex_core_fck" , .prcm = { .omap2 = { .prcm_reg_id =1 ,
Signature · 1 line
1.7.10.4
PATCH 2/2 ARM: OMAP: SmartReflex: pass device dependent data via platform data
In reply to jean.pihet at newoldbits.comFrom: Jean Pihet <[email protected]>
Remove the device dependent code (ex. cpu_is_xxx()) and settings from the driver code and instead pass them via the platform data. This allows a clean separation of the driver code and the platform code, as required by the move of the platform header files to include/linux/platform_data.
Note about the smartreflex functional clocks: the smartreflex fclks are derived from sys_clk and have the same name as the main_clk from the hwmod entry, in order for the SmartReflex driver to request the fclk (using clk_get(dev, "fck")).
--- arch/arm/mach-omap2/sr_device.c | 13 +++++++++ drivers/power/avs/smartreflex.c | 54 ++++++++++++------------------------- include/linux/power/smartreflex.h | 14 ++++++++-- 3 files changed, 42 insertions(+), 39 deletions(-)
arch/arm/mach-omap2/sr_device.c +13 -0
@@ -121,6 +121,19 @@ static int __init sr_dev_init(struct omap_hwmod *oh, void *user) sr_data->senn_mod =0x1 ; sr_data->senp_mod =0x1 ; +if (cpu_is_omap34xx () ||cpu_is_omap44xx ()) { + sr_data->err_weight =OMAP3430_SR_ERRWEIGHT ; + sr_data->err_maxlimit =OMAP3430_SR_ERRMAXLIMIT ; + sr_data->accum_data =OMAP3430_SR_ACCUMDATA ; +if (!(strcmp (sr_data->name,"smartreflex_mpu" ))) { + sr_data->senn_avgweight =OMAP3430_SR1_SENNAVGWEIGHT ; + sr_data->senp_avgweight =OMAP3430_SR1_SENPAVGWEIGHT ; + }else { + sr_data->senn_avgweight =OMAP3430_SR2_SENNAVGWEIGHT ; + sr_data->senp_avgweight =OMAP3430_SR2_SENPAVGWEIGHT ; + } + } + sr_data->voltdm =voltdm_lookup (sr_dev_attr->sensor_voltdm_name);if (IS_ERR (sr_data->voltdm)) { pr_err("%s: Unable to get voltage domain pointer for VDD %s\n",
drivers/power/avs/smartreflex.c +17 -37
90 lines not on this page · raw message
include/linux/power/smartreflex.h +12 -2
@@ -260,8 +260,13 @@ struct omap_sr_nvalue_table {* * @name: instance name * @ip_type: Smartreflex IP type. -* @senp_mod: SENPENABLE value for the sr -* @senn_mod: SENNENABLE value for sr +* @senp_mod: SENPENABLE value of the sr CONFIG register +* @senn_mod: SENNENABLE value for sr CONFIG register +* @err_weight ERRWEIGHT value of the sr ERRCONFIG register +* @err_maxlimit ERRMAXLIMIT value of the sr ERRCONFIG register +* @accum_data ACCUMDATA value of the sr CONFIG register +* @senn_avgweight SENNAVGWEIGHT value of the sr AVGWEIGHT register +* @senp_avgweight SENPAVGWEIGHT value of the sr AVGWEIGHT register * @nvalue_count: Number of distinct nvalues in the nvalue table * @enable_on_init: whether this sr module needs to enabled at * boot up or not.
@@ -274,6 +279,11 @@ struct omap_sr_data {int ip_type;u32 senp_mod;u32 senn_mod; +u32 err_weight; +u32 err_maxlimit; +u32 accum_data; +u32 senn_avgweight; +u32 senp_avgweight;int nvalue_count;bool enable_on_init;struct omap_sr_nvalue_table *nvalue_table;
Signature · 1 line
1.7.10.4
cover ARM: OMAP: SmartReflex: pass device dependent data via platform data
In reply to jean.pihet at newoldbits.comQuoted 8 lines · [email protected] writes:
From: Jean Pihet <[email protected]>
Remove the device dependent code (ex.
cpu_is_xxx()) and settings from the driver code and instead pass them via the platform data. This allows a clean separation of the driver code and the platform code, as required by the move of the platform header files toinclude/linux/platform_data.
Quoted 6 lines
Note about the smartreflex functional clocks: the smartreflex fclks are derived from
sys_clkand have the same name as themain_clkfrom the hwmod entry, in order for the SmartReflex driver to request the fclk (usingclk_get(dev, "fck")).Based on mainline 3.6.0. Boot tested on OMAP3&4 platforms.
Thanks, queuing this version for v3.8 (branch: for_3.8/pm/sr)
Kevin
P.S. in the future, It helps reviewers and maintainers if there's some versioning in the patches (e.g. PATCH v3 0/2]), especially when updated versions come in quick succession. Thanks.
cover ARM: OMAP: SmartReflex: pass device dependent data via platform data
Quoted 10 lines · Kevin Hilman
Quoted 8 lines · jean.pihet at newoldbits.com
From: Jean Pihet <[email protected]>
Remove the device dependent code (ex.
cpu_is_xxx()) and settings from the driver code and instead pass them via the platform data. This allows a clean separation of the driver code and the platform code, as required by the move of the platform header files toinclude/linux/platform_data.
Quoted 8 lines
Quoted 6 lines
Note about the smartreflex functional clocks: the smartreflex fclks are derived from
sys_clkand have the same name as themain_clkfrom the hwmod entry, in order for the SmartReflex driver to request the fclk (usingclk_get(dev, "fck")).Based on mainline 3.6.0. Boot tested on OMAP3&4 platforms.
Thanks, queuing this version for v3.8 (branch: for_3.8/pm/sr)
Thanks!
Jean
Quoted 7 lines
Kevin
P.S. in the future, It helps reviewers and maintainers if there's some versioning in the patches (e.g. PATCH v3 0/2]), especially when updated versions come in quick succession. Thanks.