diff -ru linux-3.7/drivers/input/keyboard/atkbd.c linux-3.7-mod/drivers/input/keyboard/atkbd.c --- linux-3.7/drivers/input/keyboard/atkbd.c 2012-12-11 04:30:57.000000000 +0100 +++ linux-3.7-mod/drivers/input/keyboard/atkbd.c 2013-02-10 18:29:48.582114753 +0100 @@ -548,6 +548,24 @@ return ps2_command(&atkbd->ps2dev, ¶m, ATKBD_CMD_SETREP); } +/* Using the filesystem like this is almost 100% the wrong way to do things. */ +static void set_mic_mute_led(int on) +{ + struct file *filp; + loff_t offset; + + filp = filp_open("/sys/devices/platform/thinkpad_acpi/leds/tpacpi::micmute/brightness", O_RDWR, 0); + if (IS_ERR(filp)) + return; + offset = 0; + if (on) + vfs_write(filp, "255\n", 4, &offset); + else + vfs_write(filp, "0\n", 2, &offset); + generic_file_fsync(filp, 0, offset, 0); + filp_close(filp, NULL); +} + static int atkbd_set_leds(struct atkbd *atkbd) { struct input_dev *dev = atkbd->dev; @@ -558,6 +576,8 @@ | (test_bit(LED_CAPSL, dev->led) ? 4 : 0); if (ps2_command(&atkbd->ps2dev, param, ATKBD_CMD_SETLEDS)) return -1; + + set_mic_mute_led(test_bit(LED_CAPSL, dev->led)); if (atkbd->extra) { param[0] = 0;