Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.27-rc7 124 lines 2.9 kB view raw
1/* 2 * LED Triggers Core 3 * 4 * Copyright 2005-2006 Openedhand Ltd. 5 * 6 * Author: Richard Purdie <rpurdie@openedhand.com> 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License version 2 as 10 * published by the Free Software Foundation. 11 * 12 */ 13 14#include <linux/kernel.h> 15#include <linux/init.h> 16#include <linux/platform_device.h> 17#include <linux/leds.h> 18#include <mach/corgi.h> 19#include <mach/hardware.h> 20#include <mach/pxa-regs.h> 21#include <asm/hardware/scoop.h> 22 23static void corgiled_amber_set(struct led_classdev *led_cdev, 24 enum led_brightness value) 25{ 26 if (value) 27 GPSR0 = GPIO_bit(CORGI_GPIO_LED_ORANGE); 28 else 29 GPCR0 = GPIO_bit(CORGI_GPIO_LED_ORANGE); 30} 31 32static void corgiled_green_set(struct led_classdev *led_cdev, 33 enum led_brightness value) 34{ 35 if (value) 36 set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_LED_GREEN); 37 else 38 reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_LED_GREEN); 39} 40 41static struct led_classdev corgi_amber_led = { 42 .name = "corgi:amber:charge", 43 .default_trigger = "sharpsl-charge", 44 .brightness_set = corgiled_amber_set, 45}; 46 47static struct led_classdev corgi_green_led = { 48 .name = "corgi:green:mail", 49 .default_trigger = "nand-disk", 50 .brightness_set = corgiled_green_set, 51}; 52 53#ifdef CONFIG_PM 54static int corgiled_suspend(struct platform_device *dev, pm_message_t state) 55{ 56#ifdef CONFIG_LEDS_TRIGGERS 57 if (corgi_amber_led.trigger && 58 strcmp(corgi_amber_led.trigger->name, "sharpsl-charge")) 59#endif 60 led_classdev_suspend(&corgi_amber_led); 61 led_classdev_suspend(&corgi_green_led); 62 return 0; 63} 64 65static int corgiled_resume(struct platform_device *dev) 66{ 67 led_classdev_resume(&corgi_amber_led); 68 led_classdev_resume(&corgi_green_led); 69 return 0; 70} 71#endif 72 73static int corgiled_probe(struct platform_device *pdev) 74{ 75 int ret; 76 77 ret = led_classdev_register(&pdev->dev, &corgi_amber_led); 78 if (ret < 0) 79 return ret; 80 81 ret = led_classdev_register(&pdev->dev, &corgi_green_led); 82 if (ret < 0) 83 led_classdev_unregister(&corgi_amber_led); 84 85 return ret; 86} 87 88static int corgiled_remove(struct platform_device *pdev) 89{ 90 led_classdev_unregister(&corgi_amber_led); 91 led_classdev_unregister(&corgi_green_led); 92 return 0; 93} 94 95static struct platform_driver corgiled_driver = { 96 .probe = corgiled_probe, 97 .remove = corgiled_remove, 98#ifdef CONFIG_PM 99 .suspend = corgiled_suspend, 100 .resume = corgiled_resume, 101#endif 102 .driver = { 103 .name = "corgi-led", 104 .owner = THIS_MODULE, 105 }, 106}; 107 108static int __init corgiled_init(void) 109{ 110 return platform_driver_register(&corgiled_driver); 111} 112 113static void __exit corgiled_exit(void) 114{ 115 platform_driver_unregister(&corgiled_driver); 116} 117 118module_init(corgiled_init); 119module_exit(corgiled_exit); 120 121MODULE_AUTHOR("Richard Purdie <rpurdie@openedhand.com>"); 122MODULE_DESCRIPTION("Corgi LED driver"); 123MODULE_LICENSE("GPL"); 124MODULE_ALIAS("platform:corgi-led");