From: Uwe Kleine-König <redacted>
Hello,
this is v3 of the series. In v1 and v2 I failed to notice that the
driver contains two (nearly identical) update_status callbacks. Daniel
pointed that out, so here comes v3.
Best regards
Uwe
Uwe Kleine-König (2):
backlight: lm3630a: fix return code of .update_status() callback
backlight: lm3630a: convert to atomic PWM API and check for errors
drivers/video/backlight/lm3630a_bl.c | 50 +++++++++++++---------------
1 file changed, 23 insertions(+), 27 deletions(-)
--
2.30.2
The practical upside here is that this only needs a single API call to
program the hardware which (depending on the underlaying hardware) can
be more effective and prevents glitches.
Up to now the return value of the pwm functions was ignored. Fix this
and propagate the error to the caller.
Signed-off-by: Uwe Kleine-König <redacted>
---
drivers/video/backlight/lm3630a_bl.c | 42 +++++++++++++---------------
1 file changed, 19 insertions(+), 23 deletions(-)
@@ -167,16 +168,19 @@ static int lm3630a_intr_config(struct lm3630a_chip *pchip)returnrval;}-staticvoidlm3630a_pwm_ctrl(structlm3630a_chip*pchip,intbr,intbr_max)+staticintlm3630a_pwm_ctrl(structlm3630a_chip*pchip,intbr,intbr_max){-unsignedintperiod=pchip->pdata->pwm_period;-unsignedintduty=br*period/br_max;+interr;-pwm_config(pchip->pwmd,duty,period);-if(duty)-pwm_enable(pchip->pwmd);-else-pwm_disable(pchip->pwmd);+pchip->pwmd_state.period=pchip->pdata->pwm_period;++err=pwm_set_relative_duty_cycle(&pchip->pwmd_state,br,br_max);+if(err)+returnerr;++pchip->pwmd_state.enabled=pchip->pwmd_state.duty_cycle?true:false;++returnpwm_apply_state(pchip->pwmd,&pchip->pwmd_state);}/* update and get brightness */
@@ -187,11 +191,9 @@ static int lm3630a_bank_a_update_status(struct backlight_device *bl)enumlm3630a_pwm_ctrlpwm_ctrl=pchip->pdata->pwm_ctrl;/* pwm control */-if((pwm_ctrl&LM3630A_PWM_BANK_A)!=0){-lm3630a_pwm_ctrl(pchip,bl->props.brightness,-bl->props.max_brightness);-return0;-}+if((pwm_ctrl&LM3630A_PWM_BANK_A)!=0)+returnlm3630a_pwm_ctrl(pchip,bl->props.brightness,+bl->props.max_brightness);/* disable sleep */ret=lm3630a_update(pchip,REG_CTRL,0x80,0x00);
@@ -264,11 +266,9 @@ static int lm3630a_bank_b_update_status(struct backlight_device *bl)enumlm3630a_pwm_ctrlpwm_ctrl=pchip->pdata->pwm_ctrl;/* pwm control */-if((pwm_ctrl&LM3630A_PWM_BANK_B)!=0){-lm3630a_pwm_ctrl(pchip,bl->props.brightness,-bl->props.max_brightness);-return0;-}+if((pwm_ctrl&LM3630A_PWM_BANK_B)!=0)+returnlm3630a_pwm_ctrl(pchip,bl->props.brightness,+bl->props.max_brightness);/* disable sleep */ret=lm3630a_update(pchip,REG_CTRL,0x80,0x00);
@@ -563,11 +563,7 @@ static int lm3630a_probe(struct i2c_client *client,returnPTR_ERR(pchip->pwmd);}-/*-*FIXME:pwm_apply_args()shouldberemovedwhenswitchingto-*theatomicPWMAPI.-*/-pwm_apply_args(pchip->pwmd);+pwm_init_state(pchip->pwmd,&pchip->pwmd_state);}/* interrupt enable : irq 0 is not allowed */
According to <linux/backlight.h> .update_status() is supposed to
return 0 on success and a negative error code otherwise. Adapt
lm3630a_bank_a_update_status() and lm3630a_bank_b_update_status() to
actually do it.
While touching that also add the error code to the failure message.
Signed-off-by: Uwe Kleine-König <redacted>
---
drivers/video/backlight/lm3630a_bl.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
From: Daniel Thompson <hidden> Date: 2021-06-21 13:06:15
On Mon, Jun 21, 2021 at 02:21:47PM +0200, Uwe Kleine-König wrote:
According to <linux/backlight.h> .update_status() is supposed to
return 0 on success and a negative error code otherwise. Adapt
lm3630a_bank_a_update_status() and lm3630a_bank_b_update_status() to
actually do it.
While touching that also add the error code to the failure message.
Signed-off-by: Uwe Kleine-König <redacted>
From: Daniel Thompson <hidden> Date: 2021-06-21 13:14:57
On Mon, Jun 21, 2021 at 02:21:48PM +0200, Uwe Kleine-König wrote:
The practical upside here is that this only needs a single API call to
program the hardware which (depending on the underlaying hardware) can
be more effective and prevents glitches.
Up to now the return value of the pwm functions was ignored. Fix this
and propagate the error to the caller.
Signed-off-by: Uwe Kleine-König <redacted>
@@ -167,16 +168,19 @@ static int lm3630a_intr_config(struct lm3630a_chip *pchip)returnrval;}-staticvoidlm3630a_pwm_ctrl(structlm3630a_chip*pchip,intbr,intbr_max)+staticintlm3630a_pwm_ctrl(structlm3630a_chip*pchip,intbr,intbr_max){-unsignedintperiod=pchip->pdata->pwm_period;-unsignedintduty=br*period/br_max;+interr;-pwm_config(pchip->pwmd,duty,period);-if(duty)-pwm_enable(pchip->pwmd);-else-pwm_disable(pchip->pwmd);+pchip->pwmd_state.period=pchip->pdata->pwm_period;++err=pwm_set_relative_duty_cycle(&pchip->pwmd_state,br,br_max);+if(err)+returnerr;++pchip->pwmd_state.enabled=pchip->pwmd_state.duty_cycle?true:false;++returnpwm_apply_state(pchip->pwmd,&pchip->pwmd_state);}/* update and get brightness */
@@ -187,11 +191,9 @@ static int lm3630a_bank_a_update_status(struct backlight_device *bl)enumlm3630a_pwm_ctrlpwm_ctrl=pchip->pdata->pwm_ctrl;/* pwm control */-if((pwm_ctrl&LM3630A_PWM_BANK_A)!=0){-lm3630a_pwm_ctrl(pchip,bl->props.brightness,-bl->props.max_brightness);-return0;-}+if((pwm_ctrl&LM3630A_PWM_BANK_A)!=0)+returnlm3630a_pwm_ctrl(pchip,bl->props.brightness,+bl->props.max_brightness);/* disable sleep */ret=lm3630a_update(pchip,REG_CTRL,0x80,0x00);
@@ -264,11 +266,9 @@ static int lm3630a_bank_b_update_status(struct backlight_device *bl)enumlm3630a_pwm_ctrlpwm_ctrl=pchip->pdata->pwm_ctrl;/* pwm control */-if((pwm_ctrl&LM3630A_PWM_BANK_B)!=0){-lm3630a_pwm_ctrl(pchip,bl->props.brightness,-bl->props.max_brightness);-return0;-}+if((pwm_ctrl&LM3630A_PWM_BANK_B)!=0)+returnlm3630a_pwm_ctrl(pchip,bl->props.brightness,+bl->props.max_brightness);/* disable sleep */ret=lm3630a_update(pchip,REG_CTRL,0x80,0x00);
@@ -563,11 +563,7 @@ static int lm3630a_probe(struct i2c_client *client,returnPTR_ERR(pchip->pwmd);}-/*-*FIXME:pwm_apply_args()shouldberemovedwhenswitchingto-*theatomicPWMAPI.-*/-pwm_apply_args(pchip->pwmd);+pwm_init_state(pchip->pwmd,&pchip->pwmd_state);}/* interrupt enable : irq 0 is not allowed */
From: Lee Jones <hidden> Date: 2021-06-22 13:11:08
On Mon, 21 Jun 2021, Uwe Kleine-König wrote:
According to <linux/backlight.h> .update_status() is supposed to
return 0 on success and a negative error code otherwise. Adapt
lm3630a_bank_a_update_status() and lm3630a_bank_b_update_status() to
actually do it.
While touching that also add the error code to the failure message.
Signed-off-by: Uwe Kleine-König <redacted>
---
drivers/video/backlight/lm3630a_bl.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
Fixed the subject line for you and applied, thanks.
--
Lee Jones [李琼斯]
Senior Technical Lead - Developer Services
Linaro.org │ Open source software for Arm SoCs
Follow Linaro: Facebook | Twitter | Blog
From: Lee Jones <hidden> Date: 2021-06-22 13:13:03
On Mon, 21 Jun 2021, Uwe Kleine-König wrote:
The practical upside here is that this only needs a single API call to
program the hardware which (depending on the underlaying hardware) can
be more effective and prevents glitches.
Up to now the return value of the pwm functions was ignored. Fix this
and propagate the error to the caller.
Signed-off-by: Uwe Kleine-König <redacted>
---
drivers/video/backlight/lm3630a_bl.c | 42 +++++++++++++---------------
1 file changed, 19 insertions(+), 23 deletions(-)
Fixed the subject line and applied, thanks.
--
Lee Jones [李琼斯]
Senior Technical Lead - Developer Services
Linaro.org │ Open source software for Arm SoCs
Follow Linaro: Facebook | Twitter | Blog
Hi Lee,
On Tue, Jun 22, 2021 at 02:12:57PM +0100, Lee Jones wrote:
On Mon, 21 Jun 2021, Uwe Kleine-König wrote:
quoted
The practical upside here is that this only needs a single API call to
program the hardware which (depending on the underlaying hardware) can
be more effective and prevents glitches.
Up to now the return value of the pwm functions was ignored. Fix this
and propagate the error to the caller.
Signed-off-by: Uwe Kleine-König <redacted>
---
drivers/video/backlight/lm3630a_bl.c | 42 +++++++++++++---------------
1 file changed, 19 insertions(+), 23 deletions(-)
Fixed the subject line and applied, thanks.
It's not obvious to me what needed fixing here, and I don't find where
you the patches, neither in next nor in
https://git.kernel.org/pub/scm/linux/kernel/git/lee/backlight.git; so I
cannot check what you actually changed.
I assume you did s/lm3630a/lm3630a_bl/ ? I didn't because it felt
tautological.
Best regards
Uwe
--
Pengutronix e.K. | Uwe Kleine-König |
Industrial Linux Solutions | https://www.pengutronix.de/ |
From: Lee Jones <hidden> Date: 2021-06-25 08:44:49
On Thu, 24 Jun 2021, Uwe Kleine-König wrote:
Hi Lee,
On Tue, Jun 22, 2021 at 02:12:57PM +0100, Lee Jones wrote:
quoted
On Mon, 21 Jun 2021, Uwe Kleine-König wrote:
quoted
The practical upside here is that this only needs a single API call to
program the hardware which (depending on the underlaying hardware) can
be more effective and prevents glitches.
Up to now the return value of the pwm functions was ignored. Fix this
and propagate the error to the caller.
Signed-off-by: Uwe Kleine-König <redacted>
---
drivers/video/backlight/lm3630a_bl.c | 42 +++++++++++++---------------
1 file changed, 19 insertions(+), 23 deletions(-)
Fixed the subject line and applied, thanks.
It's not obvious to me what needed fixing here, and I don't find where
you the patches, neither in next nor in
https://git.kernel.org/pub/scm/linux/kernel/git/lee/backlight.git; so I
cannot check what you actually changed.
I assume you did s/lm3630a/lm3630a_bl/ ? I didn't because it felt
tautological.
No, but perhaps I should have. Format goes:
<backlight>: <driver_file_name>: <Subject starting with uppercase>
Where <driver_file_name> has the file extension removed.
--
Lee Jones [李琼斯]
Senior Technical Lead - Developer Services
Linaro.org │ Open source software for Arm SoCs
Follow Linaro: Facebook | Twitter | Blog