[PATCH v4 107/115] drm/bridge: ti-sn65dsi86: Make use of devm_pwmchip_alloc() function
Robert Foss
rfoss at kernel.org
Mon Jan 22 15:19:54 UTC 2024
On Wed, Dec 6, 2023 at 12:49 PM Uwe Kleine-König
<u.kleine-koenig at pengutronix.de> wrote:
>
> This prepares the pwm driver of the ti-sn65dsi86 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 at pengutronix.de>
> ---
> drivers/gpu/drm/bridge/ti-sn65dsi86.c | 27 ++++++++++++++++++---------
> 1 file changed, 18 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi86.c b/drivers/gpu/drm/bridge/ti-sn65dsi86.c
> index c45c07840f64..33eb2ed0a729 100644
> --- a/drivers/gpu/drm/bridge/ti-sn65dsi86.c
> +++ b/drivers/gpu/drm/bridge/ti-sn65dsi86.c
> @@ -197,7 +197,7 @@ struct ti_sn65dsi86 {
> DECLARE_BITMAP(gchip_output, SN_NUM_GPIOS);
> #endif
> #if defined(CONFIG_PWM)
> - struct pwm_chip pchip;
> + struct pwm_chip *pchip;
> bool pwm_enabled;
> atomic_t pwm_pin_busy;
> #endif
> @@ -1372,7 +1372,7 @@ static void ti_sn_pwm_pin_release(struct ti_sn65dsi86 *pdata)
>
> static struct ti_sn65dsi86 *pwm_chip_to_ti_sn_bridge(struct pwm_chip *chip)
> {
> - return container_of(chip, struct ti_sn65dsi86, pchip);
> + return pwmchip_get_drvdata(chip);
> }
>
> static int ti_sn_pwm_request(struct pwm_chip *chip, struct pwm_device *pwm)
> @@ -1585,22 +1585,31 @@ static const struct pwm_ops ti_sn_pwm_ops = {
> static int ti_sn_pwm_probe(struct auxiliary_device *adev,
> const struct auxiliary_device_id *id)
> {
> + struct pwm_chip *chip;
> struct ti_sn65dsi86 *pdata = dev_get_drvdata(adev->dev.parent);
>
> - pdata->pchip.dev = pdata->dev;
> - pdata->pchip.ops = &ti_sn_pwm_ops;
> - pdata->pchip.npwm = 1;
> - pdata->pchip.of_xlate = of_pwm_single_xlate;
> - pdata->pchip.of_pwm_n_cells = 1;
> + /*
> + * This should better use adev->dev instead of pdata->dev. See
> + * https://lore.kernel.org/dri-devel/20231127101547.734061-2-u.kleine-koenig@pengutronix.de
> + */
> + pdata->pchip = chip = devm_pwmchip_alloc(pdata->dev, 1, 0);
> + if (IS_ERR(chip))
> + return PTR_ERR(chip);
>
> - return pwmchip_add(&pdata->pchip);
> + pwmchip_set_drvdata(chip, pdata);
> +
> + chip->ops = &ti_sn_pwm_ops;
> + chip->of_xlate = of_pwm_single_xlate;
> + chip->of_pwm_n_cells = 1;
> +
> + return pwmchip_add(chip);
> }
>
> static void ti_sn_pwm_remove(struct auxiliary_device *adev)
> {
> struct ti_sn65dsi86 *pdata = dev_get_drvdata(adev->dev.parent);
>
> - pwmchip_remove(&pdata->pchip);
> + pwmchip_remove(pdata->pchip);
>
> if (pdata->pwm_enabled)
> pm_runtime_put_sync(pdata->dev);
> --
> 2.42.0
>
Acked-by: Robert Foss <rfoss at kernel.org>
More information about the dri-devel
mailing list