summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllen Jiang <alljiang@google.com>2023-07-28 21:26:59 +0000
committerAllen Jiang <alljiang@google.com>2023-08-02 20:13:48 +0000
commit8f9ccf41f6af8d4d7beb0c5326d479d3a4f6cb69 (patch)
tree97616300f46304cf1720414ccff898d9ae6422c9
parent7e253cab2f2fa0a33773105164012d06b0a6e966 (diff)
downloadgs-8f9ccf41f6af8d4d7beb0c5326d479d3a4f6cb69.tar.gz
pmic: Add OCP_WARN debounce configurability
Bug: 288526327 Signed-off-by: Allen Jiang <alljiang@google.com> Change-Id: I90a19dff0590f6ea73b1ef94cc89468df714b346
-rw-r--r--drivers/regulator/s2mpg14-regulator.c38
-rw-r--r--drivers/regulator/s2mpg15-regulator.c16
-rw-r--r--include/linux/mfd/samsung/s2mpg14.h6
-rw-r--r--include/linux/mfd/samsung/s2mpg15.h2
4 files changed, 62 insertions, 0 deletions
diff --git a/drivers/regulator/s2mpg14-regulator.c b/drivers/regulator/s2mpg14-regulator.c
index 967ffd9f2..5ab869f98 100644
--- a/drivers/regulator/s2mpg14-regulator.c
+++ b/drivers/regulator/s2mpg14-regulator.c
@@ -403,6 +403,9 @@ static int s2mpg14_pmic_dt_parse_pdata(struct s2mpg14_dev *iodev,
ret = of_property_read_u32(pmic_np, "b2_ocp_warn_lvl", &val);
pdata->b2_ocp_warn_lvl = ret ? 0 : val;
+ ret = of_property_read_u32(pmic_np, "b2_ocp_warn_debounce_clk", &val);
+ pdata->b2_ocp_warn_debounce_clk = ret ? 0 : val;
+
pdata->b3_ocp_warn_pin = of_get_gpio(pmic_np, 1);
if (pdata->b3_ocp_warn_pin < 0)
dev_err(iodev->dev, "b3_ocp_warn_pin < 0: %d\n",
@@ -417,6 +420,9 @@ static int s2mpg14_pmic_dt_parse_pdata(struct s2mpg14_dev *iodev,
ret = of_property_read_u32(pmic_np, "b3_ocp_warn_dvs_mask", &val);
pdata->b3_ocp_warn_dvs_mask = ret ? 0 : val;
+ ret = of_property_read_u32(pmic_np, "b3_ocp_warn_debounce_clk", &val);
+ pdata->b3_ocp_warn_debounce_clk = ret ? 0 : val;
+
ret = of_property_read_u32(pmic_np, "b3_ocp_warn_lvl", &val);
pdata->b3_ocp_warn_lvl = ret ? 0 : val;
@@ -437,6 +443,9 @@ static int s2mpg14_pmic_dt_parse_pdata(struct s2mpg14_dev *iodev,
ret = of_property_read_u32(pmic_np, "b7_ocp_warn_lvl", &val);
pdata->b7_ocp_warn_lvl = ret ? 0 : val;
+ ret = of_property_read_u32(pmic_np, "b7_ocp_warn_debounce_clk", &val);
+ pdata->b7_ocp_warn_debounce_clk = ret ? 0 : val;
+
/* parse SOFT_OCP_WARN information */
pdata->b2_soft_ocp_warn_pin = of_get_gpio(pmic_np, 4);
if (pdata->b2_soft_ocp_warn_pin < 0)
@@ -455,6 +464,9 @@ static int s2mpg14_pmic_dt_parse_pdata(struct s2mpg14_dev *iodev,
ret = of_property_read_u32(pmic_np, "b2_soft_ocp_warn_lvl", &val);
pdata->b2_soft_ocp_warn_lvl = ret ? 0 : val;
+ ret = of_property_read_u32(pmic_np, "b2_soft_ocp_warn_debounce_clk", &val);
+ pdata->b2_soft_ocp_warn_debounce_clk = ret ? 0 : val;
+
pdata->b3_soft_ocp_warn_pin = of_get_gpio(pmic_np, 3);
if (pdata->b3_soft_ocp_warn_pin < 0)
dev_err(iodev->dev, "b3_soft_ocp_warn_pin < 0: %d\n",
@@ -472,6 +484,9 @@ static int s2mpg14_pmic_dt_parse_pdata(struct s2mpg14_dev *iodev,
ret = of_property_read_u32(pmic_np, "b3_soft_ocp_warn_lvl", &val);
pdata->b3_soft_ocp_warn_lvl = ret ? 0 : val;
+ ret = of_property_read_u32(pmic_np, "b3_soft_ocp_warn_debounce_clk", &val);
+ pdata->b3_soft_ocp_warn_debounce_clk = ret ? 0 : val;
+
pdata->b7_soft_ocp_warn_pin = of_get_gpio(pmic_np, 6);
if (pdata->b7_soft_ocp_warn_pin < 0)
dev_err(iodev->dev, "b7_soft_ocp_warn_pin < 0: %d\n",
@@ -489,6 +504,9 @@ static int s2mpg14_pmic_dt_parse_pdata(struct s2mpg14_dev *iodev,
ret = of_property_read_u32(pmic_np, "b7_soft_ocp_warn_lvl", &val);
pdata->b7_soft_ocp_warn_lvl = ret ? 0 : val;
+ ret = of_property_read_u32(pmic_np, "b7_soft_ocp_warn_debounce_clk", &val);
+ pdata->b7_soft_ocp_warn_debounce_clk = ret ? 0 : val;
+
/* Set SEL_VGPIO (control_sel) */
p = of_get_property(pmic_np, "sel_vgpio", &len);
if (!p) {
@@ -783,6 +801,16 @@ int s2mpg14_ocp_warn(struct s2mpg14_pmic *s2mpg14,
if (ret)
pr_err("i2c write error setting b7m_ocp_warn\n");
+ val = (pdata->b2_ocp_warn_debounce_clk << 4) |
+ (pdata->b3_ocp_warn_debounce_clk << 2) |
+ (pdata->b7_ocp_warn_debounce_clk);
+
+ ret = s2mpg14_write_reg(s2mpg14->i2c, S2MPG14_PM_OCP_WARN_DEBOUNCE,
+ val);
+
+ if (ret)
+ pr_err("i2c write error setting ocp_warn debounce\n");
+
val = (pdata->b2_soft_ocp_warn_en << S2MPG14_OCP_WARN_EN_SHIFT) |
(pdata->b2_soft_ocp_warn_cnt << S2MPG14_OCP_WARN_CNT_SHIFT) |
(pdata->b2_soft_ocp_warn_dvs_mask
@@ -819,6 +847,16 @@ int s2mpg14_ocp_warn(struct s2mpg14_pmic *s2mpg14,
if (ret)
pr_err("i2c write error setting b7m_soft_ocp_warn\n");
+ val = (pdata->b2_soft_ocp_warn_debounce_clk << 4) |
+ (pdata->b3_soft_ocp_warn_debounce_clk << 2) |
+ (pdata->b7_soft_ocp_warn_debounce_clk);
+
+ ret = s2mpg14_write_reg(s2mpg14->i2c, S2MPG14_PM_SOFT_OCP_WARN_DEBOUNCE,
+ val);
+
+ if (ret)
+ pr_err("i2c write error setting soft_ocp_warn debounce\n");
+
return ret;
}
diff --git a/drivers/regulator/s2mpg15-regulator.c b/drivers/regulator/s2mpg15-regulator.c
index 3d13deab7..00fbb38a2 100644
--- a/drivers/regulator/s2mpg15-regulator.c
+++ b/drivers/regulator/s2mpg15-regulator.c
@@ -398,6 +398,9 @@ static int s2mpg15_pmic_dt_parse_pdata(struct s2mpg15_dev *iodev,
ret = of_property_read_u32(pmic_np, "b2_ocp_warn_lvl", &val);
pdata->b2_ocp_warn_lvl = ret ? 0 : val;
+ ret = of_property_read_u32(pmic_np, "b2_ocp_warn_debounce_clk", &val);
+ pdata->b2_ocp_warn_debounce_clk = ret ? 0 : val;
+
/* parse SOFT_OCP_WARN information */
pdata->b2_soft_ocp_warn_pin = of_get_gpio(pmic_np, 1);
if (pdata->b2_soft_ocp_warn_pin < 0)
@@ -416,6 +419,9 @@ static int s2mpg15_pmic_dt_parse_pdata(struct s2mpg15_dev *iodev,
ret = of_property_read_u32(pmic_np, "b2_soft_ocp_warn_lvl", &val);
pdata->b2_soft_ocp_warn_lvl = ret ? 0 : val;
+ ret = of_property_read_u32(pmic_np, "b2_soft_ocp_warn_debounce_clk", &val);
+ pdata->b2_soft_ocp_warn_debounce_clk = ret ? 0 : val;
+
/* Set SEL_VGPIO (control_sel) */
p = of_get_property(pmic_np, "sel_vgpio", &len);
if (!p) {
@@ -703,6 +709,16 @@ int s2mpg15_ocp_warn(struct s2mpg15_pmic *s2mpg15,
dev_err(s2mpg15->iodev->dev,
"i2c write error setting b2s_soft_ocp_warn\n");
+ val = (pdata->b2_ocp_warn_debounce_clk << 2) |
+ (pdata->b2_soft_ocp_warn_debounce_clk);
+
+ ret = s2mpg15_write_reg(s2mpg15->i2c, S2MPG15_PM_B2S_OCP_WARN_DEBOUNCE,
+ val);
+
+ if (ret)
+ dev_err(s2mpg15->iodev->dev,
+ "i2c write error setting ocp_warn debounce\n");
+
return ret;
}
diff --git a/include/linux/mfd/samsung/s2mpg14.h b/include/linux/mfd/samsung/s2mpg14.h
index 91a3d5d8d..337292038 100644
--- a/include/linux/mfd/samsung/s2mpg14.h
+++ b/include/linux/mfd/samsung/s2mpg14.h
@@ -78,36 +78,42 @@ struct s2mpg14_platform_data {
unsigned int b2_ocp_warn_cnt;
unsigned int b2_ocp_warn_dvs_mask;
unsigned int b2_ocp_warn_lvl;
+ unsigned int b2_ocp_warn_debounce_clk;
int b3_ocp_warn_pin;
unsigned int b3_ocp_warn_en;
unsigned int b3_ocp_warn_cnt;
unsigned int b3_ocp_warn_dvs_mask;
unsigned int b3_ocp_warn_lvl;
+ unsigned int b3_ocp_warn_debounce_clk;
int b7_ocp_warn_pin;
unsigned int b7_ocp_warn_en;
unsigned int b7_ocp_warn_cnt;
unsigned int b7_ocp_warn_dvs_mask;
unsigned int b7_ocp_warn_lvl;
+ unsigned int b7_ocp_warn_debounce_clk;
int b2_soft_ocp_warn_pin;
unsigned int b2_soft_ocp_warn_en;
unsigned int b2_soft_ocp_warn_cnt;
unsigned int b2_soft_ocp_warn_dvs_mask;
unsigned int b2_soft_ocp_warn_lvl;
+ unsigned int b2_soft_ocp_warn_debounce_clk;
int b3_soft_ocp_warn_pin;
unsigned int b3_soft_ocp_warn_en;
unsigned int b3_soft_ocp_warn_cnt;
unsigned int b3_soft_ocp_warn_dvs_mask;
unsigned int b3_soft_ocp_warn_lvl;
+ unsigned int b3_soft_ocp_warn_debounce_clk;
int b7_soft_ocp_warn_pin;
unsigned int b7_soft_ocp_warn_en;
unsigned int b7_soft_ocp_warn_cnt;
unsigned int b7_soft_ocp_warn_dvs_mask;
unsigned int b7_soft_ocp_warn_lvl;
+ unsigned int b7_soft_ocp_warn_debounce_clk;
unsigned int buck_ocp_ctrl1;
unsigned int buck_ocp_ctrl2;
diff --git a/include/linux/mfd/samsung/s2mpg15.h b/include/linux/mfd/samsung/s2mpg15.h
index 825921d27..2b5eed139 100644
--- a/include/linux/mfd/samsung/s2mpg15.h
+++ b/include/linux/mfd/samsung/s2mpg15.h
@@ -73,12 +73,14 @@ struct s2mpg15_platform_data {
unsigned int b2_ocp_warn_cnt;
unsigned int b2_ocp_warn_dvs_mask;
unsigned int b2_ocp_warn_lvl;
+ unsigned int b2_ocp_warn_debounce_clk;
unsigned int b2_soft_ocp_warn_pin;
unsigned int b2_soft_ocp_warn_en;
unsigned int b2_soft_ocp_warn_cnt;
unsigned int b2_soft_ocp_warn_dvs_mask;
unsigned int b2_soft_ocp_warn_lvl;
+ unsigned int b2_soft_ocp_warn_debounce_clk;
unsigned int buck_ocp_ctrl1;
unsigned int buck_ocp_ctrl2;