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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 <joy.zou@xxxxxxx>
> ---
> 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/







[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux