From mboxrd@z Thu Jan 1 00:00:00 1970 From: lee.jones@linaro.org (Lee Jones) Date: Tue, 9 Jun 2015 12:11:30 +0100 Subject: [PATCH v5 02/17] leds: port locomo leds driver to new locomo core In-Reply-To: References: <1433797008-6246-1-git-send-email-dbaryshkov@gmail.com> <1433797008-6246-3-git-send-email-dbaryshkov@gmail.com> <20150609065730.GC2982@x1> Message-ID: <20150609111130.GT2982@x1> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On Tue, 09 Jun 2015, Dmitry Eremin-Solenikov wrote: > 2015-06-09 9:57 GMT+03:00 Lee Jones : > > On Mon, 08 Jun 2015, Dmitry Eremin-Solenikov wrote: > > > >> Adapt locomo leds driver to new locomo core setup. > >> > >> Signed-off-by: Dmitry Eremin-Solenikov > >> Acked-by: Jacek Anaszewski > > > > This is missing Bryan's Ack. > > Jacek is listed as a co-maintainer of the LEDS subsystem, so I assumed > that his acked-by is enough. Ah, this is new. Congratulations Jacek. Ignore me then. > >> --- > >> drivers/leds/Kconfig | 2 +- > >> drivers/leds/leds-locomo.c | 117 +++++++++++++++++++++++---------------------- > >> 2 files changed, 61 insertions(+), 58 deletions(-) > >> > >> diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig > >> index 966b960..d086aac 100644 > >> --- a/drivers/leds/Kconfig > >> +++ b/drivers/leds/Kconfig > >> @@ -79,7 +79,7 @@ config LEDS_LM3642 > >> config LEDS_LOCOMO > >> tristate "LED Support for Locomo device" > >> depends on LEDS_CLASS > >> - depends on SHARP_LOCOMO > >> + depends on MFD_LOCOMO > >> help > >> This option enables support for the LEDs on Sharp Locomo. > >> Zaurus models SL-5500 and SL-5600. > >> diff --git a/drivers/leds/leds-locomo.c b/drivers/leds/leds-locomo.c > >> index 80ba048..a4286e9 100644 > >> --- a/drivers/leds/leds-locomo.c > >> +++ b/drivers/leds/leds-locomo.c > >> @@ -9,89 +9,92 @@ > >> */ > >> > >> #include > >> -#include > >> -#include > >> -#include > >> #include > >> +#include > >> +#include > >> +#include > >> +#include > >> > >> -#include > >> -#include > >> +struct locomo_led { > >> + struct led_classdev led; > >> + struct regmap *regmap; > >> + unsigned int reg; > >> +}; > >> > >> static void locomoled_brightness_set(struct led_classdev *led_cdev, > >> - enum led_brightness value, int offset) > >> -{ > >> - struct locomo_dev *locomo_dev = LOCOMO_DEV(led_cdev->dev->parent); > >> - unsigned long flags; > >> - > >> - local_irq_save(flags); > >> - if (value) > >> - locomo_writel(LOCOMO_LPT_TOFH, locomo_dev->mapbase + offset); > >> - else > >> - locomo_writel(LOCOMO_LPT_TOFL, locomo_dev->mapbase + offset); > >> - local_irq_restore(flags); > >> -} > >> - > >> -static void locomoled_brightness_set0(struct led_classdev *led_cdev, > >> enum led_brightness value) > >> { > >> - locomoled_brightness_set(led_cdev, value, LOCOMO_LPT0); > >> + struct locomo_led *led = container_of(led_cdev, struct locomo_led, led); > >> + > >> + regmap_write(led->regmap, led->reg, > >> + value ? LOCOMO_LPT_TOFH : LOCOMO_LPT_TOFL); > >> } > >> > >> -static void locomoled_brightness_set1(struct led_classdev *led_cdev, > >> - enum led_brightness value) > >> +static int locomo_led_register( > >> + struct device *dev, > >> + struct locomo_led *led, > >> + const char *name, > >> + const char *trigger, > >> + struct regmap *regmap, > >> + unsigned int reg) > >> { > >> - locomoled_brightness_set(led_cdev, value, LOCOMO_LPT1); > >> + led->led.name = name; > >> + led->led.flags = LED_CORE_SUSPENDRESUME; > >> + led->led.default_trigger = trigger; > >> + led->led.brightness_set = locomoled_brightness_set; > >> + led->regmap = regmap; > >> + led->reg = reg; > >> + > >> + return devm_led_classdev_register(dev, &led->led); > >> } > >> > >> -static struct led_classdev locomo_led0 = { > >> - .name = "locomo:amber:charge", > >> - .default_trigger = "main-battery-charging", > >> - .brightness_set = locomoled_brightness_set0, > >> -}; > >> - > >> -static struct led_classdev locomo_led1 = { > >> - .name = "locomo:green:mail", > >> - .default_trigger = "nand-disk", > >> - .brightness_set = locomoled_brightness_set1, > >> -}; > >> - > >> -static int locomoled_probe(struct locomo_dev *ldev) > >> +static int locomoled_probe(struct platform_device *pdev) > >> { > >> int ret; > >> - > >> - ret = led_classdev_register(&ldev->dev, &locomo_led0); > >> + struct locomo_led *leds; > >> + struct regmap *regmap; > >> + > >> + leds = devm_kzalloc(&pdev->dev, 2 * sizeof(*leds), GFP_KERNEL); > >> + if (!leds) > >> + return -ENOMEM; > >> + > >> + regmap = dev_get_regmap(pdev->dev.parent, NULL); > >> + if (!regmap) > >> + return -ENODEV; > >> + > >> + ret = locomo_led_register( > >> + &pdev->dev, > >> + leds, > >> + "locomo:amber:charge", > >> + "main-battery-charging", > >> + regmap, > >> + LOCOMO_LPT0); > >> if (ret < 0) > >> return ret; > >> > >> - ret = led_classdev_register(&ldev->dev, &locomo_led1); > >> + ret = locomo_led_register( > >> + &pdev->dev, > >> + leds + 1, > >> + "locomo:green:mail", > >> + "mmc0", > >> + regmap, > >> + LOCOMO_LPT1); > >> if (ret < 0) > >> - led_classdev_unregister(&locomo_led0); > >> - > >> - return ret; > >> -} > >> + return ret; > >> > >> -static int locomoled_remove(struct locomo_dev *dev) > >> -{ > >> - led_classdev_unregister(&locomo_led0); > >> - led_classdev_unregister(&locomo_led1); > >> return 0; > >> } > >> > >> -static struct locomo_driver locomoled_driver = { > >> - .drv = { > >> - .name = "locomoled" > >> +static struct platform_driver locomoled_driver = { > >> + .driver = { > >> + .name = "locomo-led" > >> }, > >> - .devid = LOCOMO_DEVID_LED, > >> .probe = locomoled_probe, > >> - .remove = locomoled_remove, > >> }; > >> > >> -static int __init locomoled_init(void) > >> -{ > >> - return locomo_driver_register(&locomoled_driver); > >> -} > >> -module_init(locomoled_init); > >> +module_platform_driver(locomoled_driver); > >> > >> MODULE_AUTHOR("John Lenz "); > >> MODULE_DESCRIPTION("Locomo LED driver"); > >> MODULE_LICENSE("GPL"); > >> +MODULE_ALIAS("platform:locomo-led"); > > > > > -- Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org ? Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog