From 3696a8a426f8caebd97463e9b5cf9f06c1c36759 Mon Sep 17 00:00:00 2001 From: Mike Rapoport Date: Sun, 23 Sep 2007 15:59:26 +0100 Subject: [ARM] 4576/1: CM-X270 machine support This patch provides core support for CM-X270 platform. Signed-off-by: Mike Rapoport Signed-off-by: Russell King --- drivers/leds/Kconfig | 6 +++ drivers/leds/Makefile | 1 + drivers/leds/leds-cm-x270.c | 122 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 129 insertions(+) create mode 100644 drivers/leds/leds-cm-x270.c (limited to 'drivers/leds') diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig index 3cb2321..257b440 100644 --- a/drivers/leds/Kconfig +++ b/drivers/leds/Kconfig @@ -108,6 +108,12 @@ config LEDS_GPIO outputs. To be useful the particular board must have LEDs and they must be connected to the GPIO lines. +config LEDS_CM_X270 + tristate "LED Support for the CM-X270 LEDs" + depends on LEDS_CLASS && MACH_ARMCORE + help + This option enables support for the CM-X270 LEDs. + comment "LED Triggers" config LEDS_TRIGGERS diff --git a/drivers/leds/Makefile b/drivers/leds/Makefile index d2ca1ab..a60de1b 100644 --- a/drivers/leds/Makefile +++ b/drivers/leds/Makefile @@ -18,6 +18,7 @@ obj-$(CONFIG_LEDS_H1940) += leds-h1940.o obj-$(CONFIG_LEDS_COBALT_QUBE) += leds-cobalt-qube.o obj-$(CONFIG_LEDS_COBALT_RAQ) += leds-cobalt-raq.o obj-$(CONFIG_LEDS_GPIO) += leds-gpio.o +obj-$(CONFIG_LEDS_CM_X270) += leds-cm-x270.o # LED Triggers obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o diff --git a/drivers/leds/leds-cm-x270.c b/drivers/leds/leds-cm-x270.c new file mode 100644 index 0000000..9aebef0 --- /dev/null +++ b/drivers/leds/leds-cm-x270.c @@ -0,0 +1,122 @@ +/* + * drivers/leds/leds-cm-x270.c + * + * Copyright 2007 CompuLab Ltd. + * Author: Mike Rapoport + * + * Based on leds-corgi.c + * Author: Richard Purdie + * + * 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 +#include +#include +#include + +#include +#include + +#define GPIO_RED_LED (93) +#define GPIO_GREEN_LED (94) + +static void cmx270_red_set(struct led_classdev *led_cdev, + enum led_brightness value) +{ + if (value) + GPCR(GPIO_RED_LED) = GPIO_bit(GPIO_RED_LED); + else + GPSR(GPIO_RED_LED) = GPIO_bit(GPIO_RED_LED); +} + +static void cmx270_green_set(struct led_classdev *led_cdev, + enum led_brightness value) +{ + if (value) + GPCR(GPIO_GREEN_LED) = GPIO_bit(GPIO_GREEN_LED); + else + GPSR(GPIO_GREEN_LED) = GPIO_bit(GPIO_GREEN_LED); +} + +static struct led_classdev cmx270_red_led = { + .name = "cm-x270:red", + .default_trigger = "nand-disk", + .brightness_set = cmx270_red_set, +}; + +static struct led_classdev cmx270_green_led = { + .name = "cm-x270:green", + .default_trigger = "heartbeat", + .brightness_set = cmx270_green_set, +}; + +#ifdef CONFIG_PM +static int cmx270led_suspend(struct platform_device *dev, pm_message_t state) +{ + led_classdev_suspend(&cmx270_red_led); + led_classdev_suspend(&cmx270_green_led); + return 0; +} + +static int cmx270led_resume(struct platform_device *dev) +{ + led_classdev_resume(&cmx270_red_led); + led_classdev_resume(&cmx270_green_led); + return 0; +} +#endif + +static int cmx270led_probe(struct platform_device *pdev) +{ + int ret; + + ret = led_classdev_register(&pdev->dev, &cmx270_red_led); + if (ret < 0) + return ret; + + ret = led_classdev_register(&pdev->dev, &cmx270_green_led); + if (ret < 0) + led_classdev_unregister(&cmx270_red_led); + + return ret; +} + +static int cmx270led_remove(struct platform_device *pdev) +{ + led_classdev_unregister(&cmx270_red_led); + led_classdev_unregister(&cmx270_green_led); + return 0; +} + +static struct platform_driver cmx270led_driver = { + .probe = cmx270led_probe, + .remove = cmx270led_remove, +#ifdef CONFIG_PM + .suspend = cmx270led_suspend, + .resume = cmx270led_resume, +#endif + .driver = { + .name = "cm-x270-led", + }, +}; + +static int __init cmx270led_init(void) +{ + return platform_driver_register(&cmx270led_driver); +} + +static void __exit cmx270led_exit(void) +{ + platform_driver_unregister(&cmx270led_driver); +} + +module_init(cmx270led_init); +module_exit(cmx270led_exit); + +MODULE_AUTHOR("Mike Rapoport "); +MODULE_DESCRIPTION("CM-x270 LED driver"); +MODULE_LICENSE("GPL"); -- cgit v1.1