LED driver for PCEngines ALIX boards
This patch adds a driver for the three LEDs that exists on the PCEngines ALIX 2 and 3 series boards. The driver is also added to the Alix profile. Signed-off-by: Petr Liebman <petrliebman@gmail.com> -- SVN-Revision: 9748
This commit is contained in:
		| @@ -334,6 +334,22 @@ endef | |||||||
| $(eval $(call KernelPackage,leds-wrap)) | $(eval $(call KernelPackage,leds-wrap)) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | define KernelPackage/leds-alix | ||||||
|  |   SUBMENU:=$(OTHER_MENU) | ||||||
|  |   TITLE:=PCengines ALIX LED support | ||||||
|  |   DEPENDS:=@TARGET_x86 | ||||||
|  |   KCONFIG:=CONFIG_LEDS_ALIX | ||||||
|  |   FILES:=$(LINUX_DIR)/drivers/leds/leds-alix.$(LINUX_KMOD_SUFFIX) | ||||||
|  |   AUTOLOAD:=$(call AutoLoad,50,leds-alix) | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | define KernelPackage/leds-alix/description | ||||||
|  |  Kernel module for PCengines ALIX LEDs | ||||||
|  | endef | ||||||
|  |  | ||||||
|  | $(eval $(call KernelPackage,leds-alix)) | ||||||
|  |  | ||||||
|  |  | ||||||
| define KernelPackage/ledtrig-morse | define KernelPackage/ledtrig-morse | ||||||
|   SUBMENU:=$(OTHER_MENU) |   SUBMENU:=$(OTHER_MENU) | ||||||
|   TITLE:=LED Morse Trigger |   TITLE:=LED Morse Trigger | ||||||
|   | |||||||
							
								
								
									
										172
									
								
								target/linux/generic-2.6/files/drivers/leds/leds-alix.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										172
									
								
								target/linux/generic-2.6/files/drivers/leds/leds-alix.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,172 @@ | |||||||
|  | /* | ||||||
|  |  * LEDs driver for PCEngines ALIX 2/3 series | ||||||
|  |  * | ||||||
|  |  * Copyright (C) 2007 Petr Liebman | ||||||
|  |  * | ||||||
|  |  * Based on leds-wrap.c | ||||||
|  |  * | ||||||
|  |  * 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/kernel.h> | ||||||
|  | #include <linux/init.h> | ||||||
|  | #include <linux/platform_device.h> | ||||||
|  | #include <linux/leds.h> | ||||||
|  | #include <linux/err.h> | ||||||
|  | #include <asm/io.h> | ||||||
|  |  | ||||||
|  | #define DRVNAME "alix-led" | ||||||
|  |  | ||||||
|  | #define ALIX_LED1_PORT		(0x6100) | ||||||
|  | #define ALIX_LED1_ON		(1<<22) | ||||||
|  | #define ALIX_LED1_OFF		(1<<6) | ||||||
|  |  | ||||||
|  | #define ALIX_LED2_PORT		(0x6180) | ||||||
|  | #define ALIX_LED2_ON		(1<<25) | ||||||
|  | #define ALIX_LED2_OFF		(1<<9) | ||||||
|  |  | ||||||
|  | #define ALIX_LED3_PORT		(0x6180) | ||||||
|  | #define ALIX_LED3_ON		(1<<27) | ||||||
|  | #define ALIX_LED3_OFF		(1<<11) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | static struct platform_device *pdev; | ||||||
|  |  | ||||||
|  | static void alix_led_set_1(struct led_classdev *led_cdev, | ||||||
|  | 		enum led_brightness value) | ||||||
|  | { | ||||||
|  | 	if (value) | ||||||
|  | 		outl(ALIX_LED1_ON, ALIX_LED1_PORT); | ||||||
|  | 	else | ||||||
|  | 		outl(ALIX_LED1_OFF, ALIX_LED1_PORT); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static void alix_led_set_2(struct led_classdev *led_cdev, | ||||||
|  | 		enum led_brightness value) | ||||||
|  | { | ||||||
|  | 	if (value) | ||||||
|  | 		outl(ALIX_LED2_ON, ALIX_LED2_PORT); | ||||||
|  | 	else | ||||||
|  | 		outl(ALIX_LED2_OFF, ALIX_LED2_PORT); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static void alix_led_set_3(struct led_classdev *led_cdev, | ||||||
|  | 		enum led_brightness value) | ||||||
|  | { | ||||||
|  | 	if (value) | ||||||
|  | 		outl(ALIX_LED3_ON, ALIX_LED3_PORT); | ||||||
|  | 	else | ||||||
|  | 		outl(ALIX_LED3_OFF, ALIX_LED3_PORT); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static struct led_classdev alix_led_1 = { | ||||||
|  | 	.name		= "alix:1", | ||||||
|  | 	.brightness_set	= alix_led_set_1, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | static struct led_classdev alix_led_2 = { | ||||||
|  | 	.name		= "alix:2", | ||||||
|  | 	.brightness_set	= alix_led_set_2, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | static struct led_classdev alix_led_3 = { | ||||||
|  | 	.name		= "alix:3", | ||||||
|  | 	.brightness_set	= alix_led_set_3, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #ifdef CONFIG_PM | ||||||
|  | static int alix_led_suspend(struct platform_device *dev, | ||||||
|  | 		pm_message_t state) | ||||||
|  | { | ||||||
|  | 	led_classdev_suspend(&alix_led_1); | ||||||
|  | 	led_classdev_suspend(&alix_led_2); | ||||||
|  | 	led_classdev_suspend(&alix_led_3); | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static int alix_led_resume(struct platform_device *dev) | ||||||
|  | { | ||||||
|  | 	led_classdev_resume(&alix_led_1); | ||||||
|  | 	led_classdev_resume(&alix_led_2); | ||||||
|  | 	led_classdev_resume(&alix_led_3); | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | #else | ||||||
|  | #define alix_led_suspend NULL | ||||||
|  | #define alix_led_resume NULL | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | static int alix_led_probe(struct platform_device *pdev) | ||||||
|  | { | ||||||
|  | 	int ret; | ||||||
|  |  | ||||||
|  | 	ret = led_classdev_register(&pdev->dev, &alix_led_1); | ||||||
|  | 	if (ret >= 0) | ||||||
|  | 	{ | ||||||
|  | 		ret = led_classdev_register(&pdev->dev, &alix_led_2); | ||||||
|  | 		if (ret >= 0) | ||||||
|  | 		{ | ||||||
|  | 			ret = led_classdev_register(&pdev->dev, &alix_led_3); | ||||||
|  | 			if (ret < 0) | ||||||
|  | 				led_classdev_unregister(&alix_led_2); | ||||||
|  | 		} | ||||||
|  | 		if (ret < 0) | ||||||
|  | 			led_classdev_unregister(&alix_led_1); | ||||||
|  | 	} | ||||||
|  | 	return ret; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static int alix_led_remove(struct platform_device *pdev) | ||||||
|  | { | ||||||
|  | 	led_classdev_unregister(&alix_led_1); | ||||||
|  | 	led_classdev_unregister(&alix_led_2); | ||||||
|  | 	led_classdev_unregister(&alix_led_3); | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static struct platform_driver alix_led_driver = { | ||||||
|  | 	.probe		= alix_led_probe, | ||||||
|  | 	.remove		= alix_led_remove, | ||||||
|  | 	.suspend	= alix_led_suspend, | ||||||
|  | 	.resume		= alix_led_resume, | ||||||
|  | 	.driver		= { | ||||||
|  | 		.name		= DRVNAME, | ||||||
|  | 		.owner		= THIS_MODULE, | ||||||
|  | 	}, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | static int __init alix_led_init(void) | ||||||
|  | { | ||||||
|  | 	int ret; | ||||||
|  |  | ||||||
|  | 	ret = platform_driver_register(&alix_led_driver); | ||||||
|  | 	if (ret < 0) | ||||||
|  | 		goto out; | ||||||
|  |  | ||||||
|  | 	pdev = platform_device_register_simple(DRVNAME, -1, NULL, 0); | ||||||
|  | 	if (IS_ERR(pdev)) { | ||||||
|  | 		ret = PTR_ERR(pdev); | ||||||
|  | 		platform_driver_unregister(&alix_led_driver); | ||||||
|  | 		goto out; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | out: | ||||||
|  | 	return ret; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static void __exit alix_led_exit(void) | ||||||
|  | { | ||||||
|  | 	platform_device_unregister(pdev); | ||||||
|  | 	platform_driver_unregister(&alix_led_driver); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | module_init(alix_led_init); | ||||||
|  | module_exit(alix_led_exit); | ||||||
|  |  | ||||||
|  | MODULE_AUTHOR("Petr Liebman"); | ||||||
|  | MODULE_DESCRIPTION("PCEngines ALIX LED driver"); | ||||||
|  | MODULE_LICENSE("GPL"); | ||||||
|  |  | ||||||
							
								
								
									
										27
									
								
								target/linux/generic-2.6/patches-2.6.23/401-led_alix.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								target/linux/generic-2.6/patches-2.6.23/401-led_alix.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | |||||||
|  | diff -Nur linux-2.6.23.1.orig/drivers/leds/Kconfig linux-2.6.23.1/drivers/leds/Kconfig | ||||||
|  | --- linux-2.6.23.1.orig/drivers/leds/Kconfig	2007-10-12 12:43:44.000000000 -0400 | ||||||
|  | +++ linux-2.6.23.1/drivers/leds/Kconfig	2007-10-31 02:36:22.000000000 -0400 | ||||||
|  | @@ -81,6 +81,12 @@ | ||||||
|  |  	help | ||||||
|  |  	  This option enables support for the PCEngines WRAP programmable LEDs. | ||||||
|  |   | ||||||
|  | +config LEDS_ALIX | ||||||
|  | +	tristate "LED Support for the ALIX 2/3 boards" | ||||||
|  | +	depends on LEDS_CLASS | ||||||
|  | +	help | ||||||
|  | +	  This option enables support for the three LEDs on the PCEngines ALIX 2/3 boards. | ||||||
|  | + | ||||||
|  |  config LEDS_H1940 | ||||||
|  |  	tristate "LED Support for iPAQ H1940 device" | ||||||
|  |  	depends LEDS_CLASS && ARCH_H1940 | ||||||
|  | diff -Nur linux-2.6.23.1.orig/drivers/leds/Makefile linux-2.6.23.1/drivers/leds/Makefile | ||||||
|  | --- linux-2.6.23.1.orig/drivers/leds/Makefile	2007-10-12 12:43:44.000000000 -0400 | ||||||
|  | +++ linux-2.6.23.1/drivers/leds/Makefile	2007-10-31 02:36:17.000000000 -0400 | ||||||
|  | @@ -14,6 +14,7 @@ | ||||||
|  |  obj-$(CONFIG_LEDS_AMS_DELTA)		+= leds-ams-delta.o | ||||||
|  |  obj-$(CONFIG_LEDS_NET48XX)		+= leds-net48xx.o | ||||||
|  |  obj-$(CONFIG_LEDS_WRAP)			+= leds-wrap.o | ||||||
|  | +obj-$(CONFIG_LEDS_ALIX)			+= leds-alix.o | ||||||
|  |  obj-$(CONFIG_LEDS_H1940)		+= leds-h1940.o | ||||||
|  |  obj-$(CONFIG_LEDS_COBALT)		+= leds-cobalt.o | ||||||
|  |  obj-$(CONFIG_LEDS_GPIO)			+= leds-gpio.o | ||||||
| @@ -7,10 +7,10 @@ | |||||||
|  |  | ||||||
| define Profile/Alix | define Profile/Alix | ||||||
|   NAME:=PCEngines Alix |   NAME:=PCEngines Alix | ||||||
|   PACKAGES:=kmod-via-rhine |   PACKAGES:=kmod-via-rhine kmod-leds-alix | ||||||
| endef | endef | ||||||
|  |  | ||||||
| define Profile/Alix/Description | define Profile/Alix/Description | ||||||
|         Package set compatible with the PCEngines Alix. Contains VIA Rhine III VT6105M support |         Package set compatible with the PCEngines Alix. Contains VIA Rhine III VT6105M and LED support | ||||||
| endef | endef | ||||||
| $(eval $(call Profile,Alix)) | $(eval $(call Profile,Alix)) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Felix Fietkau
					Felix Fietkau