]>
Commit | Line | Data |
---|---|---|
d2912cb1 | 1 | // SPDX-License-Identifier: GPL-2.0-only |
1a87d942 CB |
2 | /* |
3 | * LEDs driver for Soekris net48xx | |
4 | * | |
5 | * Copyright (C) 2006 Chris Boot <[email protected]> | |
6 | * | |
7 | * Based on leds-ams-delta.c | |
1a87d942 CB |
8 | */ |
9 | ||
10 | #include <linux/kernel.h> | |
11 | #include <linux/init.h> | |
12 | #include <linux/platform_device.h> | |
13 | #include <linux/leds.h> | |
14 | #include <linux/err.h> | |
6023ff73 | 15 | #include <linux/io.h> |
cfedc920 | 16 | #include <linux/nsc_gpio.h> |
1a87d942 | 17 | #include <linux/scx200_gpio.h> |
54f4dedb | 18 | #include <linux/module.h> |
1a87d942 | 19 | |
bca3bffe | 20 | #define DRVNAME "net48xx-led" |
1a87d942 CB |
21 | #define NET48XX_ERROR_LED_GPIO 20 |
22 | ||
23 | static struct platform_device *pdev; | |
24 | ||
25 | static void net48xx_error_led_set(struct led_classdev *led_cdev, | |
26 | enum led_brightness value) | |
27 | { | |
cfedc920 | 28 | scx200_gpio_ops.gpio_set(NET48XX_ERROR_LED_GPIO, value ? 1 : 0); |
1a87d942 CB |
29 | } |
30 | ||
31 | static struct led_classdev net48xx_error_led = { | |
6c152bee | 32 | .name = "net48xx::error", |
1a87d942 | 33 | .brightness_set = net48xx_error_led_set, |
859cb7f2 | 34 | .flags = LED_CORE_SUSPENDRESUME, |
1a87d942 CB |
35 | }; |
36 | ||
1a87d942 CB |
37 | static int net48xx_led_probe(struct platform_device *pdev) |
38 | { | |
51167623 | 39 | return devm_led_classdev_register(&pdev->dev, &net48xx_error_led); |
1a87d942 CB |
40 | } |
41 | ||
42 | static struct platform_driver net48xx_led_driver = { | |
1a87d942 | 43 | .probe = net48xx_led_probe, |
1a87d942 | 44 | .driver = { |
bca3bffe | 45 | .name = DRVNAME, |
1a87d942 CB |
46 | }, |
47 | }; | |
48 | ||
49 | static int __init net48xx_led_init(void) | |
50 | { | |
51 | int ret; | |
52 | ||
cfedc920 CB |
53 | /* small hack, but scx200_gpio doesn't set .dev if the probe fails */ |
54 | if (!scx200_gpio_ops.dev) { | |
1a87d942 CB |
55 | ret = -ENODEV; |
56 | goto out; | |
57 | } | |
58 | ||
59 | ret = platform_driver_register(&net48xx_led_driver); | |
60 | if (ret < 0) | |
61 | goto out; | |
62 | ||
bca3bffe | 63 | pdev = platform_device_register_simple(DRVNAME, -1, NULL, 0); |
1a87d942 CB |
64 | if (IS_ERR(pdev)) { |
65 | ret = PTR_ERR(pdev); | |
66 | platform_driver_unregister(&net48xx_led_driver); | |
67 | goto out; | |
68 | } | |
69 | ||
70 | out: | |
71 | return ret; | |
72 | } | |
73 | ||
74 | static void __exit net48xx_led_exit(void) | |
75 | { | |
76 | platform_device_unregister(pdev); | |
77 | platform_driver_unregister(&net48xx_led_driver); | |
78 | } | |
79 | ||
80 | module_init(net48xx_led_init); | |
81 | module_exit(net48xx_led_exit); | |
82 | ||
83 | MODULE_AUTHOR("Chris Boot <[email protected]>"); | |
84 | MODULE_DESCRIPTION("Soekris net48xx LED driver"); | |
85 | MODULE_LICENSE("GPL"); | |
86 |