Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/cooloney...
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 10 Oct 2012 11:14:07 +0000 (20:14 +0900)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 10 Oct 2012 11:14:07 +0000 (20:14 +0900)
Pull LED subsystem update from Bryan Wu.

* 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/cooloney/linux-leds: (24 commits)
  leds: add output driver configuration for pca9633 led driver
  leds: lm3642: Use regmap_update_bits() in lm3642_chip_init()
  leds: Add new LED driver for lm3642 chips
  leds-lp5523: Fix riskiness of the page fault
  leds-lp5523: turn off the LED engines on unloading the driver
  leds-lm3530: Fix smatch warnings
  leds-lm3530: Use devm_regulator_get function
  leds: leds-gpio: adopt pinctrl support
  leds: Add new LED driver for lm355x chips
  leds-lp5523: use the i2c device id rather than fixed name
  leds-lp5523: add new device id for LP55231
  leds-lp5523: support new LP55231 device
  leds: triggers: send uevent when changing triggers
  leds-lp5523: minor code style fixes
  leds-lp5523: change the return type of lp5523_set_mode()
  leds-lp5523: set the brightness to 0 forcely on removing the driver
  leds-lp5523: add channel name in the platform data
  leds: leds-gpio: Use of_get_child_count() helper
  leds: leds-gpio: Use platform_{get,set}_drvdata
  leds: leds-gpio: use of_match_ptr()
  ...

1  2 
drivers/leds/Kconfig
drivers/leds/Makefile
drivers/leds/leds-wm8350.c
include/linux/leds.h

diff --combined drivers/leds/Kconfig
@@@ -63,6 -63,17 +63,17 @@@ config LEDS_LM353
          hardware-accelerated blinking with maximum on and off periods of 9.8
          and 77 seconds respectively.
  
+ config LEDS_LM3642
+       tristate "LED support for LM3642 Chip"
+       depends on LEDS_CLASS && I2C
+       select REGMAP_I2C
+       help
+         This option enables support for LEDs connected to LM3642.
+         The LM3642 is a 4MHz fixed-frequency synchronous boost
+         converter plus 1.5A constant current driver for a high-current
+         white LED.
  config LEDS_LOCOMO
        tristate "LED Support for Locomo device"
        depends on LEDS_CLASS
@@@ -192,11 -203,12 +203,12 @@@ config LEDS_LP552
          programming the engines.
  
  config LEDS_LP5523
-       tristate "LED Support for N.S. LP5523 LED driver chip"
+       tristate "LED Support for TI/National LP5523/55231 LED driver chip"
        depends on LEDS_CLASS && I2C
        help
-         If you say yes here you get support for the National Semiconductor
-         LP5523 LED driver. It is 9 channel chip with programmable engines.
+         If you say yes here you get support for TI/National Semiconductor
+         LP5523/55231 LED driver.
+         It is 9 channel chip with programmable engines.
          Driver provides direct control via LED class and interface for
          programming the engines.
  
@@@ -422,13 -434,13 +434,13 @@@ config LEDS_MAX899
          This option enables support for on-chip LED drivers on
          MAXIM MAX8997 PMIC.
  
- config LEDS_LM3556
-       tristate "LED support for LM3556 Chip"
+ config LEDS_LM355x
+       tristate "LED support for LM355x Chips, LM3554 and LM3556"
        depends on LEDS_CLASS && I2C
        select REGMAP_I2C
        help
-         This option enables support for LEDs connected to LM3556.
-         LM3556 includes Torch, Flash and Indicator functions.
+         This option enables support for LEDs connected to LM355x.
+         LM355x includes Torch, Flash and Indicator functions.
  
  config LEDS_OT200
        tristate "LED support for the Bachmann OT200"
@@@ -506,16 -518,6 +518,16 @@@ config LEDS_TRIGGER_BACKLIGH
  
          If unsure, say N.
  
 +config LEDS_TRIGGER_CPU
 +      bool "LED CPU Trigger"
 +      depends on LEDS_TRIGGERS
 +      help
 +        This allows LEDs to be controlled by active CPUs. This shows
 +        the active CPUs across an array of LEDs so you can see which
 +        CPUs are active on the system at any given moment.
 +
 +        If unsure, say N.
 +
  config LEDS_TRIGGER_GPIO
        tristate "LED GPIO Trigger"
        depends on LEDS_TRIGGERS
diff --combined drivers/leds/Makefile
@@@ -11,6 -11,7 +11,7 @@@ obj-$(CONFIG_LEDS_BD2802)             += leds-bd28
  obj-$(CONFIG_LEDS_LOCOMO)             += leds-locomo.o
  obj-$(CONFIG_LEDS_LM3530)             += leds-lm3530.o
  obj-$(CONFIG_LEDS_LM3533)             += leds-lm3533.o
+ obj-$(CONFIG_LEDS_LM3642)             += leds-lm3642.o
  obj-$(CONFIG_LEDS_MIKROTIK_RB532)     += leds-rb532.o
  obj-$(CONFIG_LEDS_S3C24XX)            += leds-s3c24xx.o
  obj-$(CONFIG_LEDS_NET48XX)            += leds-net48xx.o
@@@ -48,7 -49,7 +49,7 @@@ obj-$(CONFIG_LEDS_NETXBIG)            += leds-net
  obj-$(CONFIG_LEDS_ASIC3)              += leds-asic3.o
  obj-$(CONFIG_LEDS_RENESAS_TPU)                += leds-renesas-tpu.o
  obj-$(CONFIG_LEDS_MAX8997)            += leds-max8997.o
- obj-$(CONFIG_LEDS_LM3556)             += leds-lm3556.o
+ obj-$(CONFIG_LEDS_LM355x)             += leds-lm355x.o
  obj-$(CONFIG_LEDS_BLINKM)             += leds-blinkm.o
  
  # LED SPI Drivers
@@@ -61,6 -62,5 +62,6 @@@ obj-$(CONFIG_LEDS_TRIGGER_IDE_DISK)   += 
  obj-$(CONFIG_LEDS_TRIGGER_HEARTBEAT)  += ledtrig-heartbeat.o
  obj-$(CONFIG_LEDS_TRIGGER_BACKLIGHT)  += ledtrig-backlight.o
  obj-$(CONFIG_LEDS_TRIGGER_GPIO)               += ledtrig-gpio.o
 +obj-$(CONFIG_LEDS_TRIGGER_CPU)                += ledtrig-cpu.o
  obj-$(CONFIG_LEDS_TRIGGER_DEFAULT_ON) += ledtrig-default-on.o
  obj-$(CONFIG_LEDS_TRIGGER_TRANSIENT)  += ledtrig-transient.o
@@@ -201,7 -201,7 +201,7 @@@ static int wm8350_led_probe(struct plat
        struct regulator *isink, *dcdc;
        struct wm8350_led *led;
        struct wm8350_led_platform_data *pdata = pdev->dev.platform_data;
-       int ret, i;
+       int i;
  
        if (pdata == NULL) {
                dev_err(&pdev->dev, "no platform data\n");
                return -EINVAL;
        }
  
-       isink = regulator_get(&pdev->dev, "led_isink");
+       isink = devm_regulator_get(&pdev->dev, "led_isink");
        if (IS_ERR(isink)) {
                printk(KERN_ERR "%s: can't get ISINK\n", __func__);
                return PTR_ERR(isink);
        }
  
-       dcdc = regulator_get(&pdev->dev, "led_vcc");
+       dcdc = devm_regulator_get(&pdev->dev, "led_vcc");
        if (IS_ERR(dcdc)) {
                printk(KERN_ERR "%s: can't get DCDC\n", __func__);
-               ret = PTR_ERR(dcdc);
-               goto err_isink;
+               return PTR_ERR(dcdc);
        }
  
        led = devm_kzalloc(&pdev->dev, sizeof(*led), GFP_KERNEL);
-       if (led == NULL) {
-               ret = -ENOMEM;
-               goto err_dcdc;
-       }
+       if (led == NULL)
+               return -ENOMEM;
  
        led->cdev.brightness_set = wm8350_led_set;
        led->cdev.default_trigger = pdata->default_trigger;
        led->value = LED_OFF;
        platform_set_drvdata(pdev, led);
  
-       ret = led_classdev_register(&pdev->dev, &led->cdev);
-       if (ret < 0)
-               goto err_dcdc;
-       return 0;
-  err_dcdc:
-       regulator_put(dcdc);
-  err_isink:
-       regulator_put(isink);
-       return ret;
+       return led_classdev_register(&pdev->dev, &led->cdev);
  }
  
  static int wm8350_led_remove(struct platform_device *pdev)
        struct wm8350_led *led = platform_get_drvdata(pdev);
  
        led_classdev_unregister(&led->cdev);
 -      flush_work_sync(&led->work);
 +      flush_work(&led->work);
        wm8350_led_disable(led);
-       regulator_put(led->dcdc);
-       regulator_put(led->isink);
        return 0;
  }
  
diff --combined include/linux/leds.h
@@@ -16,6 -16,7 +16,7 @@@
  #include <linux/spinlock.h>
  #include <linux/rwsem.h>
  #include <linux/timer.h>
+ #include <linux/workqueue.h>
  
  struct device;
  /*
@@@ -69,6 -70,9 +70,9 @@@ struct led_classdev 
        struct timer_list        blink_timer;
        int                      blink_brightness;
  
+       struct work_struct      set_brightness_work;
+       int                     delayed_set_value;
  #ifdef CONFIG_LEDS_TRIGGERS
        /* Protects the trigger data below */
        struct rw_semaphore      trigger_lock;
@@@ -237,20 -241,4 +241,20 @@@ struct gpio_led_platform_data 
  struct platform_device *gpio_led_register_device(
                int id, const struct gpio_led_platform_data *pdata);
  
 +enum cpu_led_event {
 +      CPU_LED_IDLE_START,     /* CPU enters idle */
 +      CPU_LED_IDLE_END,       /* CPU idle ends */
 +      CPU_LED_START,          /* Machine starts, especially resume */
 +      CPU_LED_STOP,           /* Machine stops, especially suspend */
 +      CPU_LED_HALTED,         /* Machine shutdown */
 +};
 +#ifdef CONFIG_LEDS_TRIGGER_CPU
 +extern void ledtrig_cpu(enum cpu_led_event evt);
 +#else
 +static inline void ledtrig_cpu(enum cpu_led_event evt)
 +{
 +      return;
 +}
 +#endif
 +
  #endif                /* __LINUX_LEDS_H_INCLUDED */