hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/drivers/leds/leds-lt3593.c
....@@ -5,15 +5,14 @@
55 #include <linux/platform_device.h>
66 #include <linux/leds.h>
77 #include <linux/delay.h>
8
-#include <linux/gpio.h>
98 #include <linux/gpio/consumer.h>
109 #include <linux/slab.h>
1110 #include <linux/module.h>
1211 #include <linux/of.h>
13
-#include <uapi/linux/uleds.h>
12
+
13
+#define LED_LT3593_NAME "lt3593"
1414
1515 struct lt3593_led_data {
16
- char name[LED_MAX_NAME_SIZE];
1716 struct led_classdev cdev;
1817 struct gpio_desc *gpiod;
1918 };
....@@ -60,68 +59,16 @@
6059 return 0;
6160 }
6261
63
-static struct lt3593_led_data *lt3593_led_probe_pdata(struct device *dev)
64
-{
65
- struct gpio_led_platform_data *pdata = dev_get_platdata(dev);
66
- const struct gpio_led *template = &pdata->leds[0];
67
- struct lt3593_led_data *led_data;
68
- int ret, state;
69
-
70
- if (pdata->num_leds != 1)
71
- return ERR_PTR(-EINVAL);
72
-
73
- led_data = devm_kzalloc(dev, sizeof(*led_data), GFP_KERNEL);
74
- if (!led_data)
75
- return ERR_PTR(-ENOMEM);
76
-
77
- led_data->cdev.name = template->name;
78
- led_data->cdev.default_trigger = template->default_trigger;
79
- led_data->cdev.brightness_set_blocking = lt3593_led_set;
80
-
81
- state = (template->default_state == LEDS_GPIO_DEFSTATE_ON);
82
- led_data->cdev.brightness = state ? LED_FULL : LED_OFF;
83
-
84
- if (!template->retain_state_suspended)
85
- led_data->cdev.flags |= LED_CORE_SUSPENDRESUME;
86
-
87
- ret = devm_gpio_request_one(dev, template->gpio, state ?
88
- GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW,
89
- template->name);
90
- if (ret < 0)
91
- return ERR_PTR(ret);
92
-
93
- led_data->gpiod = gpio_to_desc(template->gpio);
94
- if (!led_data->gpiod)
95
- return ERR_PTR(-EPROBE_DEFER);
96
-
97
- ret = devm_led_classdev_register(dev, &led_data->cdev);
98
- if (ret < 0)
99
- return ERR_PTR(ret);
100
-
101
- dev_info(dev, "registered LT3593 LED '%s' at GPIO %d\n",
102
- template->name, template->gpio);
103
-
104
- return led_data;
105
-}
106
-
10762 static int lt3593_led_probe(struct platform_device *pdev)
10863 {
10964 struct device *dev = &pdev->dev;
11065 struct lt3593_led_data *led_data;
11166 struct fwnode_handle *child;
11267 int ret, state = LEDS_GPIO_DEFSTATE_OFF;
113
- enum gpiod_flags flags = GPIOD_OUT_LOW;
68
+ struct led_init_data init_data = {};
11469 const char *tmp;
11570
116
- if (dev_get_platdata(dev)) {
117
- led_data = lt3593_led_probe_pdata(dev);
118
- if (IS_ERR(led_data))
119
- return PTR_ERR(led_data);
120
-
121
- goto out;
122
- }
123
-
124
- if (!dev->of_node)
71
+ if (!dev_of_node(dev))
12572 return -ENODEV;
12673
12774 led_data = devm_kzalloc(dev, sizeof(*led_data), GFP_KERNEL);
....@@ -139,52 +86,33 @@
13986
14087 child = device_get_next_child_node(dev, NULL);
14188
142
- ret = fwnode_property_read_string(child, "label", &tmp);
143
- if (ret < 0)
144
- snprintf(led_data->name, sizeof(led_data->name),
145
- "lt3593::");
146
- else
147
- snprintf(led_data->name, sizeof(led_data->name),
148
- "lt3593:%s", tmp);
149
-
150
- fwnode_property_read_string(child, "linux,default-trigger",
151
- &led_data->cdev.default_trigger);
152
-
15389 if (!fwnode_property_read_string(child, "default-state", &tmp)) {
154
- if (!strcmp(tmp, "keep")) {
155
- state = LEDS_GPIO_DEFSTATE_KEEP;
156
- flags = GPIOD_ASIS;
157
- } else if (!strcmp(tmp, "on")) {
90
+ if (!strcmp(tmp, "on"))
15891 state = LEDS_GPIO_DEFSTATE_ON;
159
- flags = GPIOD_OUT_HIGH;
160
- }
16192 }
16293
163
- led_data->cdev.name = led_data->name;
16494 led_data->cdev.brightness_set_blocking = lt3593_led_set;
16595 led_data->cdev.brightness = state ? LED_FULL : LED_OFF;
16696
167
- ret = devm_led_classdev_register(dev, &led_data->cdev);
168
- if (ret < 0) {
169
- fwnode_handle_put(child);
97
+ init_data.fwnode = child;
98
+ init_data.devicename = LED_LT3593_NAME;
99
+ init_data.default_label = ":";
100
+
101
+ ret = devm_led_classdev_register_ext(dev, &led_data->cdev, &init_data);
102
+ fwnode_handle_put(child);
103
+ if (ret < 0)
170104 return ret;
171
- }
172105
173
- led_data->cdev.dev->of_node = dev->of_node;
174
-
175
-out:
176106 platform_set_drvdata(pdev, led_data);
177107
178108 return 0;
179109 }
180110
181
-#ifdef CONFIG_OF
182111 static const struct of_device_id of_lt3593_leds_match[] = {
183112 { .compatible = "lltc,lt3593", },
184113 {},
185114 };
186115 MODULE_DEVICE_TABLE(of, of_lt3593_leds_match);
187
-#endif
188116
189117 static struct platform_driver lt3593_led_driver = {
190118 .probe = lt3593_led_probe,