]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
backlight: pm8941-wled: Move PM8941 WLED driver to backlight
authorBjorn Andersson <bjorn.andersson@sonymobile.com>
Wed, 22 Jul 2015 00:44:49 +0000 (17:44 -0700)
committerLee Jones <lee.jones@linaro.org>
Tue, 25 Aug 2015 07:41:56 +0000 (08:41 +0100)
The Qualcomm PM8941 WLED block is used for backlight and should therefor
be in the backlight framework and not in the LED framework. This moves
the driver and adapts to the backlight api instead.

Signed-off-by: Bjorn Andersson <bjorn.andersson@sonymobile.com>
Tested-by: Rob Clark <robdclark@gmail.com>
Acked-by: Jacek Anaszewski <j.anaszewski@samsung.com>
Acked-by: Jingoo Han <jingoohan1@gmail.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Documentation/devicetree/bindings/video/backlight/pm8941-wled.txt [moved from Documentation/devicetree/bindings/leds/leds-pm8941-wled.txt with 84% similarity]
drivers/leds/Kconfig
drivers/leds/Makefile
drivers/video/backlight/Kconfig
drivers/video/backlight/Makefile
drivers/video/backlight/pm8941-wled.c [moved from drivers/leds/leds-pm8941-wled.c with 90% similarity]

similarity index 84%
rename from Documentation/devicetree/bindings/leds/leds-pm8941-wled.txt
rename to Documentation/devicetree/bindings/video/backlight/pm8941-wled.txt
index a85a964d61f5a05cd7b8a47fb5a5cc8ff85aef9a..424f8444a6cd9364aba9267be34e66a6657aa786 100644 (file)
@@ -5,10 +5,7 @@ Required properties:
 - reg: slave address
 
 Optional properties:
-- label: The label for this led
-  See Documentation/devicetree/bindings/leds/common.txt
-- linux,default-trigger: Default trigger assigned to the LED
-  See Documentation/devicetree/bindings/leds/common.txt
+- label: The name of the backlight device
 - qcom,cs-out: bool; enable current sink output
 - qcom,cabc: bool; enable content adaptive backlight control
 - qcom,ext-gen: bool; use externally generated modulator signal to dim
index 9ad35f72ab4c077791cf7942cceb36301325872d..b8d4b965ca2a305ae24695298d6f84852a86dad5 100644 (file)
@@ -578,14 +578,6 @@ config LEDS_VERSATILE
          This option enabled support for the LEDs on the ARM Versatile
          and RealView boards. Say Y to enabled these.
 
-config LEDS_PM8941_WLED
-       tristate "LED support for the Qualcomm PM8941 WLED block"
-       depends on LEDS_CLASS
-       select REGMAP
-       help
-         This option enables support for the 'White' LED block
-         on Qualcomm PM8941 PMICs.
-
 comment "LED Triggers"
 source "drivers/leds/trigger/Kconfig"
 
index 8d6a24a2f51376fb9a6aaa704cc1d1908dc51d5a..abe96d960ebed5812322bc6332f7b13329ea9c07 100644 (file)
@@ -63,7 +63,6 @@ obj-$(CONFIG_LEDS_BLINKM)             += leds-blinkm.o
 obj-$(CONFIG_LEDS_SYSCON)              += leds-syscon.o
 obj-$(CONFIG_LEDS_VERSATILE)           += leds-versatile.o
 obj-$(CONFIG_LEDS_MENF21BMC)           += leds-menf21bmc.o
-obj-$(CONFIG_LEDS_PM8941_WLED)         += leds-pm8941-wled.o
 obj-$(CONFIG_LEDS_KTD2692)             += leds-ktd2692.o
 
 # LED SPI Drivers
index 0505b796d743250e9e314b5a34747ff05033574e..5ffa4b4e26c0e874d3f63068456b3d72d8b4beb5 100644 (file)
@@ -299,6 +299,13 @@ config BACKLIGHT_TOSA
          If you have an Sharp SL-6000 Zaurus say Y to enable a driver
          for its backlight
 
+config BACKLIGHT_PM8941_WLED
+       tristate "Qualcomm PM8941 WLED Driver"
+       select REGMAP
+       help
+         If you have the Qualcomm PM8941, say Y to enable a driver for the
+         WLED block.
+
 config BACKLIGHT_SAHARA
        tristate "Tabletkiosk Sahara Touch-iT Backlight Driver"
        depends on X86
index d67073f9d421f91a6689c1d971235b2c18c4789f..16ec534cff3044209adbae3495c19d97fee3ef73 100644 (file)
@@ -48,6 +48,7 @@ obj-$(CONFIG_BACKLIGHT_OMAP1)         += omap1_bl.o
 obj-$(CONFIG_BACKLIGHT_OT200)          += ot200_bl.o
 obj-$(CONFIG_BACKLIGHT_PANDORA)                += pandora_bl.o
 obj-$(CONFIG_BACKLIGHT_PCF50633)       += pcf50633-backlight.o
+obj-$(CONFIG_BACKLIGHT_PM8941_WLED)    += pm8941-wled.o
 obj-$(CONFIG_BACKLIGHT_PWM)            += pwm_bl.o
 obj-$(CONFIG_BACKLIGHT_SAHARA)         += kb3886_bl.o
 obj-$(CONFIG_BACKLIGHT_SKY81452)       += sky81452-backlight.o
similarity index 90%
rename from drivers/leds/leds-pm8941-wled.c
rename to drivers/video/backlight/pm8941-wled.c
index bf64a593fbf17ddabc505bdea1c4d36d8d636b15..c704c3236034fd43dd5ccd719007b28b26d99736 100644 (file)
@@ -11,7 +11,7 @@
  */
 
 #include <linux/kernel.h>
-#include <linux/leds.h>
+#include <linux/backlight.h>
 #include <linux/module.h>
 #include <linux/of.h>
 #include <linux/of_device.h>
@@ -76,30 +76,29 @@ struct pm8941_wled_config {
 };
 
 struct pm8941_wled {
+       const char *name;
        struct regmap *regmap;
        u16 addr;
 
-       struct led_classdev cdev;
-
        struct pm8941_wled_config cfg;
 };
 
-static int pm8941_wled_set(struct led_classdev *cdev,
-                          enum led_brightness value)
+static int pm8941_wled_update_status(struct backlight_device *bl)
 {
-       struct pm8941_wled *wled;
+       struct pm8941_wled *wled = bl_get_data(bl);
+       u16 val = bl->props.brightness;
        u8 ctrl = 0;
-       u16 val;
        int rc;
        int i;
 
-       wled = container_of(cdev, struct pm8941_wled, cdev);
+       if (bl->props.power != FB_BLANK_UNBLANK ||
+           bl->props.fb_blank != FB_BLANK_UNBLANK ||
+           bl->props.state & BL_CORE_FBBLANK)
+               val = 0;
 
-       if (value != 0)
+       if (val != 0)
                ctrl = PM8941_WLED_REG_MOD_EN_BIT;
 
-       val = value * PM8941_WLED_REG_VAL_MAX / LED_FULL;
-
        rc = regmap_update_bits(wled->regmap,
                        wled->addr + PM8941_WLED_REG_MOD_EN,
                        PM8941_WLED_REG_MOD_EN_MASK, ctrl);
@@ -128,16 +127,6 @@ static int pm8941_wled_set(struct led_classdev *cdev,
        return rc;
 }
 
-static void pm8941_wled_set_brightness(struct led_classdev *cdev,
-                                      enum led_brightness value)
-{
-       if (pm8941_wled_set(cdev, value)) {
-               dev_err(cdev->dev, "Unable to set brightness\n");
-               return;
-       }
-       cdev->brightness = value;
-}
-
 static int pm8941_wled_setup(struct pm8941_wled *wled)
 {
        int rc;
@@ -336,12 +325,9 @@ static int pm8941_wled_configure(struct pm8941_wled *wled, struct device *dev)
        }
        wled->addr = val;
 
-       rc = of_property_read_string(dev->of_node, "label", &wled->cdev.name);
+       rc = of_property_read_string(dev->of_node, "label", &wled->name);
        if (rc)
-               wled->cdev.name = dev->of_node->name;
-
-       wled->cdev.default_trigger = of_get_property(dev->of_node,
-                       "linux,default-trigger", NULL);
+               wled->name = dev->of_node->name;
 
        *cfg = pm8941_wled_config_defaults;
        for (i = 0; i < ARRAY_SIZE(u32_opts); ++i) {
@@ -377,8 +363,14 @@ static int pm8941_wled_configure(struct pm8941_wled *wled, struct device *dev)
        return 0;
 }
 
+static const struct backlight_ops pm8941_wled_ops = {
+       .update_status = pm8941_wled_update_status,
+};
+
 static int pm8941_wled_probe(struct platform_device *pdev)
 {
+       struct backlight_properties props;
+       struct backlight_device *bl;
        struct pm8941_wled *wled;
        struct regmap *regmap;
        int rc;
@@ -403,13 +395,14 @@ static int pm8941_wled_probe(struct platform_device *pdev)
        if (rc)
                return rc;
 
-       wled->cdev.brightness_set = pm8941_wled_set_brightness;
-
-       rc = devm_led_classdev_register(&pdev->dev, &wled->cdev);
-       if (rc)
-               return rc;
-
-       platform_set_drvdata(pdev, wled);
+       memset(&props, 0, sizeof(struct backlight_properties));
+       props.type = BACKLIGHT_RAW;
+       props.max_brightness = PM8941_WLED_REG_VAL_MAX;
+       bl = devm_backlight_device_register(&pdev->dev, wled->name,
+                                           &pdev->dev, wled,
+                                           &pm8941_wled_ops, &props);
+       if (IS_ERR(bl))
+               return PTR_ERR(bl);
 
        return 0;
 };
@@ -432,4 +425,3 @@ module_platform_driver(pm8941_wled_driver);
 
 MODULE_DESCRIPTION("pm8941 wled driver");
 MODULE_LICENSE("GPL v2");
-MODULE_ALIAS("platform:pm8941-wled");