This patchset adds Samsung S2MPS13 PMIC device driver in existing S2MPS11 PMIC
driver. The S2MPS13 has just the differnet number of regulator from existing
S2MPS14 PMIC and RTC/CLOCK IP of S2MPS13 is the same with S2MPS14. S2MPS13
PMIC has LDO[1-40] and BUCK[1-10] regulators.
Changes from v1:
- Fix minor issue about coding style and wrong description
- Fix wrong from of third patch(3/5) related to clk driver
- Add acked tag by Mark Brown, Sangbeom Kim, Lee Jones
- Add reviewed tag by Krzysztof Kozlowski
Chanwoo Choi (5):
mfd: sec-core: Add support for S2MPS13 device
regulator: s2mps11: Add support S2MPS13 regulator device
clk: s2mps11: Add the support for S2MPS13 PMIC clock
rtc: s5m: Add the support for S2MPS13 RTC
mfd: s2mps11: Add binding documentation for Samsung S2MPS13 PMIC
Documentation/devicetree/bindings/mfd/s2mps11.txt | 22 +--
drivers/clk/clk-s2mps11.c | 24 +++
drivers/mfd/sec-core.c | 29 ++++
drivers/mfd/sec-irq.c | 23 ++-
drivers/regulator/Kconfig | 10 +-
drivers/regulator/s2mps11.c | 102 +++++++++++-
drivers/rtc/rtc-s5m.c | 15 +-
include/linux/mfd/samsung/core.h | 2 +
include/linux/mfd/samsung/s2mps13.h | 186 ++++++++++++++++++++++
9 files changed, 388 insertions(+), 25 deletions(-)
create mode 100644 include/linux/mfd/samsung/s2mps13.h
--
1.8.5.5
This patch adds the support for S2MPS13 PMIC clock which is same with existing
S2MPS14 RTC IP. But, S2MPS13 uses all of clocks (32khz_{ap|bt|cp}).
Cc: Mike Turquette <[email protected]>
Signed-off-by: Chanwoo Choi <[email protected]>
Reviewed-by: Krzysztof Kozlowski <[email protected]>
---
drivers/clk/clk-s2mps11.c | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/drivers/clk/clk-s2mps11.c b/drivers/clk/clk-s2mps11.c
index b7797fb..7bb13af 100644
--- a/drivers/clk/clk-s2mps11.c
+++ b/drivers/clk/clk-s2mps11.c
@@ -23,6 +23,7 @@
#include <linux/clk-provider.h>
#include <linux/platform_device.h>
#include <linux/mfd/samsung/s2mps11.h>
+#include <linux/mfd/samsung/s2mps13.h>
#include <linux/mfd/samsung/s2mps14.h>
#include <linux/mfd/samsung/s5m8767.h>
#include <linux/mfd/samsung/core.h>
@@ -120,6 +121,24 @@ static struct clk_init_data s2mps11_clks_init[S2MPS11_CLKS_NUM] = {
},
};
+static struct clk_init_data s2mps13_clks_init[S2MPS11_CLKS_NUM] = {
+ [S2MPS11_CLK_AP] = {
+ .name = "s2mps13_ap",
+ .ops = &s2mps11_clk_ops,
+ .flags = CLK_IS_ROOT,
+ },
+ [S2MPS11_CLK_CP] = {
+ .name = "s2mps13_cp",
+ .ops = &s2mps11_clk_ops,
+ .flags = CLK_IS_ROOT,
+ },
+ [S2MPS11_CLK_BT] = {
+ .name = "s2mps13_bt",
+ .ops = &s2mps11_clk_ops,
+ .flags = CLK_IS_ROOT,
+ },
+};
+
static struct clk_init_data s2mps14_clks_init[S2MPS11_CLKS_NUM] = {
[S2MPS11_CLK_AP] = {
.name = "s2mps14_ap",
@@ -184,6 +203,10 @@ static int s2mps11_clk_probe(struct platform_device *pdev)
s2mps11_reg = S2MPS11_REG_RTC_CTRL;
clks_init = s2mps11_clks_init;
break;
+ case S2MPS13X:
+ s2mps11_reg = S2MPS13_REG_RTCCTRL;
+ clks_init = s2mps13_clks_init;
+ break;
case S2MPS14X:
s2mps11_reg = S2MPS14_REG_RTCCTRL;
clks_init = s2mps14_clks_init;
@@ -279,6 +302,7 @@ static int s2mps11_clk_remove(struct platform_device *pdev)
static const struct platform_device_id s2mps11_clk_id[] = {
{ "s2mps11-clk", S2MPS11X},
+ { "s2mps13-clk", S2MPS13X},
{ "s2mps14-clk", S2MPS14X},
{ "s5m8767-clk", S5M8767X},
{ },
--
1.8.5.5
This patch adds the support for Samsung S2MPS13 PMIC device to the sec-core MFD
driver. The S2MPS13 is very similar with existing S2MPS14 and includes PMIC/
RTC/CLOCK devices.
Cc: Lee Jones <[email protected]>
Signed-off-by: Chanwoo Choi <[email protected]>
Acked-by: Sangbeom Kim <[email protected]>
Acked-by: Lee Jones <[email protected]>
---
drivers/mfd/sec-core.c | 16 ++++++++++++++++
drivers/mfd/sec-irq.c | 23 +++++++++++++++++------
include/linux/mfd/samsung/core.h | 1 +
3 files changed, 34 insertions(+), 6 deletions(-)
diff --git a/drivers/mfd/sec-core.c b/drivers/mfd/sec-core.c
index 5993608..868f03d 100644
--- a/drivers/mfd/sec-core.c
+++ b/drivers/mfd/sec-core.c
@@ -73,6 +73,15 @@ static const struct mfd_cell s2mps11_devs[] = {
}
};
+static const struct mfd_cell s2mps13_devs[] = {
+ { .name = "s2mps13-pmic", },
+ { .name = "s2mps13-rtc", },
+ {
+ .name = "s2mps13-clk",
+ .of_compatible = "samsung,s2mps13-clk",
+ },
+};
+
static const struct mfd_cell s2mps14_devs[] = {
{
.name = "s2mps14-pmic",
@@ -107,6 +116,9 @@ static const struct of_device_id sec_dt_match[] = {
.compatible = "samsung,s2mps11-pmic",
.data = (void *)S2MPS11X,
}, {
+ .compatible = "samsung,s2mps13-pmic",
+ .data = (void *)S2MPS13X,
+ }, {
.compatible = "samsung,s2mps14-pmic",
.data = (void *)S2MPS14X,
}, {
@@ -377,6 +389,10 @@ static int sec_pmic_probe(struct i2c_client *i2c,
sec_devs = s2mps11_devs;
num_sec_devs = ARRAY_SIZE(s2mps11_devs);
break;
+ case S2MPS13X:
+ sec_devs = s2mps13_devs;
+ num_sec_devs = ARRAY_SIZE(s2mps13_devs);
+ break;
case S2MPS14X:
sec_devs = s2mps14_devs;
num_sec_devs = ARRAY_SIZE(s2mps14_devs);
diff --git a/drivers/mfd/sec-irq.c b/drivers/mfd/sec-irq.c
index f9a5786..ba86a91 100644
--- a/drivers/mfd/sec-irq.c
+++ b/drivers/mfd/sec-irq.c
@@ -389,14 +389,22 @@ static const struct regmap_irq_chip s2mps11_irq_chip = {
.ack_base = S2MPS11_REG_INT1,
};
+#define S2MPS1X_IRQ_CHIP_COMMON_DATA \
+ .irqs = s2mps14_irqs, \
+ .num_irqs = ARRAY_SIZE(s2mps14_irqs), \
+ .num_regs = 3, \
+ .status_base = S2MPS14_REG_INT1, \
+ .mask_base = S2MPS14_REG_INT1M, \
+ .ack_base = S2MPS14_REG_INT1 \
+
+static const struct regmap_irq_chip s2mps13_irq_chip = {
+ .name = "s2mps13",
+ S2MPS1X_IRQ_CHIP_COMMON_DATA,
+};
+
static const struct regmap_irq_chip s2mps14_irq_chip = {
.name = "s2mps14",
- .irqs = s2mps14_irqs,
- .num_irqs = ARRAY_SIZE(s2mps14_irqs),
- .num_regs = 3,
- .status_base = S2MPS14_REG_INT1,
- .mask_base = S2MPS14_REG_INT1M,
- .ack_base = S2MPS14_REG_INT1,
+ S2MPS1X_IRQ_CHIP_COMMON_DATA,
};
static const struct regmap_irq_chip s2mpu02_irq_chip = {
@@ -452,6 +460,9 @@ int sec_irq_init(struct sec_pmic_dev *sec_pmic)
case S2MPS11X:
sec_irq_chip = &s2mps11_irq_chip;
break;
+ case S2MPS13X:
+ sec_irq_chip = &s2mps13_irq_chip;
+ break;
case S2MPS14X:
sec_irq_chip = &s2mps14_irq_chip;
break;
diff --git a/include/linux/mfd/samsung/core.h b/include/linux/mfd/samsung/core.h
index 1825eda..0c0343e 100644
--- a/include/linux/mfd/samsung/core.h
+++ b/include/linux/mfd/samsung/core.h
@@ -41,6 +41,7 @@ enum sec_device_type {
S5M8767X,
S2MPA01,
S2MPS11X,
+ S2MPS13X,
S2MPS14X,
S2MPU02,
};
--
1.8.5.5
This patch adds only the compatible string for S2MPS13 RTC which is identical
with S2MPS14 RTC driver.
Cc: Alessandro Zummo <[email protected]>
Signed-off-by: Chanwoo Choi <[email protected]>
---
drivers/rtc/rtc-s5m.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/drivers/rtc/rtc-s5m.c b/drivers/rtc/rtc-s5m.c
index 8754c33..e5fdfd3 100644
--- a/drivers/rtc/rtc-s5m.c
+++ b/drivers/rtc/rtc-s5m.c
@@ -191,6 +191,7 @@ static inline int s5m_check_peding_alarm_interrupt(struct s5m_rtc_info *info,
ret = regmap_read(info->regmap, S5M_RTC_STATUS, &val);
val &= S5M_ALARM0_STATUS;
break;
+ case S2MPS13X:
case S2MPS14X:
ret = regmap_read(info->s5m87xx->regmap_pmic, S2MPS14_REG_ST2,
&val);
@@ -254,6 +255,7 @@ static inline int s5m8767_rtc_set_alarm_reg(struct s5m_rtc_info *info)
case S5M8767X:
data &= ~S5M_RTC_TIME_EN_MASK;
break;
+ case S2MPS13X:
case S2MPS14X:
data |= S2MPS_RTC_RUDR_MASK;
break;
@@ -311,7 +313,9 @@ static int s5m_rtc_read_time(struct device *dev, struct rtc_time *tm)
u8 data[info->regs->regs_count];
int ret;
- if (info->device_type == S2MPS14X) {
+ switch (info->device_type) {
+ case S2MPS13X:
+ case S2MPS14X:
ret = regmap_update_bits(info->regmap,
info->regs->rtc_udr_update,
S2MPS_RTC_RUDR_MASK, S2MPS_RTC_RUDR_MASK);
@@ -333,6 +337,7 @@ static int s5m_rtc_read_time(struct device *dev, struct rtc_time *tm)
break;
case S5M8767X:
+ case S2MPS13X:
case S2MPS14X:
s5m8767_data_to_tm(data, tm, info->rtc_24hr_mode);
break;
@@ -359,6 +364,7 @@ static int s5m_rtc_set_time(struct device *dev, struct rtc_time *tm)
s5m8763_tm_to_data(tm, data);
break;
case S5M8767X:
+ case S2MPS13X:
case S2MPS14X:
ret = s5m8767_tm_to_data(tm, data);
break;
@@ -406,6 +412,7 @@ static int s5m_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
break;
case S5M8767X:
+ case S2MPS13X:
case S2MPS14X:
s5m8767_data_to_tm(data, &alrm->time, info->rtc_24hr_mode);
alrm->enabled = 0;
@@ -454,6 +461,7 @@ static int s5m_rtc_stop_alarm(struct s5m_rtc_info *info)
break;
case S5M8767X:
+ case S2MPS13X:
case S2MPS14X:
for (i = 0; i < info->regs->regs_count; i++)
data[i] &= ~ALARM_ENABLE_MASK;
@@ -498,6 +506,7 @@ static int s5m_rtc_start_alarm(struct s5m_rtc_info *info)
break;
case S5M8767X:
+ case S2MPS13X:
case S2MPS14X:
data[RTC_SEC] |= ALARM_ENABLE_MASK;
data[RTC_MIN] |= ALARM_ENABLE_MASK;
@@ -537,6 +546,7 @@ static int s5m_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
break;
case S5M8767X:
+ case S2MPS13X:
case S2MPS14X:
s5m8767_tm_to_data(&alrm->time, data);
break;
@@ -641,6 +651,7 @@ static int s5m8767_rtc_init_reg(struct s5m_rtc_info *info)
ret = regmap_raw_write(info->regmap, S5M_ALARM0_CONF, data, 2);
break;
+ case S2MPS13X:
case S2MPS14X:
data[0] = (0 << BCD_EN_SHIFT) | (1 << MODEL24_SHIFT);
ret = regmap_write(info->regmap, info->regs->ctrl, data[0]);
@@ -678,6 +689,7 @@ static int s5m_rtc_probe(struct platform_device *pdev)
return -ENOMEM;
switch (pdata->device_type) {
+ case S2MPS13X:
case S2MPS14X:
regmap_cfg = &s2mps14_rtc_regmap_config;
info->regs = &s2mps_rtc_regs;
@@ -831,6 +843,7 @@ static SIMPLE_DEV_PM_OPS(s5m_rtc_pm_ops, s5m_rtc_suspend, s5m_rtc_resume);
static const struct platform_device_id s5m_rtc_id[] = {
{ "s5m-rtc", S5M8767X },
+ { "s2mps13-rtc", S2MPS13X },
{ "s2mps14-rtc", S2MPS14X },
};
--
1.8.5.5
This patch adds the binding documentation for Samsung S2MPS13 PMIC
which is similiar with existing S2MPS14 PMIC. S2MPS13 has the different number
of regulators from S2MPS14 and RTC/Clock is the same with the S2MPS14.
Cc: Lee Jones <[email protected]>
Signed-off-by: Chanwoo Choi <[email protected]>
Acked-by: Sangbeom Kim <[email protected]>
Acked-by: Lee Jones <[email protected]>
Reviewed-by: Krzysztof Kozlowski <[email protected]>
---
Documentation/devicetree/bindings/mfd/s2mps11.txt | 22 ++++++++++++----------
1 file changed, 12 insertions(+), 10 deletions(-)
diff --git a/Documentation/devicetree/bindings/mfd/s2mps11.txt b/Documentation/devicetree/bindings/mfd/s2mps11.txt
index 0e4026a..57a0450 100644
--- a/Documentation/devicetree/bindings/mfd/s2mps11.txt
+++ b/Documentation/devicetree/bindings/mfd/s2mps11.txt
@@ -1,5 +1,5 @@
-* Samsung S2MPS11, S2MPS14 and S2MPU02 Voltage and Current Regulator
+* Samsung S2MPS11, S2MPS13, S2MPS14 and S2MPU02 Voltage and Current Regulator
The Samsung S2MPS11 is a multi-function device which includes voltage and
current regulators, RTC, charger controller and other sub-blocks. It is
@@ -7,8 +7,8 @@ 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,s2mps11-pmic" or "samsung,s2mps14-pmic"
- or "samsung,s2mpu02-pmic".
+- compatible: Should be "samsung,s2mps11-pmic" or "samsung,s2mps13-pmic"
+ or "samsung,s2mps14-pmic" or "samsung,s2mpu02-pmic".
- reg: Specifies the I2C slave address of the pmic block. It should be 0x66.
Optional properties:
@@ -17,8 +17,8 @@ Optional properties:
- interrupts: Interrupt specifiers for interrupt sources.
Optional nodes:
-- clocks: s2mps11 and s5m8767 provide three(AP/CP/BT) buffered 32.768 KHz
- outputs, so to register these as clocks with common clock framework
+- clocks: s2mps11, s2mps13 and s5m8767 provide three(AP/CP/BT) buffered 32.768
+ KHz outputs, so to register these as clocks with common clock framework
instantiate a sub-node named "clocks". It uses the common clock binding
documented in :
[Documentation/devicetree/bindings/clock/clock-bindings.txt]
@@ -30,12 +30,12 @@ Optional nodes:
the clock which they consume.
Clock ID Devices
----------------------------------------------------------
- 32KhzAP 0 S2MPS11, S2MPS14, S5M8767
- 32KhzCP 1 S2MPS11, S5M8767
- 32KhzBT 2 S2MPS11, S2MPS14, S5M8767
+ 32KhzAP 0 S2MPS11, S2MPS13, S2MPS14, S5M8767
+ 32KhzCP 1 S2MPS11, S2MPS13, S5M8767
+ 32KhzBT 2 S2MPS11, S2MPS13, S2MPS14, S5M8767
- - compatible: Should be one of: "samsung,s2mps11-clk", "samsung,s2mps14-clk",
- "samsung,s5m8767-clk"
+ - compatible: Should be one of: "samsung,s2mps11-clk", "samsung,s2mps13-clk",
+ "samsung,s2mps14-clk", "samsung,s5m8767-clk"
- regulators: The regulators of s2mps11 that have to be instantiated should be
included in a sub-node named 'regulators'. Regulator nodes included in this
@@ -81,12 +81,14 @@ as per the datasheet of s2mps11.
- LDOn
- valid values for n are:
- S2MPS11: 1 to 38
+ - S2MPS13: 1 to 40
- S2MPS14: 1 to 25
- S2MPU02: 1 to 28
- Example: LDO1, LDO2, LDO28
- BUCKn
- valid values for n are:
- S2MPS11: 1 to 10
+ - S2MPS13: 1 to 10
- S2MPS14: 1 to 5
- S2MPU02: 1 to 7
- Example: BUCK1, BUCK2, BUCK9
--
1.8.5.5
This patch adds S2MPS13 regulator device to existing S2MPS11 device driver.
The S2MPS13 has just different number of regulators from S2MPS14.
The S2MPS13 regulator device includes LDO[1-40] and BUCK[1-10].
Cc: Mark Brown <[email protected]>
Signed-off-by: Chanwoo Choi <[email protected]>
Acked-by: Sangbeom Kim <[email protected]>
Acked-by: Mark Brown <[email protected]>
Acked-by: Lee Jones <[email protected]>
Reviewed-by: Krzysztof Kozlowski <[email protected]>
---
drivers/mfd/sec-core.c | 13 +++
drivers/regulator/Kconfig | 10 +-
drivers/regulator/s2mps11.c | 102 +++++++++++++++++++-
include/linux/mfd/samsung/core.h | 1 +
include/linux/mfd/samsung/s2mps13.h | 186 ++++++++++++++++++++++++++++++++++++
5 files changed, 304 insertions(+), 8 deletions(-)
create mode 100644 include/linux/mfd/samsung/s2mps13.h
diff --git a/drivers/mfd/sec-core.c b/drivers/mfd/sec-core.c
index 868f03d..0a7bc43 100644
--- a/drivers/mfd/sec-core.c
+++ b/drivers/mfd/sec-core.c
@@ -27,6 +27,7 @@
#include <linux/mfd/samsung/irq.h>
#include <linux/mfd/samsung/s2mpa01.h>
#include <linux/mfd/samsung/s2mps11.h>
+#include <linux/mfd/samsung/s2mps13.h>
#include <linux/mfd/samsung/s2mps14.h>
#include <linux/mfd/samsung/s2mpu02.h>
#include <linux/mfd/samsung/s5m8763.h>
@@ -205,6 +206,15 @@ static const struct regmap_config s2mps11_regmap_config = {
.cache_type = REGCACHE_FLAT,
};
+static const struct regmap_config s2mps13_regmap_config = {
+ .reg_bits = 8,
+ .val_bits = 8,
+
+ .max_register = S2MPS13_REG_LDODSCH5,
+ .volatile_reg = s2mps11_volatile,
+ .cache_type = REGCACHE_FLAT,
+};
+
static const struct regmap_config s2mps14_regmap_config = {
.reg_bits = 8,
.val_bits = 8,
@@ -336,6 +346,9 @@ static int sec_pmic_probe(struct i2c_client *i2c,
case S2MPS11X:
regmap = &s2mps11_regmap_config;
break;
+ case S2MPS13X:
+ regmap = &s2mps13_regmap_config;
+ break;
case S2MPS14X:
regmap = &s2mps14_regmap_config;
break;
diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig
index 55d7b7b..5e06134 100644
--- a/drivers/regulator/Kconfig
+++ b/drivers/regulator/Kconfig
@@ -529,13 +529,13 @@ config REGULATOR_S2MPA01
via I2C bus. S2MPA01 has 10 Bucks and 26 LDO outputs.
config REGULATOR_S2MPS11
- tristate "Samsung S2MPS11/S2MPS14/S2MPU02 voltage regulator"
+ tristate "Samsung S2MPS11/S2MPS13/S2MPS14/S2MPU02 voltage regulator"
depends on MFD_SEC_CORE
help
- This driver supports a Samsung S2MPS11/S2MPS14/S2MPU02 voltage output
- regulator via I2C bus. The chip is comprised of high efficient Buck
- converters including Dual-Phase Buck converter, Buck-Boost converter,
- various LDOs.
+ This driver supports a Samsung S2MPS11/S2MPS13/S2MPS14/S2MPU02 voltage
+ output regulator via I2C bus. The chip is comprised of high efficient
+ Buck converters including Dual-Phase Buck converter, Buck-Boost
+ converter, various LDOs.
config REGULATOR_S5M8767
tristate "Samsung S5M8767A voltage regulator"
diff --git a/drivers/regulator/s2mps11.c b/drivers/regulator/s2mps11.c
index adab82d..738dc77 100644
--- a/drivers/regulator/s2mps11.c
+++ b/drivers/regulator/s2mps11.c
@@ -30,6 +30,7 @@
#include <linux/of_gpio.h>
#include <linux/mfd/samsung/core.h>
#include <linux/mfd/samsung/s2mps11.h>
+#include <linux/mfd/samsung/s2mps13.h>
#include <linux/mfd/samsung/s2mps14.h>
#include <linux/mfd/samsung/s2mpu02.h>
@@ -45,10 +46,10 @@ struct s2mps11_info {
enum sec_device_type dev_type;
/*
- * One bit for each S2MPS14/S2MPU02 regulator whether the suspend mode
- * was enabled.
+ * One bit for each S2MPS13/S2MPS14/S2MPU02 regulator whether
+ * the suspend mode was enabled.
*/
- unsigned long long s2mps14_suspend_state:35;
+ unsigned long long s2mps14_suspend_state:50;
/* Array of size rdev_num with GPIO-s for external sleep control */
int *ext_control_gpio;
@@ -369,12 +370,101 @@ static const struct regulator_desc s2mps11_regulators[] = {
regulator_desc_s2mps11_buck6_10(10, MIN_750_MV, STEP_12_5_MV),
};
+static struct regulator_ops s2mps14_reg_ops;
+
+#define regulator_desc_s2mps13_ldo(num, min, step, min_sel) { \
+ .name = "LDO"#num, \
+ .id = S2MPS13_LDO##num, \
+ .ops = &s2mps14_reg_ops, \
+ .type = REGULATOR_VOLTAGE, \
+ .owner = THIS_MODULE, \
+ .min_uV = min, \
+ .uV_step = step, \
+ .linear_min_sel = min_sel, \
+ .n_voltages = S2MPS14_LDO_N_VOLTAGES, \
+ .vsel_reg = S2MPS13_REG_L1CTRL + num - 1, \
+ .vsel_mask = S2MPS14_LDO_VSEL_MASK, \
+ .enable_reg = S2MPS13_REG_L1CTRL + num - 1, \
+ .enable_mask = S2MPS14_ENABLE_MASK \
+}
+
+#define regulator_desc_s2mps13_buck(num, min, step, min_sel) { \
+ .name = "BUCK"#num, \
+ .id = S2MPS13_BUCK##num, \
+ .ops = &s2mps14_reg_ops, \
+ .type = REGULATOR_VOLTAGE, \
+ .owner = THIS_MODULE, \
+ .min_uV = min, \
+ .uV_step = step, \
+ .linear_min_sel = min_sel, \
+ .n_voltages = S2MPS14_BUCK_N_VOLTAGES, \
+ .ramp_delay = S2MPS13_BUCK_RAMP_DELAY, \
+ .vsel_reg = S2MPS13_REG_B1OUT + (num - 1) * 2, \
+ .vsel_mask = S2MPS14_BUCK_VSEL_MASK, \
+ .enable_reg = S2MPS13_REG_B1CTRL + (num - 1) * 2, \
+ .enable_mask = S2MPS14_ENABLE_MASK \
+}
+
+static const struct regulator_desc s2mps13_regulators[] = {
+ regulator_desc_s2mps13_ldo(1, MIN_800_MV, STEP_12_5_MV, 0x00),
+ regulator_desc_s2mps13_ldo(2, MIN_1400_MV, STEP_50_MV, 0x0C),
+ regulator_desc_s2mps13_ldo(3, MIN_1000_MV, STEP_25_MV, 0x08),
+ regulator_desc_s2mps13_ldo(4, MIN_800_MV, STEP_12_5_MV, 0x00),
+ regulator_desc_s2mps13_ldo(5, MIN_800_MV, STEP_12_5_MV, 0x00),
+ regulator_desc_s2mps13_ldo(6, MIN_800_MV, STEP_12_5_MV, 0x00),
+ regulator_desc_s2mps13_ldo(7, MIN_1000_MV, STEP_25_MV, 0x08),
+ regulator_desc_s2mps13_ldo(8, MIN_1000_MV, STEP_25_MV, 0x08),
+ regulator_desc_s2mps13_ldo(9, MIN_1000_MV, STEP_25_MV, 0x08),
+ regulator_desc_s2mps13_ldo(10, MIN_1400_MV, STEP_50_MV, 0x0C),
+ regulator_desc_s2mps13_ldo(11, MIN_800_MV, STEP_25_MV, 0x10),
+ regulator_desc_s2mps13_ldo(12, MIN_800_MV, STEP_25_MV, 0x10),
+ regulator_desc_s2mps13_ldo(13, MIN_800_MV, STEP_25_MV, 0x10),
+ regulator_desc_s2mps13_ldo(14, MIN_800_MV, STEP_12_5_MV, 0x00),
+ regulator_desc_s2mps13_ldo(15, MIN_800_MV, STEP_12_5_MV, 0x00),
+ regulator_desc_s2mps13_ldo(16, MIN_1400_MV, STEP_50_MV, 0x0C),
+ regulator_desc_s2mps13_ldo(17, MIN_1400_MV, STEP_50_MV, 0x0C),
+ regulator_desc_s2mps13_ldo(18, MIN_1000_MV, STEP_25_MV, 0x08),
+ regulator_desc_s2mps13_ldo(19, MIN_1000_MV, STEP_25_MV, 0x08),
+ regulator_desc_s2mps13_ldo(20, MIN_1400_MV, STEP_50_MV, 0x0C),
+ regulator_desc_s2mps13_ldo(21, MIN_1000_MV, STEP_25_MV, 0x08),
+ regulator_desc_s2mps13_ldo(22, MIN_1000_MV, STEP_25_MV, 0x08),
+ regulator_desc_s2mps13_ldo(23, MIN_800_MV, STEP_12_5_MV, 0x00),
+ regulator_desc_s2mps13_ldo(24, MIN_800_MV, STEP_12_5_MV, 0x00),
+ regulator_desc_s2mps13_ldo(25, MIN_1400_MV, STEP_50_MV, 0x0C),
+ regulator_desc_s2mps13_ldo(26, MIN_1400_MV, STEP_50_MV, 0x0C),
+ regulator_desc_s2mps13_ldo(27, MIN_1400_MV, STEP_50_MV, 0x0C),
+ regulator_desc_s2mps13_ldo(28, MIN_1000_MV, STEP_25_MV, 0x08),
+ regulator_desc_s2mps13_ldo(29, MIN_1400_MV, STEP_50_MV, 0x0C),
+ regulator_desc_s2mps13_ldo(30, MIN_1400_MV, STEP_50_MV, 0x0C),
+ regulator_desc_s2mps13_ldo(31, MIN_1000_MV, STEP_25_MV, 0x08),
+ regulator_desc_s2mps13_ldo(32, MIN_1000_MV, STEP_25_MV, 0x08),
+ regulator_desc_s2mps13_ldo(33, MIN_1400_MV, STEP_50_MV, 0x0C),
+ regulator_desc_s2mps13_ldo(34, MIN_1000_MV, STEP_25_MV, 0x08),
+ regulator_desc_s2mps13_ldo(35, MIN_1400_MV, STEP_50_MV, 0x0C),
+ regulator_desc_s2mps13_ldo(36, MIN_800_MV, STEP_12_5_MV, 0x00),
+ regulator_desc_s2mps13_ldo(37, MIN_1000_MV, STEP_25_MV, 0x08),
+ regulator_desc_s2mps13_ldo(38, MIN_1400_MV, STEP_50_MV, 0x0C),
+ regulator_desc_s2mps13_ldo(39, MIN_1000_MV, STEP_25_MV, 0x08),
+ regulator_desc_s2mps13_ldo(40, MIN_1400_MV, STEP_50_MV, 0x0C),
+ regulator_desc_s2mps13_buck(1, MIN_500_MV, STEP_6_25_MV, 0x10),
+ regulator_desc_s2mps13_buck(2, MIN_500_MV, STEP_6_25_MV, 0x10),
+ regulator_desc_s2mps13_buck(3, MIN_500_MV, STEP_6_25_MV, 0x10),
+ regulator_desc_s2mps13_buck(4, MIN_500_MV, STEP_6_25_MV, 0x10),
+ regulator_desc_s2mps13_buck(5, MIN_500_MV, STEP_6_25_MV, 0x10),
+ regulator_desc_s2mps13_buck(6, MIN_500_MV, STEP_6_25_MV, 0x10),
+ regulator_desc_s2mps13_buck(7, MIN_500_MV, STEP_6_25_MV, 0x10),
+ regulator_desc_s2mps13_buck(8, MIN_1000_MV, STEP_12_5_MV, 0x20),
+ regulator_desc_s2mps13_buck(9, MIN_1000_MV, STEP_12_5_MV, 0x20),
+ regulator_desc_s2mps13_buck(10, MIN_500_MV, STEP_6_25_MV, 0x10),
+};
+
static int s2mps14_regulator_enable(struct regulator_dev *rdev)
{
struct s2mps11_info *s2mps11 = rdev_get_drvdata(rdev);
unsigned int val;
switch (s2mps11->dev_type) {
+ case S2MPS13X:
case S2MPS14X:
if (s2mps11->s2mps14_suspend_state & (1 << rdev_get_id(rdev)))
val = S2MPS14_ENABLE_SUSPEND;
@@ -406,6 +496,7 @@ static int s2mps14_regulator_set_suspend_disable(struct regulator_dev *rdev)
/* Below LDO should be always on or does not support suspend mode. */
switch (s2mps11->dev_type) {
+ case S2MPS13X:
case S2MPS14X:
switch (rdev_id) {
case S2MPS14_LDO3:
@@ -831,6 +922,10 @@ static int s2mps11_pmic_probe(struct platform_device *pdev)
s2mps11->rdev_num = ARRAY_SIZE(s2mps11_regulators);
regulators = s2mps11_regulators;
break;
+ case S2MPS13X:
+ s2mps11->rdev_num = ARRAY_SIZE(s2mps13_regulators);
+ regulators = s2mps13_regulators;
+ break;
case S2MPS14X:
s2mps11->rdev_num = ARRAY_SIZE(s2mps14_regulators);
regulators = s2mps14_regulators;
@@ -927,6 +1022,7 @@ out:
static const struct platform_device_id s2mps11_pmic_id[] = {
{ "s2mps11-pmic", S2MPS11X},
+ { "s2mps13-pmic", S2MPS13X},
{ "s2mps14-pmic", S2MPS14X},
{ "s2mpu02-pmic", S2MPU02},
{ },
diff --git a/include/linux/mfd/samsung/core.h b/include/linux/mfd/samsung/core.h
index 0c0343e..3fdb7cf 100644
--- a/include/linux/mfd/samsung/core.h
+++ b/include/linux/mfd/samsung/core.h
@@ -28,6 +28,7 @@
#define MIN_800_MV 800000
#define MIN_750_MV 750000
#define MIN_600_MV 600000
+#define MIN_500_MV 500000
/* Macros to represent steps for LDO/BUCK */
#define STEP_50_MV 50000
diff --git a/include/linux/mfd/samsung/s2mps13.h b/include/linux/mfd/samsung/s2mps13.h
new file mode 100644
index 0000000..ce5dda8
--- /dev/null
+++ b/include/linux/mfd/samsung/s2mps13.h
@@ -0,0 +1,186 @@
+/*
+ * s2mps13.h
+ *
+ * Copyright (c) 2014 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#ifndef __LINUX_MFD_S2MPS13_H
+#define __LINUX_MFD_S2MPS13_H
+
+/* S2MPS13 registers */
+enum s2mps13_reg {
+ S2MPS13_REG_ID,
+ S2MPS13_REG_INT1,
+ S2MPS13_REG_INT2,
+ S2MPS13_REG_INT3,
+ S2MPS13_REG_INT1M,
+ S2MPS13_REG_INT2M,
+ S2MPS13_REG_INT3M,
+ S2MPS13_REG_ST1,
+ S2MPS13_REG_ST2,
+ S2MPS13_REG_PWRONSRC,
+ S2MPS13_REG_OFFSRC,
+ S2MPS13_REG_BU_CHG,
+ S2MPS13_REG_RTCCTRL,
+ S2MPS13_REG_CTRL1,
+ S2MPS13_REG_CTRL2,
+ S2MPS13_REG_RSVD1,
+ S2MPS13_REG_RSVD2,
+ S2MPS13_REG_RSVD3,
+ S2MPS13_REG_RSVD4,
+ S2MPS13_REG_RSVD5,
+ S2MPS13_REG_RSVD6,
+ S2MPS13_REG_CTRL3,
+ S2MPS13_REG_RSVD7,
+ S2MPS13_REG_RSVD8,
+ S2MPS13_REG_WRSTBI,
+ S2MPS13_REG_B1CTRL,
+ S2MPS13_REG_B1OUT,
+ S2MPS13_REG_B2CTRL,
+ S2MPS13_REG_B2OUT,
+ S2MPS13_REG_B3CTRL,
+ S2MPS13_REG_B3OUT,
+ S2MPS13_REG_B4CTRL,
+ S2MPS13_REG_B4OUT,
+ S2MPS13_REG_B5CTRL,
+ S2MPS13_REG_B5OUT,
+ S2MPS13_REG_B6CTRL,
+ S2MPS13_REG_B6OUT,
+ S2MPS13_REG_B7CTRL,
+ S2MPS13_REG_B7OUT,
+ S2MPS13_REG_B8CTRL,
+ S2MPS13_REG_B8OUT,
+ S2MPS13_REG_B9CTRL,
+ S2MPS13_REG_B9OUT,
+ S2MPS13_REG_B10CTRL,
+ S2MPS13_REG_B10OUT,
+ S2MPS13_REG_BB1CTRL,
+ S2MPS13_REG_BB1OUT,
+ S2MPS13_REG_BUCK_RAMP1,
+ S2MPS13_REG_BUCK_RAMP2,
+ S2MPS13_REG_LDO_DVS1,
+ S2MPS13_REG_LDO_DVS2,
+ S2MPS13_REG_LDO_DVS3,
+ S2MPS13_REG_B6OUT2,
+ S2MPS13_REG_L1CTRL,
+ S2MPS13_REG_L2CTRL,
+ S2MPS13_REG_L3CTRL,
+ S2MPS13_REG_L4CTRL,
+ S2MPS13_REG_L5CTRL,
+ S2MPS13_REG_L6CTRL,
+ S2MPS13_REG_L7CTRL,
+ S2MPS13_REG_L8CTRL,
+ S2MPS13_REG_L9CTRL,
+ S2MPS13_REG_L10CTRL,
+ S2MPS13_REG_L11CTRL,
+ S2MPS13_REG_L12CTRL,
+ S2MPS13_REG_L13CTRL,
+ S2MPS13_REG_L14CTRL,
+ S2MPS13_REG_L15CTRL,
+ S2MPS13_REG_L16CTRL,
+ S2MPS13_REG_L17CTRL,
+ S2MPS13_REG_L18CTRL,
+ S2MPS13_REG_L19CTRL,
+ S2MPS13_REG_L20CTRL,
+ S2MPS13_REG_L21CTRL,
+ S2MPS13_REG_L22CTRL,
+ S2MPS13_REG_L23CTRL,
+ S2MPS13_REG_L24CTRL,
+ S2MPS13_REG_L25CTRL,
+ S2MPS13_REG_L26CTRL,
+ S2MPS13_REG_L27CTRL,
+ S2MPS13_REG_L28CTRL,
+ S2MPS13_REG_L30CTRL,
+ S2MPS13_REG_L31CTRL,
+ S2MPS13_REG_L32CTRL,
+ S2MPS13_REG_L33CTRL,
+ S2MPS13_REG_L34CTRL,
+ S2MPS13_REG_L35CTRL,
+ S2MPS13_REG_L36CTRL,
+ S2MPS13_REG_L37CTRL,
+ S2MPS13_REG_L38CTRL,
+ S2MPS13_REG_L39CTRL,
+ S2MPS13_REG_L40CTRL,
+ S2MPS13_REG_LDODSCH1,
+ S2MPS13_REG_LDODSCH2,
+ S2MPS13_REG_LDODSCH3,
+ S2MPS13_REG_LDODSCH4,
+ S2MPS13_REG_LDODSCH5,
+};
+
+/* regulator ids */
+enum s2mps13_regulators {
+ S2MPS13_LDO1,
+ S2MPS13_LDO2,
+ S2MPS13_LDO3,
+ S2MPS13_LDO4,
+ S2MPS13_LDO5,
+ S2MPS13_LDO6,
+ S2MPS13_LDO7,
+ S2MPS13_LDO8,
+ S2MPS13_LDO9,
+ S2MPS13_LDO10,
+ S2MPS13_LDO11,
+ S2MPS13_LDO12,
+ S2MPS13_LDO13,
+ S2MPS13_LDO14,
+ S2MPS13_LDO15,
+ S2MPS13_LDO16,
+ S2MPS13_LDO17,
+ S2MPS13_LDO18,
+ S2MPS13_LDO19,
+ S2MPS13_LDO20,
+ S2MPS13_LDO21,
+ S2MPS13_LDO22,
+ S2MPS13_LDO23,
+ S2MPS13_LDO24,
+ S2MPS13_LDO25,
+ S2MPS13_LDO26,
+ S2MPS13_LDO27,
+ S2MPS13_LDO28,
+ S2MPS13_LDO29,
+ S2MPS13_LDO30,
+ S2MPS13_LDO31,
+ S2MPS13_LDO32,
+ S2MPS13_LDO33,
+ S2MPS13_LDO34,
+ S2MPS13_LDO35,
+ S2MPS13_LDO36,
+ S2MPS13_LDO37,
+ S2MPS13_LDO38,
+ S2MPS13_LDO39,
+ S2MPS13_LDO40,
+ S2MPS13_BUCK1,
+ S2MPS13_BUCK2,
+ S2MPS13_BUCK3,
+ S2MPS13_BUCK4,
+ S2MPS13_BUCK5,
+ S2MPS13_BUCK6,
+ S2MPS13_BUCK7,
+ S2MPS13_BUCK8,
+ S2MPS13_BUCK9,
+ S2MPS13_BUCK10,
+
+ S2MPS13_REGULATOR_MAX,
+};
+
+/*
+ * Default ramp delay in uv/us. Datasheet says that ramp delay can be
+ * controlled however it does not specify which register is used for that.
+ * Let's assume that default value will be set.
+ */
+#define S2MPS13_BUCK_RAMP_DELAY 12500
+
+#endif /* __LINUX_MFD_S2MPS13_H */
--
1.8.5.5
Quoting Chanwoo Choi (2014-11-18 00:59:41)
> This patch adds the support for S2MPS13 PMIC clock which is same with existing
> S2MPS14 RTC IP. But, S2MPS13 uses all of clocks (32khz_{ap|bt|cp}).
>
> Cc: Mike Turquette <[email protected]>
> Signed-off-by: Chanwoo Choi <[email protected]>
> Reviewed-by: Krzysztof Kozlowski <[email protected]>
Applied to clk-next.
Regards,
Mike
> ---
> drivers/clk/clk-s2mps11.c | 24 ++++++++++++++++++++++++
> 1 file changed, 24 insertions(+)
>
> diff --git a/drivers/clk/clk-s2mps11.c b/drivers/clk/clk-s2mps11.c
> index b7797fb..7bb13af 100644
> --- a/drivers/clk/clk-s2mps11.c
> +++ b/drivers/clk/clk-s2mps11.c
> @@ -23,6 +23,7 @@
> #include <linux/clk-provider.h>
> #include <linux/platform_device.h>
> #include <linux/mfd/samsung/s2mps11.h>
> +#include <linux/mfd/samsung/s2mps13.h>
> #include <linux/mfd/samsung/s2mps14.h>
> #include <linux/mfd/samsung/s5m8767.h>
> #include <linux/mfd/samsung/core.h>
> @@ -120,6 +121,24 @@ static struct clk_init_data s2mps11_clks_init[S2MPS11_CLKS_NUM] = {
> },
> };
>
> +static struct clk_init_data s2mps13_clks_init[S2MPS11_CLKS_NUM] = {
> + [S2MPS11_CLK_AP] = {
> + .name = "s2mps13_ap",
> + .ops = &s2mps11_clk_ops,
> + .flags = CLK_IS_ROOT,
> + },
> + [S2MPS11_CLK_CP] = {
> + .name = "s2mps13_cp",
> + .ops = &s2mps11_clk_ops,
> + .flags = CLK_IS_ROOT,
> + },
> + [S2MPS11_CLK_BT] = {
> + .name = "s2mps13_bt",
> + .ops = &s2mps11_clk_ops,
> + .flags = CLK_IS_ROOT,
> + },
> +};
> +
> static struct clk_init_data s2mps14_clks_init[S2MPS11_CLKS_NUM] = {
> [S2MPS11_CLK_AP] = {
> .name = "s2mps14_ap",
> @@ -184,6 +203,10 @@ static int s2mps11_clk_probe(struct platform_device *pdev)
> s2mps11_reg = S2MPS11_REG_RTC_CTRL;
> clks_init = s2mps11_clks_init;
> break;
> + case S2MPS13X:
> + s2mps11_reg = S2MPS13_REG_RTCCTRL;
> + clks_init = s2mps13_clks_init;
> + break;
> case S2MPS14X:
> s2mps11_reg = S2MPS14_REG_RTCCTRL;
> clks_init = s2mps14_clks_init;
> @@ -279,6 +302,7 @@ static int s2mps11_clk_remove(struct platform_device *pdev)
>
> static const struct platform_device_id s2mps11_clk_id[] = {
> { "s2mps11-clk", S2MPS11X},
> + { "s2mps13-clk", S2MPS13X},
> { "s2mps14-clk", S2MPS14X},
> { "s5m8767-clk", S5M8767X},
> { },
> --
> 1.8.5.5
>
On Tue, 18 Nov 2014, Mike Turquette wrote:
> Quoting Chanwoo Choi (2014-11-18 00:59:41)
> > This patch adds the support for S2MPS13 PMIC clock which is same with existing
> > S2MPS14 RTC IP. But, S2MPS13 uses all of clocks (32khz_{ap|bt|cp}).
> >
> > Cc: Mike Turquette <[email protected]>
> > Signed-off-by: Chanwoo Choi <[email protected]>
> > Reviewed-by: Krzysztof Kozlowski <[email protected]>
>
> Applied to clk-next.
I'm pretty sure you can't do that. You have a dependency on
linux/mfd/samsung/s2mps13.h, which is satisfied in one of the earlier
patches in the set. If you'd care to just provide an Ack for this
patch, I can send you a pull-request with the decencies met.
> > ---
> > drivers/clk/clk-s2mps11.c | 24 ++++++++++++++++++++++++
> > 1 file changed, 24 insertions(+)
> >
> > diff --git a/drivers/clk/clk-s2mps11.c b/drivers/clk/clk-s2mps11.c
> > index b7797fb..7bb13af 100644
> > --- a/drivers/clk/clk-s2mps11.c
> > +++ b/drivers/clk/clk-s2mps11.c
> > @@ -23,6 +23,7 @@
> > #include <linux/clk-provider.h>
> > #include <linux/platform_device.h>
> > #include <linux/mfd/samsung/s2mps11.h>
> > +#include <linux/mfd/samsung/s2mps13.h>
> > #include <linux/mfd/samsung/s2mps14.h>
> > #include <linux/mfd/samsung/s5m8767.h>
> > #include <linux/mfd/samsung/core.h>
> > @@ -120,6 +121,24 @@ static struct clk_init_data s2mps11_clks_init[S2MPS11_CLKS_NUM] = {
> > },
> > };
> >
> > +static struct clk_init_data s2mps13_clks_init[S2MPS11_CLKS_NUM] = {
> > + [S2MPS11_CLK_AP] = {
> > + .name = "s2mps13_ap",
> > + .ops = &s2mps11_clk_ops,
> > + .flags = CLK_IS_ROOT,
> > + },
> > + [S2MPS11_CLK_CP] = {
> > + .name = "s2mps13_cp",
> > + .ops = &s2mps11_clk_ops,
> > + .flags = CLK_IS_ROOT,
> > + },
> > + [S2MPS11_CLK_BT] = {
> > + .name = "s2mps13_bt",
> > + .ops = &s2mps11_clk_ops,
> > + .flags = CLK_IS_ROOT,
> > + },
> > +};
> > +
> > static struct clk_init_data s2mps14_clks_init[S2MPS11_CLKS_NUM] = {
> > [S2MPS11_CLK_AP] = {
> > .name = "s2mps14_ap",
> > @@ -184,6 +203,10 @@ static int s2mps11_clk_probe(struct platform_device *pdev)
> > s2mps11_reg = S2MPS11_REG_RTC_CTRL;
> > clks_init = s2mps11_clks_init;
> > break;
> > + case S2MPS13X:
> > + s2mps11_reg = S2MPS13_REG_RTCCTRL;
> > + clks_init = s2mps13_clks_init;
> > + break;
> > case S2MPS14X:
> > s2mps11_reg = S2MPS14_REG_RTCCTRL;
> > clks_init = s2mps14_clks_init;
> > @@ -279,6 +302,7 @@ static int s2mps11_clk_remove(struct platform_device *pdev)
> >
> > static const struct platform_device_id s2mps11_clk_id[] = {
> > { "s2mps11-clk", S2MPS11X},
> > + { "s2mps13-clk", S2MPS13X},
> > { "s2mps14-clk", S2MPS14X},
> > { "s5m8767-clk", S5M8767X},
> > { },
--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
Dear Lee,
Could you please apply this patchset on your tree
or Do we wait the Ack from RTC mainatiner for patch 4?
Best Regards,
Chanwoo Choi
On 11/20/2014 01:43 AM, Lee Jones wrote:
> On Tue, 18 Nov 2014, Mike Turquette wrote:
>
>> Quoting Chanwoo Choi (2014-11-18 00:59:41)
>>> This patch adds the support for S2MPS13 PMIC clock which is same with existing
>>> S2MPS14 RTC IP. But, S2MPS13 uses all of clocks (32khz_{ap|bt|cp}).
>>>
>>> Cc: Mike Turquette <[email protected]>
>>> Signed-off-by: Chanwoo Choi <[email protected]>
>>> Reviewed-by: Krzysztof Kozlowski <[email protected]>
>>
>> Applied to clk-next.
>
> I'm pretty sure you can't do that. You have a dependency on
> linux/mfd/samsung/s2mps13.h, which is satisfied in one of the earlier
> patches in the set. If you'd care to just provide an Ack for this
> patch, I can send you a pull-request with the decencies met.
>
>>> ---
>>> drivers/clk/clk-s2mps11.c | 24 ++++++++++++++++++++++++
>>> 1 file changed, 24 insertions(+)
>>>
>>> diff --git a/drivers/clk/clk-s2mps11.c b/drivers/clk/clk-s2mps11.c
>>> index b7797fb..7bb13af 100644
>>> --- a/drivers/clk/clk-s2mps11.c
>>> +++ b/drivers/clk/clk-s2mps11.c
>>> @@ -23,6 +23,7 @@
>>> #include <linux/clk-provider.h>
>>> #include <linux/platform_device.h>
>>> #include <linux/mfd/samsung/s2mps11.h>
>>> +#include <linux/mfd/samsung/s2mps13.h>
>>> #include <linux/mfd/samsung/s2mps14.h>
>>> #include <linux/mfd/samsung/s5m8767.h>
>>> #include <linux/mfd/samsung/core.h>
>>> @@ -120,6 +121,24 @@ static struct clk_init_data s2mps11_clks_init[S2MPS11_CLKS_NUM] = {
>>> },
>>> };
>>>
>>> +static struct clk_init_data s2mps13_clks_init[S2MPS11_CLKS_NUM] = {
>>> + [S2MPS11_CLK_AP] = {
>>> + .name = "s2mps13_ap",
>>> + .ops = &s2mps11_clk_ops,
>>> + .flags = CLK_IS_ROOT,
>>> + },
>>> + [S2MPS11_CLK_CP] = {
>>> + .name = "s2mps13_cp",
>>> + .ops = &s2mps11_clk_ops,
>>> + .flags = CLK_IS_ROOT,
>>> + },
>>> + [S2MPS11_CLK_BT] = {
>>> + .name = "s2mps13_bt",
>>> + .ops = &s2mps11_clk_ops,
>>> + .flags = CLK_IS_ROOT,
>>> + },
>>> +};
>>> +
>>> static struct clk_init_data s2mps14_clks_init[S2MPS11_CLKS_NUM] = {
>>> [S2MPS11_CLK_AP] = {
>>> .name = "s2mps14_ap",
>>> @@ -184,6 +203,10 @@ static int s2mps11_clk_probe(struct platform_device *pdev)
>>> s2mps11_reg = S2MPS11_REG_RTC_CTRL;
>>> clks_init = s2mps11_clks_init;
>>> break;
>>> + case S2MPS13X:
>>> + s2mps11_reg = S2MPS13_REG_RTCCTRL;
>>> + clks_init = s2mps13_clks_init;
>>> + break;
>>> case S2MPS14X:
>>> s2mps11_reg = S2MPS14_REG_RTCCTRL;
>>> clks_init = s2mps14_clks_init;
>>> @@ -279,6 +302,7 @@ static int s2mps11_clk_remove(struct platform_device *pdev)
>>>
>>> static const struct platform_device_id s2mps11_clk_id[] = {
>>> { "s2mps11-clk", S2MPS11X},
>>> + { "s2mps13-clk", S2MPS13X},
>>> { "s2mps14-clk", S2MPS14X},
>>> { "s5m8767-clk", S5M8767X},
>>> { },
>
> Could you please apply this patchset on your tree
> or Do we wait the Ack from RTC mainatiner for patch 4?
We still need an Ack from Alessandro.
> On 11/20/2014 01:43 AM, Lee Jones wrote:
> > On Tue, 18 Nov 2014, Mike Turquette wrote:
> >
> >> Quoting Chanwoo Choi (2014-11-18 00:59:41)
> >>> This patch adds the support for S2MPS13 PMIC clock which is same with existing
> >>> S2MPS14 RTC IP. But, S2MPS13 uses all of clocks (32khz_{ap|bt|cp}).
> >>>
> >>> Cc: Mike Turquette <[email protected]>
> >>> Signed-off-by: Chanwoo Choi <[email protected]>
> >>> Reviewed-by: Krzysztof Kozlowski <[email protected]>
> >>
> >> Applied to clk-next.
> >
> > I'm pretty sure you can't do that. You have a dependency on
> > linux/mfd/samsung/s2mps13.h, which is satisfied in one of the earlier
> > patches in the set. If you'd care to just provide an Ack for this
> > patch, I can send you a pull-request with the decencies met.
> >
> >>> ---
> >>> drivers/clk/clk-s2mps11.c | 24 ++++++++++++++++++++++++
> >>> 1 file changed, 24 insertions(+)
> >>>
> >>> diff --git a/drivers/clk/clk-s2mps11.c b/drivers/clk/clk-s2mps11.c
> >>> index b7797fb..7bb13af 100644
> >>> --- a/drivers/clk/clk-s2mps11.c
> >>> +++ b/drivers/clk/clk-s2mps11.c
> >>> @@ -23,6 +23,7 @@
> >>> #include <linux/clk-provider.h>
> >>> #include <linux/platform_device.h>
> >>> #include <linux/mfd/samsung/s2mps11.h>
> >>> +#include <linux/mfd/samsung/s2mps13.h>
> >>> #include <linux/mfd/samsung/s2mps14.h>
> >>> #include <linux/mfd/samsung/s5m8767.h>
> >>> #include <linux/mfd/samsung/core.h>
> >>> @@ -120,6 +121,24 @@ static struct clk_init_data s2mps11_clks_init[S2MPS11_CLKS_NUM] = {
> >>> },
> >>> };
> >>>
> >>> +static struct clk_init_data s2mps13_clks_init[S2MPS11_CLKS_NUM] = {
> >>> + [S2MPS11_CLK_AP] = {
> >>> + .name = "s2mps13_ap",
> >>> + .ops = &s2mps11_clk_ops,
> >>> + .flags = CLK_IS_ROOT,
> >>> + },
> >>> + [S2MPS11_CLK_CP] = {
> >>> + .name = "s2mps13_cp",
> >>> + .ops = &s2mps11_clk_ops,
> >>> + .flags = CLK_IS_ROOT,
> >>> + },
> >>> + [S2MPS11_CLK_BT] = {
> >>> + .name = "s2mps13_bt",
> >>> + .ops = &s2mps11_clk_ops,
> >>> + .flags = CLK_IS_ROOT,
> >>> + },
> >>> +};
> >>> +
> >>> static struct clk_init_data s2mps14_clks_init[S2MPS11_CLKS_NUM] = {
> >>> [S2MPS11_CLK_AP] = {
> >>> .name = "s2mps14_ap",
> >>> @@ -184,6 +203,10 @@ static int s2mps11_clk_probe(struct platform_device *pdev)
> >>> s2mps11_reg = S2MPS11_REG_RTC_CTRL;
> >>> clks_init = s2mps11_clks_init;
> >>> break;
> >>> + case S2MPS13X:
> >>> + s2mps11_reg = S2MPS13_REG_RTCCTRL;
> >>> + clks_init = s2mps13_clks_init;
> >>> + break;
> >>> case S2MPS14X:
> >>> s2mps11_reg = S2MPS14_REG_RTCCTRL;
> >>> clks_init = s2mps14_clks_init;
> >>> @@ -279,6 +302,7 @@ static int s2mps11_clk_remove(struct platform_device *pdev)
> >>>
> >>> static const struct platform_device_id s2mps11_clk_id[] = {
> >>> { "s2mps11-clk", S2MPS11X},
> >>> + { "s2mps13-clk", S2MPS13X},
> >>> { "s2mps14-clk", S2MPS14X},
> >>> { "s5m8767-clk", S5M8767X},
> >>> { },
> >
>
--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
Dear Alessandro,
Could you please review these patchset?
Other patches of these patchset ended up getting Ack message from each Maintainer.
Best Regards,
Chanwoo Choi
On 11/18/2014 05:59 PM, Chanwoo Choi wrote:
> This patch adds only the compatible string for S2MPS13 RTC which is identical
> with S2MPS14 RTC driver.
>
> Cc: Alessandro Zummo <[email protected]>
> Signed-off-by: Chanwoo Choi <[email protected]>
> ---
> drivers/rtc/rtc-s5m.c | 15 ++++++++++++++-
> 1 file changed, 14 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/rtc/rtc-s5m.c b/drivers/rtc/rtc-s5m.c
> index 8754c33..e5fdfd3 100644
> --- a/drivers/rtc/rtc-s5m.c
> +++ b/drivers/rtc/rtc-s5m.c
> @@ -191,6 +191,7 @@ static inline int s5m_check_peding_alarm_interrupt(struct s5m_rtc_info *info,
> ret = regmap_read(info->regmap, S5M_RTC_STATUS, &val);
> val &= S5M_ALARM0_STATUS;
> break;
> + case S2MPS13X:
> case S2MPS14X:
> ret = regmap_read(info->s5m87xx->regmap_pmic, S2MPS14_REG_ST2,
> &val);
> @@ -254,6 +255,7 @@ static inline int s5m8767_rtc_set_alarm_reg(struct s5m_rtc_info *info)
> case S5M8767X:
> data &= ~S5M_RTC_TIME_EN_MASK;
> break;
> + case S2MPS13X:
> case S2MPS14X:
> data |= S2MPS_RTC_RUDR_MASK;
> break;
> @@ -311,7 +313,9 @@ static int s5m_rtc_read_time(struct device *dev, struct rtc_time *tm)
> u8 data[info->regs->regs_count];
> int ret;
>
> - if (info->device_type == S2MPS14X) {
> + switch (info->device_type) {
> + case S2MPS13X:
> + case S2MPS14X:
> ret = regmap_update_bits(info->regmap,
> info->regs->rtc_udr_update,
> S2MPS_RTC_RUDR_MASK, S2MPS_RTC_RUDR_MASK);
> @@ -333,6 +337,7 @@ static int s5m_rtc_read_time(struct device *dev, struct rtc_time *tm)
> break;
>
> case S5M8767X:
> + case S2MPS13X:
> case S2MPS14X:
> s5m8767_data_to_tm(data, tm, info->rtc_24hr_mode);
> break;
> @@ -359,6 +364,7 @@ static int s5m_rtc_set_time(struct device *dev, struct rtc_time *tm)
> s5m8763_tm_to_data(tm, data);
> break;
> case S5M8767X:
> + case S2MPS13X:
> case S2MPS14X:
> ret = s5m8767_tm_to_data(tm, data);
> break;
> @@ -406,6 +412,7 @@ static int s5m_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
> break;
>
> case S5M8767X:
> + case S2MPS13X:
> case S2MPS14X:
> s5m8767_data_to_tm(data, &alrm->time, info->rtc_24hr_mode);
> alrm->enabled = 0;
> @@ -454,6 +461,7 @@ static int s5m_rtc_stop_alarm(struct s5m_rtc_info *info)
> break;
>
> case S5M8767X:
> + case S2MPS13X:
> case S2MPS14X:
> for (i = 0; i < info->regs->regs_count; i++)
> data[i] &= ~ALARM_ENABLE_MASK;
> @@ -498,6 +506,7 @@ static int s5m_rtc_start_alarm(struct s5m_rtc_info *info)
> break;
>
> case S5M8767X:
> + case S2MPS13X:
> case S2MPS14X:
> data[RTC_SEC] |= ALARM_ENABLE_MASK;
> data[RTC_MIN] |= ALARM_ENABLE_MASK;
> @@ -537,6 +546,7 @@ static int s5m_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
> break;
>
> case S5M8767X:
> + case S2MPS13X:
> case S2MPS14X:
> s5m8767_tm_to_data(&alrm->time, data);
> break;
> @@ -641,6 +651,7 @@ static int s5m8767_rtc_init_reg(struct s5m_rtc_info *info)
> ret = regmap_raw_write(info->regmap, S5M_ALARM0_CONF, data, 2);
> break;
>
> + case S2MPS13X:
> case S2MPS14X:
> data[0] = (0 << BCD_EN_SHIFT) | (1 << MODEL24_SHIFT);
> ret = regmap_write(info->regmap, info->regs->ctrl, data[0]);
> @@ -678,6 +689,7 @@ static int s5m_rtc_probe(struct platform_device *pdev)
> return -ENOMEM;
>
> switch (pdata->device_type) {
> + case S2MPS13X:
> case S2MPS14X:
> regmap_cfg = &s2mps14_rtc_regmap_config;
> info->regs = &s2mps_rtc_regs;
> @@ -831,6 +843,7 @@ static SIMPLE_DEV_PM_OPS(s5m_rtc_pm_ops, s5m_rtc_suspend, s5m_rtc_resume);
>
> static const struct platform_device_id s5m_rtc_id[] = {
> { "s5m-rtc", S5M8767X },
> + { "s2mps13-rtc", S2MPS13X },
> { "s2mps14-rtc", S2MPS14X },
> };
>
>
Dear Lee,
Could you pick these patchset without RTC patch?
I'll re-send etc patch separately.
Best Regards,
Chanwoo Choi
On Mon, Nov 24, 2014 at 7:04 PM, Lee Jones <[email protected]> wrote:
>> Could you please apply this patchset on your tree
>> or Do we wait the Ack from RTC mainatiner for patch 4?
>
> We still need an Ack from Alessandro.
>
>> On 11/20/2014 01:43 AM, Lee Jones wrote:
>> > On Tue, 18 Nov 2014, Mike Turquette wrote:
>> >
>> >> Quoting Chanwoo Choi (2014-11-18 00:59:41)
>> >>> This patch adds the support for S2MPS13 PMIC clock which is same with existing
>> >>> S2MPS14 RTC IP. But, S2MPS13 uses all of clocks (32khz_{ap|bt|cp}).
>> >>>
>> >>> Cc: Mike Turquette <[email protected]>
>> >>> Signed-off-by: Chanwoo Choi <[email protected]>
>> >>> Reviewed-by: Krzysztof Kozlowski <[email protected]>
>> >>
>> >> Applied to clk-next.
>> >
>> > I'm pretty sure you can't do that. You have a dependency on
>> > linux/mfd/samsung/s2mps13.h, which is satisfied in one of the earlier
>> > patches in the set. If you'd care to just provide an Ack for this
>> > patch, I can send you a pull-request with the decencies met.
>> >
>> >>> ---
>> >>> drivers/clk/clk-s2mps11.c | 24 ++++++++++++++++++++++++
>> >>> 1 file changed, 24 insertions(+)
>> >>>
>> >>> diff --git a/drivers/clk/clk-s2mps11.c b/drivers/clk/clk-s2mps11.c
>> >>> index b7797fb..7bb13af 100644
>> >>> --- a/drivers/clk/clk-s2mps11.c
>> >>> +++ b/drivers/clk/clk-s2mps11.c
>> >>> @@ -23,6 +23,7 @@
>> >>> #include <linux/clk-provider.h>
>> >>> #include <linux/platform_device.h>
>> >>> #include <linux/mfd/samsung/s2mps11.h>
>> >>> +#include <linux/mfd/samsung/s2mps13.h>
>> >>> #include <linux/mfd/samsung/s2mps14.h>
>> >>> #include <linux/mfd/samsung/s5m8767.h>
>> >>> #include <linux/mfd/samsung/core.h>
>> >>> @@ -120,6 +121,24 @@ static struct clk_init_data s2mps11_clks_init[S2MPS11_CLKS_NUM] = {
>> >>> },
>> >>> };
>> >>>
>> >>> +static struct clk_init_data s2mps13_clks_init[S2MPS11_CLKS_NUM] = {
>> >>> + [S2MPS11_CLK_AP] = {
>> >>> + .name = "s2mps13_ap",
>> >>> + .ops = &s2mps11_clk_ops,
>> >>> + .flags = CLK_IS_ROOT,
>> >>> + },
>> >>> + [S2MPS11_CLK_CP] = {
>> >>> + .name = "s2mps13_cp",
>> >>> + .ops = &s2mps11_clk_ops,
>> >>> + .flags = CLK_IS_ROOT,
>> >>> + },
>> >>> + [S2MPS11_CLK_BT] = {
>> >>> + .name = "s2mps13_bt",
>> >>> + .ops = &s2mps11_clk_ops,
>> >>> + .flags = CLK_IS_ROOT,
>> >>> + },
>> >>> +};
>> >>> +
>> >>> static struct clk_init_data s2mps14_clks_init[S2MPS11_CLKS_NUM] = {
>> >>> [S2MPS11_CLK_AP] = {
>> >>> .name = "s2mps14_ap",
>> >>> @@ -184,6 +203,10 @@ static int s2mps11_clk_probe(struct platform_device *pdev)
>> >>> s2mps11_reg = S2MPS11_REG_RTC_CTRL;
>> >>> clks_init = s2mps11_clks_init;
>> >>> break;
>> >>> + case S2MPS13X:
>> >>> + s2mps11_reg = S2MPS13_REG_RTCCTRL;
>> >>> + clks_init = s2mps13_clks_init;
>> >>> + break;
>> >>> case S2MPS14X:
>> >>> s2mps11_reg = S2MPS14_REG_RTCCTRL;
>> >>> clks_init = s2mps14_clks_init;
>> >>> @@ -279,6 +302,7 @@ static int s2mps11_clk_remove(struct platform_device *pdev)
>> >>>
>> >>> static const struct platform_device_id s2mps11_clk_id[] = {
>> >>> { "s2mps11-clk", S2MPS11X},
>> >>> + { "s2mps13-clk", S2MPS13X},
>> >>> { "s2mps14-clk", S2MPS14X},
>> >>> { "s5m8767-clk", S5M8767X},
>> >>> { },
>> >
>>
>
> --
> Lee Jones
> Linaro STMicroelectronics Landing Team Lead
> Linaro.org │ Open source software for ARM SoCs
> Follow Linaro: Facebook | Twitter | Blog
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
On Tue, 18 Nov 2014, Chanwoo Choi wrote:
> This patch adds the support for Samsung S2MPS13 PMIC device to the sec-core MFD
> driver. The S2MPS13 is very similar with existing S2MPS14 and includes PMIC/
> RTC/CLOCK devices.
>
> Cc: Lee Jones <[email protected]>
> Signed-off-by: Chanwoo Choi <[email protected]>
> Acked-by: Sangbeom Kim <[email protected]>
> Acked-by: Lee Jones <[email protected]>
> ---
> drivers/mfd/sec-core.c | 16 ++++++++++++++++
> drivers/mfd/sec-irq.c | 23 +++++++++++++++++------
> include/linux/mfd/samsung/core.h | 1 +
> 3 files changed, 34 insertions(+), 6 deletions(-)
Applied, thanks.
> diff --git a/drivers/mfd/sec-core.c b/drivers/mfd/sec-core.c
> index 5993608..868f03d 100644
> --- a/drivers/mfd/sec-core.c
> +++ b/drivers/mfd/sec-core.c
> @@ -73,6 +73,15 @@ static const struct mfd_cell s2mps11_devs[] = {
> }
> };
>
> +static const struct mfd_cell s2mps13_devs[] = {
> + { .name = "s2mps13-pmic", },
> + { .name = "s2mps13-rtc", },
> + {
> + .name = "s2mps13-clk",
> + .of_compatible = "samsung,s2mps13-clk",
> + },
> +};
> +
> static const struct mfd_cell s2mps14_devs[] = {
> {
> .name = "s2mps14-pmic",
> @@ -107,6 +116,9 @@ static const struct of_device_id sec_dt_match[] = {
> .compatible = "samsung,s2mps11-pmic",
> .data = (void *)S2MPS11X,
> }, {
> + .compatible = "samsung,s2mps13-pmic",
> + .data = (void *)S2MPS13X,
> + }, {
> .compatible = "samsung,s2mps14-pmic",
> .data = (void *)S2MPS14X,
> }, {
> @@ -377,6 +389,10 @@ static int sec_pmic_probe(struct i2c_client *i2c,
> sec_devs = s2mps11_devs;
> num_sec_devs = ARRAY_SIZE(s2mps11_devs);
> break;
> + case S2MPS13X:
> + sec_devs = s2mps13_devs;
> + num_sec_devs = ARRAY_SIZE(s2mps13_devs);
> + break;
> case S2MPS14X:
> sec_devs = s2mps14_devs;
> num_sec_devs = ARRAY_SIZE(s2mps14_devs);
> diff --git a/drivers/mfd/sec-irq.c b/drivers/mfd/sec-irq.c
> index f9a5786..ba86a91 100644
> --- a/drivers/mfd/sec-irq.c
> +++ b/drivers/mfd/sec-irq.c
> @@ -389,14 +389,22 @@ static const struct regmap_irq_chip s2mps11_irq_chip = {
> .ack_base = S2MPS11_REG_INT1,
> };
>
> +#define S2MPS1X_IRQ_CHIP_COMMON_DATA \
> + .irqs = s2mps14_irqs, \
> + .num_irqs = ARRAY_SIZE(s2mps14_irqs), \
> + .num_regs = 3, \
> + .status_base = S2MPS14_REG_INT1, \
> + .mask_base = S2MPS14_REG_INT1M, \
> + .ack_base = S2MPS14_REG_INT1 \
> +
> +static const struct regmap_irq_chip s2mps13_irq_chip = {
> + .name = "s2mps13",
> + S2MPS1X_IRQ_CHIP_COMMON_DATA,
> +};
> +
> static const struct regmap_irq_chip s2mps14_irq_chip = {
> .name = "s2mps14",
> - .irqs = s2mps14_irqs,
> - .num_irqs = ARRAY_SIZE(s2mps14_irqs),
> - .num_regs = 3,
> - .status_base = S2MPS14_REG_INT1,
> - .mask_base = S2MPS14_REG_INT1M,
> - .ack_base = S2MPS14_REG_INT1,
> + S2MPS1X_IRQ_CHIP_COMMON_DATA,
> };
>
> static const struct regmap_irq_chip s2mpu02_irq_chip = {
> @@ -452,6 +460,9 @@ int sec_irq_init(struct sec_pmic_dev *sec_pmic)
> case S2MPS11X:
> sec_irq_chip = &s2mps11_irq_chip;
> break;
> + case S2MPS13X:
> + sec_irq_chip = &s2mps13_irq_chip;
> + break;
> case S2MPS14X:
> sec_irq_chip = &s2mps14_irq_chip;
> break;
> diff --git a/include/linux/mfd/samsung/core.h b/include/linux/mfd/samsung/core.h
> index 1825eda..0c0343e 100644
> --- a/include/linux/mfd/samsung/core.h
> +++ b/include/linux/mfd/samsung/core.h
> @@ -41,6 +41,7 @@ enum sec_device_type {
> S5M8767X,
> S2MPA01,
> S2MPS11X,
> + S2MPS13X,
> S2MPS14X,
> S2MPU02,
> };
--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
On Tue, 18 Nov 2014, Chanwoo Choi wrote:
> This patch adds S2MPS13 regulator device to existing S2MPS11 device driver.
> The S2MPS13 has just different number of regulators from S2MPS14.
> The S2MPS13 regulator device includes LDO[1-40] and BUCK[1-10].
>
> Cc: Mark Brown <[email protected]>
> Signed-off-by: Chanwoo Choi <[email protected]>
> Acked-by: Sangbeom Kim <[email protected]>
> Acked-by: Mark Brown <[email protected]>
> Acked-by: Lee Jones <[email protected]>
> Reviewed-by: Krzysztof Kozlowski <[email protected]>
> ---
> drivers/mfd/sec-core.c | 13 +++
> drivers/regulator/Kconfig | 10 +-
> drivers/regulator/s2mps11.c | 102 +++++++++++++++++++-
> include/linux/mfd/samsung/core.h | 1 +
> include/linux/mfd/samsung/s2mps13.h | 186 ++++++++++++++++++++++++++++++++++++
> 5 files changed, 304 insertions(+), 8 deletions(-)
> create mode 100644 include/linux/mfd/samsung/s2mps13.h
Applied, thanks.
> diff --git a/drivers/mfd/sec-core.c b/drivers/mfd/sec-core.c
> index 868f03d..0a7bc43 100644
> --- a/drivers/mfd/sec-core.c
> +++ b/drivers/mfd/sec-core.c
> @@ -27,6 +27,7 @@
> #include <linux/mfd/samsung/irq.h>
> #include <linux/mfd/samsung/s2mpa01.h>
> #include <linux/mfd/samsung/s2mps11.h>
> +#include <linux/mfd/samsung/s2mps13.h>
> #include <linux/mfd/samsung/s2mps14.h>
> #include <linux/mfd/samsung/s2mpu02.h>
> #include <linux/mfd/samsung/s5m8763.h>
> @@ -205,6 +206,15 @@ static const struct regmap_config s2mps11_regmap_config = {
> .cache_type = REGCACHE_FLAT,
> };
>
> +static const struct regmap_config s2mps13_regmap_config = {
> + .reg_bits = 8,
> + .val_bits = 8,
> +
> + .max_register = S2MPS13_REG_LDODSCH5,
> + .volatile_reg = s2mps11_volatile,
> + .cache_type = REGCACHE_FLAT,
> +};
> +
> static const struct regmap_config s2mps14_regmap_config = {
> .reg_bits = 8,
> .val_bits = 8,
> @@ -336,6 +346,9 @@ static int sec_pmic_probe(struct i2c_client *i2c,
> case S2MPS11X:
> regmap = &s2mps11_regmap_config;
> break;
> + case S2MPS13X:
> + regmap = &s2mps13_regmap_config;
> + break;
> case S2MPS14X:
> regmap = &s2mps14_regmap_config;
> break;
> diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig
> index 55d7b7b..5e06134 100644
> --- a/drivers/regulator/Kconfig
> +++ b/drivers/regulator/Kconfig
> @@ -529,13 +529,13 @@ config REGULATOR_S2MPA01
> via I2C bus. S2MPA01 has 10 Bucks and 26 LDO outputs.
>
> config REGULATOR_S2MPS11
> - tristate "Samsung S2MPS11/S2MPS14/S2MPU02 voltage regulator"
> + tristate "Samsung S2MPS11/S2MPS13/S2MPS14/S2MPU02 voltage regulator"
> depends on MFD_SEC_CORE
> help
> - This driver supports a Samsung S2MPS11/S2MPS14/S2MPU02 voltage output
> - regulator via I2C bus. The chip is comprised of high efficient Buck
> - converters including Dual-Phase Buck converter, Buck-Boost converter,
> - various LDOs.
> + This driver supports a Samsung S2MPS11/S2MPS13/S2MPS14/S2MPU02 voltage
> + output regulator via I2C bus. The chip is comprised of high efficient
> + Buck converters including Dual-Phase Buck converter, Buck-Boost
> + converter, various LDOs.
>
> config REGULATOR_S5M8767
> tristate "Samsung S5M8767A voltage regulator"
> diff --git a/drivers/regulator/s2mps11.c b/drivers/regulator/s2mps11.c
> index adab82d..738dc77 100644
> --- a/drivers/regulator/s2mps11.c
> +++ b/drivers/regulator/s2mps11.c
> @@ -30,6 +30,7 @@
> #include <linux/of_gpio.h>
> #include <linux/mfd/samsung/core.h>
> #include <linux/mfd/samsung/s2mps11.h>
> +#include <linux/mfd/samsung/s2mps13.h>
> #include <linux/mfd/samsung/s2mps14.h>
> #include <linux/mfd/samsung/s2mpu02.h>
>
> @@ -45,10 +46,10 @@ struct s2mps11_info {
> enum sec_device_type dev_type;
>
> /*
> - * One bit for each S2MPS14/S2MPU02 regulator whether the suspend mode
> - * was enabled.
> + * One bit for each S2MPS13/S2MPS14/S2MPU02 regulator whether
> + * the suspend mode was enabled.
> */
> - unsigned long long s2mps14_suspend_state:35;
> + unsigned long long s2mps14_suspend_state:50;
>
> /* Array of size rdev_num with GPIO-s for external sleep control */
> int *ext_control_gpio;
> @@ -369,12 +370,101 @@ static const struct regulator_desc s2mps11_regulators[] = {
> regulator_desc_s2mps11_buck6_10(10, MIN_750_MV, STEP_12_5_MV),
> };
>
> +static struct regulator_ops s2mps14_reg_ops;
> +
> +#define regulator_desc_s2mps13_ldo(num, min, step, min_sel) { \
> + .name = "LDO"#num, \
> + .id = S2MPS13_LDO##num, \
> + .ops = &s2mps14_reg_ops, \
> + .type = REGULATOR_VOLTAGE, \
> + .owner = THIS_MODULE, \
> + .min_uV = min, \
> + .uV_step = step, \
> + .linear_min_sel = min_sel, \
> + .n_voltages = S2MPS14_LDO_N_VOLTAGES, \
> + .vsel_reg = S2MPS13_REG_L1CTRL + num - 1, \
> + .vsel_mask = S2MPS14_LDO_VSEL_MASK, \
> + .enable_reg = S2MPS13_REG_L1CTRL + num - 1, \
> + .enable_mask = S2MPS14_ENABLE_MASK \
> +}
> +
> +#define regulator_desc_s2mps13_buck(num, min, step, min_sel) { \
> + .name = "BUCK"#num, \
> + .id = S2MPS13_BUCK##num, \
> + .ops = &s2mps14_reg_ops, \
> + .type = REGULATOR_VOLTAGE, \
> + .owner = THIS_MODULE, \
> + .min_uV = min, \
> + .uV_step = step, \
> + .linear_min_sel = min_sel, \
> + .n_voltages = S2MPS14_BUCK_N_VOLTAGES, \
> + .ramp_delay = S2MPS13_BUCK_RAMP_DELAY, \
> + .vsel_reg = S2MPS13_REG_B1OUT + (num - 1) * 2, \
> + .vsel_mask = S2MPS14_BUCK_VSEL_MASK, \
> + .enable_reg = S2MPS13_REG_B1CTRL + (num - 1) * 2, \
> + .enable_mask = S2MPS14_ENABLE_MASK \
> +}
> +
> +static const struct regulator_desc s2mps13_regulators[] = {
> + regulator_desc_s2mps13_ldo(1, MIN_800_MV, STEP_12_5_MV, 0x00),
> + regulator_desc_s2mps13_ldo(2, MIN_1400_MV, STEP_50_MV, 0x0C),
> + regulator_desc_s2mps13_ldo(3, MIN_1000_MV, STEP_25_MV, 0x08),
> + regulator_desc_s2mps13_ldo(4, MIN_800_MV, STEP_12_5_MV, 0x00),
> + regulator_desc_s2mps13_ldo(5, MIN_800_MV, STEP_12_5_MV, 0x00),
> + regulator_desc_s2mps13_ldo(6, MIN_800_MV, STEP_12_5_MV, 0x00),
> + regulator_desc_s2mps13_ldo(7, MIN_1000_MV, STEP_25_MV, 0x08),
> + regulator_desc_s2mps13_ldo(8, MIN_1000_MV, STEP_25_MV, 0x08),
> + regulator_desc_s2mps13_ldo(9, MIN_1000_MV, STEP_25_MV, 0x08),
> + regulator_desc_s2mps13_ldo(10, MIN_1400_MV, STEP_50_MV, 0x0C),
> + regulator_desc_s2mps13_ldo(11, MIN_800_MV, STEP_25_MV, 0x10),
> + regulator_desc_s2mps13_ldo(12, MIN_800_MV, STEP_25_MV, 0x10),
> + regulator_desc_s2mps13_ldo(13, MIN_800_MV, STEP_25_MV, 0x10),
> + regulator_desc_s2mps13_ldo(14, MIN_800_MV, STEP_12_5_MV, 0x00),
> + regulator_desc_s2mps13_ldo(15, MIN_800_MV, STEP_12_5_MV, 0x00),
> + regulator_desc_s2mps13_ldo(16, MIN_1400_MV, STEP_50_MV, 0x0C),
> + regulator_desc_s2mps13_ldo(17, MIN_1400_MV, STEP_50_MV, 0x0C),
> + regulator_desc_s2mps13_ldo(18, MIN_1000_MV, STEP_25_MV, 0x08),
> + regulator_desc_s2mps13_ldo(19, MIN_1000_MV, STEP_25_MV, 0x08),
> + regulator_desc_s2mps13_ldo(20, MIN_1400_MV, STEP_50_MV, 0x0C),
> + regulator_desc_s2mps13_ldo(21, MIN_1000_MV, STEP_25_MV, 0x08),
> + regulator_desc_s2mps13_ldo(22, MIN_1000_MV, STEP_25_MV, 0x08),
> + regulator_desc_s2mps13_ldo(23, MIN_800_MV, STEP_12_5_MV, 0x00),
> + regulator_desc_s2mps13_ldo(24, MIN_800_MV, STEP_12_5_MV, 0x00),
> + regulator_desc_s2mps13_ldo(25, MIN_1400_MV, STEP_50_MV, 0x0C),
> + regulator_desc_s2mps13_ldo(26, MIN_1400_MV, STEP_50_MV, 0x0C),
> + regulator_desc_s2mps13_ldo(27, MIN_1400_MV, STEP_50_MV, 0x0C),
> + regulator_desc_s2mps13_ldo(28, MIN_1000_MV, STEP_25_MV, 0x08),
> + regulator_desc_s2mps13_ldo(29, MIN_1400_MV, STEP_50_MV, 0x0C),
> + regulator_desc_s2mps13_ldo(30, MIN_1400_MV, STEP_50_MV, 0x0C),
> + regulator_desc_s2mps13_ldo(31, MIN_1000_MV, STEP_25_MV, 0x08),
> + regulator_desc_s2mps13_ldo(32, MIN_1000_MV, STEP_25_MV, 0x08),
> + regulator_desc_s2mps13_ldo(33, MIN_1400_MV, STEP_50_MV, 0x0C),
> + regulator_desc_s2mps13_ldo(34, MIN_1000_MV, STEP_25_MV, 0x08),
> + regulator_desc_s2mps13_ldo(35, MIN_1400_MV, STEP_50_MV, 0x0C),
> + regulator_desc_s2mps13_ldo(36, MIN_800_MV, STEP_12_5_MV, 0x00),
> + regulator_desc_s2mps13_ldo(37, MIN_1000_MV, STEP_25_MV, 0x08),
> + regulator_desc_s2mps13_ldo(38, MIN_1400_MV, STEP_50_MV, 0x0C),
> + regulator_desc_s2mps13_ldo(39, MIN_1000_MV, STEP_25_MV, 0x08),
> + regulator_desc_s2mps13_ldo(40, MIN_1400_MV, STEP_50_MV, 0x0C),
> + regulator_desc_s2mps13_buck(1, MIN_500_MV, STEP_6_25_MV, 0x10),
> + regulator_desc_s2mps13_buck(2, MIN_500_MV, STEP_6_25_MV, 0x10),
> + regulator_desc_s2mps13_buck(3, MIN_500_MV, STEP_6_25_MV, 0x10),
> + regulator_desc_s2mps13_buck(4, MIN_500_MV, STEP_6_25_MV, 0x10),
> + regulator_desc_s2mps13_buck(5, MIN_500_MV, STEP_6_25_MV, 0x10),
> + regulator_desc_s2mps13_buck(6, MIN_500_MV, STEP_6_25_MV, 0x10),
> + regulator_desc_s2mps13_buck(7, MIN_500_MV, STEP_6_25_MV, 0x10),
> + regulator_desc_s2mps13_buck(8, MIN_1000_MV, STEP_12_5_MV, 0x20),
> + regulator_desc_s2mps13_buck(9, MIN_1000_MV, STEP_12_5_MV, 0x20),
> + regulator_desc_s2mps13_buck(10, MIN_500_MV, STEP_6_25_MV, 0x10),
> +};
> +
> static int s2mps14_regulator_enable(struct regulator_dev *rdev)
> {
> struct s2mps11_info *s2mps11 = rdev_get_drvdata(rdev);
> unsigned int val;
>
> switch (s2mps11->dev_type) {
> + case S2MPS13X:
> case S2MPS14X:
> if (s2mps11->s2mps14_suspend_state & (1 << rdev_get_id(rdev)))
> val = S2MPS14_ENABLE_SUSPEND;
> @@ -406,6 +496,7 @@ static int s2mps14_regulator_set_suspend_disable(struct regulator_dev *rdev)
>
> /* Below LDO should be always on or does not support suspend mode. */
> switch (s2mps11->dev_type) {
> + case S2MPS13X:
> case S2MPS14X:
> switch (rdev_id) {
> case S2MPS14_LDO3:
> @@ -831,6 +922,10 @@ static int s2mps11_pmic_probe(struct platform_device *pdev)
> s2mps11->rdev_num = ARRAY_SIZE(s2mps11_regulators);
> regulators = s2mps11_regulators;
> break;
> + case S2MPS13X:
> + s2mps11->rdev_num = ARRAY_SIZE(s2mps13_regulators);
> + regulators = s2mps13_regulators;
> + break;
> case S2MPS14X:
> s2mps11->rdev_num = ARRAY_SIZE(s2mps14_regulators);
> regulators = s2mps14_regulators;
> @@ -927,6 +1022,7 @@ out:
>
> static const struct platform_device_id s2mps11_pmic_id[] = {
> { "s2mps11-pmic", S2MPS11X},
> + { "s2mps13-pmic", S2MPS13X},
> { "s2mps14-pmic", S2MPS14X},
> { "s2mpu02-pmic", S2MPU02},
> { },
> diff --git a/include/linux/mfd/samsung/core.h b/include/linux/mfd/samsung/core.h
> index 0c0343e..3fdb7cf 100644
> --- a/include/linux/mfd/samsung/core.h
> +++ b/include/linux/mfd/samsung/core.h
> @@ -28,6 +28,7 @@
> #define MIN_800_MV 800000
> #define MIN_750_MV 750000
> #define MIN_600_MV 600000
> +#define MIN_500_MV 500000
>
> /* Macros to represent steps for LDO/BUCK */
> #define STEP_50_MV 50000
> diff --git a/include/linux/mfd/samsung/s2mps13.h b/include/linux/mfd/samsung/s2mps13.h
> new file mode 100644
> index 0000000..ce5dda8
> --- /dev/null
> +++ b/include/linux/mfd/samsung/s2mps13.h
> @@ -0,0 +1,186 @@
> +/*
> + * s2mps13.h
> + *
> + * Copyright (c) 2014 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.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + */
> +
> +#ifndef __LINUX_MFD_S2MPS13_H
> +#define __LINUX_MFD_S2MPS13_H
> +
> +/* S2MPS13 registers */
> +enum s2mps13_reg {
> + S2MPS13_REG_ID,
> + S2MPS13_REG_INT1,
> + S2MPS13_REG_INT2,
> + S2MPS13_REG_INT3,
> + S2MPS13_REG_INT1M,
> + S2MPS13_REG_INT2M,
> + S2MPS13_REG_INT3M,
> + S2MPS13_REG_ST1,
> + S2MPS13_REG_ST2,
> + S2MPS13_REG_PWRONSRC,
> + S2MPS13_REG_OFFSRC,
> + S2MPS13_REG_BU_CHG,
> + S2MPS13_REG_RTCCTRL,
> + S2MPS13_REG_CTRL1,
> + S2MPS13_REG_CTRL2,
> + S2MPS13_REG_RSVD1,
> + S2MPS13_REG_RSVD2,
> + S2MPS13_REG_RSVD3,
> + S2MPS13_REG_RSVD4,
> + S2MPS13_REG_RSVD5,
> + S2MPS13_REG_RSVD6,
> + S2MPS13_REG_CTRL3,
> + S2MPS13_REG_RSVD7,
> + S2MPS13_REG_RSVD8,
> + S2MPS13_REG_WRSTBI,
> + S2MPS13_REG_B1CTRL,
> + S2MPS13_REG_B1OUT,
> + S2MPS13_REG_B2CTRL,
> + S2MPS13_REG_B2OUT,
> + S2MPS13_REG_B3CTRL,
> + S2MPS13_REG_B3OUT,
> + S2MPS13_REG_B4CTRL,
> + S2MPS13_REG_B4OUT,
> + S2MPS13_REG_B5CTRL,
> + S2MPS13_REG_B5OUT,
> + S2MPS13_REG_B6CTRL,
> + S2MPS13_REG_B6OUT,
> + S2MPS13_REG_B7CTRL,
> + S2MPS13_REG_B7OUT,
> + S2MPS13_REG_B8CTRL,
> + S2MPS13_REG_B8OUT,
> + S2MPS13_REG_B9CTRL,
> + S2MPS13_REG_B9OUT,
> + S2MPS13_REG_B10CTRL,
> + S2MPS13_REG_B10OUT,
> + S2MPS13_REG_BB1CTRL,
> + S2MPS13_REG_BB1OUT,
> + S2MPS13_REG_BUCK_RAMP1,
> + S2MPS13_REG_BUCK_RAMP2,
> + S2MPS13_REG_LDO_DVS1,
> + S2MPS13_REG_LDO_DVS2,
> + S2MPS13_REG_LDO_DVS3,
> + S2MPS13_REG_B6OUT2,
> + S2MPS13_REG_L1CTRL,
> + S2MPS13_REG_L2CTRL,
> + S2MPS13_REG_L3CTRL,
> + S2MPS13_REG_L4CTRL,
> + S2MPS13_REG_L5CTRL,
> + S2MPS13_REG_L6CTRL,
> + S2MPS13_REG_L7CTRL,
> + S2MPS13_REG_L8CTRL,
> + S2MPS13_REG_L9CTRL,
> + S2MPS13_REG_L10CTRL,
> + S2MPS13_REG_L11CTRL,
> + S2MPS13_REG_L12CTRL,
> + S2MPS13_REG_L13CTRL,
> + S2MPS13_REG_L14CTRL,
> + S2MPS13_REG_L15CTRL,
> + S2MPS13_REG_L16CTRL,
> + S2MPS13_REG_L17CTRL,
> + S2MPS13_REG_L18CTRL,
> + S2MPS13_REG_L19CTRL,
> + S2MPS13_REG_L20CTRL,
> + S2MPS13_REG_L21CTRL,
> + S2MPS13_REG_L22CTRL,
> + S2MPS13_REG_L23CTRL,
> + S2MPS13_REG_L24CTRL,
> + S2MPS13_REG_L25CTRL,
> + S2MPS13_REG_L26CTRL,
> + S2MPS13_REG_L27CTRL,
> + S2MPS13_REG_L28CTRL,
> + S2MPS13_REG_L30CTRL,
> + S2MPS13_REG_L31CTRL,
> + S2MPS13_REG_L32CTRL,
> + S2MPS13_REG_L33CTRL,
> + S2MPS13_REG_L34CTRL,
> + S2MPS13_REG_L35CTRL,
> + S2MPS13_REG_L36CTRL,
> + S2MPS13_REG_L37CTRL,
> + S2MPS13_REG_L38CTRL,
> + S2MPS13_REG_L39CTRL,
> + S2MPS13_REG_L40CTRL,
> + S2MPS13_REG_LDODSCH1,
> + S2MPS13_REG_LDODSCH2,
> + S2MPS13_REG_LDODSCH3,
> + S2MPS13_REG_LDODSCH4,
> + S2MPS13_REG_LDODSCH5,
> +};
> +
> +/* regulator ids */
> +enum s2mps13_regulators {
> + S2MPS13_LDO1,
> + S2MPS13_LDO2,
> + S2MPS13_LDO3,
> + S2MPS13_LDO4,
> + S2MPS13_LDO5,
> + S2MPS13_LDO6,
> + S2MPS13_LDO7,
> + S2MPS13_LDO8,
> + S2MPS13_LDO9,
> + S2MPS13_LDO10,
> + S2MPS13_LDO11,
> + S2MPS13_LDO12,
> + S2MPS13_LDO13,
> + S2MPS13_LDO14,
> + S2MPS13_LDO15,
> + S2MPS13_LDO16,
> + S2MPS13_LDO17,
> + S2MPS13_LDO18,
> + S2MPS13_LDO19,
> + S2MPS13_LDO20,
> + S2MPS13_LDO21,
> + S2MPS13_LDO22,
> + S2MPS13_LDO23,
> + S2MPS13_LDO24,
> + S2MPS13_LDO25,
> + S2MPS13_LDO26,
> + S2MPS13_LDO27,
> + S2MPS13_LDO28,
> + S2MPS13_LDO29,
> + S2MPS13_LDO30,
> + S2MPS13_LDO31,
> + S2MPS13_LDO32,
> + S2MPS13_LDO33,
> + S2MPS13_LDO34,
> + S2MPS13_LDO35,
> + S2MPS13_LDO36,
> + S2MPS13_LDO37,
> + S2MPS13_LDO38,
> + S2MPS13_LDO39,
> + S2MPS13_LDO40,
> + S2MPS13_BUCK1,
> + S2MPS13_BUCK2,
> + S2MPS13_BUCK3,
> + S2MPS13_BUCK4,
> + S2MPS13_BUCK5,
> + S2MPS13_BUCK6,
> + S2MPS13_BUCK7,
> + S2MPS13_BUCK8,
> + S2MPS13_BUCK9,
> + S2MPS13_BUCK10,
> +
> + S2MPS13_REGULATOR_MAX,
> +};
> +
> +/*
> + * Default ramp delay in uv/us. Datasheet says that ramp delay can be
> + * controlled however it does not specify which register is used for that.
> + * Let's assume that default value will be set.
> + */
> +#define S2MPS13_BUCK_RAMP_DELAY 12500
> +
> +#endif /* __LINUX_MFD_S2MPS13_H */
--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
On Tue, 18 Nov 2014, Chanwoo Choi wrote:
> This patch adds the support for S2MPS13 PMIC clock which is same with existing
> S2MPS14 RTC IP. But, S2MPS13 uses all of clocks (32khz_{ap|bt|cp}).
>
> Cc: Mike Turquette <[email protected]>
> Signed-off-by: Chanwoo Choi <[email protected]>
> Reviewed-by: Krzysztof Kozlowski <[email protected]>
> ---
> drivers/clk/clk-s2mps11.c | 24 ++++++++++++++++++++++++
> 1 file changed, 24 insertions(+)
Applied with Mike's Ack, thanks.
> diff --git a/drivers/clk/clk-s2mps11.c b/drivers/clk/clk-s2mps11.c
> index b7797fb..7bb13af 100644
> --- a/drivers/clk/clk-s2mps11.c
> +++ b/drivers/clk/clk-s2mps11.c
> @@ -23,6 +23,7 @@
> #include <linux/clk-provider.h>
> #include <linux/platform_device.h>
> #include <linux/mfd/samsung/s2mps11.h>
> +#include <linux/mfd/samsung/s2mps13.h>
> #include <linux/mfd/samsung/s2mps14.h>
> #include <linux/mfd/samsung/s5m8767.h>
> #include <linux/mfd/samsung/core.h>
> @@ -120,6 +121,24 @@ static struct clk_init_data s2mps11_clks_init[S2MPS11_CLKS_NUM] = {
> },
> };
>
> +static struct clk_init_data s2mps13_clks_init[S2MPS11_CLKS_NUM] = {
> + [S2MPS11_CLK_AP] = {
> + .name = "s2mps13_ap",
> + .ops = &s2mps11_clk_ops,
> + .flags = CLK_IS_ROOT,
> + },
> + [S2MPS11_CLK_CP] = {
> + .name = "s2mps13_cp",
> + .ops = &s2mps11_clk_ops,
> + .flags = CLK_IS_ROOT,
> + },
> + [S2MPS11_CLK_BT] = {
> + .name = "s2mps13_bt",
> + .ops = &s2mps11_clk_ops,
> + .flags = CLK_IS_ROOT,
> + },
> +};
> +
> static struct clk_init_data s2mps14_clks_init[S2MPS11_CLKS_NUM] = {
> [S2MPS11_CLK_AP] = {
> .name = "s2mps14_ap",
> @@ -184,6 +203,10 @@ static int s2mps11_clk_probe(struct platform_device *pdev)
> s2mps11_reg = S2MPS11_REG_RTC_CTRL;
> clks_init = s2mps11_clks_init;
> break;
> + case S2MPS13X:
> + s2mps11_reg = S2MPS13_REG_RTCCTRL;
> + clks_init = s2mps13_clks_init;
> + break;
> case S2MPS14X:
> s2mps11_reg = S2MPS14_REG_RTCCTRL;
> clks_init = s2mps14_clks_init;
> @@ -279,6 +302,7 @@ static int s2mps11_clk_remove(struct platform_device *pdev)
>
> static const struct platform_device_id s2mps11_clk_id[] = {
> { "s2mps11-clk", S2MPS11X},
> + { "s2mps13-clk", S2MPS13X},
> { "s2mps14-clk", S2MPS14X},
> { "s5m8767-clk", S5M8767X},
> { },
--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
On Tue, 18 Nov 2014, Chanwoo Choi wrote:
> This patch adds the binding documentation for Samsung S2MPS13 PMIC
> which is similiar with existing S2MPS14 PMIC. S2MPS13 has the different number
> of regulators from S2MPS14 and RTC/Clock is the same with the S2MPS14.
>
> Cc: Lee Jones <[email protected]>
> Signed-off-by: Chanwoo Choi <[email protected]>
> Acked-by: Sangbeom Kim <[email protected]>
> Acked-by: Lee Jones <[email protected]>
> Reviewed-by: Krzysztof Kozlowski <[email protected]>
> ---
> Documentation/devicetree/bindings/mfd/s2mps11.txt | 22 ++++++++++++----------
> 1 file changed, 12 insertions(+), 10 deletions(-)
Applied, thanks.
> diff --git a/Documentation/devicetree/bindings/mfd/s2mps11.txt b/Documentation/devicetree/bindings/mfd/s2mps11.txt
> index 0e4026a..57a0450 100644
> --- a/Documentation/devicetree/bindings/mfd/s2mps11.txt
> +++ b/Documentation/devicetree/bindings/mfd/s2mps11.txt
> @@ -1,5 +1,5 @@
>
> -* Samsung S2MPS11, S2MPS14 and S2MPU02 Voltage and Current Regulator
> +* Samsung S2MPS11, S2MPS13, S2MPS14 and S2MPU02 Voltage and Current Regulator
>
> The Samsung S2MPS11 is a multi-function device which includes voltage and
> current regulators, RTC, charger controller and other sub-blocks. It is
> @@ -7,8 +7,8 @@ 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,s2mps11-pmic" or "samsung,s2mps14-pmic"
> - or "samsung,s2mpu02-pmic".
> +- compatible: Should be "samsung,s2mps11-pmic" or "samsung,s2mps13-pmic"
> + or "samsung,s2mps14-pmic" or "samsung,s2mpu02-pmic".
> - reg: Specifies the I2C slave address of the pmic block. It should be 0x66.
>
> Optional properties:
> @@ -17,8 +17,8 @@ Optional properties:
> - interrupts: Interrupt specifiers for interrupt sources.
>
> Optional nodes:
> -- clocks: s2mps11 and s5m8767 provide three(AP/CP/BT) buffered 32.768 KHz
> - outputs, so to register these as clocks with common clock framework
> +- clocks: s2mps11, s2mps13 and s5m8767 provide three(AP/CP/BT) buffered 32.768
> + KHz outputs, so to register these as clocks with common clock framework
> instantiate a sub-node named "clocks". It uses the common clock binding
> documented in :
> [Documentation/devicetree/bindings/clock/clock-bindings.txt]
> @@ -30,12 +30,12 @@ Optional nodes:
> the clock which they consume.
> Clock ID Devices
> ----------------------------------------------------------
> - 32KhzAP 0 S2MPS11, S2MPS14, S5M8767
> - 32KhzCP 1 S2MPS11, S5M8767
> - 32KhzBT 2 S2MPS11, S2MPS14, S5M8767
> + 32KhzAP 0 S2MPS11, S2MPS13, S2MPS14, S5M8767
> + 32KhzCP 1 S2MPS11, S2MPS13, S5M8767
> + 32KhzBT 2 S2MPS11, S2MPS13, S2MPS14, S5M8767
>
> - - compatible: Should be one of: "samsung,s2mps11-clk", "samsung,s2mps14-clk",
> - "samsung,s5m8767-clk"
> + - compatible: Should be one of: "samsung,s2mps11-clk", "samsung,s2mps13-clk",
> + "samsung,s2mps14-clk", "samsung,s5m8767-clk"
>
> - regulators: The regulators of s2mps11 that have to be instantiated should be
> included in a sub-node named 'regulators'. Regulator nodes included in this
> @@ -81,12 +81,14 @@ as per the datasheet of s2mps11.
> - LDOn
> - valid values for n are:
> - S2MPS11: 1 to 38
> + - S2MPS13: 1 to 40
> - S2MPS14: 1 to 25
> - S2MPU02: 1 to 28
> - Example: LDO1, LDO2, LDO28
> - BUCKn
> - valid values for n are:
> - S2MPS11: 1 to 10
> + - S2MPS13: 1 to 10
> - S2MPS14: 1 to 5
> - S2MPU02: 1 to 7
> - Example: BUCK1, BUCK2, BUCK9
--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
Mark, Mike,
Please merge this into your trees for v3.19.
The following changes since commit f114040e3ea6e07372334ade75d1ee0775c355e1:
Linux 3.18-rc1 (2014-10-19 18:08:38 -0700)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd.git tags/ib-mfd-regulator-clk-v3.19
for you to fetch changes up to 159a5e920446aed12fe373ecc3c7b3dc667091ae:
mfd: s2mps11: Add binding documentation for Samsung S2MPS13 PMIC (2014-11-25 15:55:12 +0000)
----------------------------------------------------------------
Immutable branch between MFD, Regulator and Clk, due for v3.19
----------------------------------------------------------------
Chanwoo Choi (4):
mfd: sec-core: Add support for S2MPS13 device
regulator: s2mps11: Add support S2MPS13 regulator device
clk: s2mps11: Add the support for S2MPS13 PMIC clock
mfd: s2mps11: Add binding documentation for Samsung S2MPS13 PMIC
Documentation/devicetree/bindings/mfd/s2mps11.txt | 22 +--
drivers/clk/clk-s2mps11.c | 24 +++
drivers/mfd/sec-core.c | 29 ++++
drivers/mfd/sec-irq.c | 23 ++-
drivers/regulator/Kconfig | 10 +-
drivers/regulator/s2mps11.c | 102 +++++++++++-
include/linux/mfd/samsung/core.h | 2 +
include/linux/mfd/samsung/s2mps13.h | 186 ++++++++++++++++++++++
8 files changed, 374 insertions(+), 24 deletions(-)
create mode 100644 include/linux/mfd/samsung/s2mps13.h
--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
Quoting Lee Jones (2014-11-25 07:59:18)
> Mark, Mike,
>
> Please merge this into your trees for v3.19.
>
> The following changes since commit f114040e3ea6e07372334ade75d1ee0775c355e1:
>
> Linux 3.18-rc1 (2014-10-19 18:08:38 -0700)
>
> are available in the git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd.git tags/ib-mfd-regulator-clk-v3.19
>
> for you to fetch changes up to 159a5e920446aed12fe373ecc3c7b3dc667091ae:
>
> mfd: s2mps11: Add binding documentation for Samsung S2MPS13 PMIC (2014-11-25 15:55:12 +0000)
Pulled.
Thanks,
Mike
>
> ----------------------------------------------------------------
> Immutable branch between MFD, Regulator and Clk, due for v3.19
>
> ----------------------------------------------------------------
> Chanwoo Choi (4):
> mfd: sec-core: Add support for S2MPS13 device
> regulator: s2mps11: Add support S2MPS13 regulator device
> clk: s2mps11: Add the support for S2MPS13 PMIC clock
> mfd: s2mps11: Add binding documentation for Samsung S2MPS13 PMIC
>
> Documentation/devicetree/bindings/mfd/s2mps11.txt | 22 +--
> drivers/clk/clk-s2mps11.c | 24 +++
> drivers/mfd/sec-core.c | 29 ++++
> drivers/mfd/sec-irq.c | 23 ++-
> drivers/regulator/Kconfig | 10 +-
> drivers/regulator/s2mps11.c | 102 +++++++++++-
> include/linux/mfd/samsung/core.h | 2 +
> include/linux/mfd/samsung/s2mps13.h | 186 ++++++++++++++++++++++
> 8 files changed, 374 insertions(+), 24 deletions(-)
> create mode 100644 include/linux/mfd/samsung/s2mps13.h
>
> --
> Lee Jones
> Linaro STMicroelectronics Landing Team Lead
> Linaro.org │ Open source software for ARM SoCs
> Follow Linaro: Facebook | Twitter | Blog