Re: [PATCH V2] OMAP3: PM: Set/reset T2 bit for Smartreflex on TWL.
Nishanth Menon n...@ti.com writes: Kevin Hilman wrote, on 02/03/2011 03:09 AM: Nishanth Menonn...@ti.com writes: Kevin Hilman wrote, on 02/02/2011 04:11 AM: Shweta Gulatishweta.gul...@ti.com writes: From: Thara Gopinathth...@ti.com The smartreflex bit on twl4030 needs to be enabled by default irrespective of whether smartreflex module is enabled on the OMAP side or not. This is because without this bit enabled the voltage scaling through vp forceupdate does not function properly on OMAP3.API added 'omap3_twl_set_sr_bit' with parameter to set/clear SR bit. It is cleared for platforms where voltage is not scaled using vpforceupdate or vc_bypass Method. In those cases 'omap3_twl_set_sr_bit' is called from board file, to make sure this bit is not overwritten in 'omap3_twl_init', a flag 'twl_sr_enable' is added. As Sanjeev pointed out, the use of 'irrespective' above is confusing, in fact the whole changelog is kind of confusing. The changelog states that it has to always be enabled, but then goes on to describe the situation(s) where it would be disabled. Here's my rephrasing of how I understand the above changelog - enable: *always* be enabled - enable: needed for VP force update - disable: platforms using VP forced update or VP bypass -ECONFUSED Kevin How about this as the commit log? The smartreflex bit on twl4030 specifies if the setting of voltage is done over the I2C_SR path. Given that there are platforms that do not use I2C_SR path for voltage scaling, a new function 'omap3_twl_set_sr_bit' with parameter to set/clear SR bit has been provided for flexibility. So far so good. It is called with appropriate param for platforms where voltage is not scaled using I2C_SR path from board file, to make sure this bit is not overwritten in 'omap3_twl_init'. -ENOPARSE k, How about this: Voltage control on TWL can be done using VMODE/I2C1/I2C_SR. Since almost all platforms use I2C_SR on omap3, omap3_twl_init by default defaults expects that OMAP's I2C_SR is plugged in to TWL's I2C and calls omap3_twl_set_sr_bit. On platforms where I2C_SR is not connected, the board files are expected to call omap3_twl_set_sr_bit(false) to ensure that I2C_SR path is not set for voltage control and prevent the default behavior of omap3_twl_init. Nice, thanks. This patch is based on LO PM Branch and Smartreflex has been tested on OMAP3430 SDP, OMAP3630 SDP and boot tested on OMAP2430 SDP. this belongs into the diffstat. Attached is a modified version of this patch - i'vent tested it though.. but basically improves the logic a little: *) made the comments more generic to ensure that this is more of I2C_SR path as far as TWL is concerned(yes, from OMAP perspective it is vp forceupdate/bypass), but it is more of an OMAP problem than omap_twl.c problem. *) modified the function call sequences to prevent rentry even if board file calls with various other params *) shifted to using bool *) use init and initdata to free up the space once we are done with init sequence All good changes, but I don't think they're incorporated in V3. could you be more clear inline on v3? Will look closer at v4. Kevin -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH V2] OMAP3: PM: Set/reset T2 bit for Smartreflex on TWL.
Nishanth Menon n...@ti.com writes: Kevin Hilman wrote, on 02/02/2011 04:11 AM: Shweta Gulatishweta.gul...@ti.com writes: From: Thara Gopinathth...@ti.com The smartreflex bit on twl4030 needs to be enabled by default irrespective of whether smartreflex module is enabled on the OMAP side or not. This is because without this bit enabled the voltage scaling through vp forceupdate does not function properly on OMAP3.API added 'omap3_twl_set_sr_bit' with parameter to set/clear SR bit. It is cleared for platforms where voltage is not scaled using vpforceupdate or vc_bypass Method. In those cases 'omap3_twl_set_sr_bit' is called from board file, to make sure this bit is not overwritten in 'omap3_twl_init', a flag 'twl_sr_enable' is added. As Sanjeev pointed out, the use of 'irrespective' above is confusing, in fact the whole changelog is kind of confusing. The changelog states that it has to always be enabled, but then goes on to describe the situation(s) where it would be disabled. Here's my rephrasing of how I understand the above changelog - enable: *always* be enabled - enable: needed for VP force update - disable: platforms using VP forced update or VP bypass -ECONFUSED Kevin How about this as the commit log? The smartreflex bit on twl4030 specifies if the setting of voltage is done over the I2C_SR path. Given that there are platforms that do not use I2C_SR path for voltage scaling, a new function 'omap3_twl_set_sr_bit' with parameter to set/clear SR bit has been provided for flexibility. So far so good. It is called with appropriate param for platforms where voltage is not scaled using I2C_SR path from board file, to make sure this bit is not overwritten in 'omap3_twl_init'. -ENOPARSE This patch is based on LO PM Branch and Smartreflex has been tested on OMAP3430 SDP, OMAP3630 SDP and boot tested on OMAP2430 SDP. this belongs into the diffstat. Attached is a modified version of this patch - i'vent tested it though.. but basically improves the logic a little: *) made the comments more generic to ensure that this is more of I2C_SR path as far as TWL is concerned(yes, from OMAP perspective it is vp forceupdate/bypass), but it is more of an OMAP problem than omap_twl.c problem. *) modified the function call sequences to prevent rentry even if board file calls with various other params *) shifted to using bool *) use init and initdata to free up the space once we are done with init sequence All good changes, but I don't think they're incorporated in V3. etc... Do let me know if this is good enough. Not quite yet, Kevin -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH V2] OMAP3: PM: Set/reset T2 bit for Smartreflex on TWL.
Kevin Hilman wrote, on 02/03/2011 03:09 AM: Nishanth Menonn...@ti.com writes: Kevin Hilman wrote, on 02/02/2011 04:11 AM: Shweta Gulatishweta.gul...@ti.com writes: From: Thara Gopinathth...@ti.com The smartreflex bit on twl4030 needs to be enabled by default irrespective of whether smartreflex module is enabled on the OMAP side or not. This is because without this bit enabled the voltage scaling through vp forceupdate does not function properly on OMAP3.API added 'omap3_twl_set_sr_bit' with parameter to set/clear SR bit. It is cleared for platforms where voltage is not scaled using vpforceupdate or vc_bypass Method. In those cases 'omap3_twl_set_sr_bit' is called from board file, to make sure this bit is not overwritten in 'omap3_twl_init', a flag 'twl_sr_enable' is added. As Sanjeev pointed out, the use of 'irrespective' above is confusing, in fact the whole changelog is kind of confusing. The changelog states that it has to always be enabled, but then goes on to describe the situation(s) where it would be disabled. Here's my rephrasing of how I understand the above changelog - enable: *always* be enabled - enable: needed for VP force update - disable: platforms using VP forced update or VP bypass -ECONFUSED Kevin How about this as the commit log? The smartreflex bit on twl4030 specifies if the setting of voltage is done over the I2C_SR path. Given that there are platforms that do not use I2C_SR path for voltage scaling, a new function 'omap3_twl_set_sr_bit' with parameter to set/clear SR bit has been provided for flexibility. So far so good. It is called with appropriate param for platforms where voltage is not scaled using I2C_SR path from board file, to make sure this bit is not overwritten in 'omap3_twl_init'. -ENOPARSE k, How about this: Voltage control on TWL can be done using VMODE/I2C1/I2C_SR. Since almost all platforms use I2C_SR on omap3, omap3_twl_init by default defaults expects that OMAP's I2C_SR is plugged in to TWL's I2C and calls omap3_twl_set_sr_bit. On platforms where I2C_SR is not connected, the board files are expected to call omap3_twl_set_sr_bit(false) to ensure that I2C_SR path is not set for voltage control and prevent the default behavior of omap3_twl_init. This patch is based on LO PM Branch and Smartreflex has been tested on OMAP3430 SDP, OMAP3630 SDP and boot tested on OMAP2430 SDP. this belongs into the diffstat. Attached is a modified version of this patch - i'vent tested it though.. but basically improves the logic a little: *) made the comments more generic to ensure that this is more of I2C_SR path as far as TWL is concerned(yes, from OMAP perspective it is vp forceupdate/bypass), but it is more of an OMAP problem than omap_twl.c problem. *) modified the function call sequences to prevent rentry even if board file calls with various other params *) shifted to using bool *) use init and initdata to free up the space once we are done with init sequence All good changes, but I don't think they're incorporated in V3. could you be more clear inline on v3? -- Regards, Nishanth Menon -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH V2] OMAP3: PM: Set/reset T2 bit for Smartreflex on TWL.
Shweta Gulati shweta.gul...@ti.com writes: From: Thara Gopinath th...@ti.com The smartreflex bit on twl4030 needs to be enabled by default irrespective of whether smartreflex module is enabled on the OMAP side or not. This is because without this bit enabled the voltage scaling through vp forceupdate does not function properly on OMAP3.API added 'omap3_twl_set_sr_bit' with parameter to set/clear SR bit. It is cleared for platforms where voltage is not scaled using vpforceupdate or vc_bypass Method. In those cases 'omap3_twl_set_sr_bit' is called from board file, to make sure this bit is not overwritten in 'omap3_twl_init', a flag 'twl_sr_enable' is added. As Sanjeev pointed out, the use of 'irrespective' above is confusing, in fact the whole changelog is kind of confusing. The changelog states that it has to always be enabled, but then goes on to describe the situation(s) where it would be disabled. Here's my rephrasing of how I understand the above changelog - enable: *always* be enabled - enable: needed for VP force update - disable: platforms using VP forced update or VP bypass -ECONFUSED Kevin This patch is based on LO PM Branch and Smartreflex has been tested on OMAP3430 SDP, OMAP3630 SDP and boot tested on OMAP2430 SDP. Signed-off-by: Thara Gopinath th...@ti.com Signed-off-by: Shweta Gulati shweta.gul...@ti.com --- arch/arm/mach-omap2/omap_twl.c | 62 arch/arm/mach-omap2/pm.h |1 + 2 files changed, 63 insertions(+), 0 deletions(-) diff --git a/arch/arm/mach-omap2/omap_twl.c b/arch/arm/mach-omap2/omap_twl.c index 00e1d2b..871a349 100644 --- a/arch/arm/mach-omap2/omap_twl.c +++ b/arch/arm/mach-omap2/omap_twl.c @@ -59,8 +59,15 @@ static bool is_offset_valid; static u8 smps_offset; +/* + * Flag to ensure Smartreflex bit in TWL + * being cleared in board file is not overwritten. + */ +static bool twl_sr_enable = true; +#define TWL4030_DCDC_GLOBAL_CFG0x06 #define REG_SMPS_OFFSET 0xE0 +#define SMARTREFLEX_ENABLE BIT(3) static unsigned long twl4030_vsel_to_uv(const u8 vsel) { @@ -269,6 +276,16 @@ int __init omap3_twl_init(void) omap3_core_volt_info.vp_vddmax = OMAP3630_VP2_VLIMITTO_VDDMAX; } + /* + * The smartreflex bit on twl4030 needs to be enabled by + * default irrespective of whether smartreflex module is + * enabled on the OMAP side or not. This is because without + * this bit enabled the voltage scaling through + * vp forceupdate does not function properly on OMAP3. + */ + if (twl_sr_enable) + omap3_twl_set_sr_bit(1); + voltdm = omap_voltage_domain_lookup(mpu); omap_voltage_register_pmic(voltdm, omap3_mpu_volt_info); @@ -277,3 +294,48 @@ int __init omap3_twl_init(void) return 0; } + +/** + * omap3_twl_set_sr_bit() - API to Set/Clear SR bit on TWL + * @flag: Flag to Set/Clear SR bit + * + * If flag is non zero, enables Smartreflex bit on TWL 4030 + * to make sure voltage scaling through Vp forceupdate works. + * Else, the smartreflex bit on twl4030 is + * cleared as there are platforms which use + * OMAP3 and T2 but use Synchronized Scaling Hardware + * Strategy (ENABLE_VMODE=1) and Direct Strategy Software + * Scaling Mode (ENABLE_VMODE=0), for setting the voltages, + * in those scenarios this bit is to be cleared. + * API returns 0 on sucess, error is returned + * if I2C read/write fails. + */ + +int omap3_twl_set_sr_bit(u8 flag) +{ + u8 temp; + int ret; + + ret = twl_i2c_read_u8(TWL4030_MODULE_PM_RECEIVER, temp, + TWL4030_DCDC_GLOBAL_CFG); + if (ret) + goto err; + + if (flag) { + temp |= SMARTREFLEX_ENABLE; + twl_sr_enable = true; + } else { + temp = ~SMARTREFLEX_ENABLE; + twl_sr_enable = false; + } + + ret = twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, temp, + TWL4030_DCDC_GLOBAL_CFG); + if (ret) { +err: + pr_err(%s: Unable to Read/Write to TWL4030 through I2C bus + \n, __func__); + return -EINVAL; + } + return 0; +} diff --git a/arch/arm/mach-omap2/pm.h b/arch/arm/mach-omap2/pm.h index 704766b..c98be66 100644 --- a/arch/arm/mach-omap2/pm.h +++ b/arch/arm/mach-omap2/pm.h @@ -127,6 +127,7 @@ static inline void omap_enable_smartreflex_on_init(void) {} #ifdef CONFIG_TWL4030_CORE extern int omap3_twl_init(void); extern int omap4_twl_init(void); +extern int omap3_twl_set_sr_bit(u8 flag); #else static inline int omap3_twl_init(void) { -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH V2] OMAP3: PM: Set/reset T2 bit for Smartreflex on TWL.
Kevin Hilman wrote, on 02/02/2011 04:11 AM: Shweta Gulatishweta.gul...@ti.com writes: From: Thara Gopinathth...@ti.com The smartreflex bit on twl4030 needs to be enabled by default irrespective of whether smartreflex module is enabled on the OMAP side or not. This is because without this bit enabled the voltage scaling through vp forceupdate does not function properly on OMAP3.API added 'omap3_twl_set_sr_bit' with parameter to set/clear SR bit. It is cleared for platforms where voltage is not scaled using vpforceupdate or vc_bypass Method. In those cases 'omap3_twl_set_sr_bit' is called from board file, to make sure this bit is not overwritten in 'omap3_twl_init', a flag 'twl_sr_enable' is added. As Sanjeev pointed out, the use of 'irrespective' above is confusing, in fact the whole changelog is kind of confusing. The changelog states that it has to always be enabled, but then goes on to describe the situation(s) where it would be disabled. Here's my rephrasing of how I understand the above changelog - enable: *always* be enabled - enable: needed for VP force update - disable: platforms using VP forced update or VP bypass -ECONFUSED Kevin How about this as the commit log? The smartreflex bit on twl4030 specifies if the setting of voltage is done over the I2C_SR path. Given that there are platforms that do not use I2C_SR path for voltage scaling, a new function 'omap3_twl_set_sr_bit' with parameter to set/clear SR bit has been provided for flexibility. It is called with appropriate param for platforms where voltage is not scaled using I2C_SR path from board file, to make sure this bit is not overwritten in 'omap3_twl_init'. This patch is based on LO PM Branch and Smartreflex has been tested on OMAP3430 SDP, OMAP3630 SDP and boot tested on OMAP2430 SDP. this belongs into the diffstat. Attached is a modified version of this patch - i'vent tested it though.. but basically improves the logic a little: *) made the comments more generic to ensure that this is more of I2C_SR path as far as TWL is concerned(yes, from OMAP perspective it is vp forceupdate/bypass), but it is more of an OMAP problem than omap_twl.c problem. *) modified the function call sequences to prevent rentry even if board file calls with various other params *) shifted to using bool *) use init and initdata to free up the space once we are done with init sequence etc... Do let me know if this is good enough. -- Regards, Nishanth Menon From 6474825fd3800f296da6103e198f563938572f67 Mon Sep 17 00:00:00 2001 From: Thara Gopinath th...@ti.com Date: Mon, 24 Jan 2011 11:07:26 +0530 Subject: [PATCH] OMAP3: PM: Set/clear T2 bit for Smartreflex on TWL The smartreflex bit on twl4030 specifies if the setting of voltage is done over the I2C_SR path. Given that there are platforms that do not use I2C_SR path for voltage scaling, a new function 'omap3_twl_set_sr_bit' with parameter to set/clear SR bit has been provided for flexibility. It is called with appropriate param for platforms where voltage is not scaled using I2C_SR path from board file, to make sure this bit is not overwritten in 'omap3_twl_init'. Signed-off-by: Thara Gopinath th...@ti.com Signed-off-by: Nishanth Menon n...@ti.com Signed-off-by: Shweta Gulati shweta.gul...@ti.com --- This patch is based on LO PM Branch and Smartreflex has been tested on OMAP3430 SDP, OMAP3630 SDP and boot tested on OMAP2430 SDP. arch/arm/mach-omap2/omap_twl.c | 60 arch/arm/mach-omap2/pm.h |1 + 2 files changed, 61 insertions(+), 0 deletions(-) diff --git a/arch/arm/mach-omap2/omap_twl.c b/arch/arm/mach-omap2/omap_twl.c index 00e1d2b..8b24839 100644 --- a/arch/arm/mach-omap2/omap_twl.c +++ b/arch/arm/mach-omap2/omap_twl.c @@ -59,8 +59,15 @@ static bool is_offset_valid; static u8 smps_offset; +/* + * Flag to ensure Smartreflex bit in TWL + * being cleared in board file is not overwritten. + */ +static bool __initdata twl_sr_enable_autoinit; +#define TWL4030_DCDC_GLOBAL_CFG0x06 #define REG_SMPS_OFFSET 0xE0 +#define SMARTREFLEX_ENABLE BIT(3) static unsigned long twl4030_vsel_to_uv(const u8 vsel) { @@ -269,6 +276,18 @@ int __init omap3_twl_init(void) omap3_core_volt_info.vp_vddmax = OMAP3630_VP2_VLIMITTO_VDDMAX; } + /* + * The smartreflex bit on twl4030 specifies if the setting of voltage + * is done over the I2C_SR path. Since this setting is independent of + * the actual usage of smartreflex AVS module, we enable TWL SR bit + * by default irrespective of whether smartreflex AVS module is enabled + * on the OMAP side or not. This is because without this bit enabled, + * the voltage scaling through vp forceupdate/bypass mechanism of + * voltage scaling will not function on TWL over I2C_SR. + */ + if (!twl_sr_enable_autoinit) + omap3_twl_set_sr_bit(true); + voltdm = omap_voltage_domain_lookup(mpu); omap_voltage_register_pmic(voltdm, omap3_mpu_volt_info); @@ -277,3 +296,44
Re: [PATCH V2] OMAP3: PM: Set/reset T2 bit for Smartreflex on TWL.
Nishanth Menon wrote, on 02/02/2011 07:59 AM: Kevin Hilman wrote, on 02/02/2011 04:11 AM: Shweta Gulatishweta.gul...@ti.com writes: From: Thara Gopinathth...@ti.com The smartreflex bit on twl4030 needs to be enabled by default irrespective of whether smartreflex module is enabled on the OMAP side or not. This is because without this bit enabled the voltage scaling through vp forceupdate does not function properly on OMAP3.API added 'omap3_twl_set_sr_bit' with parameter to set/clear SR bit. It is cleared for platforms where voltage is not scaled using vpforceupdate or vc_bypass Method. In those cases 'omap3_twl_set_sr_bit' is called from board file, to make sure this bit is not overwritten in 'omap3_twl_init', a flag 'twl_sr_enable' is added. As Sanjeev pointed out, the use of 'irrespective' above is confusing, in fact the whole changelog is kind of confusing. The changelog states that it has to always be enabled, but then goes on to describe the situation(s) where it would be disabled. Here's my rephrasing of how I understand the above changelog - enable: *always* be enabled - enable: needed for VP force update - disable: platforms using VP forced update or VP bypass -ECONFUSED Kevin How about this as the commit log? my bad - I just saw that Shweta already posted a v3: http://marc.info/?l=linux-omapm=129612341602728w=2 could we have the discussion there instead of beating up this old patch? ;) -- Regards, Nishanth Menon -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
RE: [PATCH V2] OMAP3: PM: Set/reset T2 bit for Smartreflex on TWL.
-Original Message- From: linux-omap-ow...@vger.kernel.org [mailto:linux-omap- ow...@vger.kernel.org] On Behalf Of Gulati, Shweta Sent: Monday, January 24, 2011 11:07 AM To: linux-omap@vger.kernel.org Cc: Gopinath, Thara; Gulati, Shweta Subject: [PATCH V2] OMAP3: PM: Set/reset T2 bit for Smartreflex on TWL. From: Thara Gopinath th...@ti.com The smartreflex bit on twl4030 needs to be enabled by default irrespective of whether smartreflex module is enabled on the OMAP side or not. This is because without this bit enabled the voltage scaling through vp forceupdate does not function properly on OMAP3.API added 'omap3_twl_set_sr_bit' with parameter to set/clear SR bit. It is cleared for platforms where voltage is not scaled using vpforceupdate or vc_bypass Method. In those cases 'omap3_twl_set_sr_bit' is called from board file, to make sure this bit is not overwritten in 'omap3_twl_init', a flag 'twl_sr_enable' is added. This patch is based on LO PM Branch and Smartreflex has been tested on OMAP3430 SDP, OMAP3630 SDP and boot tested on OMAP2430 SDP. The function twl4030_vsel_to_uv (where you have added a call to omap3_twl_set_sr_bit) method is getting invoked only from vp_volt_debug_get (which is for debugfs) and omap_vp_get_curr_volt (which no one seems to be calling). Due to this I was not able to get cpufreq to work. (I finally got it working by calling omap3_twl_set_sr_bit from omap3_twl_init instead). It looks like I'm missing something, maybe an intermediate patch? (I'd applied your patch manually on 2.6.37). -Abhilash Signed-off-by: Thara Gopinath th...@ti.com Signed-off-by: Shweta Gulati shweta.gul...@ti.com --- arch/arm/mach-omap2/omap_twl.c | 62 arch/arm/mach-omap2/pm.h |1 + 2 files changed, 63 insertions(+), 0 deletions(-) diff --git a/arch/arm/mach-omap2/omap_twl.c b/arch/arm/mach- omap2/omap_twl.c index 00e1d2b..871a349 100644 --- a/arch/arm/mach-omap2/omap_twl.c +++ b/arch/arm/mach-omap2/omap_twl.c @@ -59,8 +59,15 @@ static bool is_offset_valid; static u8 smps_offset; +/* + * Flag to ensure Smartreflex bit in TWL + * being cleared in board file is not overwritten. + */ +static bool twl_sr_enable = true; +#define TWL4030_DCDC_GLOBAL_CFG0x06 #define REG_SMPS_OFFSET 0xE0 +#define SMARTREFLEX_ENABLE BIT(3) static unsigned long twl4030_vsel_to_uv(const u8 vsel) { @@ -269,6 +276,16 @@ int __init omap3_twl_init(void) omap3_core_volt_info.vp_vddmax = OMAP3630_VP2_VLIMITTO_VDDMAX; } + /* + * The smartreflex bit on twl4030 needs to be enabled by + * default irrespective of whether smartreflex module is + * enabled on the OMAP side or not. This is because without + * this bit enabled the voltage scaling through + * vp forceupdate does not function properly on OMAP3. + */ + if (twl_sr_enable) + omap3_twl_set_sr_bit(1); + voltdm = omap_voltage_domain_lookup(mpu); omap_voltage_register_pmic(voltdm, omap3_mpu_volt_info); @@ -277,3 +294,48 @@ int __init omap3_twl_init(void) return 0; } + +/** + * omap3_twl_set_sr_bit() - API to Set/Clear SR bit on TWL + * @flag: Flag to Set/Clear SR bit + * + * If flag is non zero, enables Smartreflex bit on TWL 4030 + * to make sure voltage scaling through Vp forceupdate works. + * Else, the smartreflex bit on twl4030 is + * cleared as there are platforms which use + * OMAP3 and T2 but use Synchronized Scaling Hardware + * Strategy (ENABLE_VMODE=1) and Direct Strategy Software + * Scaling Mode (ENABLE_VMODE=0), for setting the voltages, + * in those scenarios this bit is to be cleared. + * API returns 0 on sucess, error is returned + * if I2C read/write fails. + */ + +int omap3_twl_set_sr_bit(u8 flag) +{ + u8 temp; + int ret; + + ret = twl_i2c_read_u8(TWL4030_MODULE_PM_RECEIVER, temp, + TWL4030_DCDC_GLOBAL_CFG); + if (ret) + goto err; + + if (flag) { + temp |= SMARTREFLEX_ENABLE; + twl_sr_enable = true; + } else { + temp = ~SMARTREFLEX_ENABLE; + twl_sr_enable = false; + } + + ret = twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, temp, + TWL4030_DCDC_GLOBAL_CFG); + if (ret) { +err: + pr_err(%s: Unable to Read/Write to TWL4030 through I2C bus + \n, __func__); + return -EINVAL; + } + return 0; +} diff --git a/arch/arm/mach-omap2/pm.h b/arch/arm/mach-omap2/pm.h index 704766b..c98be66 100644 --- a/arch/arm/mach-omap2/pm.h +++ b/arch/arm/mach-omap2/pm.h @@ -127,6 +127,7 @@ static inline void omap_enable_smartreflex_on_init(void) {} #ifdef CONFIG_TWL4030_CORE extern int omap3_twl_init(void); extern int omap4_twl_init(void); +extern int omap3_twl_set_sr_bit(u8
Re: [PATCH V2] OMAP3: PM: Set/reset T2 bit for Smartreflex on TWL.
Abhilash, On Mon, Jan 31, 2011 at 7:19 PM, Koyamangalath, Abhilash abhilash...@ti.com wrote: -Original Message- From: linux-omap-ow...@vger.kernel.org [mailto:linux-omap- ow...@vger.kernel.org] On Behalf Of Gulati, Shweta Sent: Monday, January 24, 2011 11:07 AM To: linux-omap@vger.kernel.org Cc: Gopinath, Thara; Gulati, Shweta Subject: [PATCH V2] OMAP3: PM: Set/reset T2 bit for Smartreflex on TWL. From: Thara Gopinath th...@ti.com The smartreflex bit on twl4030 needs to be enabled by default irrespective of whether smartreflex module is enabled on the OMAP side or not. This is because without this bit enabled the voltage scaling through vp forceupdate does not function properly on OMAP3.API added 'omap3_twl_set_sr_bit' with parameter to set/clear SR bit. It is cleared for platforms where voltage is not scaled using vpforceupdate or vc_bypass Method. In those cases 'omap3_twl_set_sr_bit' is called from board file, to make sure this bit is not overwritten in 'omap3_twl_init', a flag 'twl_sr_enable' is added. This patch is based on LO PM Branch and Smartreflex has been tested on OMAP3430 SDP, OMAP3630 SDP and boot tested on OMAP2430 SDP. The function twl4030_vsel_to_uv (where you have added a call to omap3_twl_set_sr_bit) method is getting invoked only from vp_volt_debug_get (which is for debugfs) and omap_vp_get_curr_volt (which no one seems to be calling). Due to this I was not able to get cpufreq to work. (I finally got it working by calling omap3_twl_set_sr_bit from omap3_twl_init instead). It looks like I'm missing something, maybe an intermediate patch? (I'd applied your patch manually on 2.6.37). -Abhilash The function 'omap3_twl_set_sr_bit' is called from omap3_twl_init only, while manually applying the patch u saw the function defined above omap3_twl_init in patch. Signed-off-by: Thara Gopinath th...@ti.com Signed-off-by: Shweta Gulati shweta.gul...@ti.com --- arch/arm/mach-omap2/omap_twl.c | 62 arch/arm/mach-omap2/pm.h | 1 + 2 files changed, 63 insertions(+), 0 deletions(-) diff --git a/arch/arm/mach-omap2/omap_twl.c b/arch/arm/mach- omap2/omap_twl.c index 00e1d2b..871a349 100644 --- a/arch/arm/mach-omap2/omap_twl.c +++ b/arch/arm/mach-omap2/omap_twl.c @@ -59,8 +59,15 @@ static bool is_offset_valid; static u8 smps_offset; +/* + * Flag to ensure Smartreflex bit in TWL + * being cleared in board file is not overwritten. + */ +static bool twl_sr_enable = true; +#define TWL4030_DCDC_GLOBAL_CFG 0x06 #define REG_SMPS_OFFSET 0xE0 +#define SMARTREFLEX_ENABLE BIT(3) static unsigned long twl4030_vsel_to_uv(const u8 vsel) { @@ -269,6 +276,16 @@ int __init omap3_twl_init(void) omap3_core_volt_info.vp_vddmax = OMAP3630_VP2_VLIMITTO_VDDMAX; } + /* + * The smartreflex bit on twl4030 needs to be enabled by + * default irrespective of whether smartreflex module is + * enabled on the OMAP side or not. This is because without + * this bit enabled the voltage scaling through + * vp forceupdate does not function properly on OMAP3. + */ + if (twl_sr_enable) + omap3_twl_set_sr_bit(1); + voltdm = omap_voltage_domain_lookup(mpu); omap_voltage_register_pmic(voltdm, omap3_mpu_volt_info); @@ -277,3 +294,48 @@ int __init omap3_twl_init(void) return 0; } + +/** + * omap3_twl_set_sr_bit() - API to Set/Clear SR bit on TWL + * @flag: Flag to Set/Clear SR bit + * + * If flag is non zero, enables Smartreflex bit on TWL 4030 + * to make sure voltage scaling through Vp forceupdate works. + * Else, the smartreflex bit on twl4030 is + * cleared as there are platforms which use + * OMAP3 and T2 but use Synchronized Scaling Hardware + * Strategy (ENABLE_VMODE=1) and Direct Strategy Software + * Scaling Mode (ENABLE_VMODE=0), for setting the voltages, + * in those scenarios this bit is to be cleared. + * API returns 0 on sucess, error is returned + * if I2C read/write fails. + */ + +int omap3_twl_set_sr_bit(u8 flag) +{ + u8 temp; + int ret; + + ret = twl_i2c_read_u8(TWL4030_MODULE_PM_RECEIVER, temp, + TWL4030_DCDC_GLOBAL_CFG); + if (ret) + goto err; + + if (flag) { + temp |= SMARTREFLEX_ENABLE; + twl_sr_enable = true; + } else { + temp = ~SMARTREFLEX_ENABLE; + twl_sr_enable = false; + } + + ret = twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, temp, + TWL4030_DCDC_GLOBAL_CFG); + if (ret) { +err: + pr_err(%s: Unable to Read/Write to TWL4030 through I2C bus + \n, __func__); + return -EINVAL; + } + return 0; +} diff --git a/arch/arm/mach-omap2/pm.h b/arch/arm/mach-omap2/pm.h index 704766b..c98be66 100644 --- a/arch/arm/mach-omap2/pm.h