1 | // SPDX-License-Identifier: GPL-2.0-only |
2 | /* |
3 | * Copyright 2006 - Florian Fainelli <florian@openwrt.org> |
4 | * |
5 | * Control the Cobalt Qube/RaQ front LED |
6 | */ |
7 | #include <linux/io.h> |
8 | #include <linux/ioport.h> |
9 | #include <linux/leds.h> |
10 | #include <linux/module.h> |
11 | #include <linux/platform_device.h> |
12 | #include <linux/types.h> |
13 | |
14 | #define LED_FRONT_LEFT 0x01 |
15 | #define LED_FRONT_RIGHT 0x02 |
16 | |
17 | static void __iomem *led_port; |
18 | static u8 led_value; |
19 | |
20 | static void qube_front_led_set(struct led_classdev *led_cdev, |
21 | enum led_brightness brightness) |
22 | { |
23 | if (brightness) |
24 | led_value = LED_FRONT_LEFT | LED_FRONT_RIGHT; |
25 | else |
26 | led_value = ~(LED_FRONT_LEFT | LED_FRONT_RIGHT); |
27 | writeb(val: led_value, addr: led_port); |
28 | } |
29 | |
30 | static struct led_classdev qube_front_led = { |
31 | .name = "qube::front" , |
32 | .brightness = LED_FULL, |
33 | .brightness_set = qube_front_led_set, |
34 | .default_trigger = "default-on" , |
35 | }; |
36 | |
37 | static int cobalt_qube_led_probe(struct platform_device *pdev) |
38 | { |
39 | struct resource *res; |
40 | |
41 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
42 | if (!res) |
43 | return -EBUSY; |
44 | |
45 | led_port = devm_ioremap(dev: &pdev->dev, offset: res->start, size: resource_size(res)); |
46 | if (!led_port) |
47 | return -ENOMEM; |
48 | |
49 | led_value = LED_FRONT_LEFT | LED_FRONT_RIGHT; |
50 | writeb(val: led_value, addr: led_port); |
51 | |
52 | return devm_led_classdev_register(parent: &pdev->dev, led_cdev: &qube_front_led); |
53 | } |
54 | |
55 | static struct platform_driver cobalt_qube_led_driver = { |
56 | .probe = cobalt_qube_led_probe, |
57 | .driver = { |
58 | .name = "cobalt-qube-leds" , |
59 | }, |
60 | }; |
61 | |
62 | module_platform_driver(cobalt_qube_led_driver); |
63 | |
64 | MODULE_LICENSE("GPL" ); |
65 | MODULE_DESCRIPTION("Front LED support for Cobalt Server" ); |
66 | MODULE_AUTHOR("Florian Fainelli <florian@openwrt.org>" ); |
67 | MODULE_ALIAS("platform:cobalt-qube-leds" ); |
68 | |