diff mbox series

[v6,110/164] pwm: sprd: Make use of devm_pwmchip_alloc() function

Message ID 543213f44686ee72d8f88897bf2ca616e837ae44.1707900770.git.u.kleine-koenig@pengutronix.de
State Accepted
Headers show
Series pwm: Improve lifetime tracking for pwm_chips | expand

Commit Message

Uwe Kleine-König Feb. 14, 2024, 9:32 a.m. UTC
This prepares the pwm-sprd driver to further changes of the pwm core
outlined in the commit introducing devm_pwmchip_alloc(). There is no
intended semantical change and the driver should behave as before.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
 drivers/pwm/pwm-sprd.c | 17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)

Comments

Chunyan Zhang Feb. 22, 2024, 10:05 a.m. UTC | #1
On Wed, 14 Feb 2024 at 17:34, Uwe Kleine-König
<u.kleine-koenig@pengutronix.de> wrote:
>
> This prepares the pwm-sprd driver to further changes of the pwm core
> outlined in the commit introducing devm_pwmchip_alloc(). There is no
> intended semantical change and the driver should behave as before.
>
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>

Tested-by: Chunyan Zhang <zhang.lyra@gmail.com>

> ---
>  drivers/pwm/pwm-sprd.c | 17 ++++++++---------
>  1 file changed, 8 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/pwm/pwm-sprd.c b/drivers/pwm/pwm-sprd.c
> index a38f50c3dc00..4c76ca5e4cdd 100644
> --- a/drivers/pwm/pwm-sprd.c
> +++ b/drivers/pwm/pwm-sprd.c
> @@ -34,13 +34,12 @@ struct sprd_pwm_chn {
>
>  struct sprd_pwm_chip {
>         void __iomem *base;
> -       struct pwm_chip chip;
>         struct sprd_pwm_chn chn[SPRD_PWM_CHN_NUM];
>  };
>
>  static inline struct sprd_pwm_chip* sprd_pwm_from_chip(struct pwm_chip *chip)
>  {
> -       return container_of(chip, struct sprd_pwm_chip, chip);
> +       return pwmchip_get_drvdata(chip);
>  }
>
>  /*
> @@ -248,6 +247,7 @@ static int sprd_pwm_clk_init(struct device *dev,
>
>  static int sprd_pwm_probe(struct platform_device *pdev)
>  {
> +       struct pwm_chip *chip;
>         struct sprd_pwm_chip *spc;
>         struct sprd_pwm_chn chn[SPRD_PWM_CHN_NUM];
>         int ret, npwm;
> @@ -256,9 +256,10 @@ static int sprd_pwm_probe(struct platform_device *pdev)
>         if (npwm < 0)
>                 return npwm;
>
> -       spc = devm_kzalloc(&pdev->dev, sizeof(*spc), GFP_KERNEL);
> -       if (!spc)
> -               return -ENOMEM;
> +       chip = devm_pwmchip_alloc(&pdev->dev, npwm, sizeof(*spc));
> +       if (IS_ERR(chip))
> +               return PTR_ERR(chip);
> +       spc = sprd_pwm_from_chip(chip);
>
>         spc->base = devm_platform_ioremap_resource(pdev, 0);
>         if (IS_ERR(spc->base))
> @@ -266,11 +267,9 @@ static int sprd_pwm_probe(struct platform_device *pdev)
>
>         memcpy(spc->chn, chn, sizeof(chn));
>
> -       spc->chip.dev = &pdev->dev;
> -       spc->chip.ops = &sprd_pwm_ops;
> -       spc->chip.npwm = npwm;
> +       chip->ops = &sprd_pwm_ops;
>
> -       ret = devm_pwmchip_add(&pdev->dev, &spc->chip);
> +       ret = devm_pwmchip_add(&pdev->dev, chip);
>         if (ret)
>                 dev_err(&pdev->dev, "failed to add PWM chip\n");
>
> --
> 2.43.0
>
diff mbox series

Patch

diff --git a/drivers/pwm/pwm-sprd.c b/drivers/pwm/pwm-sprd.c
index a38f50c3dc00..4c76ca5e4cdd 100644
--- a/drivers/pwm/pwm-sprd.c
+++ b/drivers/pwm/pwm-sprd.c
@@ -34,13 +34,12 @@  struct sprd_pwm_chn {
 
 struct sprd_pwm_chip {
 	void __iomem *base;
-	struct pwm_chip chip;
 	struct sprd_pwm_chn chn[SPRD_PWM_CHN_NUM];
 };
 
 static inline struct sprd_pwm_chip* sprd_pwm_from_chip(struct pwm_chip *chip)
 {
-	return container_of(chip, struct sprd_pwm_chip, chip);
+	return pwmchip_get_drvdata(chip);
 }
 
 /*
@@ -248,6 +247,7 @@  static int sprd_pwm_clk_init(struct device *dev,
 
 static int sprd_pwm_probe(struct platform_device *pdev)
 {
+	struct pwm_chip *chip;
 	struct sprd_pwm_chip *spc;
 	struct sprd_pwm_chn chn[SPRD_PWM_CHN_NUM];
 	int ret, npwm;
@@ -256,9 +256,10 @@  static int sprd_pwm_probe(struct platform_device *pdev)
 	if (npwm < 0)
 		return npwm;
 
-	spc = devm_kzalloc(&pdev->dev, sizeof(*spc), GFP_KERNEL);
-	if (!spc)
-		return -ENOMEM;
+	chip = devm_pwmchip_alloc(&pdev->dev, npwm, sizeof(*spc));
+	if (IS_ERR(chip))
+		return PTR_ERR(chip);
+	spc = sprd_pwm_from_chip(chip);
 
 	spc->base = devm_platform_ioremap_resource(pdev, 0);
 	if (IS_ERR(spc->base))
@@ -266,11 +267,9 @@  static int sprd_pwm_probe(struct platform_device *pdev)
 
 	memcpy(spc->chn, chn, sizeof(chn));
 
-	spc->chip.dev = &pdev->dev;
-	spc->chip.ops = &sprd_pwm_ops;
-	spc->chip.npwm = npwm;
+	chip->ops = &sprd_pwm_ops;
 
-	ret = devm_pwmchip_add(&pdev->dev, &spc->chip);
+	ret = devm_pwmchip_add(&pdev->dev, chip);
 	if (ret)
 		dev_err(&pdev->dev, "failed to add PWM chip\n");