Message ID | 20211004192741.621870-3-marijn.suijten@somainline.org (mailing list archive) |
---|---|
State | Superseded, archived |
Headers | show |
Series | backlight: qcom-wled: fix and solidify handling of enabled-strings | expand |
On Mon, Oct 04, 2021 at 09:27:33PM +0200, Marijn Suijten wrote: > The kernel already provides appropriate primitives to perform endianness > conversion which should be used in favour of manual bit-wrangling. > > Signed-off-by: Marijn Suijten <marijn.suijten@somainline.org> > Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@somainline.org> Reviewed-by: Daniel Thompson <daniel.thompson@linaro.org> > --- > drivers/video/backlight/qcom-wled.c | 25 +++++++++++-------------- > 1 file changed, 11 insertions(+), 14 deletions(-) > > diff --git a/drivers/video/backlight/qcom-wled.c b/drivers/video/backlight/qcom-wled.c > index 6af808af2328..9927ed98944a 100644 > --- a/drivers/video/backlight/qcom-wled.c > +++ b/drivers/video/backlight/qcom-wled.c > @@ -231,14 +231,14 @@ struct wled { > static int wled3_set_brightness(struct wled *wled, u16 brightness) > { > int rc, i; > - u8 v[2]; > + u16 v; > > - v[0] = brightness & 0xff; > - v[1] = (brightness >> 8) & 0xf; > + v = cpu_to_le16(brightness & WLED3_SINK_REG_BRIGHT_MAX); > > for (i = 0; i < wled->cfg.num_strings; ++i) { > rc = regmap_bulk_write(wled->regmap, wled->ctrl_addr + > - WLED3_SINK_REG_BRIGHT(i), v, 2); > + WLED3_SINK_REG_BRIGHT(i), > + &v, sizeof(v)); > if (rc < 0) > return rc; > } > @@ -249,19 +249,18 @@ static int wled3_set_brightness(struct wled *wled, u16 brightness) > static int wled4_set_brightness(struct wled *wled, u16 brightness) > { > int rc, i; > - u16 low_limit = wled->max_brightness * 4 / 1000; > - u8 v[2]; > + u16 v, low_limit = wled->max_brightness * 4 / 1000; > > /* WLED4's lower limit of operation is 0.4% */ > if (brightness > 0 && brightness < low_limit) > brightness = low_limit; > > - v[0] = brightness & 0xff; > - v[1] = (brightness >> 8) & 0xf; > + v = cpu_to_le16(brightness & WLED3_SINK_REG_BRIGHT_MAX); > > for (i = 0; i < wled->cfg.num_strings; ++i) { > rc = regmap_bulk_write(wled->regmap, wled->sink_addr + > - WLED4_SINK_REG_BRIGHT(i), v, 2); > + WLED4_SINK_REG_BRIGHT(i), > + &v, sizeof(v)); > if (rc < 0) > return rc; > } > @@ -272,22 +271,20 @@ static int wled4_set_brightness(struct wled *wled, u16 brightness) > static int wled5_set_brightness(struct wled *wled, u16 brightness) > { > int rc, offset; > - u16 low_limit = wled->max_brightness * 1 / 1000; > - u8 v[2]; > + u16 v, low_limit = wled->max_brightness * 1 / 1000; > > /* WLED5's lower limit is 0.1% */ > if (brightness < low_limit) > brightness = low_limit; > > - v[0] = brightness & 0xff; > - v[1] = (brightness >> 8) & 0x7f; > + v = cpu_to_le16(brightness & WLED5_SINK_REG_BRIGHT_MAX_15B); > > offset = (wled->cfg.mod_sel == MOD_A) ? > WLED5_SINK_REG_MOD_A_BRIGHTNESS_LSB : > WLED5_SINK_REG_MOD_B_BRIGHTNESS_LSB; > > rc = regmap_bulk_write(wled->regmap, wled->sink_addr + offset, > - v, 2); > + &v, sizeof(v)); > return rc; > } > > -- > 2.33.0 >
diff --git a/drivers/video/backlight/qcom-wled.c b/drivers/video/backlight/qcom-wled.c index 6af808af2328..9927ed98944a 100644 --- a/drivers/video/backlight/qcom-wled.c +++ b/drivers/video/backlight/qcom-wled.c @@ -231,14 +231,14 @@ struct wled { static int wled3_set_brightness(struct wled *wled, u16 brightness) { int rc, i; - u8 v[2]; + u16 v; - v[0] = brightness & 0xff; - v[1] = (brightness >> 8) & 0xf; + v = cpu_to_le16(brightness & WLED3_SINK_REG_BRIGHT_MAX); for (i = 0; i < wled->cfg.num_strings; ++i) { rc = regmap_bulk_write(wled->regmap, wled->ctrl_addr + - WLED3_SINK_REG_BRIGHT(i), v, 2); + WLED3_SINK_REG_BRIGHT(i), + &v, sizeof(v)); if (rc < 0) return rc; } @@ -249,19 +249,18 @@ static int wled3_set_brightness(struct wled *wled, u16 brightness) static int wled4_set_brightness(struct wled *wled, u16 brightness) { int rc, i; - u16 low_limit = wled->max_brightness * 4 / 1000; - u8 v[2]; + u16 v, low_limit = wled->max_brightness * 4 / 1000; /* WLED4's lower limit of operation is 0.4% */ if (brightness > 0 && brightness < low_limit) brightness = low_limit; - v[0] = brightness & 0xff; - v[1] = (brightness >> 8) & 0xf; + v = cpu_to_le16(brightness & WLED3_SINK_REG_BRIGHT_MAX); for (i = 0; i < wled->cfg.num_strings; ++i) { rc = regmap_bulk_write(wled->regmap, wled->sink_addr + - WLED4_SINK_REG_BRIGHT(i), v, 2); + WLED4_SINK_REG_BRIGHT(i), + &v, sizeof(v)); if (rc < 0) return rc; } @@ -272,22 +271,20 @@ static int wled4_set_brightness(struct wled *wled, u16 brightness) static int wled5_set_brightness(struct wled *wled, u16 brightness) { int rc, offset; - u16 low_limit = wled->max_brightness * 1 / 1000; - u8 v[2]; + u16 v, low_limit = wled->max_brightness * 1 / 1000; /* WLED5's lower limit is 0.1% */ if (brightness < low_limit) brightness = low_limit; - v[0] = brightness & 0xff; - v[1] = (brightness >> 8) & 0x7f; + v = cpu_to_le16(brightness & WLED5_SINK_REG_BRIGHT_MAX_15B); offset = (wled->cfg.mod_sel == MOD_A) ? WLED5_SINK_REG_MOD_A_BRIGHTNESS_LSB : WLED5_SINK_REG_MOD_B_BRIGHTNESS_LSB; rc = regmap_bulk_write(wled->regmap, wled->sink_addr + offset, - v, 2); + &v, sizeof(v)); return rc; }