[PATCH v3] drm/bridge: ti-sn65dsi86: Associate PWM device to auxiliary device
Nikita Travkin
nikita at trvn.ru
Sat Dec 9 16:07:52 UTC 2023
Uwe Kleine-König писал(а) 09.12.2023 20:31:
> It's the ti_sn65dsi86.pwm auxiliary driver that creates the pwmchip, so
> let the auxiliary device be the parent of the pwm device.
>
> Note that getting a reference to the ti-sn65dsi86's pwm using pwm_get()
> isn't affected by this change as ti_sn65dsi86_add_aux_device() sets the
> auxiliary device's of_node to that of the main device.
>
> Also change PM runtime tracking and diagnostic messages to use that one.
> After enabling runtime PM operation for the auxiliary device, all works
> as expected as parent devices are handled just fine.
>
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig at pengutronix.de>
This works well now, thanks!
Tested-by: Nikita Travkin <nikita at trvn.ru> # Acer Aspire 1
Nikita
> ---
> Changes since v2
> (https://lore.kernel.org/dri-devel/20231209152520.1987483-2-u.kleine-koenig@pengutronix.de):
>
> - Make use of devm_pm_runtime_enable as suggested by Douglas Anderson
> in reply to v1 already. (Sorry, missed that while preparing v2 :-\)
>
> Changes since (implicit) v1
> (https://lore.kernel.org/dri-devel/20231127101547.734061-2-u.kleine-koenig@pengutronix.de):
>
> - Add a call to pm_runtime_enable() for the aux device
> (tested and diagnosed by Nikita Travkin).
> - Rebased to yesterday's next, which required some (easy) conflict
> resolution for commit c9d99c73940e ("drm/bridge: ti-sn65dsi86:
> Simplify using pm_runtime_resume_and_get()").
>
> Best regards
> Uwe
>
> drivers/gpu/drm/bridge/ti-sn65dsi86.c | 16 +++++++++-------
> 1 file changed, 9 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi86.c b/drivers/gpu/drm/bridge/ti-sn65dsi86.c
> index 5b8e1dfc458d..9095d1453710 100644
> --- a/drivers/gpu/drm/bridge/ti-sn65dsi86.c
> +++ b/drivers/gpu/drm/bridge/ti-sn65dsi86.c
> @@ -1413,7 +1413,7 @@ static int ti_sn_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
> int ret;
>
> if (!pdata->pwm_enabled) {
> - ret = pm_runtime_resume_and_get(pdata->dev);
> + ret = pm_runtime_resume_and_get(chip->dev);
> if (ret < 0)
> return ret;
> }
> @@ -1429,7 +1429,7 @@ static int ti_sn_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
> SN_GPIO_MUX_MASK << (2 * SN_PWM_GPIO_IDX),
> SN_GPIO_MUX_SPECIAL << (2 * SN_PWM_GPIO_IDX));
> if (ret) {
> - dev_err(pdata->dev, "failed to mux in PWM function\n");
> + dev_err(chip->dev, "failed to mux in PWM function\n");
> goto out;
> }
> }
> @@ -1505,7 +1505,7 @@ static int ti_sn_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
>
> ret = regmap_write(pdata->regmap, SN_PWM_PRE_DIV_REG, pre_div);
> if (ret) {
> - dev_err(pdata->dev, "failed to update PWM_PRE_DIV\n");
> + dev_err(chip->dev, "failed to update PWM_PRE_DIV\n");
> goto out;
> }
>
> @@ -1517,7 +1517,7 @@ static int ti_sn_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
> FIELD_PREP(SN_PWM_INV_MASK, state->polarity == PWM_POLARITY_INVERSED);
> ret = regmap_write(pdata->regmap, SN_PWM_EN_INV_REG, pwm_en_inv);
> if (ret) {
> - dev_err(pdata->dev, "failed to update PWM_EN/PWM_INV\n");
> + dev_err(chip->dev, "failed to update PWM_EN/PWM_INV\n");
> goto out;
> }
>
> @@ -1525,7 +1525,7 @@ static int ti_sn_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
> out:
>
> if (!pdata->pwm_enabled)
> - pm_runtime_put_sync(pdata->dev);
> + pm_runtime_put_sync(chip->dev);
>
> return ret;
> }
> @@ -1585,12 +1585,14 @@ static int ti_sn_pwm_probe(struct auxiliary_device *adev,
> {
> struct ti_sn65dsi86 *pdata = dev_get_drvdata(adev->dev.parent);
>
> - pdata->pchip.dev = pdata->dev;
> + pdata->pchip.dev = &adev->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;
>
> + devm_pm_runtime_enable(&adev->dev);
> +
> return pwmchip_add(&pdata->pchip);
> }
>
> @@ -1601,7 +1603,7 @@ static void ti_sn_pwm_remove(struct auxiliary_device *adev)
> pwmchip_remove(&pdata->pchip);
>
> if (pdata->pwm_enabled)
> - pm_runtime_put_sync(pdata->dev);
> + pm_runtime_put_sync(&adev->dev);
> }
>
> static const struct auxiliary_device_id ti_sn_pwm_id_table[] = {
>
> base-commit: bc63de6e6ba0b16652c5fb4b9c9916b9e7ca1f23
More information about the dri-devel
mailing list