Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/drivers/leds/leds-net48xx.c
15109 views
1
/*
2
* LEDs driver for Soekris net48xx
3
*
4
* Copyright (C) 2006 Chris Boot <[email protected]>
5
*
6
* Based on leds-ams-delta.c
7
*
8
* This program is free software; you can redistribute it and/or modify
9
* it under the terms of the GNU General Public License version 2 as
10
* published by the Free Software Foundation.
11
*/
12
13
#include <linux/kernel.h>
14
#include <linux/init.h>
15
#include <linux/platform_device.h>
16
#include <linux/leds.h>
17
#include <linux/err.h>
18
#include <asm/io.h>
19
#include <linux/nsc_gpio.h>
20
#include <linux/scx200_gpio.h>
21
22
#define DRVNAME "net48xx-led"
23
#define NET48XX_ERROR_LED_GPIO 20
24
25
static struct platform_device *pdev;
26
27
static void net48xx_error_led_set(struct led_classdev *led_cdev,
28
enum led_brightness value)
29
{
30
scx200_gpio_ops.gpio_set(NET48XX_ERROR_LED_GPIO, value ? 1 : 0);
31
}
32
33
static struct led_classdev net48xx_error_led = {
34
.name = "net48xx::error",
35
.brightness_set = net48xx_error_led_set,
36
.flags = LED_CORE_SUSPENDRESUME,
37
};
38
39
static int net48xx_led_probe(struct platform_device *pdev)
40
{
41
return led_classdev_register(&pdev->dev, &net48xx_error_led);
42
}
43
44
static int net48xx_led_remove(struct platform_device *pdev)
45
{
46
led_classdev_unregister(&net48xx_error_led);
47
return 0;
48
}
49
50
static struct platform_driver net48xx_led_driver = {
51
.probe = net48xx_led_probe,
52
.remove = net48xx_led_remove,
53
.driver = {
54
.name = DRVNAME,
55
.owner = THIS_MODULE,
56
},
57
};
58
59
static int __init net48xx_led_init(void)
60
{
61
int ret;
62
63
/* small hack, but scx200_gpio doesn't set .dev if the probe fails */
64
if (!scx200_gpio_ops.dev) {
65
ret = -ENODEV;
66
goto out;
67
}
68
69
ret = platform_driver_register(&net48xx_led_driver);
70
if (ret < 0)
71
goto out;
72
73
pdev = platform_device_register_simple(DRVNAME, -1, NULL, 0);
74
if (IS_ERR(pdev)) {
75
ret = PTR_ERR(pdev);
76
platform_driver_unregister(&net48xx_led_driver);
77
goto out;
78
}
79
80
out:
81
return ret;
82
}
83
84
static void __exit net48xx_led_exit(void)
85
{
86
platform_device_unregister(pdev);
87
platform_driver_unregister(&net48xx_led_driver);
88
}
89
90
module_init(net48xx_led_init);
91
module_exit(net48xx_led_exit);
92
93
MODULE_AUTHOR("Chris Boot <[email protected]>");
94
MODULE_DESCRIPTION("Soekris net48xx LED driver");
95
MODULE_LICENSE("GPL");
96
97
98