From mboxrd@z Thu Jan 1 00:00:00 1970 From: lee.jones@linaro.org (Lee Jones) Date: Tue, 9 Jun 2015 07:57:30 +0100 Subject: [PATCH v5 02/17] leds: port locomo leds driver to new locomo core In-Reply-To: <1433797008-6246-3-git-send-email-dbaryshkov@gmail.com> References: <1433797008-6246-1-git-send-email-dbaryshkov@gmail.com> <1433797008-6246-3-git-send-email-dbaryshkov@gmail.com> Message-ID: <20150609065730.GC2982@x1> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org 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. > --- > 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