aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/platform/x86/thinkpad_acpi.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/platform/x86/thinkpad_acpi.c')
-rw-r--r--drivers/platform/x86/thinkpad_acpi.c47
1 files changed, 28 insertions, 19 deletions
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
index a39f159d4f2f..29ad27346443 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -5009,11 +5009,7 @@ enum { /* For TPACPI_LED_OLD */
5009 5009
5010static enum led_access_mode led_supported; 5010static enum led_access_mode led_supported;
5011 5011
5012TPACPI_HANDLE(led, ec, "SLED", /* 570 */ 5012static acpi_handle led_handle;
5013 "SYSL", /* 600e/x, 770e, 770x, A21e, A2xm/p, */
5014 /* T20-22, X20-21 */
5015 "LED", /* all others */
5016 ); /* R30, R31 */
5017 5013
5018#define TPACPI_LED_NUMLEDS 16 5014#define TPACPI_LED_NUMLEDS 16
5019static struct tpacpi_led_classdev *tpacpi_leds; 5015static struct tpacpi_led_classdev *tpacpi_leds;
@@ -5273,6 +5269,32 @@ static const struct tpacpi_quirk led_useful_qtable[] __initconst = {
5273#undef TPACPI_LEDQ_IBM 5269#undef TPACPI_LEDQ_IBM
5274#undef TPACPI_LEDQ_LNV 5270#undef TPACPI_LEDQ_LNV
5275 5271
5272static enum led_access_mode __init led_init_detect_mode(void)
5273{
5274 acpi_status status;
5275
5276 if (tpacpi_is_ibm()) {
5277 /* 570 */
5278 status = acpi_get_handle(ec_handle, "SLED", &led_handle);
5279 if (ACPI_SUCCESS(status))
5280 return TPACPI_LED_570;
5281
5282 /* 600e/x, 770e, 770x, A21e, A2xm/p, T20-22, X20-21 */
5283 status = acpi_get_handle(ec_handle, "SYSL", &led_handle);
5284 if (ACPI_SUCCESS(status))
5285 return TPACPI_LED_OLD;
5286 }
5287
5288 /* most others */
5289 status = acpi_get_handle(ec_handle, "LED", &led_handle);
5290 if (ACPI_SUCCESS(status))
5291 return TPACPI_LED_NEW;
5292
5293 /* R30, R31, and unknown firmwares */
5294 led_handle = NULL;
5295 return TPACPI_LED_NONE;
5296}
5297
5276static int __init led_init(struct ibm_init_struct *iibm) 5298static int __init led_init(struct ibm_init_struct *iibm)
5277{ 5299{
5278 unsigned int i; 5300 unsigned int i;
@@ -5281,20 +5303,7 @@ static int __init led_init(struct ibm_init_struct *iibm)
5281 5303
5282 vdbg_printk(TPACPI_DBG_INIT, "initializing LED subdriver\n"); 5304 vdbg_printk(TPACPI_DBG_INIT, "initializing LED subdriver\n");
5283 5305
5284 TPACPI_ACPIHANDLE_INIT(led); 5306 led_supported = led_init_detect_mode();
5285
5286 if (!led_handle)
5287 /* led not supported on R30, R31 */
5288 led_supported = TPACPI_LED_NONE;
5289 else if (tpacpi_is_ibm() && strlencmp(led_path, "SLED") == 0)
5290 /* 570 */
5291 led_supported = TPACPI_LED_570;
5292 else if (tpacpi_is_ibm() && strlencmp(led_path, "SYSL") == 0)
5293 /* 600e/x, 770e, 770x, A21e, A2xm/p, T20-22, X20-21 */
5294 led_supported = TPACPI_LED_OLD;
5295 else
5296 /* all others */
5297 led_supported = TPACPI_LED_NEW;
5298 5307
5299 vdbg_printk(TPACPI_DBG_INIT, "LED commands are %s, mode %d\n", 5308 vdbg_printk(TPACPI_DBG_INIT, "LED commands are %s, mode %d\n",
5300 str_supported(led_supported), led_supported); 5309 str_supported(led_supported), led_supported);