| @@ -208,6 +208,7 @@ struct asus_wmi { · 207 unmodified lines |
| 208 | int kbd_led_wk; | 208 | int kbd_led_wk; |
| 209 | struct led_classdev lightbar_led; | 209 | struct led_classdev lightbar_led; |
| 210 | int lightbar_led_wk; | 210 | int lightbar_led_wk; |
| | 211 | struct led_classdev micmute_led; |
| 211 | struct workqueue_struct *led_workqueue; | 212 | struct workqueue_struct *led_workqueue; |
| 212 | struct work_struct tpd_led_work; | 213 | struct work_struct tpd_led_work; |
| 213 | struct work_struct wlan_led_work; | 214 | struct work_struct wlan_led_work; |
| @@ -1028,12 +1029,23 @@ static enum led_brightness lightbar_led_get(struct led_classdev *led_cdev) · 814 unmodified lines |
| 1028 | return result & ASUS_WMI_DSTS_LIGHTBAR_MASK; | 1029 | return result & ASUS_WMI_DSTS_LIGHTBAR_MASK; |
| 1029 | } | 1030 | } |
| 1030 | | 1031 | |
| | 1032 | static int micmute_led_set(struct led_classdev *led_cdev, |
| | 1033 | enum led_brightness brightness) |
| | 1034 | { |
| | 1035 | int state = brightness != LED_OFF; |
| | 1036 | int err; |
| | 1037 | |
| | 1038 | err = asus_wmi_set_devstate(ASUS_WMI_DEVID_MICMUTE_LED, state, NULL); |
| | 1039 | return err < 0 ? err : 0; |
| | 1040 | } |
| | 1041 | |
| 1031 | static void asus_wmi_led_exit(struct asus_wmi *asus) | 1042 | static void asus_wmi_led_exit(struct asus_wmi *asus) |
| 1032 | { | 1043 | { |
| 1033 | led_classdev_unregister(&asus->kbd_led); | 1044 | led_classdev_unregister(&asus->kbd_led); |
| 1034 | led_classdev_unregister(&asus->tpd_led); | 1045 | led_classdev_unregister(&asus->tpd_led); |
| 1035 | led_classdev_unregister(&asus->wlan_led); | 1046 | led_classdev_unregister(&asus->wlan_led); |
| 1036 | led_classdev_unregister(&asus->lightbar_led); | 1047 | led_classdev_unregister(&asus->lightbar_led); |
| | 1048 | led_classdev_unregister(&asus->micmute_led); |
| 1037 | | 1049 | |
| 1038 | if (asus->led_workqueue) | 1050 | if (asus->led_workqueue) |
| 1039 | destroy_workqueue(asus->led_workqueue); | 1051 | destroy_workqueue(asus->led_workqueue); |
| @@ -1105,6 +1117,19 @@ static int asus_wmi_led_init(struct asus_wmi *asus) · 65 unmodified lines |
| 1105 | &asus->lightbar_led); | 1117 | &asus->lightbar_led); |
| 1106 | } | 1118 | } |
| 1107 | | 1119 | |
| | 1120 | if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_MICMUTE_LED)) { |
| | 1121 | asus->micmute_led.name = "asus::micmute"; |
| | 1122 | asus->micmute_led.max_brightness = 1; |
| | 1123 | asus->micmute_led.brightness = ledtrig_audio_get(LED_AUDIO_MICMUTE); |
| | 1124 | asus->micmute_led.brightness_set_blocking = micmute_led_set; |
| | 1125 | asus->micmute_led.default_trigger = "audio-micmute"; |
| | 1126 | |
| | 1127 | rv = led_classdev_register(&asus->platform_device->dev, |
| | 1128 | &asus->micmute_led); |
| | 1129 | if (rv) |
| | 1130 | goto error; |
| | 1131 | } |
| | 1132 | |
| 1108 | error: | 1133 | error: |
| 1109 | if (rv) | 1134 | if (rv) |
| 1110 | asus_wmi_led_exit(asus); | 1135 | asus_wmi_led_exit(asus); |