On 9/14/26 8:14 PM, David Heidelberg via B4 Relay wrote:
> From: David Heidelberg <[email protected]>
> 
> WLED3 has a 16-bit brightness register pair per string, at 0x40 + 2*n,
> which is what the pm8941-wled driver wrote to:
> 
>       rc = regmap_bulk_write(wled->regmap,
>                       wled->addr + WLED3_CTRL_REG_VAL_BASE + 2 * i,
>                       v, 2);
> 
> The restructuring for WLED3 turned that into WLED3_SINK_REG_BRIGHT(n),
> defined as 0x40 + n, so the two byte writes for consecutive strings
> overlap: string 1 overwrites the MSB of string 0 with its own LSB, and
> with the default three strings only string 1 ends up with the requested
> value.
> 
> Use the 2 byte stride.
> 
> Fixes: 775d2ffb4af6 ("backlight: qcom-wled: Restructure the driver for WLED3")
> Cc: [email protected]
> Assisted-by: LLM
> Signed-off-by: David Heidelberg <[email protected]>
> ---
>  drivers/video/backlight/qcom-wled.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/video/backlight/qcom-wled.c 
> b/drivers/video/backlight/qcom-wled.c
> index a76158a298335..e1962c2d90ed4 100644
> --- a/drivers/video/backlight/qcom-wled.c
> +++ b/drivers/video/backlight/qcom-wled.c
> @@ -54,17 +54,17 @@
>  #define WLED3_SINK_REG_SYNC                          0x47
>  #define  WLED3_SINK_REG_SYNC_CLEAR                   0x00
>  
>  #define WLED3_SINK_REG_CURR_SINK                     0x4f
>  #define  WLED3_SINK_REG_CURR_SINK_MASK                       GENMASK(7, 5)
>  #define  WLED3_SINK_REG_CURR_SINK_SHFT                       5
>  
>  /* WLED3 specific per-'string' registers below */
> -#define WLED3_SINK_REG_BRIGHT(n)                     (0x40 + n)
> +#define WLED3_SINK_REG_BRIGHT(n)                     (0x40 + (n * 0x10))

You said 2 in the commit message and you set it to 2 in patch 4

Konrad

Reply via email to