Lines Matching +full:led +full:- +full:usb +full:- +full:mode
1 // SPDX-License-Identifier: GPL-2.0-only
9 #include <linux/mfd/qnap-mcu.h>
27 u8 mode; member
40 u8 cmd[] = { '@', 'R', '0' + err_led->num, '0' }; in qnap_mcu_err_led_set()
42 /* Don't disturb a possible set blink-mode if LED stays on */ in qnap_mcu_err_led_set()
43 if (brightness != 0 && err_led->mode >= QNAP_MCU_ERR_LED_BLINK_FAST) in qnap_mcu_err_led_set()
46 err_led->mode = brightness ? QNAP_MCU_ERR_LED_ON : QNAP_MCU_ERR_LED_OFF; in qnap_mcu_err_led_set()
47 cmd[3] = '0' + err_led->mode; in qnap_mcu_err_led_set()
49 return qnap_mcu_exec_with_ack(err_led->mcu, cmd, sizeof(cmd)); in qnap_mcu_err_led_set()
57 u8 cmd[] = { '@', 'R', '0' + err_led->num, '0' }; in qnap_mcu_err_led_blink_set()
59 /* LED is off, nothing to do */ in qnap_mcu_err_led_blink_set()
60 if (err_led->mode == QNAP_MCU_ERR_LED_OFF) in qnap_mcu_err_led_blink_set()
66 err_led->mode = QNAP_MCU_ERR_LED_BLINK_FAST; in qnap_mcu_err_led_blink_set()
70 err_led->mode = QNAP_MCU_ERR_LED_BLINK_SLOW; in qnap_mcu_err_led_blink_set()
73 cmd[3] = '0' + err_led->mode; in qnap_mcu_err_led_blink_set()
75 return qnap_mcu_exec_with_ack(err_led->mcu, cmd, sizeof(cmd)); in qnap_mcu_err_led_blink_set()
85 return -ENOMEM; in qnap_mcu_register_err_led()
87 err_led->mcu = mcu; in qnap_mcu_register_err_led()
88 err_led->num = num_err_led; in qnap_mcu_register_err_led()
89 err_led->mode = QNAP_MCU_ERR_LED_OFF; in qnap_mcu_register_err_led()
91 scnprintf(err_led->name, LED_MAX_NAME_SIZE, "hdd%d:red:status", num_err_led + 1); in qnap_mcu_register_err_led()
92 err_led->cdev.name = err_led->name; in qnap_mcu_register_err_led()
94 err_led->cdev.brightness_set_blocking = qnap_mcu_err_led_set; in qnap_mcu_register_err_led()
95 err_led->cdev.blink_set = qnap_mcu_err_led_blink_set; in qnap_mcu_register_err_led()
96 err_led->cdev.brightness = 0; in qnap_mcu_register_err_led()
97 err_led->cdev.max_brightness = 1; in qnap_mcu_register_err_led()
99 ret = devm_led_classdev_register(dev, &err_led->cdev); in qnap_mcu_register_err_led()
103 return qnap_mcu_err_led_set(&err_led->cdev, 0); in qnap_mcu_register_err_led()
115 u8 mode; member
130 /* Don't disturb a possible set blink-mode if LED stays on */ in qnap_mcu_usb_led_set()
131 if (brightness != 0 && usb_led->mode == QNAP_MCU_USB_LED_BLINK) in qnap_mcu_usb_led_set()
134 usb_led->mode = brightness ? QNAP_MCU_USB_LED_ON : QNAP_MCU_USB_LED_OFF; in qnap_mcu_usb_led_set()
137 * Byte 3 is shared between the usb led target on/off/blink in qnap_mcu_usb_led_set()
140 cmd[2] = 'D' + usb_led->mode; in qnap_mcu_usb_led_set()
142 return qnap_mcu_exec_with_ack(usb_led->mcu, cmd, sizeof(cmd)); in qnap_mcu_usb_led_set()
152 /* LED is off, nothing to do */ in qnap_mcu_usb_led_blink_set()
153 if (usb_led->mode == QNAP_MCU_USB_LED_OFF) in qnap_mcu_usb_led_blink_set()
158 usb_led->mode = QNAP_MCU_USB_LED_BLINK; in qnap_mcu_usb_led_blink_set()
161 * Byte 3 is shared between the USB LED target on/off/blink in qnap_mcu_usb_led_blink_set()
164 cmd[2] = 'D' + usb_led->mode; in qnap_mcu_usb_led_blink_set()
166 return qnap_mcu_exec_with_ack(usb_led->mcu, cmd, sizeof(cmd)); in qnap_mcu_usb_led_blink_set()
176 return -ENOMEM; in qnap_mcu_register_usb_led()
178 usb_led->mcu = mcu; in qnap_mcu_register_usb_led()
179 usb_led->mode = QNAP_MCU_USB_LED_OFF; in qnap_mcu_register_usb_led()
180 usb_led->cdev.name = "usb:blue:disk"; in qnap_mcu_register_usb_led()
181 usb_led->cdev.brightness_set_blocking = qnap_mcu_usb_led_set; in qnap_mcu_register_usb_led()
182 usb_led->cdev.blink_set = qnap_mcu_usb_led_blink_set; in qnap_mcu_register_usb_led()
183 usb_led->cdev.brightness = 0; in qnap_mcu_register_usb_led()
184 usb_led->cdev.max_brightness = 1; in qnap_mcu_register_usb_led()
186 ret = devm_led_classdev_register(dev, &usb_led->cdev); in qnap_mcu_register_usb_led()
190 return qnap_mcu_usb_led_set(&usb_led->cdev, 0); in qnap_mcu_register_usb_led()
195 struct qnap_mcu *mcu = dev_get_drvdata(pdev->dev.parent); in qnap_mcu_leds_probe()
196 const struct qnap_mcu_variant *variant = pdev->dev.platform_data; in qnap_mcu_leds_probe()
199 for (int i = 0; i < variant->num_drives; i++) { in qnap_mcu_leds_probe()
200 ret = qnap_mcu_register_err_led(&pdev->dev, mcu, i); in qnap_mcu_leds_probe()
202 return dev_err_probe(&pdev->dev, ret, in qnap_mcu_leds_probe()
203 "failed to register error LED %d\n", i); in qnap_mcu_leds_probe()
206 if (variant->usb_led) { in qnap_mcu_leds_probe()
207 ret = qnap_mcu_register_usb_led(&pdev->dev, mcu); in qnap_mcu_leds_probe()
209 return dev_err_probe(&pdev->dev, ret, in qnap_mcu_leds_probe()
210 "failed to register USB LED\n"); in qnap_mcu_leds_probe()
219 .name = "qnap-mcu-leds",
224 MODULE_ALIAS("platform:qnap-mcu-leds");