From patchwork Sat Sep 25 12:51:18 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thara Gopinath X-Patchwork-Id: 208962 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 o8PCpiEx010259 for ; Sat, 25 Sep 2010 12:51:45 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753395Ab0IYMvk (ORCPT ); Sat, 25 Sep 2010 08:51:40 -0400 Received: from devils.ext.ti.com ([198.47.26.153]:53964 "EHLO devils.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750985Ab0IYMvi (ORCPT ); Sat, 25 Sep 2010 08:51:38 -0400 Received: from dbdp31.itg.ti.com ([172.24.170.98]) by devils.ext.ti.com (8.13.7/8.13.7) with ESMTP id o8PCpX7H024289 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Sat, 25 Sep 2010 07:51:36 -0500 Received: from localhost.localdomain (localhost [127.0.0.1]) by dbdp31.itg.ti.com (8.13.8/8.13.8) with ESMTP id o8PCpRRD018322; Sat, 25 Sep 2010 18:21:31 +0530 (IST) From: Thara Gopinath To: linux-omap@vger.kernel.org Cc: khilman@deeprootsystems.com, paul@pwsan.com, b-cousson@ti.com, vishwanath.bs@ti.com, sawant@ti.com, Thara Gopinath Subject: [PATCH v2 03/11] OMAP4: Add the new voltage to vsel calculation formula Date: Sat, 25 Sep 2010 18:21:18 +0530 Message-Id: <1285419086-13047-4-git-send-email-thara@ti.com> X-Mailer: git-send-email 1.7.0.4 In-Reply-To: <1285419086-13047-1-git-send-email-thara@ti.com> References: <1285419086-13047-1-git-send-email-thara@ti.com> 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.3 (demeter1.kernel.org [140.211.167.41]); Sat, 25 Sep 2010 12:51:46 +0000 (UTC) diff --git a/arch/arm/plat-omap/opp_twl_tps.c b/arch/arm/plat-omap/opp_twl_tps.c index 4448fc5..358b67b 100644 --- a/arch/arm/plat-omap/opp_twl_tps.c +++ b/arch/arm/plat-omap/opp_twl_tps.c @@ -15,9 +15,16 @@ #include +#include + #include #include +static bool is_offset_valid; +static u8 smps_offset; + +#define REG_SMPS_OFFSET 0xE0 + /** * omap_twl_vsel_to_vdc - convert TWL/TPS VSEL value to microvolts DC * @vsel: TWL/TPS VSEL value to convert @@ -27,6 +34,38 @@ */ unsigned long omap_twl_vsel_to_uv(const u8 vsel) { + if (twl_class_is_6030()) { + /* + * In TWL6030 depending on the value of SMPS_OFFSET + * efuse register the voltage range supported in + * standard mode can be either between 0.6V - 1.3V or + * 0.7V - 1.4V. In TWL6030 ES1.0 SMPS_OFFSET efuse + * is programmed to all 0's where as starting from + * TWL6030 ES1.1 the efuse is programmed to 1 + */ + if (!is_offset_valid) { + twl_i2c_read_u8(TWL6030_MODULE_ID0, &smps_offset, 0xE0); + is_offset_valid = true; + } + + if (smps_offset & 0x8) { + return ((((vsel - 1) * 125) + 7000)) * 100; + } else { + /* + * In case of the supported voltage range being + * between 0.6V - 1.3V, there is not specific + * formula for voltage to vsel conversion above + * 1.3V. There are special hardcoded values for + * voltages above 1.3V. Currently we are hardcodig + * only for 1.35 V which is used for 1GH OPP for + * OMAP4430. + */ + if (vsel == 0x3A) + return 1350000; + return ((((vsel - 1) * 125) + 6000)) * 100; + } + } + return (((vsel * 125) + 6000)) * 100; } @@ -40,6 +79,38 @@ unsigned long omap_twl_vsel_to_uv(const u8 vsel) u8 omap_twl_uv_to_vsel(unsigned long uv) { /* Round up to higher voltage */ + if (twl_class_is_6030()) { + /* + * In TWL6030 depending on the value of SMPS_OFFSET + * efuse register the voltage range supported in + * standard mode can be either between 0.6V - 1.3V or + * 0.7V - 1.4V. In TWL6030 ES1.0 SMPS_OFFSET efuse + * is programmed to all 0's where as starting from + * TWL6030 ES1.1 the efuse is programmed to 1 + */ + if (!is_offset_valid) { + twl_i2c_read_u8(TWL6030_MODULE_ID0, &smps_offset, 0xE0); + is_offset_valid = true; + } + + if (smps_offset & 0x8) { + return DIV_ROUND_UP(uv - 700000, 12500) + 1; + } else { + /* + * In case of the supported voltage range being + * between 0.6V - 1.3V, there is not specific + * formula for voltage to vsel conversion above + * 1.3V. There are special hardcoded values for + * voltages above 1.3V. Currently we are hardcodig + * only for 1.35 V which is used for 1GH OPP for + * OMAP4430. + */ + if (uv == 1350000) + return 0x3A; + return DIV_ROUND_UP(uv - 600000, 12500) + 1; + } + } + return DIV_ROUND_UP(uv - 600000, 12500); }