瀏覽代碼

thinkpad-acpi: document HKEY event 3006

Event 0x3006 is used to help power management of the ODD in the
UltraBay.  The EC generates this event when the ODD eject button is
pressed (even if the bay is powered down).

Normally, Linux doesn't need this as we keep the SATA link powered
up (which wastes power).  The EC powers up the bay by itself when the
ODD eject button is pressed, and the SATA PHY reports the hotplug.

However, we could also power that SATA link down (and for that matter,
also power down the Ultrabay) if the ODD is left idle for a while with
no disk inside, and use event 0x3006 to know when we need that SATA link
powered back up.

For now, just stop asking for more information when event 0x3006 is
seen, there is no point in pestering users about it anymore.

Signed-off-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
Cc: stable@kernel.org
Henrique de Moraes Holschuh 15 年之前
父節點
當前提交
bf8b29c8f7
共有 1 個文件被更改,包括 8 次插入2 次删除
  1. 8 2
      drivers/platform/x86/thinkpad_acpi.c

+ 8 - 2
drivers/platform/x86/thinkpad_acpi.c

@@ -3655,13 +3655,19 @@ static void hotkey_notify(struct ibm_struct *ibm, u32 event)
 			break;
 			break;
 		case 3:
 		case 3:
 			/* 0x3000-0x3FFF: bay-related wakeups */
 			/* 0x3000-0x3FFF: bay-related wakeups */
-			if (hkey == TP_HKEY_EV_BAYEJ_ACK) {
+			switch (hkey) {
+			case TP_HKEY_EV_BAYEJ_ACK:
 				hotkey_autosleep_ack = 1;
 				hotkey_autosleep_ack = 1;
 				printk(TPACPI_INFO
 				printk(TPACPI_INFO
 				       "bay ejected\n");
 				       "bay ejected\n");
 				hotkey_wakeup_hotunplug_complete_notify_change();
 				hotkey_wakeup_hotunplug_complete_notify_change();
 				known_ev = true;
 				known_ev = true;
-			} else {
+				break;
+			case TP_HKEY_EV_OPTDRV_EJ:
+				/* FIXME: kick libata if SATA link offline */
+				known_ev = true;
+				break;
+			default:
 				known_ev = false;
 				known_ev = false;
 			}
 			}
 			break;
 			break;