2 * LEDs driver for Amstrad Delta (E3)
4 * Copyright (C) 2006 Jonathan McDowell <noodles@earth.li>
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.
11 #include <linux/kernel.h>
12 #include <linux/init.h>
13 #include <linux/platform_device.h>
14 #include <linux/leds.h>
15 #include <mach/board-ams-delta.h>
20 struct ams_delta_led
{
21 struct led_classdev cdev
;
25 static void ams_delta_led_set(struct led_classdev
*led_cdev
,
26 enum led_brightness value
)
28 struct ams_delta_led
*led_dev
=
29 container_of(led_cdev
, struct ams_delta_led
, cdev
);
32 ams_delta_latch1_write(led_dev
->bitmask
, led_dev
->bitmask
);
34 ams_delta_latch1_write(led_dev
->bitmask
, 0);
37 static struct ams_delta_led ams_delta_leds
[] = {
40 .name
= "ams-delta::camera",
41 .brightness_set
= ams_delta_led_set
,
43 .bitmask
= AMS_DELTA_LATCH1_LED_CAMERA
,
47 .name
= "ams-delta::advert",
48 .brightness_set
= ams_delta_led_set
,
50 .bitmask
= AMS_DELTA_LATCH1_LED_ADVERT
,
54 .name
= "ams-delta::email",
55 .brightness_set
= ams_delta_led_set
,
57 .bitmask
= AMS_DELTA_LATCH1_LED_EMAIL
,
61 .name
= "ams-delta::handsfree",
62 .brightness_set
= ams_delta_led_set
,
64 .bitmask
= AMS_DELTA_LATCH1_LED_HANDSFREE
,
68 .name
= "ams-delta::voicemail",
69 .brightness_set
= ams_delta_led_set
,
71 .bitmask
= AMS_DELTA_LATCH1_LED_VOICEMAIL
,
75 .name
= "ams-delta::voice",
76 .brightness_set
= ams_delta_led_set
,
78 .bitmask
= AMS_DELTA_LATCH1_LED_VOICE
,
82 static int ams_delta_led_probe(struct platform_device
*pdev
)
86 for (i
= 0; i
< ARRAY_SIZE(ams_delta_leds
); i
++) {
87 ams_delta_leds
[i
].cdev
.flags
|= LED_CORE_SUSPENDRESUME
;
88 ret
= led_classdev_register(&pdev
->dev
,
89 &ams_delta_leds
[i
].cdev
);
97 led_classdev_unregister(&ams_delta_leds
[i
].cdev
);
101 static int ams_delta_led_remove(struct platform_device
*pdev
)
105 for (i
= 0; i
< ARRAY_SIZE(ams_delta_leds
); i
++)
106 led_classdev_unregister(&ams_delta_leds
[i
].cdev
);
111 static struct platform_driver ams_delta_led_driver
= {
112 .probe
= ams_delta_led_probe
,
113 .remove
= ams_delta_led_remove
,
115 .name
= "ams-delta-led",
116 .owner
= THIS_MODULE
,
120 static int __init
ams_delta_led_init(void)
122 return platform_driver_register(&ams_delta_led_driver
);
125 static void __exit
ams_delta_led_exit(void)
127 platform_driver_unregister(&ams_delta_led_driver
);
130 module_init(ams_delta_led_init
);
131 module_exit(ams_delta_led_exit
);
133 MODULE_AUTHOR("Jonathan McDowell <noodles@earth.li>");
134 MODULE_DESCRIPTION("Amstrad Delta LED driver");
135 MODULE_LICENSE("GPL");
136 MODULE_ALIAS("platform:ams-delta-led");