Skip to content

Commit ccbbb11

Browse files
linuswpavelmachek
authored andcommitted
leds: ns2: Convert to GPIO descriptors
This converts the NS2 LED driver to use GPIO descriptors. We take care to request the GPIOs "as is" which is what the current driver goes to lengths to achieve, then we use GPIOs throughout. As the nodes for each LED does not have any corresponding device, we need to use the DT-specific accessors to get these GPIO descriptors from the device tree. Cc: Vincent Donnefort <[email protected]> Signed-off-by: Linus Walleij <[email protected]> Tested-by: Simon Guinot <[email protected]> Signed-off-by: Pavel Machek <[email protected]>
1 parent c789649 commit ccbbb11

File tree

1 file changed

+31
-42
lines changed

1 file changed

+31
-42
lines changed

drivers/leds/leds-ns2.c

Lines changed: 31 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ struct ns2_led_modval {
3333
struct ns2_led {
3434
const char *name;
3535
const char *default_trigger;
36-
unsigned cmd;
37-
unsigned slow;
36+
struct gpio_desc *cmd;
37+
struct gpio_desc *slow;
3838
int num_modes;
3939
struct ns2_led_modval *modval;
4040
};
@@ -53,8 +53,8 @@ struct ns2_led_platform_data {
5353

5454
struct ns2_led_data {
5555
struct led_classdev cdev;
56-
unsigned int cmd;
57-
unsigned int slow;
56+
struct gpio_desc *cmd;
57+
struct gpio_desc *slow;
5858
bool can_sleep;
5959
unsigned char sata; /* True when SATA mode active. */
6060
rwlock_t rw_lock; /* Lock GPIOs. */
@@ -70,8 +70,8 @@ static int ns2_led_get_mode(struct ns2_led_data *led_dat,
7070
int cmd_level;
7171
int slow_level;
7272

73-
cmd_level = gpio_get_value_cansleep(led_dat->cmd);
74-
slow_level = gpio_get_value_cansleep(led_dat->slow);
73+
cmd_level = gpiod_get_value_cansleep(led_dat->cmd);
74+
slow_level = gpiod_get_value_cansleep(led_dat->slow);
7575

7676
for (i = 0; i < led_dat->num_modes; i++) {
7777
if (cmd_level == led_dat->modval[i].cmd_level &&
@@ -104,15 +104,15 @@ static void ns2_led_set_mode(struct ns2_led_data *led_dat,
104104
write_lock_irqsave(&led_dat->rw_lock, flags);
105105

106106
if (!led_dat->can_sleep) {
107-
gpio_set_value(led_dat->cmd,
108-
led_dat->modval[i].cmd_level);
109-
gpio_set_value(led_dat->slow,
110-
led_dat->modval[i].slow_level);
107+
gpiod_set_value(led_dat->cmd,
108+
led_dat->modval[i].cmd_level);
109+
gpiod_set_value(led_dat->slow,
110+
led_dat->modval[i].slow_level);
111111
goto exit_unlock;
112112
}
113113

114-
gpio_set_value_cansleep(led_dat->cmd, led_dat->modval[i].cmd_level);
115-
gpio_set_value_cansleep(led_dat->slow, led_dat->modval[i].slow_level);
114+
gpiod_set_value_cansleep(led_dat->cmd, led_dat->modval[i].cmd_level);
115+
gpiod_set_value_cansleep(led_dat->slow, led_dat->modval[i].slow_level);
116116

117117
exit_unlock:
118118
write_unlock_irqrestore(&led_dat->rw_lock, flags);
@@ -200,26 +200,6 @@ create_ns2_led(struct platform_device *pdev, struct ns2_led_data *led_dat,
200200
int ret;
201201
enum ns2_led_modes mode;
202202

203-
ret = devm_gpio_request_one(&pdev->dev, template->cmd,
204-
gpio_get_value_cansleep(template->cmd) ?
205-
GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW,
206-
template->name);
207-
if (ret) {
208-
dev_err(&pdev->dev, "%s: failed to setup command GPIO\n",
209-
template->name);
210-
return ret;
211-
}
212-
213-
ret = devm_gpio_request_one(&pdev->dev, template->slow,
214-
gpio_get_value_cansleep(template->slow) ?
215-
GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW,
216-
template->name);
217-
if (ret) {
218-
dev_err(&pdev->dev, "%s: failed to setup slow GPIO\n",
219-
template->name);
220-
return ret;
221-
}
222-
223203
rwlock_init(&led_dat->rw_lock);
224204

225205
led_dat->cdev.name = template->name;
@@ -229,8 +209,8 @@ create_ns2_led(struct platform_device *pdev, struct ns2_led_data *led_dat,
229209
led_dat->cdev.groups = ns2_led_groups;
230210
led_dat->cmd = template->cmd;
231211
led_dat->slow = template->slow;
232-
led_dat->can_sleep = gpio_cansleep(led_dat->cmd) |
233-
gpio_cansleep(led_dat->slow);
212+
led_dat->can_sleep = gpiod_cansleep(led_dat->cmd) |
213+
gpiod_cansleep(led_dat->slow);
234214
if (led_dat->can_sleep)
235215
led_dat->cdev.brightness_set_blocking = ns2_led_set_blocking;
236216
else
@@ -285,17 +265,26 @@ ns2_leds_get_of_pdata(struct device *dev, struct ns2_led_platform_data *pdata)
285265
const char *string;
286266
int i, num_modes;
287267
struct ns2_led_modval *modval;
268+
struct gpio_desc *gd;
288269

289-
ret = of_get_named_gpio(child, "cmd-gpio", 0);
290-
if (ret < 0)
291-
goto err_node_put;
292-
led->cmd = ret;
293-
ret = of_get_named_gpio(child, "slow-gpio", 0);
294-
if (ret < 0)
295-
goto err_node_put;
296-
led->slow = ret;
297270
ret = of_property_read_string(child, "label", &string);
298271
led->name = (ret == 0) ? string : child->name;
272+
273+
gd = gpiod_get_from_of_node(child, "cmd-gpio", 0,
274+
GPIOD_ASIS, led->name);
275+
if (IS_ERR(gd)) {
276+
ret = PTR_ERR(gd);
277+
goto err_node_put;
278+
}
279+
led->cmd = gd;
280+
gd = gpiod_get_from_of_node(child, "slow-gpio", 0,
281+
GPIOD_ASIS, led->name);
282+
if (IS_ERR(gd)) {
283+
ret = PTR_ERR(gd);
284+
goto err_node_put;
285+
}
286+
led->slow = gd;
287+
299288
ret = of_property_read_string(child, "linux,default-trigger",
300289
&string);
301290
if (ret == 0)

0 commit comments

Comments
 (0)