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@xxxxxxxxxxxxxx> This works well now, thanks! Tested-by: Nikita Travkin <nikita@xxxxxxx> # Acer Aspire 1 Nikita > --- > Changes since v2 > (https://lore.kernel.org/dri-devel/20231209152520.1987483-2-u.kleine-koenig@xxxxxxxxxxxxxx): > > - 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@xxxxxxxxxxxxxx): > > - 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