Lines Matching refs:led
56 static int ns2_led_get_mode(struct ns2_led *led, enum ns2_led_modes *mode)
62 cmd_level = gpiod_get_value_cansleep(led->cmd);
63 slow_level = gpiod_get_value_cansleep(led->slow);
65 for (i = 0; i < led->num_modes; i++) {
66 if (cmd_level == led->modval[i].cmd_level &&
67 slow_level == led->modval[i].slow_level) {
68 *mode = led->modval[i].mode;
76 static void ns2_led_set_mode(struct ns2_led *led, enum ns2_led_modes mode)
81 for (i = 0; i < led->num_modes; i++)
82 if (mode == led->modval[i].mode)
85 if (i == led->num_modes)
88 write_lock_irqsave(&led->rw_lock, flags);
90 if (!led->can_sleep) {
91 gpiod_set_value(led->cmd, led->modval[i].cmd_level);
92 gpiod_set_value(led->slow, led->modval[i].slow_level);
96 gpiod_set_value_cansleep(led->cmd, led->modval[i].cmd_level);
97 gpiod_set_value_cansleep(led->slow, led->modval[i].slow_level);
100 write_unlock_irqrestore(&led->rw_lock, flags);
106 struct ns2_led *led = container_of(led_cdev, struct ns2_led, cdev);
111 else if (led->sata)
116 ns2_led_set_mode(led, mode);
131 struct ns2_led *led = container_of(led_cdev, struct ns2_led, cdev);
141 if (led->sata == enable)
144 led->sata = enable;
150 ns2_led_set_mode(led, NS_V2_LED_SATA);
152 ns2_led_set_mode(led, NS_V2_LED_ON);
162 struct ns2_led *led = container_of(led_cdev, struct ns2_led, cdev);
164 return sprintf(buf, "%d\n", led->sata);
176 struct ns2_led *led)
183 led->cmd = devm_fwnode_gpiod_get_index(dev, node, "cmd", 0, GPIOD_ASIS,
185 if (IS_ERR(led->cmd))
186 return PTR_ERR(led->cmd);
188 led->slow = devm_fwnode_gpiod_get_index(dev, node, "slow", 0,
191 if (IS_ERR(led->slow))
192 return PTR_ERR(led->slow);
208 rwlock_init(&led->rw_lock);
210 led->cdev.blink_set = NULL;
211 led->cdev.flags |= LED_CORE_SUSPENDRESUME;
212 led->cdev.groups = ns2_led_groups;
213 led->can_sleep = gpiod_cansleep(led->cmd) || gpiod_cansleep(led->slow);
214 if (led->can_sleep)
215 led->cdev.brightness_set_blocking = ns2_led_set_blocking;
217 led->cdev.brightness_set = ns2_led_set;
218 led->num_modes = nmodes;
219 led->modval = modval;
221 ret = ns2_led_get_mode(led, &mode);
226 led->sata = (mode == NS_V2_LED_SATA) ? 1 : 0;
227 led->cdev.brightness = (mode == NS_V2_LED_OFF) ? LED_OFF : LED_FULL;
231 ret = devm_led_classdev_register_ext(dev, &led->cdev, &init_data);