| @@ -208,6 +208,7 @@ struct asus_wmi { · 207 unmodified lines |
| 208 | 208 | int kbd_led_wk; |
| 209 | 209 | struct led_classdev lightbar_led; |
| 210 | 210 | int lightbar_led_wk; |
| 211 | + struct led_classdev micmute_led; |
| 211 | 212 | struct workqueue_struct *led_workqueue; |
| 212 | 213 | struct work_struct tpd_led_work; |
| 213 | 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 | 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 | 1042 | static void asus_wmi_led_exit(struct asus_wmi *asus) |
| 1032 | 1043 | { |
| 1033 | 1044 | led_classdev_unregister(&asus->kbd_led); |
| 1034 | 1045 | led_classdev_unregister(&asus->tpd_led); |
| 1035 | 1046 | led_classdev_unregister(&asus->wlan_led); |
| 1036 | 1047 | led_classdev_unregister(&asus->lightbar_led); |
| 1048 | + led_classdev_unregister(&asus->micmute_led); |
| 1037 | 1049 | |
| 1038 | 1050 | if (asus->led_workqueue) |
| 1039 | 1051 | destroy_workqueue(asus->led_workqueue); |
| @@ -1105,6 +1117,19 @@ static int asus_wmi_led_init(struct asus_wmi *asus) · 65 unmodified lines |
| 1105 | 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 | 1133 | error: |
| 1109 | 1134 | if (rv) |
| 1110 | 1135 | asus_wmi_led_exit(asus); |