The patch titled leds: provide helper to register "leds-gpio" devices has been added to the -mm tree. Its filename is leds-provide-helper-to-register-leds-gpio-devices.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/SubmitChecklist when testing your code *** See http://userweb.kernel.org/~akpm/stuff/added-to-mm.txt to find out what to do about this The current -mm tree may be found at http://userweb.kernel.org/~akpm/mmotm/ ------------------------------------------------------ Subject: leds: provide helper to register "leds-gpio" devices From: Uwe Kleine-König <u.kleine-koenig@xxxxxxxxxxxxxx> This function makes a deep copy of the platform data to allow it to live in init memory. The definition cannot go into leds-gpio.c because it needs to be builtin to be usable by platforms. Signed-off-by: Uwe Kleine-König <u.kleine-koenig@xxxxxxxxxxxxxx> Cc: Russell King <rmk@xxxxxxxxxxxxxxxx> Acked-by: Richard Purdie <richard.purdie@xxxxxxxxxxxxxxxxxxx> Cc: Fabio Estevam <fabio.estevam@xxxxxxxxxxxxx> Cc: Sascha Hauer <s.hauer@xxxxxxxxxxxxxx> Cc: H Hartley Sweeten <hartleys@xxxxxxxxxxxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- drivers/Makefile | 2 +- drivers/leds/Kconfig | 5 +++++ drivers/leds/Makefile | 1 + drivers/leds/led-register.c | 33 +++++++++++++++++++++++++++++++++ include/linux/leds.h | 12 ++++++++++++ 5 files changed, 52 insertions(+), 1 deletion(-) diff -puN drivers/Makefile~leds-provide-helper-to-register-leds-gpio-devices drivers/Makefile --- a/drivers/Makefile~leds-provide-helper-to-register-leds-gpio-devices +++ a/drivers/Makefile @@ -94,7 +94,7 @@ obj-$(CONFIG_CPU_IDLE) += cpuidle/ obj-$(CONFIG_DMA_ENGINE) += dma/ obj-$(CONFIG_MMC) += mmc/ obj-$(CONFIG_MEMSTICK) += memstick/ -obj-$(CONFIG_NEW_LEDS) += leds/ +obj-y += leds/ obj-$(CONFIG_INFINIBAND) += infiniband/ obj-$(CONFIG_SGI_SN) += sn/ obj-y += firmware/ diff -puN drivers/leds/Kconfig~leds-provide-helper-to-register-leds-gpio-devices drivers/leds/Kconfig --- a/drivers/leds/Kconfig~leds-provide-helper-to-register-leds-gpio-devices +++ a/drivers/leds/Kconfig @@ -14,6 +14,11 @@ config LEDS_CLASS This option enables the led sysfs class in /sys/class/leds. You'll need this to do anything useful with LEDs. If unsure, say N. +config LED_REGISTER_GPIO + bool + help + This option provides the function gpio_led_register_device. + if NEW_LEDS comment "LED drivers" diff -puN drivers/leds/Makefile~leds-provide-helper-to-register-leds-gpio-devices drivers/leds/Makefile --- a/drivers/leds/Makefile~leds-provide-helper-to-register-leds-gpio-devices +++ a/drivers/leds/Makefile @@ -3,6 +3,7 @@ obj-$(CONFIG_NEW_LEDS) += led-core.o obj-$(CONFIG_LEDS_CLASS) += led-class.o obj-$(CONFIG_LEDS_TRIGGERS) += led-triggers.o +obj-y += led-register.o # LED Platform Drivers obj-$(CONFIG_LEDS_88PM860X) += leds-88pm860x.o diff -puN /dev/null drivers/leds/led-register.c --- /dev/null +++ a/drivers/leds/led-register.c @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2011 Pengutronix + * Uwe Kleine-Koenig <u.kleine-koenig@xxxxxxxxxxxxxx> + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License version 2 as published by the + * Free Software Foundation. + */ +#include <linux/err.h> +#include <linux/platform_device.h> +#include <linux/slab.h> +#include <linux/leds.h> + +#if defined(CONFIG_LED_REGISTER_GPIO) +struct platform_device *__init gpio_led_register_device( + int id, const struct gpio_led_platform_data *pdata) +{ + struct platform_device *ret; + struct gpio_led_platform_data _pdata = *pdata; + + _pdata.leds = kmemdup(pdata->leds, + pdata->num_leds * sizeof(*pdata->leds), GFP_KERNEL); + if (!_pdata.leds) + return ERR_PTR(-ENOMEM); + + ret = platform_device_register_resndata(NULL, "leds-gpio", id, + NULL, 0, &_pdata, sizeof(_pdata)); + if (IS_ERR(ret)) + kfree(_pdata.leds); + + return ret; +} +#endif diff -puN include/linux/leds.h~leds-provide-helper-to-register-leds-gpio-devices include/linux/leds.h --- a/include/linux/leds.h~leds-provide-helper-to-register-leds-gpio-devices +++ a/include/linux/leds.h @@ -207,5 +207,17 @@ struct gpio_led_platform_data { unsigned long *delay_off); }; +/** + * gpio_led_register_device - register a gpio-led device + * @pdata: the platform data used for the new device + * + * Use this function instead of platform_device_add()ing a static struct + * platform_device. + * + * Note: as pdata and pdata->leds is copied these usually can and should be + * __initdata. + */ +struct platform_device *gpio_led_register_device( + int id, const struct gpio_led_platform_data *pdata); #endif /* __LINUX_LEDS_H_INCLUDED */ _ Patches currently in -mm which might be from u.kleine-koenig@xxxxxxxxxxxxxx are origin.patch linux-next.patch leds-provide-helper-to-register-leds-gpio-devices.patch leds-provide-helper-to-register-leds-gpio-devices-fix.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html