Commit c6c3f7e7 authored by Uwe Kleine-König's avatar Uwe Kleine-König

pwm: atmel-hlcdc: Don't use pwm consumer API

Lowlevel driver callbacks are not supposed to use the consumer API
functions. Currently this works, but with the upcoming locking changes
this probably results in dead locks.
Reviewed-by: default avatarClaudiu Beznea <claudiu.beznea@tuxon.dev>
Link: https://lore.kernel.org/r/6e34607828b290cd64ca9f82df40872853069f07.1706269232.git.u.kleine-koenig@pengutronix.deSigned-off-by: default avatarUwe Kleine-König <u.kleine-koenig@pengutronix.de>
parent 65a63bf9
...@@ -183,9 +183,10 @@ static const struct atmel_hlcdc_pwm_errata atmel_hlcdc_pwm_sama5d3_errata = { ...@@ -183,9 +183,10 @@ static const struct atmel_hlcdc_pwm_errata atmel_hlcdc_pwm_sama5d3_errata = {
static int atmel_hlcdc_pwm_suspend(struct device *dev) static int atmel_hlcdc_pwm_suspend(struct device *dev)
{ {
struct atmel_hlcdc_pwm *atmel = dev_get_drvdata(dev); struct atmel_hlcdc_pwm *atmel = dev_get_drvdata(dev);
struct pwm_device *pwm = &atmel->chip.pwms[0];
/* Keep the periph clock enabled if the PWM is still running. */ /* Keep the periph clock enabled if the PWM is still running. */
if (!pwm_is_enabled(&atmel->chip.pwms[0])) if (!pwm->state.enabled)
clk_disable_unprepare(atmel->hlcdc->periph_clk); clk_disable_unprepare(atmel->hlcdc->periph_clk);
return 0; return 0;
...@@ -194,20 +195,17 @@ static int atmel_hlcdc_pwm_suspend(struct device *dev) ...@@ -194,20 +195,17 @@ static int atmel_hlcdc_pwm_suspend(struct device *dev)
static int atmel_hlcdc_pwm_resume(struct device *dev) static int atmel_hlcdc_pwm_resume(struct device *dev)
{ {
struct atmel_hlcdc_pwm *atmel = dev_get_drvdata(dev); struct atmel_hlcdc_pwm *atmel = dev_get_drvdata(dev);
struct pwm_state state; struct pwm_device *pwm = &atmel->chip.pwms[0];
int ret; int ret;
pwm_get_state(&atmel->chip.pwms[0], &state);
/* Re-enable the periph clock it was stopped during suspend. */ /* Re-enable the periph clock it was stopped during suspend. */
if (!state.enabled) { if (!pwm->state.enabled) {
ret = clk_prepare_enable(atmel->hlcdc->periph_clk); ret = clk_prepare_enable(atmel->hlcdc->periph_clk);
if (ret) if (ret)
return ret; return ret;
} }
return atmel_hlcdc_pwm_apply(&atmel->chip, &atmel->chip.pwms[0], return atmel_hlcdc_pwm_apply(&atmel->chip, pwm, &pwm->state);
&state);
} }
static DEFINE_SIMPLE_DEV_PM_OPS(atmel_hlcdc_pwm_pm_ops, static DEFINE_SIMPLE_DEV_PM_OPS(atmel_hlcdc_pwm_pm_ops,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment