diff options
author | Allen Jiang <alljiang@google.com> | 2023-07-28 21:26:59 +0000 |
---|---|---|
committer | Allen Jiang <alljiang@google.com> | 2023-08-02 20:13:48 +0000 |
commit | 8f9ccf41f6af8d4d7beb0c5326d479d3a4f6cb69 (patch) | |
tree | 97616300f46304cf1720414ccff898d9ae6422c9 | |
parent | 7e253cab2f2fa0a33773105164012d06b0a6e966 (diff) | |
download | gs-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.c | 38 | ||||
-rw-r--r-- | drivers/regulator/s2mpg15-regulator.c | 16 | ||||
-rw-r--r-- | include/linux/mfd/samsung/s2mpg14.h | 6 | ||||
-rw-r--r-- | include/linux/mfd/samsung/s2mpg15.h | 2 |
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; |