From patchwork Wed Jan 19 09:07:58 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Gulati, Shweta" X-Patchwork-Id: 488661 X-Patchwork-Delegate: khilman@deeprootsystems.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id p0J94Yr2022592 for ; Wed, 19 Jan 2011 09:04:36 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753675Ab1ASJEf (ORCPT ); Wed, 19 Jan 2011 04:04:35 -0500 Received: from comal.ext.ti.com ([198.47.26.152]:40949 "EHLO comal.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753069Ab1ASJEe (ORCPT ); Wed, 19 Jan 2011 04:04:34 -0500 Received: from dbdp31.itg.ti.com ([172.24.170.98]) by comal.ext.ti.com (8.13.7/8.13.7) with ESMTP id p0J94UEZ016674 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Wed, 19 Jan 2011 03:04:32 -0600 Received: from localhost.localdomain (localhost [127.0.0.1]) by dbdp31.itg.ti.com (8.13.8/8.13.8) with ESMTP id p0J94TRZ019883; Wed, 19 Jan 2011 14:34:29 +0530 (IST) From: shweta gulati To: linux-omap@vger.kernel.org Cc: Thara Gopinath , Shweta Gulati Subject: [PATCH] OMAP3: PM: Adding T2 enabling of smartreflex Date: Wed, 19 Jan 2011 14:37:58 +0530 Message-Id: <1295428078-7822-1-git-send-email-shweta.gulati@ti.com> X-Mailer: git-send-email 1.7.0.4 Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter1.kernel.org [140.211.167.41]); Wed, 19 Jan 2011 09:04:36 +0000 (UTC) diff --git a/arch/arm/mach-omap2/omap_twl.c b/arch/arm/mach-omap2/omap_twl.c index 00e1d2b..5b3ca56 100644 --- a/arch/arm/mach-omap2/omap_twl.c +++ b/arch/arm/mach-omap2/omap_twl.c @@ -60,7 +60,9 @@ static bool is_offset_valid; static u8 smps_offset; +#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 +271,15 @@ 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. + */ + omap3_twl_enable_sr(); + voltdm = omap_voltage_domain_lookup("mpu"); omap_voltage_register_pmic(voltdm, &omap3_mpu_volt_info); @@ -277,3 +288,38 @@ int __init omap3_twl_init(void) return 0; } + +/* + * The smartreflex bit on twl4030 is enabled in twl_init + * but 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 of T2, in those scenarios this bit + * is to be cleared. + */ +void omap3_twl_disable_sr() +{ + u8 temp; + + twl_i2c_read_u8(TWL4030_MODULE_PM_RECEIVER, &temp, + TWL4030_DCDC_GLOBAL_CFG); + temp &= ~SMARTREFLEX_ENABLE; + twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, temp, + TWL4030_DCDC_GLOBAL_CFG); +} + +/* + * To enable Smartreflex bit on TWl 4030 to make sure + * voltage scaling through Vp forceupdate works. + */ + +void omap3_twl_enable_sr() +{ + u8 temp; + + twl_i2c_read_u8(TWL4030_MODULE_PM_RECEIVER, &temp, + TWL4030_DCDC_GLOBAL_CFG); + temp |= SMARTREFLEX_ENABLE; + twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, temp, + TWL4030_DCDC_GLOBAL_CFG); +} diff --git a/arch/arm/mach-omap2/pm.h b/arch/arm/mach-omap2/pm.h index 704766b..8500356 100644 --- a/arch/arm/mach-omap2/pm.h +++ b/arch/arm/mach-omap2/pm.h @@ -127,6 +127,8 @@ 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 void omap3_twl_disable_sr(void); +extern void omap3_twl_enable_sr(void); #else static inline int omap3_twl_init(void) {