Merge tag 'backlight-next-5.20' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorLinus Torvalds <torvalds@linux-foundation.org>
Sat, 6 Aug 2022 17:33:34 +0000 (10:33 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 6 Aug 2022 17:33:34 +0000 (10:33 -0700)
Pull backlight updates from Lee Jones:
 "Core Framework:
   - Change maintainer email address

  Fix-ups:
   - Obtain OCP level from Device Tree; rt4831-backlight
   - DT fix-ups/conversions; richtek,rt4831-backlight
   - Remove unused code / functionatlity; platform_lcd
   - Switch to atomic PWM API; lp855x_bl

* tag 'backlight-next-5.20' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/backlight:
  MAINTAINERS: Use Lee Jones' kernel.org address for Backlight submissions
  backlight: lp855x: Switch to atomic PWM API
  dt-bindings: backlight: Update Lee Jones' email address
  Revert "drivers/video/backlight/platform_lcd.c: add support for device tree based probe"
  backlight: rt4831: Apply ocp level from devicetree
  dt-bindings: backlight: rt4831: Add the new ocp level property

Documentation/devicetree/bindings/leds/backlight/common.yaml
Documentation/devicetree/bindings/leds/backlight/gpio-backlight.yaml
Documentation/devicetree/bindings/leds/backlight/led-backlight.yaml
Documentation/devicetree/bindings/leds/backlight/lm3630a-backlight.yaml
Documentation/devicetree/bindings/leds/backlight/pwm-backlight.yaml
Documentation/devicetree/bindings/leds/backlight/richtek,rt4831-backlight.yaml
MAINTAINERS
drivers/video/backlight/lp855x_bl.c
drivers/video/backlight/platform_lcd.c
drivers/video/backlight/rt4831-backlight.c

index 702ba350d8698bef19e938e1e00552c95146efb3..3b60afbab68babbbb9280223a9561b076db90669 100644 (file)
@@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
 title: Common backlight properties
 
 maintainers:
-  - Lee Jones <lee.jones@linaro.org>
+  - Lee Jones <lee@kernel.org>
   - Daniel Thompson <daniel.thompson@linaro.org>
   - Jingoo Han <jingoohan1@gmail.com>
 
index 75cc569b9c558f07473c4ccdc32de09f6f734acf..3300451fcfd5e5235467f38230222c5b91eff732 100644 (file)
@@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
 title: gpio-backlight bindings
 
 maintainers:
-  - Lee Jones <lee.jones@linaro.org>
+  - Lee Jones <lee@kernel.org>
   - Daniel Thompson <daniel.thompson@linaro.org>
   - Jingoo Han <jingoohan1@gmail.com>
 
index f5822f4ea6679eed83529682d54895816c52bada..0793d0adc4ec93d891786d57597ab58ef1beb359 100644 (file)
@@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
 title: led-backlight bindings
 
 maintainers:
-  - Lee Jones <lee.jones@linaro.org>
+  - Lee Jones <lee@kernel.org>
   - Daniel Thompson <daniel.thompson@linaro.org>
   - Jingoo Han <jingoohan1@gmail.com>
 
index 08fe5cf8614a81e6321e3bc9f664527dcd97fd8f..3c9b4054ed9a57d85571e24f44dddf1a5f41564b 100644 (file)
@@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
 title: TI LM3630A High-Efficiency Dual-String White LED
 
 maintainers:
-  - Lee Jones <lee.jones@linaro.org>
+  - Lee Jones <lee@kernel.org>
   - Daniel Thompson <daniel.thompson@linaro.org>
   - Jingoo Han <jingoohan1@gmail.com>
 
index fcb8429f3088cd6d7baf130d8ca4fb408e8ccb05..78fbe20a175805f89e91cfe4cedb73d0f6bd4077 100644 (file)
@@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
 title: pwm-backlight bindings
 
 maintainers:
-  - Lee Jones <lee.jones@linaro.org>
+  - Lee Jones <lee@kernel.org>
   - Daniel Thompson <daniel.thompson@linaro.org>
   - Jingoo Han <jingoohan1@gmail.com>
 
index e0ac68694b63fef95af053d8dd5cb10f426f0c5c..99e9e138fa92c88b3a4de01b76fe426b10c4c639 100644 (file)
@@ -47,6 +47,11 @@ properties:
     minimum: 0
     maximum: 3
 
+  richtek,bled-ocp-microamp:
+    description: |
+      Backlight over current protection level.
+    enum: [900000, 1200000, 1500000, 1800000]
+
   richtek,channel-use:
     description: |
       Backlight LED channel to be used.
index 0651f225bde1170b310177d7bf06565b06915ef6..89e42cf33c2119f0f8a21015de818d3846155be0 100644 (file)
@@ -3501,7 +3501,7 @@ W:        https://wireless.wiki.kernel.org/en/users/Drivers/b43
 F:     drivers/net/wireless/broadcom/b43legacy/
 
 BACKLIGHT CLASS/SUBSYSTEM
-M:     Lee Jones <lee.jones@linaro.org>
+M:     Lee Jones <lee@kernel.org>
 M:     Daniel Thompson <daniel.thompson@linaro.org>
 M:     Jingoo Han <jingoohan1@gmail.com>
 L:     dri-devel@lists.freedesktop.org
index 2b9e2bbbb03e820d6c0286f7af1c541ad9dd6675..fc02c5c16055ee4f23e4f213c78070153186ac21 100644 (file)
@@ -218,9 +218,8 @@ err:
 
 static void lp855x_pwm_ctrl(struct lp855x *lp, int br, int max_br)
 {
-       unsigned int period = lp->pdata->period_ns;
-       unsigned int duty = br * period / max_br;
        struct pwm_device *pwm;
+       struct pwm_state state;
 
        /* request pwm device with the consumer name */
        if (!lp->pwm) {
@@ -230,18 +229,16 @@ static void lp855x_pwm_ctrl(struct lp855x *lp, int br, int max_br)
 
                lp->pwm = pwm;
 
-               /*
-                * FIXME: pwm_apply_args() should be removed when switching to
-                * the atomic PWM API.
-                */
-               pwm_apply_args(pwm);
+               pwm_init_state(lp->pwm, &state);
+       } else {
+               pwm_get_state(lp->pwm, &state);
        }
 
-       pwm_config(lp->pwm, duty, period);
-       if (duty)
-               pwm_enable(lp->pwm);
-       else
-               pwm_disable(lp->pwm);
+       state.period = lp->pdata->period_ns;
+       state.duty_cycle = div_u64(br * state.period, max_br);
+       state.enabled = state.duty_cycle;
+
+       pwm_apply_state(lp->pwm, &state);
 }
 
 static int lp855x_bl_update_status(struct backlight_device *bl)
index b2bfbf0702003af43a0d9b1137b85d3fdf300ac8..dc37494baf42abe97c958dc6761e80fe13353d8b 100644 (file)
@@ -12,7 +12,6 @@
 #include <linux/fb.h>
 #include <linux/backlight.h>
 #include <linux/lcd.h>
-#include <linux/of.h>
 #include <linux/slab.h>
 
 #include <video/platform_lcd.h>
@@ -133,19 +132,10 @@ static int platform_lcd_resume(struct device *dev)
 static SIMPLE_DEV_PM_OPS(platform_lcd_pm_ops, platform_lcd_suspend,
                        platform_lcd_resume);
 
-#ifdef CONFIG_OF
-static const struct of_device_id platform_lcd_of_match[] = {
-       { .compatible = "platform-lcd" },
-       {},
-};
-MODULE_DEVICE_TABLE(of, platform_lcd_of_match);
-#endif
-
 static struct platform_driver platform_lcd_driver = {
        .driver         = {
                .name   = "platform-lcd",
                .pm     = &platform_lcd_pm_ops,
-               .of_match_table = of_match_ptr(platform_lcd_of_match),
        },
        .probe          = platform_lcd_probe,
 };
index 42155c7d2db12d0f2bc68b7d5b28e6e8dd8fcf93..eb8c59e8713f2ccc9c356d54da40ba5064223ee9 100644 (file)
@@ -12,6 +12,7 @@
 #define RT4831_REG_BLCFG       0x02
 #define RT4831_REG_BLDIML      0x04
 #define RT4831_REG_ENABLE      0x08
+#define RT4831_REG_BLOPT2      0x11
 
 #define RT4831_BLMAX_BRIGHTNESS        2048
 
 #define RT4831_BLDIML_MASK     GENMASK(2, 0)
 #define RT4831_BLDIMH_MASK     GENMASK(10, 3)
 #define RT4831_BLDIMH_SHIFT    3
+#define RT4831_BLOCP_MASK      GENMASK(1, 0)
+
+#define RT4831_BLOCP_MINUA     900000
+#define RT4831_BLOCP_MAXUA     1800000
+#define RT4831_BLOCP_STEPUA    300000
 
 struct rt4831_priv {
        struct device *dev;
@@ -85,7 +91,7 @@ static int rt4831_parse_backlight_properties(struct rt4831_priv *priv,
 {
        struct device *dev = priv->dev;
        u8 propval;
-       u32 brightness;
+       u32 brightness, ocp_uA;
        unsigned int val = 0;
        int ret;
 
@@ -120,6 +126,31 @@ static int rt4831_parse_backlight_properties(struct rt4831_priv *priv,
        if (ret)
                return ret;
 
+       /*
+        * This OCP level is used to protect and limit the inductor current.
+        * If inductor peak current reach the level, low-side MOSFET will be
+        * turned off. Meanwhile, the output channel current may be limited.
+        * To match the configured channel current, the inductor chosen must
+        * be higher than the OCP level.
+        *
+        * Not like the OVP level, the default 21V can be used in the most
+        * application. But if the chosen OCP level is smaller than needed,
+        * it will also affect the backlight channel output current to be
+        * smaller than the register setting.
+        */
+       ret = device_property_read_u32(dev, "richtek,bled-ocp-microamp",
+                                      &ocp_uA);
+       if (!ret) {
+               ocp_uA = clamp_val(ocp_uA, RT4831_BLOCP_MINUA,
+                                  RT4831_BLOCP_MAXUA);
+               val = DIV_ROUND_UP(ocp_uA - RT4831_BLOCP_MINUA,
+                                  RT4831_BLOCP_STEPUA);
+               ret = regmap_update_bits(priv->regmap, RT4831_REG_BLOPT2,
+                                        RT4831_BLOCP_MASK, val);
+               if (ret)
+                       return ret;
+       }
+
        ret = device_property_read_u8(dev, "richtek,channel-use", &propval);
        if (ret) {
                dev_err(dev, "richtek,channel-use DT property missing\n");