0001
0002
0003
0004
0005
0006
0007 #include <linux/io.h>
0008 #include <linux/ioport.h>
0009 #include <linux/leds.h>
0010 #include <linux/module.h>
0011 #include <linux/platform_device.h>
0012 #include <linux/types.h>
0013
0014 #define LED_FRONT_LEFT 0x01
0015 #define LED_FRONT_RIGHT 0x02
0016
0017 static void __iomem *led_port;
0018 static u8 led_value;
0019
0020 static void qube_front_led_set(struct led_classdev *led_cdev,
0021 enum led_brightness brightness)
0022 {
0023 if (brightness)
0024 led_value = LED_FRONT_LEFT | LED_FRONT_RIGHT;
0025 else
0026 led_value = ~(LED_FRONT_LEFT | LED_FRONT_RIGHT);
0027 writeb(led_value, led_port);
0028 }
0029
0030 static struct led_classdev qube_front_led = {
0031 .name = "qube::front",
0032 .brightness = LED_FULL,
0033 .brightness_set = qube_front_led_set,
0034 .default_trigger = "default-on",
0035 };
0036
0037 static int cobalt_qube_led_probe(struct platform_device *pdev)
0038 {
0039 struct resource *res;
0040
0041 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
0042 if (!res)
0043 return -EBUSY;
0044
0045 led_port = devm_ioremap(&pdev->dev, res->start, resource_size(res));
0046 if (!led_port)
0047 return -ENOMEM;
0048
0049 led_value = LED_FRONT_LEFT | LED_FRONT_RIGHT;
0050 writeb(led_value, led_port);
0051
0052 return devm_led_classdev_register(&pdev->dev, &qube_front_led);
0053 }
0054
0055 static struct platform_driver cobalt_qube_led_driver = {
0056 .probe = cobalt_qube_led_probe,
0057 .driver = {
0058 .name = "cobalt-qube-leds",
0059 },
0060 };
0061
0062 module_platform_driver(cobalt_qube_led_driver);
0063
0064 MODULE_LICENSE("GPL");
0065 MODULE_DESCRIPTION("Front LED support for Cobalt Server");
0066 MODULE_AUTHOR("Florian Fainelli <florian@openwrt.org>");
0067 MODULE_ALIAS("platform:cobalt-qube-leds");