lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250914124227.2619925-5-ivo.ivanov.ivanov1@gmail.com>
Date: Sun, 14 Sep 2025 15:42:24 +0300
From: Ivaylo Ivanov <ivo.ivanov.ivanov1@...il.com>
To: Krzysztof Kozlowski <krzk@...nel.org>,
	André Draszik <andre.draszik@...aro.org>,
	Sylwester Nawrocki <s.nawrocki@...sung.com>,
	Chanwoo Choi <cw00.choi@...sung.com>,
	Alim Akhtar <alim.akhtar@...sung.com>,
	Michael Turquette <mturquette@...libre.com>,
	Stephen Boyd <sboyd@...nel.org>,
	Rob Herring <robh@...nel.org>,
	Conor Dooley <conor+dt@...nel.org>,
	Lee Jones <lee@...nel.org>,
	Liam Girdwood <lgirdwood@...il.com>,
	Mark Brown <broonie@...nel.org>,
	Alexandre Belloni <alexandre.belloni@...tlin.com>
Cc: linux-samsung-soc@...r.kernel.org,
	devicetree@...r.kernel.org,
	linux-clk@...r.kernel.org,
	linux-rtc@...r.kernel.org,
	linux-kernel@...r.kernel.org
Subject: [PATCH v1 4/7] mfd: sec: add support for s2mps16 pmic

Add support for Samsung's s2mps16 pmic. It's the primary PMIC used by
exynos8890 devices. It houses regulators (38 LDOs and 11 BUCKs), three
32.768KHz clock outputs and an RTC device.

Signed-off-by: Ivaylo Ivanov <ivo.ivanov.ivanov1@...il.com>
---
 drivers/mfd/sec-common.c            |  10 ++
 drivers/mfd/sec-i2c.c               |  16 +++
 drivers/mfd/sec-irq.c               |  46 +++++++
 include/linux/mfd/samsung/core.h    |   1 +
 include/linux/mfd/samsung/irq.h     |  66 ++++++++++
 include/linux/mfd/samsung/s2mps16.h | 195 ++++++++++++++++++++++++++++
 6 files changed, 334 insertions(+)
 create mode 100644 include/linux/mfd/samsung/s2mps16.h

diff --git a/drivers/mfd/sec-common.c b/drivers/mfd/sec-common.c
index 42d55e70e..1f21d0d26 100644
--- a/drivers/mfd/sec-common.c
+++ b/drivers/mfd/sec-common.c
@@ -65,6 +65,12 @@ static const struct mfd_cell s2mps15_devs[] = {
 	MFD_CELL_OF("s2mps13-clk", NULL, NULL, 0, 0, "samsung,s2mps13-clk"),
 };
 
+static const struct mfd_cell s2mps16_devs[] = {
+	MFD_CELL_NAME("s2mps16-regulator"),
+	MFD_CELL_NAME("s2mps16-rtc"),
+	MFD_CELL_OF("s2mps16-clk", NULL, NULL, 0, 0, "samsung,s2mps16-clk"),
+};
+
 static const struct mfd_cell s2mpa01_devs[] = {
 	MFD_CELL_NAME("s2mpa01-pmic"),
 	MFD_CELL_NAME("s2mps14-rtc"),
@@ -206,6 +212,10 @@ int sec_pmic_probe(struct device *dev, int device_type, unsigned int irq,
 		sec_devs = s2mps15_devs;
 		num_sec_devs = ARRAY_SIZE(s2mps15_devs);
 		break;
+	case S2MPS16X:
+		sec_devs = s2mps16_devs;
+		num_sec_devs = ARRAY_SIZE(s2mps16_devs);
+		break;
 	case S2MPU02:
 		sec_devs = s2mpu02_devs;
 		num_sec_devs = ARRAY_SIZE(s2mpu02_devs);
diff --git a/drivers/mfd/sec-i2c.c b/drivers/mfd/sec-i2c.c
index 3132b849b..6b0a8e927 100644
--- a/drivers/mfd/sec-i2c.c
+++ b/drivers/mfd/sec-i2c.c
@@ -16,6 +16,7 @@
 #include <linux/mfd/samsung/s2mps13.h>
 #include <linux/mfd/samsung/s2mps14.h>
 #include <linux/mfd/samsung/s2mps15.h>
+#include <linux/mfd/samsung/s2mps16.h>
 #include <linux/mfd/samsung/s2mpu02.h>
 #include <linux/mfd/samsung/s5m8767.h>
 #include <linux/mod_devicetable.h>
@@ -116,6 +117,15 @@ static const struct regmap_config s2mps15_regmap_config = {
 	.cache_type = REGCACHE_FLAT,
 };
 
+static const struct regmap_config s2mps16_regmap_config = {
+	.reg_bits = 8,
+	.val_bits = 8,
+
+	.max_register = S2MPS16_REG_VTH_OFFSET,
+	.volatile_reg = s2mps11_volatile,
+	.cache_type = REGCACHE_FLAT,
+};
+
 static const struct regmap_config s2mpu02_regmap_config = {
 	.reg_bits = 8,
 	.val_bits = 8,
@@ -193,6 +203,11 @@ static const struct sec_pmic_i2c_platform_data s2mps15_data = {
 	.device_type = S2MPS15X,
 };
 
+static const struct sec_pmic_i2c_platform_data s2mps16_data = {
+	.regmap_cfg = &s2mps16_regmap_config,
+	.device_type = S2MPS16X,
+};
+
 static const struct sec_pmic_i2c_platform_data s2mpu02_data = {
 	.regmap_cfg = &s2mpu02_regmap_config,
 	.device_type = S2MPU02,
@@ -215,6 +230,7 @@ static const struct of_device_id sec_pmic_i2c_of_match[] = {
 	{ .compatible = "samsung,s2mps13-pmic", .data = &s2mps13_data, },
 	{ .compatible = "samsung,s2mps14-pmic", .data = &s2mps14_data, },
 	{ .compatible = "samsung,s2mps15-pmic", .data = &s2mps15_data, },
+	{ .compatible = "samsung,s2mps16-pmic", .data = &s2mps16_data, },
 	{ .compatible = "samsung,s2mpu02-pmic", .data = &s2mpu02_data, },
 	{ .compatible = "samsung,s2mpu05-pmic", .data = &s2mpu05_data, },
 	{ .compatible = "samsung,s5m8767-pmic", .data = &s5m8767_data, },
diff --git a/drivers/mfd/sec-irq.c b/drivers/mfd/sec-irq.c
index c5c80b1ba..c0bdc4314 100644
--- a/drivers/mfd/sec-irq.c
+++ b/drivers/mfd/sec-irq.c
@@ -116,6 +116,39 @@ static const struct regmap_irq s2mps14_irqs[] = {
 	REGMAP_IRQ_REG(S2MPS14_IRQ_TSD, 2, S2MPS14_IRQ_TSD_MASK),
 };
 
+static const struct regmap_irq s2mps16_irqs[] = {
+	REGMAP_IRQ_REG(S2MPS16_IRQ_PWRONF, 0, S2MPS16_IRQ_PWRONF_MASK),
+	REGMAP_IRQ_REG(S2MPS16_IRQ_PWRONR, 0, S2MPS16_IRQ_PWRONR_MASK),
+	REGMAP_IRQ_REG(S2MPS16_IRQ_JIGONBF, 0, S2MPS16_IRQ_JIGONBF_MASK),
+	REGMAP_IRQ_REG(S2MPS16_IRQ_JIGONBR, 0, S2MPS16_IRQ_JIGONBR_MASK),
+	REGMAP_IRQ_REG(S2MPS16_IRQ_ACOKBF, 0, S2MPS16_IRQ_ACOKBF_MASK),
+	REGMAP_IRQ_REG(S2MPS16_IRQ_ACOKBR, 0, S2MPS16_IRQ_ACOKBR_MASK),
+	REGMAP_IRQ_REG(S2MPS16_IRQ_PWRON1S, 0, S2MPS16_IRQ_PWRON1S_MASK),
+	REGMAP_IRQ_REG(S2MPS16_IRQ_MRB, 0, S2MPS16_IRQ_MRB_MASK),
+
+	REGMAP_IRQ_REG(S2MPS16_IRQ_RTC60S, 1, S2MPS16_IRQ_RTC60S_MASK),
+	REGMAP_IRQ_REG(S2MPS16_IRQ_RTCA1, 1, S2MPS16_IRQ_RTCA1_MASK),
+	REGMAP_IRQ_REG(S2MPS16_IRQ_RTCA0, 1, S2MPS16_IRQ_RTCA0_MASK),
+	REGMAP_IRQ_REG(S2MPS16_IRQ_SMPL, 1, S2MPS16_IRQ_SMPL_MASK),
+	REGMAP_IRQ_REG(S2MPS16_IRQ_RTC1S, 1, S2MPS16_IRQ_RTC1S_MASK),
+	REGMAP_IRQ_REG(S2MPS16_IRQ_WTSR, 1, S2MPS16_IRQ_WTSR_MASK),
+	REGMAP_IRQ_REG(S2MPS16_IRQ_WRSTB, 1, S2MPS16_IRQ_WRSTB_MASK),
+
+	REGMAP_IRQ_REG(S2MPS16_IRQ_INT120C, 2, S2MPS16_IRQ_INT120C_MASK),
+	REGMAP_IRQ_REG(S2MPS16_IRQ_INT140C, 2, S2MPS16_IRQ_INT140C_MASK),
+	REGMAP_IRQ_REG(S2MPS16_IRQ_TSD, 2, S2MPS16_IRQ_TSD_MASK),
+	REGMAP_IRQ_REG(S2MPS16_IRQ_ADCDONE, 2, S2MPS16_IRQ_ADCDONE_MASK),
+
+	REGMAP_IRQ_REG(S2MPS16_IRQ_OC0, 3, S2MPS16_IRQ_OC0_MASK),
+	REGMAP_IRQ_REG(S2MPS16_IRQ_OC1, 3, S2MPS16_IRQ_OC1_MASK),
+	REGMAP_IRQ_REG(S2MPS16_IRQ_OC2, 3, S2MPS16_IRQ_OC2_MASK),
+	REGMAP_IRQ_REG(S2MPS16_IRQ_OC3, 3, S2MPS16_IRQ_OC3_MASK),
+	REGMAP_IRQ_REG(S2MPS16_IRQ_OC4, 3, S2MPS16_IRQ_OC4_MASK),
+	REGMAP_IRQ_REG(S2MPS16_IRQ_OC5, 3, S2MPS16_IRQ_OC5_MASK),
+	REGMAP_IRQ_REG(S2MPS16_IRQ_OC6, 3, S2MPS16_IRQ_OC6_MASK),
+	REGMAP_IRQ_REG(S2MPS16_IRQ_OC7, 3, S2MPS16_IRQ_OC7_MASK),
+};
+
 static const struct regmap_irq s2mpu02_irqs[] = {
 	REGMAP_IRQ_REG(S2MPU02_IRQ_PWRONF, 0, S2MPS11_IRQ_PWRONF_MASK),
 	REGMAP_IRQ_REG(S2MPU02_IRQ_PWRONR, 0, S2MPS11_IRQ_PWRONR_MASK),
@@ -223,6 +256,16 @@ static const struct regmap_irq_chip s2mps15_irq_chip = {
 	S2MPS1X_IRQ_CHIP_COMMON_DATA,
 };
 
+static const struct regmap_irq_chip s2mps16_irq_chip = {
+	.name = "s2mps16",
+	.irqs = s2mps16_irqs,
+	.num_irqs = ARRAY_SIZE(s2mps16_irqs),
+	.num_regs = 4,
+	.status_base = S2MPS14_REG_INT1,
+	.mask_base = S2MPS11_REG_INT1M,
+	.ack_base = S2MPS11_REG_INT1,
+};
+
 static const struct regmap_irq_chip s2mpu02_irq_chip = {
 	.name = "s2mpu02",
 	.irqs = s2mpu02_irqs,
@@ -282,6 +325,9 @@ int sec_irq_init(struct sec_pmic_dev *sec_pmic)
 	case S2MPS15X:
 		sec_irq_chip = &s2mps15_irq_chip;
 		break;
+	case S2MPS16X:
+		sec_irq_chip = &s2mps16_irq_chip;
+		break;
 	case S2MPU02:
 		sec_irq_chip = &s2mpu02_irq_chip;
 		break;
diff --git a/include/linux/mfd/samsung/core.h b/include/linux/mfd/samsung/core.h
index d785e101f..d99fa609f 100644
--- a/include/linux/mfd/samsung/core.h
+++ b/include/linux/mfd/samsung/core.h
@@ -44,6 +44,7 @@ enum sec_device_type {
 	S2MPS13X,
 	S2MPS14X,
 	S2MPS15X,
+	S2MPS16X,
 	S2MPU02,
 	S2MPU05,
 };
diff --git a/include/linux/mfd/samsung/irq.h b/include/linux/mfd/samsung/irq.h
index b4805cbd9..e62d00188 100644
--- a/include/linux/mfd/samsung/irq.h
+++ b/include/linux/mfd/samsung/irq.h
@@ -226,6 +226,72 @@ enum s2mps14_irq {
 	S2MPS14_IRQ_NR,
 };
 
+enum s2mps16_irq {
+	S2MPS16_IRQ_PWRONF,
+	S2MPS16_IRQ_PWRONR,
+	S2MPS16_IRQ_JIGONBF,
+	S2MPS16_IRQ_JIGONBR,
+	S2MPS16_IRQ_ACOKBF,
+	S2MPS16_IRQ_ACOKBR,
+	S2MPS16_IRQ_PWRON1S,
+	S2MPS16_IRQ_MRB,
+
+	S2MPS16_IRQ_RTC60S,
+	S2MPS16_IRQ_RTCA1,
+	S2MPS16_IRQ_RTCA0,
+	S2MPS16_IRQ_SMPL,
+	S2MPS16_IRQ_RTC1S,
+	S2MPS16_IRQ_WTSR,
+	S2MPS16_IRQ_WRSTB,
+
+	S2MPS16_IRQ_INT120C,
+	S2MPS16_IRQ_INT140C,
+	S2MPS16_IRQ_TSD,
+	S2MPS16_IRQ_ADCDONE,
+
+	S2MPS16_IRQ_OC0,
+	S2MPS16_IRQ_OC1,
+	S2MPS16_IRQ_OC2,
+	S2MPS16_IRQ_OC3,
+	S2MPS16_IRQ_OC4,
+	S2MPS16_IRQ_OC5,
+	S2MPS16_IRQ_OC6,
+	S2MPS16_IRQ_OC7,
+
+	S2MPS16_IRQ_NR,
+};
+
+#define S2MPS16_IRQ_PWRONF_MASK		BIT(0)
+#define S2MPS16_IRQ_PWRONR_MASK		BIT(1)
+#define S2MPS16_IRQ_JIGONBF_MASK	BIT(2)
+#define S2MPS16_IRQ_JIGONBR_MASK	BIT(3)
+#define S2MPS16_IRQ_ACOKBF_MASK		BIT(4)
+#define S2MPS16_IRQ_ACOKBR_MASK		BIT(5)
+#define S2MPS16_IRQ_PWRON1S_MASK	BIT(6)
+#define S2MPS16_IRQ_MRB_MASK		BIT(7)
+
+#define S2MPS16_IRQ_RTC60S_MASK		BIT(0)
+#define S2MPS16_IRQ_RTCA1_MASK		BIT(1)
+#define S2MPS16_IRQ_RTCA0_MASK		BIT(2)
+#define S2MPS16_IRQ_SMPL_MASK		BIT(3)
+#define S2MPS16_IRQ_RTC1S_MASK		BIT(4)
+#define S2MPS16_IRQ_WTSR_MASK		BIT(5)
+#define S2MPS16_IRQ_WRSTB_MASK		BIT(7)
+
+#define S2MPS16_IRQ_INT120C_MASK	BIT(0)
+#define S2MPS16_IRQ_INT140C_MASK	BIT(1)
+#define S2MPS16_IRQ_TSD_MASK		BIT(2)
+#define S2MPS16_IRQ_ADCDONE_MASK	BIT(7)
+
+#define S2MPS16_IRQ_OC0_MASK		BIT(0)
+#define S2MPS16_IRQ_OC1_MASK		BIT(1)
+#define S2MPS16_IRQ_OC2_MASK		BIT(2)
+#define S2MPS16_IRQ_OC3_MASK		BIT(3)
+#define S2MPS16_IRQ_OC4_MASK		BIT(4)
+#define S2MPS16_IRQ_OC5_MASK		BIT(5)
+#define S2MPS16_IRQ_OC6_MASK		BIT(6)
+#define S2MPS16_IRQ_OC7_MASK		BIT(7)
+
 enum s2mpu02_irq {
 	S2MPU02_IRQ_PWRONF,
 	S2MPU02_IRQ_PWRONR,
diff --git a/include/linux/mfd/samsung/s2mps16.h b/include/linux/mfd/samsung/s2mps16.h
new file mode 100644
index 000000000..d4394b054
--- /dev/null
+++ b/include/linux/mfd/samsung/s2mps16.h
@@ -0,0 +1,195 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd
+ * Copyright (c) 2025 Ivaylo Ivanov <ivo.ivanov.ivanov1@...il.com>
+ */
+
+#ifndef __LINUX_MFD_S2MPS16_H
+#define __LINUX_MFD_S2MPS16_H
+
+/* S2MPS16 registers */
+enum S2MPS16_reg {
+	S2MPS16_REG_ID,
+	S2MPS16_REG_INT1,
+	S2MPS16_REG_INT2,
+	S2MPS16_REG_INT3,
+	S2MPS16_REG_INT4,
+	S2MPS16_REG_INT1M,
+	S2MPS16_REG_INT2M,
+	S2MPS16_REG_INT3M,
+	S2MPS16_REG_INT4M,
+	S2MPS16_REG_ST1,
+	S2MPS16_REG_ST2,
+	S2MPS16_REG_PWRONSRC,
+	S2MPS16_REG_OFFSRC,
+	S2MPS16_REG_BU_CHG,
+	S2MPS16_REG_RTC_BUF,
+	S2MPS16_REG_CTRL1,
+	S2MPS16_REG_CTRL2,
+	S2MPS16_REG_ETC_TEST,
+	S2MPS16_REG_OTP_ADRL,
+	S2MPS16_REG_OTP_ADRH,
+	S2MPS16_REG_OTP_DATA,
+	S2MPS16_REG_CTRL3,
+	S2MPS16_REG_ETC_OTP,
+	S2MPS16_REG_UVLO_OTP,
+	S2MPS16_REG_CFG1,
+	S2MPS16_REG_CFG2,
+	S2MPS16_REG_B1CTRL1,
+	S2MPS16_REG_B1CTRL2,
+	S2MPS16_REG_B2CTRL1,
+	S2MPS16_REG_B2CTRL2,
+	S2MPS16_REG_B3CTRL1,
+	S2MPS16_REG_B3CTRL2,
+	S2MPS16_REG_B4CTRL1,
+	S2MPS16_REG_B4CTRL2,
+	S2MPS16_REG_B5CTRL1,
+	S2MPS16_REG_B5CTRL2,
+	S2MPS16_REG_B6CTRL1,
+	S2MPS16_REG_B6CTRL2,
+	S2MPS16_REG_B6CTRL3,
+	S2MPS16_REG_B7CTRL1,
+	S2MPS16_REG_B7CTRL2,
+	S2MPS16_REG_B8CTRL1,
+	S2MPS16_REG_B8CTRL2,
+	S2MPS16_REG_B9CTRL1,
+	S2MPS16_REG_B9CTRL2,
+	/* buck10 is used for CP */
+	S2MPS16_REG_B11CTRL1 = 0x30,
+	S2MPS16_REG_B11CTRL2,
+	S2MPS16_REG_BB1CTRL1,
+	S2MPS16_REG_BB1CTRL2,
+	S2MPS16_REG_BUCK_RAMP,
+	S2MPS16_REG_LDO7_DVS,
+	S2MPS16_REG_LDO8_DVS,
+	S2MPS16_REG_LDO9_DVS,
+	S2MPS16_REG_LDO10_DVS,
+	S2MPS16_REG_LDO11_DVS,
+	S2MPS16_REG_L1CTRL,
+	S2MPS16_REG_L2CTRL,
+	S2MPS16_REG_L3CTRL,
+	S2MPS16_REG_L4CTRL,
+	S2MPS16_REG_L5CTRL,
+	S2MPS16_REG_L6CTRL,
+	S2MPS16_REG_L7CTRL,
+	S2MPS16_REG_L8CTRL,
+	S2MPS16_REG_L9CTRL,
+	S2MPS16_REG_L10CTRL,
+	S2MPS16_REG_L11CTRL,
+	S2MPS16_REG_L12CTRL,
+	S2MPS16_REG_L13CTRL,
+	/* ldo14 to 24 are used for CP */
+	S2MPS16_REG_L25CTRL = 0x55,
+	S2MPS16_REG_L26CTRL,
+	S2MPS16_REG_L27CTRL,
+	S2MPS16_REG_L28CTRL,
+	S2MPS16_REG_L29CTRL,
+	S2MPS16_REG_L30CTRL,
+	S2MPS16_REG_L31CTRL,
+	S2MPS16_REG_L32CTRL,
+	S2MPS16_REG_L33CTRL,
+	S2MPS16_REG_L34CTRL,
+	S2MPS16_REG_L35CTRL,
+	S2MPS16_REG_L36CTRL,
+	S2MPS16_REG_L37CTRL,
+	S2MPS16_REG_L38CTRL,
+	S2MPS16_REG_LDO_DSCH,
+	S2MPS16_REG_LDO_CTRL0,
+	S2MPS16_REG_LDO_CTRL1,
+	S2MPS16_REG_LDO_CTRL2,
+	S2MPS16_REG_LDO_OCP,
+	S2MPS16_REG_IOCONF,
+	S2MPS16_REG_AVP,
+	S2MPS16_REG_ADC_CTRL1,
+	S2MPS16_REG_ADC_CTRL2,
+	S2MPS16_REG_ADC_DATA,
+	S2MPS16_REG_TCXO_CTRL,
+	S2MPS16_REG_SELMIF,
+	S2MPS16_REG_SQE_CTRL,
+	S2MPS16_REG_VTH_OFFSET = 0xFF,
+};
+
+/* S2MPS16 regulator ids */
+enum S2MPS16_regulators {
+	S2MPS16_LDO1,
+	S2MPS16_LDO2,
+	S2MPS16_LDO3,
+	S2MPS16_LDO4,
+	S2MPS16_LDO5,
+	S2MPS16_LDO6,
+	S2MPS16_LDO7,
+	S2MPS16_LDO8,
+	S2MPS16_LDO9,
+	S2MPS16_LDO10,
+	S2MPS16_LDO11,
+	S2MPS16_LDO12,
+	S2MPS16_LDO13,
+	/* ldo14 to 24 are used for CP */
+	S2MPS16_LDO25,
+	S2MPS16_LDO26,
+	S2MPS16_LDO27,
+	S2MPS16_LDO28,
+	S2MPS16_LDO29,
+	S2MPS16_LDO30,
+	S2MPS16_LDO31,
+	S2MPS16_LDO32,
+	S2MPS16_LDO33,
+	S2MPS16_LDO34,
+	S2MPS16_LDO35,
+	S2MPS16_LDO36,
+	S2MPS16_LDO37,
+	S2MPS16_LDO38,
+	S2MPS16_BUCK1,
+	S2MPS16_BUCK2,
+	S2MPS16_BUCK3,
+	S2MPS16_BUCK4,
+	S2MPS16_BUCK5,
+	S2MPS16_BUCK6,
+	S2MPS16_BUCK7,
+	S2MPS16_BUCK8,
+	S2MPS16_BUCK9,
+	/* buck10 is used for CP */
+	S2MPS16_BUCK11,
+	S2MPS16_REG_MAX,
+};
+
+#define S2MPS16_BUCK_MIN1		300000
+#define S2MPS16_BUCK_MIN2		600000
+#define S2MPS16_BUCK_MIN3		2600000
+#define S2MPS16_BUCK_STEP1		6250
+#define S2MPS16_BUCK_STEP2		12500
+
+#define S2MPS16_LDO_MIN1		300000
+#define S2MPS16_LDO_MIN2		500000
+#define S2MPS16_LDO_MIN3		700000
+#define S2MPS16_LDO_MIN4		1800000
+#define S2MPS16_LDO_STEP1		12500
+#define S2MPS16_LDO_STEP2		25000
+
+#define S2MPS16_ENABLE_SHIFT		0x06
+#define S2MPS16_LDO_VSEL_MASK		0x3F
+#define S2MPS16_BUCK_VSEL_MASK		0xFF
+#define S2MPS16_ENABLE_MASK		(0x03 << S2MPS16_ENABLE_SHIFT)
+#define S2MPS16_LDO_N_VOLTAGES		(S2MPS16_LDO_VSEL_MASK + 1)
+#define S2MPS16_BUCK_N_VOLTAGES		(S2MPS16_BUCK_VSEL_MASK + 1)
+
+#define S2MPS16_BUCK_RAMP_SHIFT1	6
+#define S2MPS16_BUCK_RAMP_SHIFT2	4
+#define S2MPS16_BUCK_RAMP_SHIFT3	2
+#define S2MPS16_BUCK_RAMP_SHIFT4	0
+#define S2MPS16_BUCK_RAMP_MASK		0x3
+
+#define S2MPS16_ENABLE_TIME_LDO		128
+#define S2MPS16_ENABLE_TIME_BUCK1	95
+#define S2MPS16_ENABLE_TIME_BUCK2	95
+#define S2MPS16_ENABLE_TIME_BUCK3	95
+#define S2MPS16_ENABLE_TIME_BUCK4	95
+#define S2MPS16_ENABLE_TIME_BUCK5	95
+#define S2MPS16_ENABLE_TIME_BUCK6	128
+#define S2MPS16_ENABLE_TIME_BUCK7	95
+#define S2MPS16_ENABLE_TIME_BUCK8	106
+#define S2MPS16_ENABLE_TIME_BUCK9	150
+#define S2MPS16_ENABLE_TIME_BUCK10	95
+#define S2MPS16_ENABLE_TIME_BUCK11	95
+
+#endif /*  __LINUX_MFD_S2MPS16_H */
-- 
2.43.0


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ