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 v3.3-rc6 126 lines 2.8 kB view raw
1/* 2 * LEDs driver for Amstrad Delta (E3) 3 * 4 * Copyright (C) 2006 Jonathan McDowell <noodles@earth.li> 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 2 as 8 * published by the Free Software Foundation. 9 */ 10 11#include <linux/module.h> 12#include <linux/kernel.h> 13#include <linux/init.h> 14#include <linux/platform_device.h> 15#include <linux/leds.h> 16#include <plat/board-ams-delta.h> 17 18/* 19 * Our context 20 */ 21struct ams_delta_led { 22 struct led_classdev cdev; 23 u8 bitmask; 24}; 25 26static void ams_delta_led_set(struct led_classdev *led_cdev, 27 enum led_brightness value) 28{ 29 struct ams_delta_led *led_dev = 30 container_of(led_cdev, struct ams_delta_led, cdev); 31 32 if (value) 33 ams_delta_latch1_write(led_dev->bitmask, led_dev->bitmask); 34 else 35 ams_delta_latch1_write(led_dev->bitmask, 0); 36} 37 38static struct ams_delta_led ams_delta_leds[] = { 39 { 40 .cdev = { 41 .name = "ams-delta::camera", 42 .brightness_set = ams_delta_led_set, 43 }, 44 .bitmask = AMS_DELTA_LATCH1_LED_CAMERA, 45 }, 46 { 47 .cdev = { 48 .name = "ams-delta::advert", 49 .brightness_set = ams_delta_led_set, 50 }, 51 .bitmask = AMS_DELTA_LATCH1_LED_ADVERT, 52 }, 53 { 54 .cdev = { 55 .name = "ams-delta::email", 56 .brightness_set = ams_delta_led_set, 57 }, 58 .bitmask = AMS_DELTA_LATCH1_LED_EMAIL, 59 }, 60 { 61 .cdev = { 62 .name = "ams-delta::handsfree", 63 .brightness_set = ams_delta_led_set, 64 }, 65 .bitmask = AMS_DELTA_LATCH1_LED_HANDSFREE, 66 }, 67 { 68 .cdev = { 69 .name = "ams-delta::voicemail", 70 .brightness_set = ams_delta_led_set, 71 }, 72 .bitmask = AMS_DELTA_LATCH1_LED_VOICEMAIL, 73 }, 74 { 75 .cdev = { 76 .name = "ams-delta::voice", 77 .brightness_set = ams_delta_led_set, 78 }, 79 .bitmask = AMS_DELTA_LATCH1_LED_VOICE, 80 }, 81}; 82 83static int ams_delta_led_probe(struct platform_device *pdev) 84{ 85 int i, ret; 86 87 for (i = 0; i < ARRAY_SIZE(ams_delta_leds); i++) { 88 ams_delta_leds[i].cdev.flags |= LED_CORE_SUSPENDRESUME; 89 ret = led_classdev_register(&pdev->dev, 90 &ams_delta_leds[i].cdev); 91 if (ret < 0) 92 goto fail; 93 } 94 95 return 0; 96fail: 97 while (--i >= 0) 98 led_classdev_unregister(&ams_delta_leds[i].cdev); 99 return ret; 100} 101 102static int ams_delta_led_remove(struct platform_device *pdev) 103{ 104 int i; 105 106 for (i = 0; i < ARRAY_SIZE(ams_delta_leds); i++) 107 led_classdev_unregister(&ams_delta_leds[i].cdev); 108 109 return 0; 110} 111 112static struct platform_driver ams_delta_led_driver = { 113 .probe = ams_delta_led_probe, 114 .remove = ams_delta_led_remove, 115 .driver = { 116 .name = "ams-delta-led", 117 .owner = THIS_MODULE, 118 }, 119}; 120 121module_platform_driver(ams_delta_led_driver); 122 123MODULE_AUTHOR("Jonathan McDowell <noodles@earth.li>"); 124MODULE_DESCRIPTION("Amstrad Delta LED driver"); 125MODULE_LICENSE("GPL"); 126MODULE_ALIAS("platform:ams-delta-led");