From patchwork Mon May 26 13:20:23 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Krzysztof Kozlowski X-Patchwork-Id: 4242231 Return-Path: X-Original-To: patchwork-linux-samsung-soc@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id CB856BF90B for ; Mon, 26 May 2014 13:21:58 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 6DF3E20254 for ; Mon, 26 May 2014 13:21:57 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id CB0EB2017E for ; Mon, 26 May 2014 13:21:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752503AbaEZNVO (ORCPT ); Mon, 26 May 2014 09:21:14 -0400 Received: from mailout3.w1.samsung.com ([210.118.77.13]:55723 "EHLO mailout3.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751796AbaEZNVM (ORCPT ); Mon, 26 May 2014 09:21:12 -0400 Received: from eucpsbgm1.samsung.com (unknown [203.254.199.244]) by mailout3.w1.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0N6600MF8NRAEYB0@mailout3.w1.samsung.com>; Mon, 26 May 2014 14:21:10 +0100 (BST) X-AuditID: cbfec7f4-b7fac6d000006cfe-01-53833fc6195d Received: from eusync3.samsung.com ( [203.254.199.213]) by eucpsbgm1.samsung.com (EUCPMTA) with SMTP id AE.AB.27902.6CF33835; Mon, 26 May 2014 14:21:10 +0100 (BST) Received: from AMDC1943.digital.local ([106.116.151.171]) by eusync3.samsung.com (Oracle Communications Messaging Server 7u4-23.01(7.0.4.23.0) 64bit (built Aug 10 2011)) with ESMTPA id <0N66003T5NQ6RZB0@eusync3.samsung.com>; Mon, 26 May 2014 14:21:10 +0100 (BST) From: Krzysztof Kozlowski To: Liam Girdwood , Mark Brown , Sangbeom Kim , Lee Jones , Sachin Kamat , linux-kernel@vger.kernel.org Cc: linux-samsung-soc@vger.kernel.org, Tomasz Figa , Kyungmin Park , Marek Szyprowski , Bartlomiej Zolnierkiewicz , devicetree@vger.kernel.org, Krzysztof Kozlowski Subject: [PATCH 3/3] regulator: s2mpa01: Remove driver because it was merged into s2mps11 Date: Mon, 26 May 2014 15:20:23 +0200 Message-id: <1401110423-5647-4-git-send-email-k.kozlowski@samsung.com> X-Mailer: git-send-email 1.9.1 In-reply-to: <1401110423-5647-1-git-send-email-k.kozlowski@samsung.com> References: <1401110423-5647-1-git-send-email-k.kozlowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprCLMWRmVeSWpSXmKPExsVy+t/xq7rH7JuDDbbsNbLYOGM9q8XUh0/Y LOYfOcdq8fqFocXZpjfsFve/HmW0+Halg8ni8q45bBYzzu9jslh75C67xck/vYwWF1d8YbJY P+M1iwOvx85Zd9k9Nq3qZPO4c20Pm0ffllWMHp83yQWwRnHZpKTmZJalFunbJXBlrOo+wlaw cBpjxdLFj5kaGK9VdjFyckgImEicenmMCcIWk7hwbz1bFyMXh5DAUkaJ54u3MEI4fUwSv5Ye ZAGpYhMwlti8fAlYlYjADUaJ49MuM3cxcnAwC6xgkrjvDFIjLBAtsW7lOWYQm0VAVeLQl1Ws IDavgJvEz/OPWSC2yUmcPDYZLM4p4C5x/fYxsLgQUM2Du5NZJjDyLmBkWMUomlqaXFCclJ5r qFecmFtcmpeul5yfu4kREpJfdjAuPmZ1iFGAg1GJh/dEUFOwEGtiWXFl7iFGCQ5mJRFeLc7m YCHelMTKqtSi/Pii0pzU4kOMTBycUg2MNrLbT1rxZE3b++Boyfe5uf9ma+wyUhNelBbqFcHf /Dn4vMZ37r8R/dNX3jZZ8i5rhrTQl/r6+JQDbVELRXvdy6Z3dK38sPQfA//Pu0t3z1vNpfnY TlRrVf75sikL+Vome25r0k/JWBv/ytqiIFLA+kDyl9S3j+8nZJ+S2cTJWBP1pffg6/I3SizF GYmGWsxFxYkAQ67oaicCAAA= Sender: linux-samsung-soc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org X-Spam-Status: No, score=-7.5 required=5.0 tests=BAYES_00,LOTS_OF_MONEY, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable 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 The s2mpa01 regulator driver can be safely removed since it was merged into s2mps11 driver. Signed-off-by: Krzysztof Kozlowski --- Documentation/devicetree/bindings/mfd/s2mpa01.txt | 90 ---- drivers/regulator/Kconfig | 7 - drivers/regulator/Makefile | 1 - drivers/regulator/s2mpa01.c | 482 ---------------------- 4 files changed, 580 deletions(-) delete mode 100644 Documentation/devicetree/bindings/mfd/s2mpa01.txt delete mode 100644 drivers/regulator/s2mpa01.c diff --git a/Documentation/devicetree/bindings/mfd/s2mpa01.txt b/Documentation/devicetree/bindings/mfd/s2mpa01.txt deleted file mode 100644 index c13d3d8c3947..000000000000 --- a/Documentation/devicetree/bindings/mfd/s2mpa01.txt +++ /dev/null @@ -1,90 +0,0 @@ - -* Samsung S2MPA01 Voltage and Current Regulator - -The Samsung S2MPA01 is a multi-function device which includes high -efficiency buck converters including Dual-Phase buck converter, various LDOs, -and an RTC. It is interfaced to the host controller using an I2C interface. -Each sub-block is addressed by the host system using different I2C slave -addresses. - -Required properties: -- compatible: Should be "samsung,s2mpa01-pmic". -- reg: Specifies the I2C slave address of the PMIC block. It should be 0x66. - -Optional properties: -- interrupt-parent: Specifies the phandle of the interrupt controller to which - the interrupts from s2mpa01 are delivered to. -- interrupts: An interrupt specifier for the sole interrupt generated by the - device. - -Optional nodes: -- regulators: The regulators of s2mpa01 that have to be instantiated should be - included in a sub-node named 'regulators'. Regulator nodes and constraints - included in this sub-node use the standard regulator bindings which are - documented elsewhere. - -Properties for BUCK regulator nodes: -- regulator-ramp-delay: ramp delay in uV/us. May be 6250, 12500 - (default), 25000, or 50000. May be 0 for disabling the ramp delay on - BUCK{1,2,3,4}. - - In the absence of the regulator-ramp-delay property, the default ramp - delay will be used. - - NOTE: Some BUCKs share the ramp rate setting i.e. same ramp value will be set - for a particular group of BUCKs. So provide same regulator-ramp-delay=. - - The following BUCKs share ramp settings: - * 1 and 6 - * 2 and 4 - * 8, 9, and 10 - -The following are the names of the regulators that the s2mpa01 PMIC block -supports. Note: The 'n' in LDOn and BUCKn represents the LDO or BUCK number -as per the datasheet of s2mpa01. - - - LDOn - - valid values for n are 1 to 26 - - Example: LDO1, LD02, LDO26 - - BUCKn - - valid values for n are 1 to 10. - - Example: BUCK1, BUCK2, BUCK9 - -Example: - - s2mpa01_pmic@66 { - compatible = "samsung,s2mpa01-pmic"; - reg = <0x66>; - - regulators { - ldo1_reg: LDO1 { - regulator-name = "VDD_ALIVE"; - regulator-min-microvolt = <1000000>; - regulator-max-microvolt = <1000000>; - }; - - ldo2_reg: LDO2 { - regulator-name = "VDDQ_MMC2"; - regulator-min-microvolt = <2800000>; - regulator-max-microvolt = <2800000>; - regulator-always-on; - }; - - buck1_reg: BUCK1 { - regulator-name = "vdd_mif"; - regulator-min-microvolt = <950000>; - regulator-max-microvolt = <1350000>; - regulator-always-on; - regulator-boot-on; - }; - - buck2_reg: BUCK2 { - regulator-name = "vdd_arm"; - regulator-min-microvolt = <950000>; - regulator-max-microvolt = <1350000>; - regulator-always-on; - regulator-boot-on; - regulator-ramp-delay = <50000>; - }; - }; - }; diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig index c4aa87fd12af..d735ffb36c21 100644 --- a/drivers/regulator/Kconfig +++ b/drivers/regulator/Kconfig @@ -440,13 +440,6 @@ config REGULATOR_RC5T583 through regulator interface. The device supports multiple DCDC/LDO outputs which can be controlled by i2c communication. -config REGULATOR_S2MPA01 - tristate "Samsung S2MPA01 voltage regulator" - depends on MFD_SEC_CORE - help - This driver controls Samsung S2MPA01 voltage output regulator - via I2C bus. S2MPA01 has 10 Bucks and 26 LDO outputs. - config REGULATOR_S2MPS11 tristate "Samsung S2MPA01/S2MPS11/S2MPS14 voltage regulator" depends on MFD_SEC_CORE diff --git a/drivers/regulator/Makefile b/drivers/regulator/Makefile index c14696b290c0..f479b91e7a32 100644 --- a/drivers/regulator/Makefile +++ b/drivers/regulator/Makefile @@ -60,7 +60,6 @@ obj-$(CONFIG_REGULATOR_PBIAS) += pbias-regulator.o obj-$(CONFIG_REGULATOR_PCAP) += pcap-regulator.o obj-$(CONFIG_REGULATOR_PCF50633) += pcf50633-regulator.o obj-$(CONFIG_REGULATOR_RC5T583) += rc5t583-regulator.o -obj-$(CONFIG_REGULATOR_S2MPA01) += s2mpa01.o obj-$(CONFIG_REGULATOR_S2MPS11) += s2mps11.o obj-$(CONFIG_REGULATOR_S5M8767) += s5m8767.o obj-$(CONFIG_REGULATOR_ST_PWM) += st-pwm.o diff --git a/drivers/regulator/s2mpa01.c b/drivers/regulator/s2mpa01.c deleted file mode 100644 index ee83b4876420..000000000000 --- a/drivers/regulator/s2mpa01.c +++ /dev/null @@ -1,482 +0,0 @@ -/* - * Copyright (c) 2013 Samsung Electronics Co., Ltd - * http://www.samsung.com - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define S2MPA01_REGULATOR_CNT ARRAY_SIZE(regulators) - -struct s2mpa01_info { - int ramp_delay24; - int ramp_delay3; - int ramp_delay5; - int ramp_delay16; - int ramp_delay7; - int ramp_delay8910; -}; - -static int get_ramp_delay(int ramp_delay) -{ - unsigned char cnt = 0; - - ramp_delay /= 6250; - - while (true) { - ramp_delay = ramp_delay >> 1; - if (ramp_delay == 0) - break; - cnt++; - } - - if (cnt > 3) - cnt = 3; - - return cnt; -} - -static int s2mpa01_regulator_set_voltage_time_sel(struct regulator_dev *rdev, - unsigned int old_selector, - unsigned int new_selector) -{ - struct s2mpa01_info *s2mpa01 = rdev_get_drvdata(rdev); - unsigned int ramp_delay = 0; - int old_volt, new_volt; - - switch (rdev_get_id(rdev)) { - case S2MPA01_BUCK2: - case S2MPA01_BUCK4: - ramp_delay = s2mpa01->ramp_delay24; - break; - case S2MPA01_BUCK3: - ramp_delay = s2mpa01->ramp_delay3; - break; - case S2MPA01_BUCK5: - ramp_delay = s2mpa01->ramp_delay5; - break; - case S2MPA01_BUCK1: - case S2MPA01_BUCK6: - ramp_delay = s2mpa01->ramp_delay16; - break; - case S2MPA01_BUCK7: - ramp_delay = s2mpa01->ramp_delay7; - break; - case S2MPA01_BUCK8: - case S2MPA01_BUCK9: - case S2MPA01_BUCK10: - ramp_delay = s2mpa01->ramp_delay8910; - break; - } - - if (ramp_delay == 0) - ramp_delay = rdev->desc->ramp_delay; - - old_volt = rdev->desc->min_uV + (rdev->desc->uV_step * old_selector); - new_volt = rdev->desc->min_uV + (rdev->desc->uV_step * new_selector); - - return DIV_ROUND_UP(abs(new_volt - old_volt), ramp_delay); -} - -static int s2mpa01_set_ramp_delay(struct regulator_dev *rdev, int ramp_delay) -{ - struct s2mpa01_info *s2mpa01 = rdev_get_drvdata(rdev); - unsigned int ramp_val, ramp_shift, ramp_reg = S2MPA01_REG_RAMP2; - unsigned int ramp_enable = 1, enable_shift = 0; - int ret; - - switch (rdev_get_id(rdev)) { - case S2MPA01_BUCK1: - enable_shift = S2MPA01_BUCK1_RAMP_EN_SHIFT; - if (!ramp_delay) { - ramp_enable = 0; - break; - } - - if (ramp_delay > s2mpa01->ramp_delay16) - s2mpa01->ramp_delay16 = ramp_delay; - else - ramp_delay = s2mpa01->ramp_delay16; - - ramp_shift = S2MPA01_BUCK16_RAMP_SHIFT; - break; - case S2MPA01_BUCK2: - enable_shift = S2MPA01_BUCK2_RAMP_EN_SHIFT; - if (!ramp_delay) { - ramp_enable = 0; - break; - } - - if (ramp_delay > s2mpa01->ramp_delay24) - s2mpa01->ramp_delay24 = ramp_delay; - else - ramp_delay = s2mpa01->ramp_delay24; - - ramp_shift = S2MPA01_BUCK24_RAMP_SHIFT; - ramp_reg = S2MPA01_REG_RAMP1; - break; - case S2MPA01_BUCK3: - enable_shift = S2MPA01_BUCK3_RAMP_EN_SHIFT; - if (!ramp_delay) { - ramp_enable = 0; - break; - } - - s2mpa01->ramp_delay3 = ramp_delay; - ramp_shift = S2MPA01_BUCK3_RAMP_SHIFT; - ramp_reg = S2MPA01_REG_RAMP1; - break; - case S2MPA01_BUCK4: - enable_shift = S2MPA01_BUCK4_RAMP_EN_SHIFT; - if (!ramp_delay) { - ramp_enable = 0; - break; - } - - if (ramp_delay > s2mpa01->ramp_delay24) - s2mpa01->ramp_delay24 = ramp_delay; - else - ramp_delay = s2mpa01->ramp_delay24; - - ramp_shift = S2MPA01_BUCK24_RAMP_SHIFT; - ramp_reg = S2MPA01_REG_RAMP1; - break; - case S2MPA01_BUCK5: - s2mpa01->ramp_delay5 = ramp_delay; - ramp_shift = S2MPA01_BUCK5_RAMP_SHIFT; - break; - case S2MPA01_BUCK6: - if (ramp_delay > s2mpa01->ramp_delay16) - s2mpa01->ramp_delay16 = ramp_delay; - else - ramp_delay = s2mpa01->ramp_delay16; - - ramp_shift = S2MPA01_BUCK16_RAMP_SHIFT; - break; - case S2MPA01_BUCK7: - s2mpa01->ramp_delay7 = ramp_delay; - ramp_shift = S2MPA01_BUCK7_RAMP_SHIFT; - break; - case S2MPA01_BUCK8: - case S2MPA01_BUCK9: - case S2MPA01_BUCK10: - if (ramp_delay > s2mpa01->ramp_delay8910) - s2mpa01->ramp_delay8910 = ramp_delay; - else - ramp_delay = s2mpa01->ramp_delay8910; - - ramp_shift = S2MPA01_BUCK8910_RAMP_SHIFT; - break; - default: - return 0; - } - - if (!ramp_enable) - goto ramp_disable; - - /* Ramp delay can be enabled/disabled only for buck[1234] */ - if (rdev_get_id(rdev) >= S2MPA01_BUCK1 && - rdev_get_id(rdev) <= S2MPA01_BUCK4) { - ret = regmap_update_bits(rdev->regmap, S2MPA01_REG_RAMP1, - 1 << enable_shift, 1 << enable_shift); - if (ret) { - dev_err(&rdev->dev, "failed to enable ramp rate\n"); - return ret; - } - } - - ramp_val = get_ramp_delay(ramp_delay); - - return regmap_update_bits(rdev->regmap, ramp_reg, 0x3 << ramp_shift, - ramp_val << ramp_shift); - -ramp_disable: - return regmap_update_bits(rdev->regmap, S2MPA01_REG_RAMP1, - 1 << enable_shift, 0); -} - -static struct regulator_ops s2mpa01_ldo_ops = { - .list_voltage = regulator_list_voltage_linear, - .map_voltage = regulator_map_voltage_linear, - .is_enabled = regulator_is_enabled_regmap, - .enable = regulator_enable_regmap, - .disable = regulator_disable_regmap, - .get_voltage_sel = regulator_get_voltage_sel_regmap, - .set_voltage_sel = regulator_set_voltage_sel_regmap, - .set_voltage_time_sel = regulator_set_voltage_time_sel, -}; - -static struct regulator_ops s2mpa01_buck_ops = { - .list_voltage = regulator_list_voltage_linear, - .map_voltage = regulator_map_voltage_linear, - .is_enabled = regulator_is_enabled_regmap, - .enable = regulator_enable_regmap, - .disable = regulator_disable_regmap, - .get_voltage_sel = regulator_get_voltage_sel_regmap, - .set_voltage_sel = regulator_set_voltage_sel_regmap, - .set_voltage_time_sel = s2mpa01_regulator_set_voltage_time_sel, - .set_ramp_delay = s2mpa01_set_ramp_delay, -}; - -#define regulator_desc_ldo1(num) { \ - .name = "LDO"#num, \ - .id = S2MPA01_LDO##num, \ - .ops = &s2mpa01_ldo_ops, \ - .type = REGULATOR_VOLTAGE, \ - .owner = THIS_MODULE, \ - .min_uV = S2MPA01_LDO_MIN, \ - .uV_step = S2MPA01_LDO_STEP1, \ - .n_voltages = S2MPA01_LDO_N_VOLTAGES, \ - .vsel_reg = S2MPA01_REG_L1CTRL + num - 1, \ - .vsel_mask = S2MPA01_LDO_VSEL_MASK, \ - .enable_reg = S2MPA01_REG_L1CTRL + num - 1, \ - .enable_mask = S2MPA01_ENABLE_MASK \ -} -#define regulator_desc_ldo2(num) { \ - .name = "LDO"#num, \ - .id = S2MPA01_LDO##num, \ - .ops = &s2mpa01_ldo_ops, \ - .type = REGULATOR_VOLTAGE, \ - .owner = THIS_MODULE, \ - .min_uV = S2MPA01_LDO_MIN, \ - .uV_step = S2MPA01_LDO_STEP2, \ - .n_voltages = S2MPA01_LDO_N_VOLTAGES, \ - .vsel_reg = S2MPA01_REG_L1CTRL + num - 1, \ - .vsel_mask = S2MPA01_LDO_VSEL_MASK, \ - .enable_reg = S2MPA01_REG_L1CTRL + num - 1, \ - .enable_mask = S2MPA01_ENABLE_MASK \ -} - -#define regulator_desc_buck1_4(num) { \ - .name = "BUCK"#num, \ - .id = S2MPA01_BUCK##num, \ - .ops = &s2mpa01_buck_ops, \ - .type = REGULATOR_VOLTAGE, \ - .owner = THIS_MODULE, \ - .min_uV = S2MPA01_BUCK_MIN1, \ - .uV_step = S2MPA01_BUCK_STEP1, \ - .n_voltages = S2MPA01_BUCK_N_VOLTAGES, \ - .ramp_delay = S2MPA01_RAMP_DELAY, \ - .vsel_reg = S2MPA01_REG_B1CTRL2 + (num - 1) * 2, \ - .vsel_mask = S2MPA01_BUCK_VSEL_MASK, \ - .enable_reg = S2MPA01_REG_B1CTRL1 + (num - 1) * 2, \ - .enable_mask = S2MPA01_ENABLE_MASK \ -} - -#define regulator_desc_buck5 { \ - .name = "BUCK5", \ - .id = S2MPA01_BUCK5, \ - .ops = &s2mpa01_buck_ops, \ - .type = REGULATOR_VOLTAGE, \ - .owner = THIS_MODULE, \ - .min_uV = S2MPA01_BUCK_MIN2, \ - .uV_step = S2MPA01_BUCK_STEP1, \ - .n_voltages = S2MPA01_BUCK_N_VOLTAGES, \ - .ramp_delay = S2MPA01_RAMP_DELAY, \ - .vsel_reg = S2MPA01_REG_B5CTRL2, \ - .vsel_mask = S2MPA01_BUCK_VSEL_MASK, \ - .enable_reg = S2MPA01_REG_B5CTRL1, \ - .enable_mask = S2MPA01_ENABLE_MASK \ -} - -#define regulator_desc_buck6_7(num) { \ - .name = "BUCK"#num, \ - .id = S2MPA01_BUCK##num, \ - .ops = &s2mpa01_buck_ops, \ - .type = REGULATOR_VOLTAGE, \ - .owner = THIS_MODULE, \ - .min_uV = S2MPA01_BUCK_MIN1, \ - .uV_step = S2MPA01_BUCK_STEP1, \ - .n_voltages = S2MPA01_BUCK_N_VOLTAGES, \ - .ramp_delay = S2MPA01_RAMP_DELAY, \ - .vsel_reg = S2MPA01_REG_B6CTRL2 + (num - 6) * 2, \ - .vsel_mask = S2MPA01_BUCK_VSEL_MASK, \ - .enable_reg = S2MPA01_REG_B6CTRL1 + (num - 6) * 2, \ - .enable_mask = S2MPA01_ENABLE_MASK \ -} - -#define regulator_desc_buck8 { \ - .name = "BUCK8", \ - .id = S2MPA01_BUCK8, \ - .ops = &s2mpa01_buck_ops, \ - .type = REGULATOR_VOLTAGE, \ - .owner = THIS_MODULE, \ - .min_uV = S2MPA01_BUCK_MIN2, \ - .uV_step = S2MPA01_BUCK_STEP2, \ - .n_voltages = S2MPA01_BUCK_N_VOLTAGES, \ - .ramp_delay = S2MPA01_RAMP_DELAY, \ - .vsel_reg = S2MPA01_REG_B8CTRL2, \ - .vsel_mask = S2MPA01_BUCK_VSEL_MASK, \ - .enable_reg = S2MPA01_REG_B8CTRL1, \ - .enable_mask = S2MPA01_ENABLE_MASK \ -} - -#define regulator_desc_buck9 { \ - .name = "BUCK9", \ - .id = S2MPA01_BUCK9, \ - .ops = &s2mpa01_buck_ops, \ - .type = REGULATOR_VOLTAGE, \ - .owner = THIS_MODULE, \ - .min_uV = S2MPA01_BUCK_MIN4, \ - .uV_step = S2MPA01_BUCK_STEP2, \ - .n_voltages = S2MPA01_BUCK_N_VOLTAGES, \ - .ramp_delay = S2MPA01_RAMP_DELAY, \ - .vsel_reg = S2MPA01_REG_B9CTRL2, \ - .vsel_mask = S2MPA01_BUCK_VSEL_MASK, \ - .enable_reg = S2MPA01_REG_B9CTRL1, \ - .enable_mask = S2MPA01_ENABLE_MASK \ -} - -#define regulator_desc_buck10 { \ - .name = "BUCK10", \ - .id = S2MPA01_BUCK10, \ - .ops = &s2mpa01_buck_ops, \ - .type = REGULATOR_VOLTAGE, \ - .owner = THIS_MODULE, \ - .min_uV = S2MPA01_BUCK_MIN3, \ - .uV_step = S2MPA01_BUCK_STEP2, \ - .n_voltages = S2MPA01_BUCK_N_VOLTAGES, \ - .ramp_delay = S2MPA01_RAMP_DELAY, \ - .vsel_reg = S2MPA01_REG_B10CTRL2, \ - .vsel_mask = S2MPA01_BUCK_VSEL_MASK, \ - .enable_reg = S2MPA01_REG_B10CTRL1, \ - .enable_mask = S2MPA01_ENABLE_MASK \ -} - -static struct regulator_desc regulators[] = { - regulator_desc_ldo2(1), - regulator_desc_ldo1(2), - regulator_desc_ldo1(3), - regulator_desc_ldo1(4), - regulator_desc_ldo1(5), - regulator_desc_ldo2(6), - regulator_desc_ldo1(7), - regulator_desc_ldo1(8), - regulator_desc_ldo1(9), - regulator_desc_ldo1(10), - regulator_desc_ldo2(11), - regulator_desc_ldo1(12), - regulator_desc_ldo1(13), - regulator_desc_ldo1(14), - regulator_desc_ldo1(15), - regulator_desc_ldo1(16), - regulator_desc_ldo1(17), - regulator_desc_ldo1(18), - regulator_desc_ldo1(19), - regulator_desc_ldo1(20), - regulator_desc_ldo1(21), - regulator_desc_ldo2(22), - regulator_desc_ldo2(23), - regulator_desc_ldo1(24), - regulator_desc_ldo1(25), - regulator_desc_ldo1(26), - regulator_desc_buck1_4(1), - regulator_desc_buck1_4(2), - regulator_desc_buck1_4(3), - regulator_desc_buck1_4(4), - regulator_desc_buck5, - regulator_desc_buck6_7(6), - regulator_desc_buck6_7(7), - regulator_desc_buck8, - regulator_desc_buck9, - regulator_desc_buck10, -}; - -static int s2mpa01_pmic_probe(struct platform_device *pdev) -{ - struct sec_pmic_dev *iodev = dev_get_drvdata(pdev->dev.parent); - struct sec_platform_data *pdata = dev_get_platdata(iodev->dev); - struct of_regulator_match rdata[S2MPA01_REGULATOR_MAX]; - struct device_node *reg_np = NULL; - struct regulator_config config = { }; - struct s2mpa01_info *s2mpa01; - int i; - - s2mpa01 = devm_kzalloc(&pdev->dev, sizeof(*s2mpa01), GFP_KERNEL); - if (!s2mpa01) - return -ENOMEM; - - for (i = 0; i < S2MPA01_REGULATOR_CNT; i++) - rdata[i].name = regulators[i].name; - - if (iodev->dev->of_node) { - reg_np = of_get_child_by_name(iodev->dev->of_node, - "regulators"); - if (!reg_np) { - dev_err(&pdev->dev, - "could not find regulators sub-node\n"); - return -EINVAL; - } - - of_regulator_match(&pdev->dev, reg_np, rdata, - S2MPA01_REGULATOR_MAX); - of_node_put(reg_np); - } - - platform_set_drvdata(pdev, s2mpa01); - - config.dev = &pdev->dev; - config.regmap = iodev->regmap_pmic; - config.driver_data = s2mpa01; - - for (i = 0; i < S2MPA01_REGULATOR_MAX; i++) { - struct regulator_dev *rdev; - if (pdata) - config.init_data = pdata->regulators[i].initdata; - else - config.init_data = rdata[i].init_data; - - if (reg_np) - config.of_node = rdata[i].of_node; - - rdev = devm_regulator_register(&pdev->dev, - ®ulators[i], &config); - if (IS_ERR(rdev)) { - dev_err(&pdev->dev, "regulator init failed for %d\n", - i); - return PTR_ERR(rdev); - } - } - - return 0; -} - -static const struct platform_device_id s2mpa01_pmic_id[] = { - { "s2mpa01-pmic", 0}, - { }, -}; -MODULE_DEVICE_TABLE(platform, s2mpa01_pmic_id); - -static struct platform_driver s2mpa01_pmic_driver = { - .driver = { - .name = "s2mpa01-pmic", - .owner = THIS_MODULE, - }, - .probe = s2mpa01_pmic_probe, - .id_table = s2mpa01_pmic_id, -}; - -module_platform_driver(s2mpa01_pmic_driver); - -/* Module information */ -MODULE_AUTHOR("Sangbeom Kim "); -MODULE_AUTHOR("Sachin Kamat "); -MODULE_DESCRIPTION("SAMSUNG S2MPA01 Regulator Driver"); -MODULE_LICENSE("GPL");