1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
From 207bed1a3e5b0a1c2f824b986d55972c31e99938 Mon Sep 17 00:00:00 2001
From: Marc Dietrich <marvin24@gmx.de>
Date: Sun, 17 Jun 2012 19:53:33 +0200
Subject: [PATCH 2/6] NOT_FOR_UPSTREAM: staging: nvec: move led init out of
probe to its own function
Moves the led init to its own function. This is in preparation to
the following speaker mute inclusion via a gpio driver.
Signed-off-by: Marc Dietrich <marvin24@gmx.de>
---
drivers/staging/nvec/nvec_paz00.c | 73 +++++++++++++++++++--------------------
1 file changed, 35 insertions(+), 38 deletions(-)
diff --git a/drivers/staging/nvec/nvec_paz00.c b/drivers/staging/nvec/nvec_paz00.c
index 934b796..a10385d 100644
--- a/drivers/staging/nvec/nvec_paz00.c
+++ b/drivers/staging/nvec/nvec_paz00.c
@@ -11,72 +11,69 @@
*
*/
-#include <linux/module.h>
#include <linux/err.h>
-#include <linux/slab.h>
#include <linux/leds.h>
+#include <linux/module.h>
+#include <linux/slab.h>
#include <linux/platform_device.h>
#include "nvec.h"
-#define to_nvec_led(led_cdev) \
- container_of(led_cdev, struct nvec_led, cdev)
+#define NVEC_LED_MAX 8
-#define NVEC_LED_REQ {'\x0d', '\x10', '\x45', '\x10', '\x00'}
+enum nvec_oem0_subcmds {
+ EXEC_EC_CMD = 0x10,
+};
-#define NVEC_LED_MAX 8
+enum nvec_oem0_ec_cmds {
+ SET_DEVICE_STATUS = 0x45,
+};
-struct nvec_led {
- struct led_classdev cdev;
+struct nvec_paz00_struct {
struct nvec_chip *nvec;
+ struct led_classdev *led_dev;
};
+struct nvec_paz00_struct nvec_paz00;
+
static void nvec_led_brightness_set(struct led_classdev *led_cdev,
enum led_brightness value)
{
- struct nvec_led *led = to_nvec_led(led_cdev);
- unsigned char buf[] = NVEC_LED_REQ;
- buf[4] = value;
-
- nvec_write_async(led->nvec, buf, sizeof(buf));
-
- led->cdev.brightness = value;
+ unsigned char buf[] = { NVEC_OEM0, EXEC_EC_CMD, SET_DEVICE_STATUS,
+ '\x10', value };
+ nvec_paz00.led_dev->brightness = value;
+ nvec_write_async(nvec_paz00.nvec, buf, sizeof(buf));
}
-static int nvec_paz00_probe(struct platform_device *pdev)
+static int paz00_init_leds(struct device *dev)
{
- struct nvec_chip *nvec = dev_get_drvdata(pdev->dev.parent);
- struct nvec_led *led;
- int ret = 0;
-
- led = devm_kzalloc(&pdev->dev, sizeof(*led), GFP_KERNEL);
- if (led == NULL)
+ nvec_paz00.led_dev = devm_kzalloc(dev, sizeof(struct led_classdev),
+ GFP_KERNEL);
+ if (!nvec_paz00.led_dev)
return -ENOMEM;
- led->cdev.max_brightness = NVEC_LED_MAX;
+ nvec_paz00.led_dev->max_brightness = NVEC_LED_MAX;
+ nvec_paz00.led_dev->brightness_set = nvec_led_brightness_set;
+ nvec_paz00.led_dev->brightness = 0;
+ nvec_paz00.led_dev->name = "paz00-led";
+ nvec_paz00.led_dev->flags |= LED_CORE_SUSPENDRESUME;
- led->cdev.brightness_set = nvec_led_brightness_set;
- led->cdev.name = "paz00-led";
- led->cdev.flags |= LED_CORE_SUSPENDRESUME;
- led->nvec = nvec;
-
- platform_set_drvdata(pdev, led);
+ return led_classdev_register(dev, nvec_paz00.led_dev);
+}
- ret = led_classdev_register(&pdev->dev, &led->cdev);
- if (ret < 0)
- return ret;
+static int nvec_paz00_probe(struct platform_device *pdev)
+{
+ struct nvec_chip *nvec = dev_get_drvdata(pdev->dev.parent);
- /* to expose the default value to userspace */
- led->cdev.brightness = 0;
+ platform_set_drvdata(pdev, &nvec_paz00);
+ nvec_paz00.nvec = nvec;
- return 0;
+ return paz00_init_leds(&pdev->dev);
}
static int nvec_paz00_remove(struct platform_device *pdev)
{
- struct nvec_led *led = platform_get_drvdata(pdev);
-
- led_classdev_unregister(&led->cdev);
+ led_classdev_unregister(nvec_paz00.led_dev);
return 0;
}
--
1.8.3.1
|