Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  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 <asm/hardware/scoop.h>
 19 #include <asm/mach-types.h>
 20 #include <asm/arch/hardware.h>
 21 #include <asm/arch/pxa-regs.h>
 22 #include <asm/arch/spitz.h>
 23 
 24 static void spitzled_amber_set(struct led_classdev *led_cdev, enum led_brightness value)
 25 {
 26         if (value)
 27                 set_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_LED_ORANGE);
 28         else
 29                 reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_LED_ORANGE);
 30 }
 31 
 32 static void spitzled_green_set(struct led_classdev *led_cdev, enum led_brightness value)
 33 {
 34         if (value)
 35                 set_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_LED_GREEN);
 36         else
 37                 reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_LED_GREEN);
 38 }
 39 
 40 static struct led_classdev spitz_amber_led = {
 41         .name                   = "spitz:amber:charge",
 42         .default_trigger        = "sharpsl-charge",
 43         .brightness_set         = spitzled_amber_set,
 44 };
 45 
 46 static struct led_classdev spitz_green_led = {
 47         .name                   = "spitz:green:hddactivity",
 48         .default_trigger        = "ide-disk",
 49         .brightness_set         = spitzled_green_set,
 50 };
 51 
 52 #ifdef CONFIG_PM
 53 static int spitzled_suspend(struct platform_device *dev, pm_message_t state)
 54 {
 55 #ifdef CONFIG_LEDS_TRIGGERS
 56         if (spitz_amber_led.trigger && strcmp(spitz_amber_led.trigger->name, "sharpsl-charge"))
 57 #endif
 58                 led_classdev_suspend(&spitz_amber_led);
 59         led_classdev_suspend(&spitz_green_led);
 60         return 0;
 61 }
 62 
 63 static int spitzled_resume(struct platform_device *dev)
 64 {
 65         led_classdev_resume(&spitz_amber_led);
 66         led_classdev_resume(&spitz_green_led);
 67         return 0;
 68 }
 69 #endif
 70 
 71 static int spitzled_probe(struct platform_device *pdev)
 72 {
 73         int ret;
 74 
 75         if (machine_is_akita()) {
 76                 spitz_green_led.name = "spitz:green:mail";
 77                 spitz_green_led.default_trigger = "nand-disk";
 78         }
 79 
 80         ret = led_classdev_register(&pdev->dev, &spitz_amber_led);
 81         if (ret < 0)
 82                 return ret;
 83 
 84         ret = led_classdev_register(&pdev->dev, &spitz_green_led);
 85         if (ret < 0)
 86                 led_classdev_unregister(&spitz_amber_led);
 87 
 88         return ret;
 89 }
 90 
 91 static int spitzled_remove(struct platform_device *pdev)
 92 {
 93         led_classdev_unregister(&spitz_amber_led);
 94         led_classdev_unregister(&spitz_green_led);
 95 
 96         return 0;
 97 }
 98 
 99 static struct platform_driver spitzled_driver = {
100         .probe          = spitzled_probe,
101         .remove         = spitzled_remove,
102 #ifdef CONFIG_PM
103         .suspend        = spitzled_suspend,
104         .resume         = spitzled_resume,
105 #endif
106         .driver         = {
107                 .name           = "spitz-led",
108                 .owner          = THIS_MODULE,
109         },
110 };
111 
112 static int __init spitzled_init(void)
113 {
114         return platform_driver_register(&spitzled_driver);
115 }
116 
117 static void __exit spitzled_exit(void)
118 {
119         platform_driver_unregister(&spitzled_driver);
120 }
121 
122 module_init(spitzled_init);
123 module_exit(spitzled_exit);
124 
125 MODULE_AUTHOR("Richard Purdie <rpurdie@openedhand.com>");
126 MODULE_DESCRIPTION("Spitz LED driver");
127 MODULE_LICENSE("GPL");
128 MODULE_ALIAS("platform:spitz-led");
129 
  This page was automatically generated by the LXR engine.