2024-03-11 08:40:27

by Joy Zou

[permalink] [raw]
Subject: [PATCH v2 0/3] add pmic pca9451a support

The patchset supports pmic pca9451a.
For the details, please check the patch commit log.

---
Changes in v2:
- drop old part support.

Joy Zou (3):
regulator: dt-bindings: pca9450: add pca9451a support
regulator: pca9450: add pca9451a support
arm64: dts: imx93-11x11-evk: add pca9451a support

.../regulator/nxp,pca9450-regulator.yaml | 1 +
.../boot/dts/freescale/imx93-11x11-evk.dts | 112 ++++++++++
drivers/regulator/pca9450-regulator.c | 197 +++++++++++++++++-
include/linux/regulator/pca9450.h | 1 +
4 files changed, 308 insertions(+), 3 deletions(-)

--
2.37.1



2024-03-11 08:40:49

by Joy Zou

[permalink] [raw]
Subject: [PATCH v2 1/3] regulator: dt-bindings: pca9450: add pca9451a support

Update pca9450 bindings.

Signed-off-by: Joy Zou <[email protected]>
---
changes in v2:
1. adjust the subject prefix sequence.
---
.../devicetree/bindings/regulator/nxp,pca9450-regulator.yaml | 1 +
1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/regulator/nxp,pca9450-regulator.yaml b/Documentation/devicetree/bindings/regulator/nxp,pca9450-regulator.yaml
index 3d469b8e9774..849bfa50bdba 100644
--- a/Documentation/devicetree/bindings/regulator/nxp,pca9450-regulator.yaml
+++ b/Documentation/devicetree/bindings/regulator/nxp,pca9450-regulator.yaml
@@ -28,6 +28,7 @@ properties:
- nxp,pca9450a
- nxp,pca9450b
- nxp,pca9450c
+ - nxp,pca9451a

reg:
maxItems: 1
--
2.37.1


2024-03-11 08:41:07

by Joy Zou

[permalink] [raw]
Subject: [PATCH v2 2/3] regulator: pca9450: add pca9451a support

Adding support for pmic pca9451a.

This patch support old and new pmic pca9451a. The new pmic trimed BUCK1.
The default value of Toff_Deb is used to distinguish the old and new pmic.

Signed-off-by: Joy Zou <[email protected]>
---
Changes in v2:
1. remove the old part support because the old part only is used for sample
and is diffcult to distinguish old and new part. so drop old part.
2. remove the unnecessary marco definition in the file pca9450.h.
---
drivers/regulator/pca9450-regulator.c | 197 +++++++++++++++++++++++++-
include/linux/regulator/pca9450.h | 1 +
2 files changed, 195 insertions(+), 3 deletions(-)

diff --git a/drivers/regulator/pca9450-regulator.c b/drivers/regulator/pca9450-regulator.c
index 2ab365d2749f..50c324e275b5 100644
--- a/drivers/regulator/pca9450-regulator.c
+++ b/drivers/regulator/pca9450-regulator.c
@@ -103,7 +103,15 @@ static const struct regulator_ops pca9450_ldo_regulator_ops = {
* 0.60 to 2.1875V (12.5mV step)
*/
static const struct linear_range pca9450_dvs_buck_volts[] = {
- REGULATOR_LINEAR_RANGE(600000, 0x00, 0x7F, 12500),
+ REGULATOR_LINEAR_RANGE(600000, 0x00, 0x7F, 12500),
+};
+
+/*
+ * BUCK1/3
+ * 0.65 to 2.2375V (12.5mV step)
+ */
+static const struct linear_range pca9451a_dvs_buck_volts[] = {
+ REGULATOR_LINEAR_RANGE(650000, 0x00, 0x7F, 12500),
};

/*
@@ -662,6 +670,178 @@ static const struct pca9450_regulator_desc pca9450bc_regulators[] = {
},
};

+static const struct pca9450_regulator_desc pca9451a_regulators[] = {
+ {
+ .desc = {
+ .name = "buck1",
+ .of_match = of_match_ptr("BUCK1"),
+ .regulators_node = of_match_ptr("regulators"),
+ .id = PCA9450_BUCK1,
+ .ops = &pca9450_dvs_buck_regulator_ops,
+ .type = REGULATOR_VOLTAGE,
+ .n_voltages = PCA9450_BUCK1_VOLTAGE_NUM,
+ .linear_ranges = pca9451a_dvs_buck_volts,
+ .n_linear_ranges = ARRAY_SIZE(pca9451a_dvs_buck_volts),
+ .vsel_reg = PCA9450_REG_BUCK1OUT_DVS0,
+ .vsel_mask = BUCK1OUT_DVS0_MASK,
+ .enable_reg = PCA9450_REG_BUCK1CTRL,
+ .enable_mask = BUCK1_ENMODE_MASK,
+ .enable_val = BUCK_ENMODE_ONREQ,
+ .ramp_mask = BUCK1_RAMP_MASK,
+ .ramp_delay_table = pca9450_dvs_buck_ramp_table,
+ .n_ramp_values = ARRAY_SIZE(pca9450_dvs_buck_ramp_table),
+ .owner = THIS_MODULE,
+ .of_parse_cb = pca9450_set_dvs_levels,
+ },
+ .dvs = {
+ .run_reg = PCA9450_REG_BUCK1OUT_DVS0,
+ .run_mask = BUCK1OUT_DVS0_MASK,
+ .standby_reg = PCA9450_REG_BUCK1OUT_DVS1,
+ .standby_mask = BUCK1OUT_DVS1_MASK,
+ },
+ },
+ {
+ .desc = {
+ .name = "buck2",
+ .of_match = of_match_ptr("BUCK2"),
+ .regulators_node = of_match_ptr("regulators"),
+ .id = PCA9450_BUCK2,
+ .ops = &pca9450_dvs_buck_regulator_ops,
+ .type = REGULATOR_VOLTAGE,
+ .n_voltages = PCA9450_BUCK2_VOLTAGE_NUM,
+ .linear_ranges = pca9450_dvs_buck_volts,
+ .n_linear_ranges = ARRAY_SIZE(pca9450_dvs_buck_volts),
+ .vsel_reg = PCA9450_REG_BUCK2OUT_DVS0,
+ .vsel_mask = BUCK2OUT_DVS0_MASK,
+ .enable_reg = PCA9450_REG_BUCK2CTRL,
+ .enable_mask = BUCK2_ENMODE_MASK,
+ .enable_val = BUCK_ENMODE_ONREQ_STBYREQ,
+ .ramp_mask = BUCK2_RAMP_MASK,
+ .ramp_delay_table = pca9450_dvs_buck_ramp_table,
+ .n_ramp_values = ARRAY_SIZE(pca9450_dvs_buck_ramp_table),
+ .owner = THIS_MODULE,
+ .of_parse_cb = pca9450_set_dvs_levels,
+ },
+ .dvs = {
+ .run_reg = PCA9450_REG_BUCK2OUT_DVS0,
+ .run_mask = BUCK2OUT_DVS0_MASK,
+ .standby_reg = PCA9450_REG_BUCK2OUT_DVS1,
+ .standby_mask = BUCK2OUT_DVS1_MASK,
+ },
+ },
+ {
+ .desc = {
+ .name = "buck4",
+ .of_match = of_match_ptr("BUCK4"),
+ .regulators_node = of_match_ptr("regulators"),
+ .id = PCA9450_BUCK4,
+ .ops = &pca9450_buck_regulator_ops,
+ .type = REGULATOR_VOLTAGE,
+ .n_voltages = PCA9450_BUCK4_VOLTAGE_NUM,
+ .linear_ranges = pca9450_buck_volts,
+ .n_linear_ranges = ARRAY_SIZE(pca9450_buck_volts),
+ .vsel_reg = PCA9450_REG_BUCK4OUT,
+ .vsel_mask = BUCK4OUT_MASK,
+ .enable_reg = PCA9450_REG_BUCK4CTRL,
+ .enable_mask = BUCK4_ENMODE_MASK,
+ .enable_val = BUCK_ENMODE_ONREQ,
+ .owner = THIS_MODULE,
+ },
+ },
+ {
+ .desc = {
+ .name = "buck5",
+ .of_match = of_match_ptr("BUCK5"),
+ .regulators_node = of_match_ptr("regulators"),
+ .id = PCA9450_BUCK5,
+ .ops = &pca9450_buck_regulator_ops,
+ .type = REGULATOR_VOLTAGE,
+ .n_voltages = PCA9450_BUCK5_VOLTAGE_NUM,
+ .linear_ranges = pca9450_buck_volts,
+ .n_linear_ranges = ARRAY_SIZE(pca9450_buck_volts),
+ .vsel_reg = PCA9450_REG_BUCK5OUT,
+ .vsel_mask = BUCK5OUT_MASK,
+ .enable_reg = PCA9450_REG_BUCK5CTRL,
+ .enable_mask = BUCK5_ENMODE_MASK,
+ .enable_val = BUCK_ENMODE_ONREQ,
+ .owner = THIS_MODULE,
+ },
+ },
+ {
+ .desc = {
+ .name = "buck6",
+ .of_match = of_match_ptr("BUCK6"),
+ .regulators_node = of_match_ptr("regulators"),
+ .id = PCA9450_BUCK6,
+ .ops = &pca9450_buck_regulator_ops,
+ .type = REGULATOR_VOLTAGE,
+ .n_voltages = PCA9450_BUCK6_VOLTAGE_NUM,
+ .linear_ranges = pca9450_buck_volts,
+ .n_linear_ranges = ARRAY_SIZE(pca9450_buck_volts),
+ .vsel_reg = PCA9450_REG_BUCK6OUT,
+ .vsel_mask = BUCK6OUT_MASK,
+ .enable_reg = PCA9450_REG_BUCK6CTRL,
+ .enable_mask = BUCK6_ENMODE_MASK,
+ .enable_val = BUCK_ENMODE_ONREQ,
+ .owner = THIS_MODULE,
+ },
+ },
+ {
+ .desc = {
+ .name = "ldo1",
+ .of_match = of_match_ptr("LDO1"),
+ .regulators_node = of_match_ptr("regulators"),
+ .id = PCA9450_LDO1,
+ .ops = &pca9450_ldo_regulator_ops,
+ .type = REGULATOR_VOLTAGE,
+ .n_voltages = PCA9450_LDO1_VOLTAGE_NUM,
+ .linear_ranges = pca9450_ldo1_volts,
+ .n_linear_ranges = ARRAY_SIZE(pca9450_ldo1_volts),
+ .vsel_reg = PCA9450_REG_LDO1CTRL,
+ .vsel_mask = LDO1OUT_MASK,
+ .enable_reg = PCA9450_REG_LDO1CTRL,
+ .enable_mask = LDO1_EN_MASK,
+ .owner = THIS_MODULE,
+ },
+ },
+ {
+ .desc = {
+ .name = "ldo4",
+ .of_match = of_match_ptr("LDO4"),
+ .regulators_node = of_match_ptr("regulators"),
+ .id = PCA9450_LDO4,
+ .ops = &pca9450_ldo_regulator_ops,
+ .type = REGULATOR_VOLTAGE,
+ .n_voltages = PCA9450_LDO4_VOLTAGE_NUM,
+ .linear_ranges = pca9450_ldo34_volts,
+ .n_linear_ranges = ARRAY_SIZE(pca9450_ldo34_volts),
+ .vsel_reg = PCA9450_REG_LDO4CTRL,
+ .vsel_mask = LDO4OUT_MASK,
+ .enable_reg = PCA9450_REG_LDO4CTRL,
+ .enable_mask = LDO4_EN_MASK,
+ .owner = THIS_MODULE,
+ },
+ },
+ {
+ .desc = {
+ .name = "ldo5",
+ .of_match = of_match_ptr("LDO5"),
+ .regulators_node = of_match_ptr("regulators"),
+ .id = PCA9450_LDO5,
+ .ops = &pca9450_ldo_regulator_ops,
+ .type = REGULATOR_VOLTAGE,
+ .n_voltages = PCA9450_LDO5_VOLTAGE_NUM,
+ .linear_ranges = pca9450_ldo5_volts,
+ .n_linear_ranges = ARRAY_SIZE(pca9450_ldo5_volts),
+ .vsel_reg = PCA9450_REG_LDO5CTRL_H,
+ .vsel_mask = LDO5HOUT_MASK,
+ .enable_reg = PCA9450_REG_LDO5CTRL_H,
+ .enable_mask = LDO5H_EN_MASK,
+ .owner = THIS_MODULE,
+ },
+ },
+};
+
static irqreturn_t pca9450_irq_handler(int irq, void *data)
{
struct pca9450 *pca9450 = data;
@@ -729,6 +909,10 @@ static int pca9450_i2c_probe(struct i2c_client *i2c)
regulator_desc = pca9450bc_regulators;
pca9450->rcnt = ARRAY_SIZE(pca9450bc_regulators);
break;
+ case PCA9450_TYPE_PCA9451A:
+ regulator_desc = pca9451a_regulators;
+ pca9450->rcnt = ARRAY_SIZE(pca9451a_regulators);
+ break;
default:
dev_err(&i2c->dev, "Unknown device type");
return -EINVAL;
@@ -755,7 +939,8 @@ static int pca9450_i2c_probe(struct i2c_client *i2c)

/* Check your board and dts for match the right pmic */
if (((device_id >> 4) != 0x1 && type == PCA9450_TYPE_PCA9450A) ||
- ((device_id >> 4) != 0x3 && type == PCA9450_TYPE_PCA9450BC)) {
+ ((device_id >> 4) != 0x3 && type == PCA9450_TYPE_PCA9450BC) ||
+ ((device_id >> 4) != 0x9 && type == PCA9450_TYPE_PCA9451A)) {
dev_err(&i2c->dev, "Device id(%x) mismatched\n",
device_id >> 4);
return -EINVAL;
@@ -767,6 +952,7 @@ static int pca9450_i2c_probe(struct i2c_client *i2c)
const struct pca9450_regulator_desc *r;

r = &regulator_desc[i];
+
desc = &r->desc;

config.regmap = pca9450->regmap;
@@ -846,7 +1032,8 @@ static int pca9450_i2c_probe(struct i2c_client *i2c)
}

dev_info(&i2c->dev, "%s probed.\n",
- type == PCA9450_TYPE_PCA9450A ? "pca9450a" : "pca9450bc");
+ type == PCA9450_TYPE_PCA9450A ? "pca9450a" :
+ (type == PCA9450_TYPE_PCA9451A ? "pca9451a" : "pca9450bc"));

return 0;
}
@@ -864,6 +1051,10 @@ static const struct of_device_id pca9450_of_match[] = {
.compatible = "nxp,pca9450c",
.data = (void *)PCA9450_TYPE_PCA9450BC,
},
+ {
+ .compatible = "nxp,pca9451a",
+ .data = (void *)PCA9450_TYPE_PCA9451A,
+ },
{ }
};
MODULE_DEVICE_TABLE(of, pca9450_of_match);
diff --git a/include/linux/regulator/pca9450.h b/include/linux/regulator/pca9450.h
index 505c908dbb81..243633c8dceb 100644
--- a/include/linux/regulator/pca9450.h
+++ b/include/linux/regulator/pca9450.h
@@ -9,6 +9,7 @@
enum pca9450_chip_type {
PCA9450_TYPE_PCA9450A = 0,
PCA9450_TYPE_PCA9450BC,
+ PCA9450_TYPE_PCA9451A,
PCA9450_TYPE_AMOUNT,
};

--
2.37.1


2024-03-11 08:41:25

by Joy Zou

[permalink] [raw]
Subject: [PATCH v2 3/3] arm64: dts: imx93-11x11-evk: add pca9451a support

Support pca9451a on imx93-11x11-evk.

Signed-off-by: Joy Zou <[email protected]>
---
.../boot/dts/freescale/imx93-11x11-evk.dts | 112 ++++++++++++++++++
1 file changed, 112 insertions(+)

diff --git a/arch/arm64/boot/dts/freescale/imx93-11x11-evk.dts b/arch/arm64/boot/dts/freescale/imx93-11x11-evk.dts
index 9921ea13ab48..6cb5b7d745bf 100644
--- a/arch/arm64/boot/dts/freescale/imx93-11x11-evk.dts
+++ b/arch/arm64/boot/dts/freescale/imx93-11x11-evk.dts
@@ -183,6 +183,105 @@ &wdog3 {
status = "okay";
};

+&lpi2c2 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ clock-frequency = <400000>;
+ pinctrl-names = "default", "sleep";
+ pinctrl-0 = <&pinctrl_lpi2c2>;
+ pinctrl-1 = <&pinctrl_lpi2c2>;
+ status = "okay";
+
+ pmic@25 {
+ compatible = "nxp,pca9451a";
+ reg = <0x25>;
+ interrupt-parent = <&pcal6524>;
+ interrupts = <11 IRQ_TYPE_EDGE_FALLING>;
+
+ regulators {
+ buck1: BUCK1 {
+ regulator-name = "BUCK1";
+ regulator-min-microvolt = <650000>;
+ regulator-max-microvolt = <2237500>;
+ regulator-boot-on;
+ regulator-always-on;
+ regulator-ramp-delay = <3125>;
+ };
+
+ buck2: BUCK2 {
+ regulator-name = "BUCK2";
+ regulator-min-microvolt = <600000>;
+ regulator-max-microvolt = <2187500>;
+ regulator-boot-on;
+ regulator-always-on;
+ regulator-ramp-delay = <3125>;
+ };
+
+ buck4: BUCK4{
+ regulator-name = "BUCK4";
+ regulator-min-microvolt = <600000>;
+ regulator-max-microvolt = <3400000>;
+ regulator-boot-on;
+ regulator-always-on;
+ };
+
+ buck5: BUCK5{
+ regulator-name = "BUCK5";
+ regulator-min-microvolt = <600000>;
+ regulator-max-microvolt = <3400000>;
+ regulator-boot-on;
+ regulator-always-on;
+ };
+
+ buck6: BUCK6 {
+ regulator-name = "BUCK6";
+ regulator-min-microvolt = <600000>;
+ regulator-max-microvolt = <3400000>;
+ regulator-boot-on;
+ regulator-always-on;
+ };
+
+ ldo1: LDO1 {
+ regulator-name = "LDO1";
+ regulator-min-microvolt = <1600000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-boot-on;
+ regulator-always-on;
+ };
+
+ ldo4: LDO4 {
+ regulator-name = "LDO4";
+ regulator-min-microvolt = <800000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-boot-on;
+ regulator-always-on;
+ };
+
+ ldo5: LDO5 {
+ regulator-name = "LDO5";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-boot-on;
+ regulator-always-on;
+ };
+ };
+ };
+
+ pcal6524: gpio@22 {
+ compatible = "nxp,pcal6524";
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_pcal6524>;
+ reg = <0x22>;
+ gpio-controller;
+ #gpio-cells = <2>;
+ interrupt-controller;
+ #interrupt-cells = <2>;
+ interrupt-parent = <&gpio3>;
+ interrupts = <27 IRQ_TYPE_LEVEL_LOW>;
+ };
+
+};
+
&iomuxc {
pinctrl_eqos: eqosgrp {
fsl,pins = <
@@ -239,6 +338,19 @@ MX93_PAD_DAP_TCLK_SWCLK__LPUART5_CTS_B 0x31e
};

/* need to config the SION for data and cmd pad, refer to ERR052021 */
+ pinctrl_lpi2c2: lpi2c2grp {
+ fsl,pins = <
+ MX93_PAD_I2C2_SCL__LPI2C2_SCL 0x40000b9e
+ MX93_PAD_I2C2_SDA__LPI2C2_SDA 0x40000b9e
+ >;
+ };
+
+ pinctrl_pcal6524: pcal6524grp {
+ fsl,pins = <
+ MX93_PAD_CCM_CLKO2__GPIO3_IO27 0x31e
+ >;
+ };
+
pinctrl_usdhc1: usdhc1grp {
fsl,pins = <
MX93_PAD_SD1_CLK__USDHC1_CLK 0x15fe
--
2.37.1


2024-03-11 08:52:07

by Marco Felsch

[permalink] [raw]
Subject: Re: [PATCH v2 3/3] arm64: dts: imx93-11x11-evk: add pca9451a support

Hi,

On 24-03-11, Joy Zou wrote:
> Support pca9451a on imx93-11x11-evk.
>
> Signed-off-by: Joy Zou <[email protected]>
> ---
> .../boot/dts/freescale/imx93-11x11-evk.dts | 112 ++++++++++++++++++
> 1 file changed, 112 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/freescale/imx93-11x11-evk.dts b/arch/arm64/boot/dts/freescale/imx93-11x11-evk.dts
> index 9921ea13ab48..6cb5b7d745bf 100644
> --- a/arch/arm64/boot/dts/freescale/imx93-11x11-evk.dts
> +++ b/arch/arm64/boot/dts/freescale/imx93-11x11-evk.dts
> @@ -183,6 +183,105 @@ &wdog3 {
> status = "okay";
> };
>
> +&lpi2c2 {
> + #address-cells = <1>;
> + #size-cells = <0>;
> + clock-frequency = <400000>;
> + pinctrl-names = "default", "sleep";
> + pinctrl-0 = <&pinctrl_lpi2c2>;
> + pinctrl-1 = <&pinctrl_lpi2c2>;
> + status = "okay";
> +
> + pmic@25 {
> + compatible = "nxp,pca9451a";
> + reg = <0x25>;
> + interrupt-parent = <&pcal6524>;
> + interrupts = <11 IRQ_TYPE_EDGE_FALLING>;
> +
> + regulators {
> + buck1: BUCK1 {
> + regulator-name = "BUCK1";
> + regulator-min-microvolt = <650000>;
> + regulator-max-microvolt = <2237500>;

Can you please check you limits with the EE department? The constraints
in a DTS file should reflect the board constraints and not the PMIC
contraints.

Regards,
Marco

> + regulator-boot-on;
> + regulator-always-on;
> + regulator-ramp-delay = <3125>;
> + };
> +
> + buck2: BUCK2 {
> + regulator-name = "BUCK2";
> + regulator-min-microvolt = <600000>;
> + regulator-max-microvolt = <2187500>;
> + regulator-boot-on;
> + regulator-always-on;
> + regulator-ramp-delay = <3125>;
> + };
> +
> + buck4: BUCK4{
> + regulator-name = "BUCK4";
> + regulator-min-microvolt = <600000>;
> + regulator-max-microvolt = <3400000>;
> + regulator-boot-on;
> + regulator-always-on;
> + };
> +
> + buck5: BUCK5{
> + regulator-name = "BUCK5";
> + regulator-min-microvolt = <600000>;
> + regulator-max-microvolt = <3400000>;
> + regulator-boot-on;
> + regulator-always-on;
> + };
> +
> + buck6: BUCK6 {
> + regulator-name = "BUCK6";
> + regulator-min-microvolt = <600000>;
> + regulator-max-microvolt = <3400000>;
> + regulator-boot-on;
> + regulator-always-on;
> + };
> +
> + ldo1: LDO1 {
> + regulator-name = "LDO1";
> + regulator-min-microvolt = <1600000>;
> + regulator-max-microvolt = <3300000>;
> + regulator-boot-on;
> + regulator-always-on;
> + };
> +
> + ldo4: LDO4 {
> + regulator-name = "LDO4";
> + regulator-min-microvolt = <800000>;
> + regulator-max-microvolt = <3300000>;
> + regulator-boot-on;
> + regulator-always-on;
> + };
> +
> + ldo5: LDO5 {
> + regulator-name = "LDO5";
> + regulator-min-microvolt = <1800000>;
> + regulator-max-microvolt = <3300000>;
> + regulator-boot-on;
> + regulator-always-on;
> + };
> + };
> + };
> +
> + pcal6524: gpio@22 {
> + compatible = "nxp,pcal6524";
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_pcal6524>;
> + reg = <0x22>;
> + gpio-controller;
> + #gpio-cells = <2>;
> + interrupt-controller;
> + #interrupt-cells = <2>;
> + interrupt-parent = <&gpio3>;
> + interrupts = <27 IRQ_TYPE_LEVEL_LOW>;
> + };
> +
> +};
> +
> &iomuxc {
> pinctrl_eqos: eqosgrp {
> fsl,pins = <
> @@ -239,6 +338,19 @@ MX93_PAD_DAP_TCLK_SWCLK__LPUART5_CTS_B 0x31e
> };
>
> /* need to config the SION for data and cmd pad, refer to ERR052021 */
> + pinctrl_lpi2c2: lpi2c2grp {
> + fsl,pins = <
> + MX93_PAD_I2C2_SCL__LPI2C2_SCL 0x40000b9e
> + MX93_PAD_I2C2_SDA__LPI2C2_SDA 0x40000b9e
> + >;
> + };
> +
> + pinctrl_pcal6524: pcal6524grp {
> + fsl,pins = <
> + MX93_PAD_CCM_CLKO2__GPIO3_IO27 0x31e
> + >;
> + };
> +
> pinctrl_usdhc1: usdhc1grp {
> fsl,pins = <
> MX93_PAD_SD1_CLK__USDHC1_CLK 0x15fe
> --
> 2.37.1
>
>
>

2024-03-11 08:57:15

by Joy Zou

[permalink] [raw]
Subject: RE: [EXT] Re: [PATCH v2 3/3] arm64: dts: imx93-11x11-evk: add pca9451a support


> -----Original Message-----
> From: Marco Felsch <[email protected]>
> Sent: 2024??3??11?? 16:52
> To: Joy Zou <[email protected]>
> Cc: Jacky Bai <[email protected]>; [email protected];
> [email protected]; [email protected]; [email protected];
> [email protected]; [email protected]; [email protected];
> [email protected]; [email protected]; [email protected];
> dl-linux-imx <[email protected]>; [email protected];
> [email protected]; [email protected]
> Subject: [EXT] Re: [PATCH v2 3/3] arm64: dts: imx93-11x11-evk: add
> pca9451a support
>
> Caution: This is an external email. Please take care when clicking links or
> opening attachments. When in doubt, report the message using the 'Report
> this email' button
>
>
> Hi,
>
> On 24-03-11, Joy Zou wrote:
> > Support pca9451a on imx93-11x11-evk.
> >
> > Signed-off-by: Joy Zou <[email protected]>
> > ---
> > .../boot/dts/freescale/imx93-11x11-evk.dts | 112
> ++++++++++++++++++
> > 1 file changed, 112 insertions(+)
> >
> > diff --git a/arch/arm64/boot/dts/freescale/imx93-11x11-evk.dts
> > b/arch/arm64/boot/dts/freescale/imx93-11x11-evk.dts
> > index 9921ea13ab48..6cb5b7d745bf 100644
> > --- a/arch/arm64/boot/dts/freescale/imx93-11x11-evk.dts
> > +++ b/arch/arm64/boot/dts/freescale/imx93-11x11-evk.dts
> > @@ -183,6 +183,105 @@ &wdog3 {
> > status = "okay";
> > };
> >
> > +&lpi2c2 {
> > + #address-cells = <1>;
> > + #size-cells = <0>;
> > + clock-frequency = <400000>;
> > + pinctrl-names = "default", "sleep";
> > + pinctrl-0 = <&pinctrl_lpi2c2>;
> > + pinctrl-1 = <&pinctrl_lpi2c2>;
> > + status = "okay";
> > +
> > + pmic@25 {
> > + compatible = "nxp,pca9451a";
> > + reg = <0x25>;
> > + interrupt-parent = <&pcal6524>;
> > + interrupts = <11 IRQ_TYPE_EDGE_FALLING>;
> > +
> > + regulators {
> > + buck1: BUCK1 {
> > + regulator-name = "BUCK1";
> > + regulator-min-microvolt = <650000>;
> > + regulator-max-microvolt = <2237500>;
>
> Can you please check you limits with the EE department? The constraints in a
> DTS file should reflect the board constraints and not the PMIC contraints.
Okay, I will check and modify the constraints.
Thank you very much!
BR
Joy Zou
>
> Regards,
> Marco
>
> > + regulator-boot-on;
> > + regulator-always-on;
> > + regulator-ramp-delay = <3125>;
> > + };
> > +
> > + buck2: BUCK2 {
> > + regulator-name = "BUCK2";
> > + regulator-min-microvolt = <600000>;
> > + regulator-max-microvolt = <2187500>;
> > + regulator-boot-on;
> > + regulator-always-on;
> > + regulator-ramp-delay = <3125>;
> > + };
> > +
> > + buck4: BUCK4{
> > + regulator-name = "BUCK4";
> > + regulator-min-microvolt = <600000>;
> > + regulator-max-microvolt = <3400000>;
> > + regulator-boot-on;
> > + regulator-always-on;
> > + };
> > +
> > + buck5: BUCK5{
> > + regulator-name = "BUCK5";
> > + regulator-min-microvolt = <600000>;
> > + regulator-max-microvolt = <3400000>;
> > + regulator-boot-on;
> > + regulator-always-on;
> > + };
> > +
> > + buck6: BUCK6 {
> > + regulator-name = "BUCK6";
> > + regulator-min-microvolt = <600000>;
> > + regulator-max-microvolt = <3400000>;
> > + regulator-boot-on;
> > + regulator-always-on;
> > + };
> > +
> > + ldo1: LDO1 {
> > + regulator-name = "LDO1";
> > + regulator-min-microvolt = <1600000>;
> > + regulator-max-microvolt = <3300000>;
> > + regulator-boot-on;
> > + regulator-always-on;
> > + };
> > +
> > + ldo4: LDO4 {
> > + regulator-name = "LDO4";
> > + regulator-min-microvolt = <800000>;
> > + regulator-max-microvolt = <3300000>;
> > + regulator-boot-on;
> > + regulator-always-on;
> > + };
> > +
> > + ldo5: LDO5 {
> > + regulator-name = "LDO5";
> > + regulator-min-microvolt = <1800000>;
> > + regulator-max-microvolt = <3300000>;
> > + regulator-boot-on;
> > + regulator-always-on;
> > + };
> > + };
> > + };
> > +
> > + pcal6524: gpio@22 {
> > + compatible = "nxp,pcal6524";
> > + pinctrl-names = "default";
> > + pinctrl-0 = <&pinctrl_pcal6524>;
> > + reg = <0x22>;
> > + gpio-controller;
> > + #gpio-cells = <2>;
> > + interrupt-controller;
> > + #interrupt-cells = <2>;
> > + interrupt-parent = <&gpio3>;
> > + interrupts = <27 IRQ_TYPE_LEVEL_LOW>;
> > + };
> > +
> > +};
> > +
> > &iomuxc {
> > pinctrl_eqos: eqosgrp {
> > fsl,pins = <
> > @@ -239,6 +338,19 @@ MX93_PAD_DAP_TCLK_SWCLK__LPUART5_CTS_B
> 0x31e
> > };
> >
> > /* need to config the SION for data and cmd pad, refer to
> > ERR052021 */
> > + pinctrl_lpi2c2: lpi2c2grp {
> > + fsl,pins = <
> > + MX93_PAD_I2C2_SCL__LPI2C2_SCL
> 0x40000b9e
> > + MX93_PAD_I2C2_SDA__LPI2C2_SDA
> 0x40000b9e
> > + >;
> > + };
> > +
> > + pinctrl_pcal6524: pcal6524grp {
> > + fsl,pins = <
> > + MX93_PAD_CCM_CLKO2__GPIO3_IO27
> 0x31e
> > + >;
> > + };
> > +
> > pinctrl_usdhc1: usdhc1grp {
> > fsl,pins = <
> > MX93_PAD_SD1_CLK__USDHC1_CLK
> 0x15fe
> > --
> > 2.37.1
> >
> >
> >

2024-03-11 09:10:32

by Alexander Stein

[permalink] [raw]
Subject: Re: [PATCH v2 2/3] regulator: pca9450: add pca9451a support

Hi,

thanks for the update.

Am Montag, 11. M?rz 2024, 09:47:56 CET schrieb Joy Zou:
> Adding support for pmic pca9451a.
>
> This patch support old and new pmic pca9451a. The new pmic trimed BUCK1.
> The default value of Toff_Deb is used to distinguish the old and new pmic.

This section doesn't apply anymore. Please remove it.

> Signed-off-by: Joy Zou <[email protected]>
> ---
> Changes in v2:
> 1. remove the old part support because the old part only is used for sample
> and is diffcult to distinguish old and new part. so drop old part.
> 2. remove the unnecessary marco definition in the file pca9450.h.
> ---
> drivers/regulator/pca9450-regulator.c | 197 +++++++++++++++++++++++++-
> include/linux/regulator/pca9450.h | 1 +
> 2 files changed, 195 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/regulator/pca9450-regulator.c b/drivers/regulator/pca9450-regulator.c
> index 2ab365d2749f..50c324e275b5 100644
> --- a/drivers/regulator/pca9450-regulator.c
> +++ b/drivers/regulator/pca9450-regulator.c
> @@ -103,7 +103,15 @@ static const struct regulator_ops pca9450_ldo_regulator_ops = {
> * 0.60 to 2.1875V (12.5mV step)
> */
> static const struct linear_range pca9450_dvs_buck_volts[] = {
> - REGULATOR_LINEAR_RANGE(600000, 0x00, 0x7F, 12500),
> + REGULATOR_LINEAR_RANGE(600000, 0x00, 0x7F, 12500),
> +};

That's an unrelated change.

> +/*
> + * BUCK1/3
> + * 0.65 to 2.2375V (12.5mV step)
> + */
> +static const struct linear_range pca9451a_dvs_buck_volts[] = {
> + REGULATOR_LINEAR_RANGE(650000, 0x00, 0x7F, 12500),
> };
>
> /*
> @@ -662,6 +670,178 @@ static const struct pca9450_regulator_desc pca9450bc_regulators[] = {
> },
> };
>
> +static const struct pca9450_regulator_desc pca9451a_regulators[] = {
> + {
> + .desc = {
> + .name = "buck1",
> + .of_match = of_match_ptr("BUCK1"),
> + .regulators_node = of_match_ptr("regulators"),
> + .id = PCA9450_BUCK1,
> + .ops = &pca9450_dvs_buck_regulator_ops,
> + .type = REGULATOR_VOLTAGE,
> + .n_voltages = PCA9450_BUCK1_VOLTAGE_NUM,
> + .linear_ranges = pca9451a_dvs_buck_volts,
> + .n_linear_ranges = ARRAY_SIZE(pca9451a_dvs_buck_volts),
> + .vsel_reg = PCA9450_REG_BUCK1OUT_DVS0,
> + .vsel_mask = BUCK1OUT_DVS0_MASK,
> + .enable_reg = PCA9450_REG_BUCK1CTRL,
> + .enable_mask = BUCK1_ENMODE_MASK,
> + .enable_val = BUCK_ENMODE_ONREQ,
> + .ramp_mask = BUCK1_RAMP_MASK,
> + .ramp_delay_table = pca9450_dvs_buck_ramp_table,
> + .n_ramp_values = ARRAY_SIZE(pca9450_dvs_buck_ramp_table),
> + .owner = THIS_MODULE,
> + .of_parse_cb = pca9450_set_dvs_levels,
> + },
> + .dvs = {
> + .run_reg = PCA9450_REG_BUCK1OUT_DVS0,
> + .run_mask = BUCK1OUT_DVS0_MASK,
> + .standby_reg = PCA9450_REG_BUCK1OUT_DVS1,
> + .standby_mask = BUCK1OUT_DVS1_MASK,
> + },
> + },
> + {
> + .desc = {
> + .name = "buck2",
> + .of_match = of_match_ptr("BUCK2"),
> + .regulators_node = of_match_ptr("regulators"),
> + .id = PCA9450_BUCK2,
> + .ops = &pca9450_dvs_buck_regulator_ops,
> + .type = REGULATOR_VOLTAGE,
> + .n_voltages = PCA9450_BUCK2_VOLTAGE_NUM,
> + .linear_ranges = pca9450_dvs_buck_volts,
> + .n_linear_ranges = ARRAY_SIZE(pca9450_dvs_buck_volts),
> + .vsel_reg = PCA9450_REG_BUCK2OUT_DVS0,
> + .vsel_mask = BUCK2OUT_DVS0_MASK,
> + .enable_reg = PCA9450_REG_BUCK2CTRL,
> + .enable_mask = BUCK2_ENMODE_MASK,
> + .enable_val = BUCK_ENMODE_ONREQ_STBYREQ,
> + .ramp_mask = BUCK2_RAMP_MASK,
> + .ramp_delay_table = pca9450_dvs_buck_ramp_table,
> + .n_ramp_values = ARRAY_SIZE(pca9450_dvs_buck_ramp_table),
> + .owner = THIS_MODULE,
> + .of_parse_cb = pca9450_set_dvs_levels,
> + },
> + .dvs = {
> + .run_reg = PCA9450_REG_BUCK2OUT_DVS0,
> + .run_mask = BUCK2OUT_DVS0_MASK,
> + .standby_reg = PCA9450_REG_BUCK2OUT_DVS1,
> + .standby_mask = BUCK2OUT_DVS1_MASK,
> + },
> + },
> + {
> + .desc = {
> + .name = "buck4",
> + .of_match = of_match_ptr("BUCK4"),
> + .regulators_node = of_match_ptr("regulators"),
> + .id = PCA9450_BUCK4,
> + .ops = &pca9450_buck_regulator_ops,
> + .type = REGULATOR_VOLTAGE,
> + .n_voltages = PCA9450_BUCK4_VOLTAGE_NUM,
> + .linear_ranges = pca9450_buck_volts,
> + .n_linear_ranges = ARRAY_SIZE(pca9450_buck_volts),
> + .vsel_reg = PCA9450_REG_BUCK4OUT,
> + .vsel_mask = BUCK4OUT_MASK,
> + .enable_reg = PCA9450_REG_BUCK4CTRL,
> + .enable_mask = BUCK4_ENMODE_MASK,
> + .enable_val = BUCK_ENMODE_ONREQ,
> + .owner = THIS_MODULE,
> + },
> + },
> + {
> + .desc = {
> + .name = "buck5",
> + .of_match = of_match_ptr("BUCK5"),
> + .regulators_node = of_match_ptr("regulators"),
> + .id = PCA9450_BUCK5,
> + .ops = &pca9450_buck_regulator_ops,
> + .type = REGULATOR_VOLTAGE,
> + .n_voltages = PCA9450_BUCK5_VOLTAGE_NUM,
> + .linear_ranges = pca9450_buck_volts,
> + .n_linear_ranges = ARRAY_SIZE(pca9450_buck_volts),
> + .vsel_reg = PCA9450_REG_BUCK5OUT,
> + .vsel_mask = BUCK5OUT_MASK,
> + .enable_reg = PCA9450_REG_BUCK5CTRL,
> + .enable_mask = BUCK5_ENMODE_MASK,
> + .enable_val = BUCK_ENMODE_ONREQ,
> + .owner = THIS_MODULE,
> + },
> + },
> + {
> + .desc = {
> + .name = "buck6",
> + .of_match = of_match_ptr("BUCK6"),
> + .regulators_node = of_match_ptr("regulators"),
> + .id = PCA9450_BUCK6,
> + .ops = &pca9450_buck_regulator_ops,
> + .type = REGULATOR_VOLTAGE,
> + .n_voltages = PCA9450_BUCK6_VOLTAGE_NUM,
> + .linear_ranges = pca9450_buck_volts,
> + .n_linear_ranges = ARRAY_SIZE(pca9450_buck_volts),
> + .vsel_reg = PCA9450_REG_BUCK6OUT,
> + .vsel_mask = BUCK6OUT_MASK,
> + .enable_reg = PCA9450_REG_BUCK6CTRL,
> + .enable_mask = BUCK6_ENMODE_MASK,
> + .enable_val = BUCK_ENMODE_ONREQ,
> + .owner = THIS_MODULE,
> + },
> + },
> + {
> + .desc = {
> + .name = "ldo1",
> + .of_match = of_match_ptr("LDO1"),
> + .regulators_node = of_match_ptr("regulators"),
> + .id = PCA9450_LDO1,
> + .ops = &pca9450_ldo_regulator_ops,
> + .type = REGULATOR_VOLTAGE,
> + .n_voltages = PCA9450_LDO1_VOLTAGE_NUM,
> + .linear_ranges = pca9450_ldo1_volts,
> + .n_linear_ranges = ARRAY_SIZE(pca9450_ldo1_volts),
> + .vsel_reg = PCA9450_REG_LDO1CTRL,
> + .vsel_mask = LDO1OUT_MASK,
> + .enable_reg = PCA9450_REG_LDO1CTRL,
> + .enable_mask = LDO1_EN_MASK,
> + .owner = THIS_MODULE,
> + },
> + },
> + {
> + .desc = {
> + .name = "ldo4",
> + .of_match = of_match_ptr("LDO4"),
> + .regulators_node = of_match_ptr("regulators"),
> + .id = PCA9450_LDO4,
> + .ops = &pca9450_ldo_regulator_ops,
> + .type = REGULATOR_VOLTAGE,
> + .n_voltages = PCA9450_LDO4_VOLTAGE_NUM,
> + .linear_ranges = pca9450_ldo34_volts,
> + .n_linear_ranges = ARRAY_SIZE(pca9450_ldo34_volts),
> + .vsel_reg = PCA9450_REG_LDO4CTRL,
> + .vsel_mask = LDO4OUT_MASK,
> + .enable_reg = PCA9450_REG_LDO4CTRL,
> + .enable_mask = LDO4_EN_MASK,
> + .owner = THIS_MODULE,
> + },
> + },
> + {
> + .desc = {
> + .name = "ldo5",
> + .of_match = of_match_ptr("LDO5"),
> + .regulators_node = of_match_ptr("regulators"),
> + .id = PCA9450_LDO5,
> + .ops = &pca9450_ldo_regulator_ops,
> + .type = REGULATOR_VOLTAGE,
> + .n_voltages = PCA9450_LDO5_VOLTAGE_NUM,
> + .linear_ranges = pca9450_ldo5_volts,
> + .n_linear_ranges = ARRAY_SIZE(pca9450_ldo5_volts),
> + .vsel_reg = PCA9450_REG_LDO5CTRL_H,
> + .vsel_mask = LDO5HOUT_MASK,
> + .enable_reg = PCA9450_REG_LDO5CTRL_H,
> + .enable_mask = LDO5H_EN_MASK,
> + .owner = THIS_MODULE,
> + },
> + },
> +};
> +
> static irqreturn_t pca9450_irq_handler(int irq, void *data)
> {
> struct pca9450 *pca9450 = data;
> @@ -729,6 +909,10 @@ static int pca9450_i2c_probe(struct i2c_client *i2c)
> regulator_desc = pca9450bc_regulators;
> pca9450->rcnt = ARRAY_SIZE(pca9450bc_regulators);
> break;
> + case PCA9450_TYPE_PCA9451A:
> + regulator_desc = pca9451a_regulators;
> + pca9450->rcnt = ARRAY_SIZE(pca9451a_regulators);
> + break;
> default:
> dev_err(&i2c->dev, "Unknown device type");
> return -EINVAL;
> @@ -755,7 +939,8 @@ static int pca9450_i2c_probe(struct i2c_client *i2c)
>
> /* Check your board and dts for match the right pmic */
> if (((device_id >> 4) != 0x1 && type == PCA9450_TYPE_PCA9450A) ||
> - ((device_id >> 4) != 0x3 && type == PCA9450_TYPE_PCA9450BC)) {
> + ((device_id >> 4) != 0x3 && type == PCA9450_TYPE_PCA9450BC) ||
> + ((device_id >> 4) != 0x9 && type == PCA9450_TYPE_PCA9451A)) {
> dev_err(&i2c->dev, "Device id(%x) mismatched\n",
> device_id >> 4);
> return -EINVAL;
> @@ -767,6 +952,7 @@ static int pca9450_i2c_probe(struct i2c_client *i2c)
> const struct pca9450_regulator_desc *r;
>
> r = &regulator_desc[i];
> +

Please don't add this empty line. Seems like a leftover from v1.

Thanks and best regards,
Alexander

> desc = &r->desc;
>
> config.regmap = pca9450->regmap;
> @@ -846,7 +1032,8 @@ static int pca9450_i2c_probe(struct i2c_client *i2c)
> }
>
> dev_info(&i2c->dev, "%s probed.\n",
> - type == PCA9450_TYPE_PCA9450A ? "pca9450a" : "pca9450bc");
> + type == PCA9450_TYPE_PCA9450A ? "pca9450a" :
> + (type == PCA9450_TYPE_PCA9451A ? "pca9451a" : "pca9450bc"));
>
> return 0;
> }
> @@ -864,6 +1051,10 @@ static const struct of_device_id pca9450_of_match[] = {
> .compatible = "nxp,pca9450c",
> .data = (void *)PCA9450_TYPE_PCA9450BC,
> },
> + {
> + .compatible = "nxp,pca9451a",
> + .data = (void *)PCA9450_TYPE_PCA9451A,
> + },
> { }
> };
> MODULE_DEVICE_TABLE(of, pca9450_of_match);
> diff --git a/include/linux/regulator/pca9450.h b/include/linux/regulator/pca9450.h
> index 505c908dbb81..243633c8dceb 100644
> --- a/include/linux/regulator/pca9450.h
> +++ b/include/linux/regulator/pca9450.h
> @@ -9,6 +9,7 @@
> enum pca9450_chip_type {
> PCA9450_TYPE_PCA9450A = 0,
> PCA9450_TYPE_PCA9450BC,
> + PCA9450_TYPE_PCA9451A,
> PCA9450_TYPE_AMOUNT,
> };
>
>


--
TQ-Systems GmbH | M?hlstra?e 2, Gut Delling | 82229 Seefeld, Germany
Amtsgericht M?nchen, HRB 105018
Gesch?ftsf?hrer: Detlef Schneider, R?diger Stahl, Stefan Schneider
http://www.tq-group.com/



2024-03-11 09:13:55

by Joy Zou

[permalink] [raw]
Subject: RE: [EXT] Re: [PATCH v2 2/3] regulator: pca9450: add pca9451a support


> -----Original Message-----
> From: Alexander Stein <[email protected]>
> Sent: 2024年3月11日 17:09
> To: Jacky Bai <[email protected]>; [email protected];
> [email protected]; [email protected]; [email protected];
> [email protected]; [email protected]; [email protected];
> [email protected]
> Cc: [email protected]; [email protected]; dl-linux-imx
> <[email protected]>; [email protected];
> [email protected]; [email protected];
> [email protected]; Joy Zou <[email protected]>
> Subject: [EXT] Re: [PATCH v2 2/3] regulator: pca9450: add pca9451a support
>
> Caution: This is an external email. Please take care when clicking links or
> opening attachments. When in doubt, report the message using the 'Report
> this email' button
>
>
> Hi,
>
> thanks for the update.
>
> Am Montag, 11. März 2024, 09:47:56 CET schrieb Joy Zou:
> > Adding support for pmic pca9451a.
> >
> > This patch support old and new pmic pca9451a. The new pmic trimed
> BUCK1.
> > The default value of Toff_Deb is used to distinguish the old and new pmic.
>
> This section doesn't apply anymore. Please remove it.
>
> > Signed-off-by: Joy Zou <[email protected]>
> > ---
> > Changes in v2:
> > 1. remove the old part support because the old part only is used for
> > sample and is diffcult to distinguish old and new part. so drop old part.
> > 2. remove the unnecessary marco definition in the file pca9450.h.
> > ---
> > drivers/regulator/pca9450-regulator.c | 197
> +++++++++++++++++++++++++-
> > include/linux/regulator/pca9450.h | 1 +
> > 2 files changed, 195 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/regulator/pca9450-regulator.c
> > b/drivers/regulator/pca9450-regulator.c
> > index 2ab365d2749f..50c324e275b5 100644
> > --- a/drivers/regulator/pca9450-regulator.c
> > +++ b/drivers/regulator/pca9450-regulator.c
> > @@ -103,7 +103,15 @@ static const struct regulator_ops
> pca9450_ldo_regulator_ops = {
> > * 0.60 to 2.1875V (12.5mV step)
> > */
> > static const struct linear_range pca9450_dvs_buck_volts[] = {
> > - REGULATOR_LINEAR_RANGE(600000, 0x00, 0x7F, 12500),
> > + REGULATOR_LINEAR_RANGE(600000, 0x00, 0x7F, 12500), };
>
> That's an unrelated change.
Yeah, I will remove it.
>
> > +/*
> > + * BUCK1/3
> > + * 0.65 to 2.2375V (12.5mV step)
> > + */
> > +static const struct linear_range pca9451a_dvs_buck_volts[] = {
> > + REGULATOR_LINEAR_RANGE(650000, 0x00, 0x7F, 12500),
> > };
> >
> > /*
> > @@ -662,6 +670,178 @@ static const struct pca9450_regulator_desc
> pca9450bc_regulators[] = {
> > },
> > };
> >
> > +static const struct pca9450_regulator_desc pca9451a_regulators[] = {
> > + {
> > + .desc = {
> > + .name = "buck1",
> > + .of_match = of_match_ptr("BUCK1"),
> > + .regulators_node = of_match_ptr("regulators"),
> > + .id = PCA9450_BUCK1,
> > + .ops = &pca9450_dvs_buck_regulator_ops,
> > + .type = REGULATOR_VOLTAGE,
> > + .n_voltages = PCA9450_BUCK1_VOLTAGE_NUM,
> > + .linear_ranges = pca9451a_dvs_buck_volts,
> > + .n_linear_ranges =
> ARRAY_SIZE(pca9451a_dvs_buck_volts),
> > + .vsel_reg = PCA9450_REG_BUCK1OUT_DVS0,
> > + .vsel_mask = BUCK1OUT_DVS0_MASK,
> > + .enable_reg = PCA9450_REG_BUCK1CTRL,
> > + .enable_mask = BUCK1_ENMODE_MASK,
> > + .enable_val = BUCK_ENMODE_ONREQ,
> > + .ramp_mask = BUCK1_RAMP_MASK,
> > + .ramp_delay_table =
> pca9450_dvs_buck_ramp_table,
> > + .n_ramp_values =
> ARRAY_SIZE(pca9450_dvs_buck_ramp_table),
> > + .owner = THIS_MODULE,
> > + .of_parse_cb = pca9450_set_dvs_levels,
> > + },
> > + .dvs = {
> > + .run_reg = PCA9450_REG_BUCK1OUT_DVS0,
> > + .run_mask = BUCK1OUT_DVS0_MASK,
> > + .standby_reg = PCA9450_REG_BUCK1OUT_DVS1,
> > + .standby_mask = BUCK1OUT_DVS1_MASK,
> > + },
> > + },
> > + {
> > + .desc = {
> > + .name = "buck2",
> > + .of_match = of_match_ptr("BUCK2"),
> > + .regulators_node = of_match_ptr("regulators"),
> > + .id = PCA9450_BUCK2,
> > + .ops = &pca9450_dvs_buck_regulator_ops,
> > + .type = REGULATOR_VOLTAGE,
> > + .n_voltages = PCA9450_BUCK2_VOLTAGE_NUM,
> > + .linear_ranges = pca9450_dvs_buck_volts,
> > + .n_linear_ranges =
> ARRAY_SIZE(pca9450_dvs_buck_volts),
> > + .vsel_reg = PCA9450_REG_BUCK2OUT_DVS0,
> > + .vsel_mask = BUCK2OUT_DVS0_MASK,
> > + .enable_reg = PCA9450_REG_BUCK2CTRL,
> > + .enable_mask = BUCK2_ENMODE_MASK,
> > + .enable_val = BUCK_ENMODE_ONREQ_STBYREQ,
> > + .ramp_mask = BUCK2_RAMP_MASK,
> > + .ramp_delay_table =
> pca9450_dvs_buck_ramp_table,
> > + .n_ramp_values =
> ARRAY_SIZE(pca9450_dvs_buck_ramp_table),
> > + .owner = THIS_MODULE,
> > + .of_parse_cb = pca9450_set_dvs_levels,
> > + },
> > + .dvs = {
> > + .run_reg = PCA9450_REG_BUCK2OUT_DVS0,
> > + .run_mask = BUCK2OUT_DVS0_MASK,
> > + .standby_reg = PCA9450_REG_BUCK2OUT_DVS1,
> > + .standby_mask = BUCK2OUT_DVS1_MASK,
> > + },
> > + },
> > + {
> > + .desc = {
> > + .name = "buck4",
> > + .of_match = of_match_ptr("BUCK4"),
> > + .regulators_node = of_match_ptr("regulators"),
> > + .id = PCA9450_BUCK4,
> > + .ops = &pca9450_buck_regulator_ops,
> > + .type = REGULATOR_VOLTAGE,
> > + .n_voltages = PCA9450_BUCK4_VOLTAGE_NUM,
> > + .linear_ranges = pca9450_buck_volts,
> > + .n_linear_ranges =
> ARRAY_SIZE(pca9450_buck_volts),
> > + .vsel_reg = PCA9450_REG_BUCK4OUT,
> > + .vsel_mask = BUCK4OUT_MASK,
> > + .enable_reg = PCA9450_REG_BUCK4CTRL,
> > + .enable_mask = BUCK4_ENMODE_MASK,
> > + .enable_val = BUCK_ENMODE_ONREQ,
> > + .owner = THIS_MODULE,
> > + },
> > + },
> > + {
> > + .desc = {
> > + .name = "buck5",
> > + .of_match = of_match_ptr("BUCK5"),
> > + .regulators_node = of_match_ptr("regulators"),
> > + .id = PCA9450_BUCK5,
> > + .ops = &pca9450_buck_regulator_ops,
> > + .type = REGULATOR_VOLTAGE,
> > + .n_voltages = PCA9450_BUCK5_VOLTAGE_NUM,
> > + .linear_ranges = pca9450_buck_volts,
> > + .n_linear_ranges =
> ARRAY_SIZE(pca9450_buck_volts),
> > + .vsel_reg = PCA9450_REG_BUCK5OUT,
> > + .vsel_mask = BUCK5OUT_MASK,
> > + .enable_reg = PCA9450_REG_BUCK5CTRL,
> > + .enable_mask = BUCK5_ENMODE_MASK,
> > + .enable_val = BUCK_ENMODE_ONREQ,
> > + .owner = THIS_MODULE,
> > + },
> > + },
> > + {
> > + .desc = {
> > + .name = "buck6",
> > + .of_match = of_match_ptr("BUCK6"),
> > + .regulators_node = of_match_ptr("regulators"),
> > + .id = PCA9450_BUCK6,
> > + .ops = &pca9450_buck_regulator_ops,
> > + .type = REGULATOR_VOLTAGE,
> > + .n_voltages = PCA9450_BUCK6_VOLTAGE_NUM,
> > + .linear_ranges = pca9450_buck_volts,
> > + .n_linear_ranges =
> ARRAY_SIZE(pca9450_buck_volts),
> > + .vsel_reg = PCA9450_REG_BUCK6OUT,
> > + .vsel_mask = BUCK6OUT_MASK,
> > + .enable_reg = PCA9450_REG_BUCK6CTRL,
> > + .enable_mask = BUCK6_ENMODE_MASK,
> > + .enable_val = BUCK_ENMODE_ONREQ,
> > + .owner = THIS_MODULE,
> > + },
> > + },
> > + {
> > + .desc = {
> > + .name = "ldo1",
> > + .of_match = of_match_ptr("LDO1"),
> > + .regulators_node = of_match_ptr("regulators"),
> > + .id = PCA9450_LDO1,
> > + .ops = &pca9450_ldo_regulator_ops,
> > + .type = REGULATOR_VOLTAGE,
> > + .n_voltages = PCA9450_LDO1_VOLTAGE_NUM,
> > + .linear_ranges = pca9450_ldo1_volts,
> > + .n_linear_ranges =
> ARRAY_SIZE(pca9450_ldo1_volts),
> > + .vsel_reg = PCA9450_REG_LDO1CTRL,
> > + .vsel_mask = LDO1OUT_MASK,
> > + .enable_reg = PCA9450_REG_LDO1CTRL,
> > + .enable_mask = LDO1_EN_MASK,
> > + .owner = THIS_MODULE,
> > + },
> > + },
> > + {
> > + .desc = {
> > + .name = "ldo4",
> > + .of_match = of_match_ptr("LDO4"),
> > + .regulators_node = of_match_ptr("regulators"),
> > + .id = PCA9450_LDO4,
> > + .ops = &pca9450_ldo_regulator_ops,
> > + .type = REGULATOR_VOLTAGE,
> > + .n_voltages = PCA9450_LDO4_VOLTAGE_NUM,
> > + .linear_ranges = pca9450_ldo34_volts,
> > + .n_linear_ranges =
> ARRAY_SIZE(pca9450_ldo34_volts),
> > + .vsel_reg = PCA9450_REG_LDO4CTRL,
> > + .vsel_mask = LDO4OUT_MASK,
> > + .enable_reg = PCA9450_REG_LDO4CTRL,
> > + .enable_mask = LDO4_EN_MASK,
> > + .owner = THIS_MODULE,
> > + },
> > + },
> > + {
> > + .desc = {
> > + .name = "ldo5",
> > + .of_match = of_match_ptr("LDO5"),
> > + .regulators_node = of_match_ptr("regulators"),
> > + .id = PCA9450_LDO5,
> > + .ops = &pca9450_ldo_regulator_ops,
> > + .type = REGULATOR_VOLTAGE,
> > + .n_voltages = PCA9450_LDO5_VOLTAGE_NUM,
> > + .linear_ranges = pca9450_ldo5_volts,
> > + .n_linear_ranges =
> ARRAY_SIZE(pca9450_ldo5_volts),
> > + .vsel_reg = PCA9450_REG_LDO5CTRL_H,
> > + .vsel_mask = LDO5HOUT_MASK,
> > + .enable_reg = PCA9450_REG_LDO5CTRL_H,
> > + .enable_mask = LDO5H_EN_MASK,
> > + .owner = THIS_MODULE,
> > + },
> > + },
> > +};
> > +
> > static irqreturn_t pca9450_irq_handler(int irq, void *data) {
> > struct pca9450 *pca9450 = data;
> > @@ -729,6 +909,10 @@ static int pca9450_i2c_probe(struct i2c_client
> *i2c)
> > regulator_desc = pca9450bc_regulators;
> > pca9450->rcnt = ARRAY_SIZE(pca9450bc_regulators);
> > break;
> > + case PCA9450_TYPE_PCA9451A:
> > + regulator_desc = pca9451a_regulators;
> > + pca9450->rcnt = ARRAY_SIZE(pca9451a_regulators);
> > + break;
> > default:
> > dev_err(&i2c->dev, "Unknown device type");
> > return -EINVAL;
> > @@ -755,7 +939,8 @@ static int pca9450_i2c_probe(struct i2c_client
> > *i2c)
> >
> > /* Check your board and dts for match the right pmic */
> > if (((device_id >> 4) != 0x1 && type == PCA9450_TYPE_PCA9450A)
> ||
> > - ((device_id >> 4) != 0x3 && type == PCA9450_TYPE_PCA9450BC))
> {
> > + ((device_id >> 4) != 0x3 && type == PCA9450_TYPE_PCA9450BC)
> ||
> > + ((device_id >> 4) != 0x9 && type == PCA9450_TYPE_PCA9451A))
> > + {
> > dev_err(&i2c->dev, "Device id(%x) mismatched\n",
> > device_id >> 4);
> > return -EINVAL;
> > @@ -767,6 +952,7 @@ static int pca9450_i2c_probe(struct i2c_client
> *i2c)
> > const struct pca9450_regulator_desc *r;
> >
> > r = &regulator_desc[i];
> > +
>
> Please don't add this empty line. Seems like a leftover from v1.
>
Okay, will remove the empty line.
Thank you very much.
BR
Joy Zou
> Thanks and best regards,
> Alexander
>
> > desc = &r->desc;
> >
> > config.regmap = pca9450->regmap; @@ -846,7 +1032,8
> @@
> > static int pca9450_i2c_probe(struct i2c_client *i2c)
> > }
> >
> > dev_info(&i2c->dev, "%s probed.\n",
> > - type == PCA9450_TYPE_PCA9450A ? "pca9450a" :
> "pca9450bc");
> > + type == PCA9450_TYPE_PCA9450A ? "pca9450a" :
> > + (type == PCA9450_TYPE_PCA9451A ? "pca9451a" :
> > + "pca9450bc"));
> >
> > return 0;
> > }
> > @@ -864,6 +1051,10 @@ static const struct of_device_id
> pca9450_of_match[] = {
> > .compatible = "nxp,pca9450c",
> > .data = (void *)PCA9450_TYPE_PCA9450BC,
> > },
> > + {
> > + .compatible = "nxp,pca9451a",
> > + .data = (void *)PCA9450_TYPE_PCA9451A,
> > + },
> > { }
> > };
> > MODULE_DEVICE_TABLE(of, pca9450_of_match); diff --git
> > a/include/linux/regulator/pca9450.h
> > b/include/linux/regulator/pca9450.h
> > index 505c908dbb81..243633c8dceb 100644
> > --- a/include/linux/regulator/pca9450.h
> > +++ b/include/linux/regulator/pca9450.h
> > @@ -9,6 +9,7 @@
> > enum pca9450_chip_type {
> > PCA9450_TYPE_PCA9450A = 0,
> > PCA9450_TYPE_PCA9450BC,
> > + PCA9450_TYPE_PCA9451A,
> > PCA9450_TYPE_AMOUNT,
> > };
> >
> >
>
>
> --
> TQ-Systems GmbH | Mühlstraße 2, Gut Delling | 82229 Seefeld, Germany
> Amtsgericht München, HRB 105018
> Geschäftsführer: Detlef Schneider, Rüdiger Stahl, Stefan Schneider
> http://www.t/
> q-group.com%2F&data=05%7C02%7Cjoy.zou%40nxp.com%7C127cf372317a
> 45bcefe508dc41aaeb74%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7
> C0%7C638457449552418123%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC
> 4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C0%7C
> %7C%7C&sdata=3EUbZ%2B8PQtMQ%2F4hC71tn1T3cqnQwGBwnaQf3xleDq
> %2FQ%3D&reserved=0
>

2024-03-11 10:00:32

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH v2 1/3] regulator: dt-bindings: pca9450: add pca9451a support

On 11/03/2024 09:47, Joy Zou wrote:
> Update pca9450 bindings.
>
> Signed-off-by: Joy Zou <[email protected]>
> ---

This is a friendly reminder during the review process.

It looks like you received a tag and forgot to add it.

If you do not know the process, here is a short explanation:
Please add Acked-by/Reviewed-by/Tested-by tags when posting new
versions, under or above your Signed-off-by tag. Tag is "received", when
provided in a message replied to you on the mailing list. Tools like b4
can help here. However, there's no need to repost patches *only* to add
the tags. The upstream maintainer will do that for tags received on the
version they apply.

https://elixir.bootlin.com/linux/v6.5-rc3/source/Documentation/process/submitting-patches.rst#L577

If a tag was not added on purpose, please state why and what changed.

Best regards,
Krzysztof


2024-03-11 10:04:29

by Joy Zou

[permalink] [raw]
Subject: RE: [EXT] Re: [PATCH v2 1/3] regulator: dt-bindings: pca9450: add pca9451a support


> -----Original Message-----
> From: Krzysztof Kozlowski <[email protected]>
> Sent: 2024??3??11?? 18:00
> To: Joy Zou <[email protected]>; Jacky Bai <[email protected]>;
> [email protected]; [email protected]; [email protected];
> [email protected]; [email protected];
> [email protected]; [email protected]
> Cc: [email protected]; [email protected]; dl-linux-imx
> <[email protected]>; [email protected];
> [email protected]; [email protected];
> [email protected]
> Subject: [EXT] Re: [PATCH v2 1/3] regulator: dt-bindings: pca9450: add
> pca9451a support
>
> Caution: This is an external email. Please take care when clicking links or
> opening attachments. When in doubt, report the message using the 'Report
> this email' button
>
>
> On 11/03/2024 09:47, Joy Zou wrote:
> > Update pca9450 bindings.
> >
> > Signed-off-by: Joy Zou <[email protected]>
> > ---
>
> This is a friendly reminder during the review process.
>
> It looks like you received a tag and forgot to add it.
Yes! Thanks your reminder. Will add tag received in next patch version.
BR
Joy Zou
>
> If you do not know the process, here is a short explanation:
> Please add Acked-by/Reviewed-by/Tested-by tags when posting new versions,
> under or above your Signed-off-by tag. Tag is "received", when provided in a
> message replied to you on the mailing list. Tools like b4 can help here.
> However, there's no need to repost patches *only* to add the tags. The
> upstream maintainer will do that for tags received on the version they apply.
>
> https://elixir.b/
> ootlin.com%2Flinux%2Fv6.5-rc3%2Fsource%2FDocumentation%2Fprocess%
> 2Fsubmitting-patches.rst%23L577&data=05%7C02%7Cjoy.zou%40nxp.com%
> 7C6656f39d41bb46fbbeb308dc41b20f7c%7C686ea1d3bc2b4c6fa92cd99c5c
> 301635%7C0%7C0%7C638457480215233348%7CUnknown%7CTWFpbGZsb
> 3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn
> 0%3D%7C0%7C%7C%7C&sdata=p2FQRnekh4s41UuJ4MzkHAUO2Jp0KN5%2F
> syP7Q%2BAwMFs%3D&reserved=0
>
> If a tag was not added on purpose, please state why and what changed.
>
> Best regards,
> Krzysztof

2024-03-11 13:29:14

by Mark Brown

[permalink] [raw]
Subject: Re: [PATCH v2 2/3] regulator: pca9450: add pca9451a support

On Mon, Mar 11, 2024 at 10:09:12AM +0100, Alexander Stein wrote:
> > + .of_match = of_match_ptr("BUCK1"),
> > + .regulators_node = of_match_ptr("regulators"),
> > + .id = PCA9450_BUCK1,
> > + .ops = &pca9450_dvs_buck_regulator_ops,
> > + .type = REGULATOR_VOLTAGE,

Please delete unneeded context from mails when replying. Doing this
makes it much easier to find your reply in the message, helping ensure
it won't be missed by people scrolling through the irrelevant quoted
material.


Attachments:
(No filename) (506.00 B)
signature.asc (495.00 B)
Download all attachments

2024-03-12 02:08:58

by Joy Zou

[permalink] [raw]
Subject: RE: [EXT] Re: [PATCH v2 2/3] regulator: pca9450: add pca9451a support


> -----Original Message-----
> From: Mark Brown <[email protected]>
> Sent: 2024??3??11?? 21:28
> To: Alexander Stein <[email protected]>
> Cc: Jacky Bai <[email protected]>; [email protected];
> [email protected]; [email protected];
> [email protected]; [email protected]; [email protected];
> [email protected]; [email protected];
> [email protected]; dl-linux-imx <[email protected]>;
> [email protected]; [email protected]; [email protected];
> Joy Zou <[email protected]>
> Subject: [EXT] Re: [PATCH v2 2/3] regulator: pca9450: add pca9451a support
>
> On Mon, Mar 11, 2024 at 10:09:12AM +0100, Alexander Stein wrote:
> > > + .of_match = of_match_ptr("BUCK1"),
> > > + .regulators_node = of_match_ptr("regulators"),
> > > + .id = PCA9450_BUCK1,
> > > + .ops = &pca9450_dvs_buck_regulator_ops,
> > > + .type = REGULATOR_VOLTAGE,
>
> Please delete unneeded context from mails when replying. Doing this
> makes it much easier to find your reply in the message, helping ensure it
> won't be missed by people scrolling through the irrelevant quoted material.
Thanks for your reminder!
I will delete unneeded context from mails when replying.
BR
Joy Zou