diff --git a/Documentation/devicetree/bindings/leds/backlight/kinetic,ktd253.yaml b/Documentation/devicetree/bindings/leds/backlight/kinetic,ktd253.yaml index 7a6ec1f8c0f35a655facc0208b847728a7eaeabc..73fa59e62181645a9e058b60f46662254f78b2d4 100644 --- a/Documentation/devicetree/bindings/leds/backlight/kinetic,ktd253.yaml +++ b/Documentation/devicetree/bindings/leds/backlight/kinetic,ktd253.yaml @@ -4,13 +4,13 @@ $id: http://devicetree.org/schemas/leds/backlight/kinetic,ktd253.yaml# $schema: http://devicetree.org/meta-schemas/core.yaml# -title: Kinetic Technologies KTD253 one-wire backlight +title: Kinetic Technologies KTD253 and KTD259 one-wire backlight maintainers: - Linus Walleij <linus.walleij@linaro.org> description: | - The Kinetic Technologies KTD253 is a white LED backlight that is + The Kinetic Technologies KTD253 and KTD259 are white LED backlights controlled by a single GPIO line. If you just turn on the backlight it goes to maximum backlight then you can set the level of backlight using pulses on the enable wire. This is sometimes referred to as @@ -21,7 +21,10 @@ allOf: properties: compatible: - const: kinetic,ktd253 + items: + - enum: + - kinetic,ktd253 + - kinetic,ktd259 enable-gpios: description: GPIO to use to enable/disable and dim the backlight. diff --git a/Documentation/devicetree/bindings/leds/backlight/qcom-wled.yaml b/Documentation/devicetree/bindings/leds/backlight/qcom-wled.yaml index 47938e3729877cf0d86b1341d6a96333365ee197..d839e75d9788b670c583fcd733a9148017643a60 100644 --- a/Documentation/devicetree/bindings/leds/backlight/qcom-wled.yaml +++ b/Documentation/devicetree/bindings/leds/backlight/qcom-wled.yaml @@ -19,6 +19,7 @@ properties: compatible: enum: - qcom,pm8941-wled + - qcom,pmi8994-wled - qcom,pmi8998-wled - qcom,pm660l-wled - qcom,pm8150l-wled diff --git a/drivers/video/backlight/jornada720_bl.c b/drivers/video/backlight/jornada720_bl.c index 996f7ba3b373696d20ec9754a77a1eccd812e841..066d0dc98f6072ca2f848b57b933cf8bfd43f8e7 100644 --- a/drivers/video/backlight/jornada720_bl.c +++ b/drivers/video/backlight/jornada720_bl.c @@ -66,30 +66,30 @@ static int jornada_bl_update_status(struct backlight_device *bd) } else /* turn on backlight */ PPSR |= PPC_LDD1; - /* send command to our mcu */ - if (jornada_ssp_byte(SETBRIGHTNESS) != TXDUMMY) { - dev_info(&bd->dev, "failed to set brightness\n"); - ret = -ETIMEDOUT; - goto out; - } + /* send command to our mcu */ + if (jornada_ssp_byte(SETBRIGHTNESS) != TXDUMMY) { + dev_info(&bd->dev, "failed to set brightness\n"); + ret = -ETIMEDOUT; + goto out; + } - /* - * at this point we expect that the mcu has accepted - * our command and is waiting for our new value - * please note that maximum brightness is 255, - * but due to physical layout it is equal to 0, so we simply - * invert the value (MAX VALUE - NEW VALUE). - */ - if (jornada_ssp_byte(BL_MAX_BRIGHT - bd->props.brightness) - != TXDUMMY) { - dev_err(&bd->dev, "set brightness failed\n"); - ret = -ETIMEDOUT; - } + /* + * at this point we expect that the mcu has accepted + * our command and is waiting for our new value + * please note that maximum brightness is 255, + * but due to physical layout it is equal to 0, so we simply + * invert the value (MAX VALUE - NEW VALUE). + */ + if (jornada_ssp_byte(BL_MAX_BRIGHT - bd->props.brightness) + != TXDUMMY) { + dev_err(&bd->dev, "set brightness failed\n"); + ret = -ETIMEDOUT; + } - /* - * If infact we get an TXDUMMY as output we are happy and dont - * make any further comments about it - */ + /* + * If infact we get an TXDUMMY as output we are happy and dont + * make any further comments about it + */ out: jornada_ssp_end(); diff --git a/drivers/video/backlight/ktd253-backlight.c b/drivers/video/backlight/ktd253-backlight.c index d7b287cffd5cb6ef69915df6ee514b1f8521ba07..a7df5bcca9da500992301a0293b9ffbeeb12dafc 100644 --- a/drivers/video/backlight/ktd253-backlight.c +++ b/drivers/video/backlight/ktd253-backlight.c @@ -173,6 +173,7 @@ static int ktd253_backlight_probe(struct platform_device *pdev) static const struct of_device_id ktd253_backlight_of_match[] = { { .compatible = "kinetic,ktd253" }, + { .compatible = "kinetic,ktd259" }, { /* sentinel */ } }; MODULE_DEVICE_TABLE(of, ktd253_backlight_of_match); diff --git a/drivers/video/backlight/qcom-wled.c b/drivers/video/backlight/qcom-wled.c index 091f07e7c1451a893842a38ad956612ecd5ce054..7c02f87c51c2ccc9e70ac24a5a446536fe985508 100644 --- a/drivers/video/backlight/qcom-wled.c +++ b/drivers/video/backlight/qcom-wled.c @@ -336,34 +336,34 @@ static int wled3_sync_toggle(struct wled *wled) unsigned int mask = GENMASK(wled->max_string_count - 1, 0); rc = regmap_update_bits(wled->regmap, - wled->ctrl_addr + WLED3_SINK_REG_SYNC, - mask, mask); + wled->sink_addr + WLED3_SINK_REG_SYNC, + mask, WLED3_SINK_REG_SYNC_CLEAR); if (rc < 0) return rc; rc = regmap_update_bits(wled->regmap, - wled->ctrl_addr + WLED3_SINK_REG_SYNC, - mask, WLED3_SINK_REG_SYNC_CLEAR); + wled->sink_addr + WLED3_SINK_REG_SYNC, + mask, mask); return rc; } -static int wled5_sync_toggle(struct wled *wled) +static int wled5_mod_sync_toggle(struct wled *wled) { int rc; u8 val; - val = (wled->cfg.mod_sel == MOD_A) ? WLED5_SINK_REG_SYNC_MOD_A_BIT : - WLED5_SINK_REG_SYNC_MOD_B_BIT; rc = regmap_update_bits(wled->regmap, wled->sink_addr + WLED5_SINK_REG_MOD_SYNC_BIT, - WLED5_SINK_REG_SYNC_MASK, val); + WLED5_SINK_REG_SYNC_MASK, 0); if (rc < 0) return rc; + val = (wled->cfg.mod_sel == MOD_A) ? WLED5_SINK_REG_SYNC_MOD_A_BIT : + WLED5_SINK_REG_SYNC_MOD_B_BIT; return regmap_update_bits(wled->regmap, wled->sink_addr + WLED5_SINK_REG_MOD_SYNC_BIT, - WLED5_SINK_REG_SYNC_MASK, 0); + WLED5_SINK_REG_SYNC_MASK, val); } static int wled_ovp_fault_status(struct wled *wled, bool *fault_set) @@ -445,10 +445,23 @@ static int wled_update_status(struct backlight_device *bl) goto unlock_mutex; } - rc = wled->wled_sync_toggle(wled); - if (rc < 0) { - dev_err(wled->dev, "wled sync failed rc:%d\n", rc); - goto unlock_mutex; + if (wled->version < 5) { + rc = wled->wled_sync_toggle(wled); + if (rc < 0) { + dev_err(wled->dev, "wled sync failed rc:%d\n", rc); + goto unlock_mutex; + } + } else { + /* + * For WLED5 toggling the MOD_SYNC_BIT updates the + * brightness + */ + rc = wled5_mod_sync_toggle(wled); + if (rc < 0) { + dev_err(wled->dev, "wled mod sync failed rc:%d\n", + rc); + goto unlock_mutex; + } } } @@ -1459,7 +1472,7 @@ static int wled_configure(struct wled *wled) size = ARRAY_SIZE(wled5_opts); *cfg = wled5_config_defaults; wled->wled_set_brightness = wled5_set_brightness; - wled->wled_sync_toggle = wled5_sync_toggle; + wled->wled_sync_toggle = wled3_sync_toggle; wled->wled_cabc_config = wled5_cabc_config; wled->wled_ovp_delay = wled5_ovp_delay; wled->wled_auto_detection_required =