On Fri, Mar 06, 2026 at 02:21:48PM -0800, Rosen Penev wrote:
> Change kzalloc + kcalloc to just kzalloc with a flexible array member.
>
> Add __counted_by for extra runtime analysis when requested.
>
> Shuffle some code in probe to provide a clearer picture.
>
> Signed-off-by: Rosen Penev <[email protected]>
> ---
> .../typec/tcpm/qcom/qcom_pmic_typec_pdphy.c | 27 ++++++++-----------
> .../typec/tcpm/qcom/qcom_pmic_typec_port.c | 26 ++++++++----------
> 2 files changed, 22 insertions(+), 31 deletions(-)
>
> diff --git a/drivers/usb/typec/tcpm/qcom/qcom_pmic_typec_pdphy.c
> b/drivers/usb/typec/tcpm/qcom/qcom_pmic_typec_pdphy.c
> index c8b1463e6e8b..4b3915c6894a 100644
> --- a/drivers/usb/typec/tcpm/qcom/qcom_pmic_typec_pdphy.c
> +++ b/drivers/usb/typec/tcpm/qcom/qcom_pmic_typec_pdphy.c
> @@ -95,13 +95,13 @@ struct pmic_typec_pdphy {
> struct regmap *regmap;
> u32 base;
>
> - unsigned int nr_irqs;
> - struct pmic_typec_pdphy_irq_data *irq_data;
> -
> struct work_struct reset_work;
> struct work_struct receive_work;
> struct regulator *vdd_pdphy;
> spinlock_t lock; /* Register atomicity */
> +
> + unsigned int nr_irqs;
> + struct pmic_typec_pdphy_irq_data irq_data[]
> __counted_by(nr_irqs);
> };
>
> static void qcom_pmic_typec_pdphy_reset_on(struct pmic_typec_pdphy
> *pmic_typec_pdphy)
> @@ -560,31 +560,26 @@ int qcom_pmic_typec_pdphy_probe(struct platform_device
> *pdev,
> struct pmic_typec_pdphy_irq_data *irq_data;
> int i, ret, irq;
>
> - pmic_typec_pdphy = devm_kzalloc(dev, sizeof(*pmic_typec_pdphy),
> GFP_KERNEL);
> - if (!pmic_typec_pdphy)
> - return -ENOMEM;
> -
> if (!res->nr_irqs || res->nr_irqs > PMIC_PDPHY_MAX_IRQS)
> return -EINVAL;
>
> - irq_data = devm_kcalloc(dev, res->nr_irqs, sizeof(*irq_data),
> - GFP_KERNEL);
> - if (!irq_data)
> + pmic_typec_pdphy = devm_kzalloc(dev, struct_size(pmic_typec_pdphy,
> irq_data, res->nr_irqs), GFP_KERNEL);
extra long line, checkpatch.pl didn't complain about this?
> + if (!pmic_typec_pdphy)
> return -ENOMEM;
>
> + pmic_typec_pdphy->nr_irqs = res->nr_irqs;
> + pmic_typec_pdphy->dev = dev;
> + pmic_typec_pdphy->base = base;
> + pmic_typec_pdphy->regmap = regmap;
> pmic_typec_pdphy->vdd_pdphy = devm_regulator_get(dev, "vdd-pdphy");
> if (IS_ERR(pmic_typec_pdphy->vdd_pdphy))
> return PTR_ERR(pmic_typec_pdphy->vdd_pdphy);
>
> - pmic_typec_pdphy->dev = dev;
> - pmic_typec_pdphy->base = base;
> - pmic_typec_pdphy->regmap = regmap;
> - pmic_typec_pdphy->nr_irqs = res->nr_irqs;
> - pmic_typec_pdphy->irq_data = irq_data;
> spin_lock_init(&pmic_typec_pdphy->lock);
> INIT_WORK(&pmic_typec_pdphy->reset_work,
> qcom_pmic_typec_pdphy_sig_reset_work);
>
> - for (i = 0; i < res->nr_irqs; i++, irq_data++) {
> + for (i = 0; i < res->nr_irqs; i++) {
> + irq_data = &pmic_typec_pdphy->irq_data[i];
> irq = platform_get_irq_byname(pdev,
> res->irq_params[i].irq_name);
> if (irq < 0)
> return irq;
> diff --git a/drivers/usb/typec/tcpm/qcom/qcom_pmic_typec_port.c
> b/drivers/usb/typec/tcpm/qcom/qcom_pmic_typec_port.c
> index 8051eaa46991..7c5cf8061f04 100644
> --- a/drivers/usb/typec/tcpm/qcom/qcom_pmic_typec_port.c
> +++ b/drivers/usb/typec/tcpm/qcom/qcom_pmic_typec_port.c
Can you just convert one driver at a time please? This should be a
patch series.
thanks,
greg k-h