diff options
Diffstat (limited to 'drivers/pwm/pwm-mtk-disp.c')
| -rw-r--r-- | drivers/pwm/pwm-mtk-disp.c | 17 | 
1 files changed, 10 insertions, 7 deletions
diff --git a/drivers/pwm/pwm-mtk-disp.c b/drivers/pwm/pwm-mtk-disp.c index c605013e4114..692a06121b28 100644 --- a/drivers/pwm/pwm-mtk-disp.c +++ b/drivers/pwm/pwm-mtk-disp.c @@ -172,32 +172,33 @@ static int mtk_disp_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,  	return 0;  } -static void mtk_disp_pwm_get_state(struct pwm_chip *chip, -				   struct pwm_device *pwm, -				   struct pwm_state *state) +static int mtk_disp_pwm_get_state(struct pwm_chip *chip, +				  struct pwm_device *pwm, +				  struct pwm_state *state)  {  	struct mtk_disp_pwm *mdp = to_mtk_disp_pwm(chip);  	u64 rate, period, high_width; -	u32 clk_div, con0, con1; +	u32 clk_div, pwm_en, con0, con1;  	int err;  	err = clk_prepare_enable(mdp->clk_main);  	if (err < 0) {  		dev_err(chip->dev, "Can't enable mdp->clk_main: %pe\n", ERR_PTR(err)); -		return; +		return err;  	}  	err = clk_prepare_enable(mdp->clk_mm);  	if (err < 0) {  		dev_err(chip->dev, "Can't enable mdp->clk_mm: %pe\n", ERR_PTR(err));  		clk_disable_unprepare(mdp->clk_main); -		return; +		return err;  	}  	rate = clk_get_rate(mdp->clk_main);  	con0 = readl(mdp->base + mdp->data->con0);  	con1 = readl(mdp->base + mdp->data->con1); -	state->enabled = !!(con0 & BIT(0)); +	pwm_en = readl(mdp->base + DISP_PWM_EN); +	state->enabled = !!(pwm_en & mdp->data->enable_mask);  	clk_div = FIELD_GET(PWM_CLKDIV_MASK, con0);  	period = FIELD_GET(PWM_PERIOD_MASK, con1);  	/* @@ -211,6 +212,8 @@ static void mtk_disp_pwm_get_state(struct pwm_chip *chip,  	state->polarity = PWM_POLARITY_NORMAL;  	clk_disable_unprepare(mdp->clk_mm);  	clk_disable_unprepare(mdp->clk_main); + +	return 0;  }  static const struct pwm_ops mtk_disp_pwm_ops = {  | 
