From patchwork Tue Oct 7 08:43:57 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chris Zhong X-Patchwork-Id: 5044011 Return-Path: X-Original-To: patchwork-linux-rockchip@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 8460C9F295 for ; Tue, 7 Oct 2014 08:44:41 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 8B01D20179 for ; Tue, 7 Oct 2014 08:44:40 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 4828220172 for ; Tue, 7 Oct 2014 08:44:39 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1XbQNq-000667-GB; Tue, 07 Oct 2014 08:44:38 +0000 Received: from mail-qc0-f174.google.com ([209.85.216.174]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1XbQNn-00060p-Pq for linux-rockchip@lists.infradead.org; Tue, 07 Oct 2014 08:44:36 +0000 Received: by mail-qc0-f174.google.com with SMTP id m20so5170130qcx.5 for ; Tue, 07 Oct 2014 01:44:13 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=from:to:cc:subject:date:message-id; bh=H/HrsN7xuSMCE0tKinQnl1bKa+NulHQI/SPl1wSO9RI=; b=c/d9NpE0aavUzPIU3rSrI9ZINNk84SG2e2rbcQpZZ0jB5YOPkFIzhnJb3MBJyrfkVw ziRBeiISjp6V2eRGg0J6NwC/g2K78z3IV++JC/nLkfQehbz7qcBoyLn+x/q5tYAwjQr/ cfYGionRB/nOHG7PhmnwiIvkK2WdMejs1F0bR8C6uRwtV3cymiTys+LwymMizIv8PG6u RnmPWbtgvV3kwtgyQmK7Pg6bbZG208YjkKjvuzZhlWH9ySoB/Qf+eAld6sCDZ1n+VYQw iLW4O7GeXlEq539YNrd4eUbt5eFqQk9RRdu+xL/LaAjhywdpMOwu7cc3aVIAbub7vZBH 5QBA== X-Received: by 10.224.127.131 with SMTP id g3mr2302058qas.81.1412671450465; Tue, 07 Oct 2014 01:44:10 -0700 (PDT) Received: from localhost.localdomain ([209.200.22.177]) by mx.google.com with ESMTPSA id g5sm14459385qaz.39.2014.10.07.01.44.04 for (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 07 Oct 2014 01:44:09 -0700 (PDT) From: Chris Zhong To: dianders@chromium.org, heiko@sntech.de Subject: [PATCH] regulator: rk808: Add support setting suspend voltage Date: Tue, 7 Oct 2014 16:43:57 +0800 Message-Id: <1412671438-25399-1-git-send-email-zyw@rock-chips.com> X-Mailer: git-send-email 1.7.9.5 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20141007_014435_914712_1C087E0B X-CRM114-Status: GOOD ( 11.00 ) X-Spam-Score: 1.5 (+) Cc: Chris Zhong , linux-rockchip@lists.infradead.org, Mark Brown , Liam Girdwood , linux-kernel@vger.kernel.org X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+patchwork-linux-rockchip=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=1.3 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_NONE, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY, URIBL_BLACK, URIBL_RHS_DOB autolearn=no version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP X-Spam-Level: * support setting suspend voltage and disable regulator in suspend. Signed-off-by: Chris Zhong Reviewed-by: Doug Anderson --- drivers/regulator/rk808-regulator.c | 37 +++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/drivers/regulator/rk808-regulator.c b/drivers/regulator/rk808-regulator.c index e305416..6687e6e 100644 --- a/drivers/regulator/rk808-regulator.c +++ b/drivers/regulator/rk808-regulator.c @@ -36,6 +36,12 @@ #define RK808_RAMP_RATE_6MV_PER_US (2 << RK808_RAMP_RATE_OFFSET) #define RK808_RAMP_RATE_10MV_PER_US (3 << RK808_RAMP_RATE_OFFSET) +/* Offset from XXX_ON_VSEL to XXX_SLP_VSEL */ +#define RK808_SLP_REG_OFFSET 1 + +/* Offset from XXX_EN_REG to SLEEP_SET_OFF_XXX */ +#define RK808_SLP_SET_OFF_REG_OFFSET 2 + static const int rk808_buck_config_regs[] = { RK808_BUCK1_CONFIG_REG, RK808_BUCK2_CONFIG_REG, @@ -91,6 +97,32 @@ static int rk808_set_ramp_delay(struct regulator_dev *rdev, int ramp_delay) RK808_RAMP_RATE_MASK, ramp_value); } +int rk808_set_suspend_voltage(struct regulator_dev *rdev, int uv) +{ + unsigned int reg; + int sel = regulator_map_voltage_linear_range(rdev, uv, uv); + + if (sel < 0) + return -EINVAL; + + reg = rdev->desc->vsel_reg + RK808_SLP_REG_OFFSET; + + return regmap_update_bits(rdev->regmap, reg, + rdev->desc->vsel_mask, + sel); +} + +int rk808_set_suspend_disable(struct regulator_dev *rdev) +{ + unsigned int reg; + + reg = rdev->desc->enable_reg + RK808_SLP_SET_OFF_REG_OFFSET; + + return regmap_update_bits(rdev->regmap, reg, + rdev->desc->enable_mask, + rdev->desc->enable_mask); +} + static struct regulator_ops rk808_buck1_2_ops = { .list_voltage = regulator_list_voltage_linear_range, .map_voltage = regulator_map_voltage_linear_range, @@ -100,6 +132,8 @@ static struct regulator_ops rk808_buck1_2_ops = { .disable = regulator_disable_regmap, .is_enabled = regulator_is_enabled_regmap, .set_ramp_delay = rk808_set_ramp_delay, + .set_suspend_voltage = rk808_set_suspend_voltage, + .set_suspend_disable = rk808_set_suspend_disable, }; static struct regulator_ops rk808_reg_ops = { @@ -110,12 +144,15 @@ static struct regulator_ops rk808_reg_ops = { .enable = regulator_enable_regmap, .disable = regulator_disable_regmap, .is_enabled = regulator_is_enabled_regmap, + .set_suspend_voltage = rk808_set_suspend_voltage, + .set_suspend_disable = rk808_set_suspend_disable, }; static struct regulator_ops rk808_switch_ops = { .enable = regulator_enable_regmap, .disable = regulator_disable_regmap, .is_enabled = regulator_is_enabled_regmap, + .set_suspend_disable = rk808_set_suspend_disable, }; static const struct regulator_desc rk808_reg[] = {