Hi Karol, This is a cumulative patch for the ASUS ACPI driver in order to add support the following ASUS laptops: * ASUS A6VA * ASUS M6A, M6V-B022P and M6V-8012P * ASUS W3030V * ASUS V6V * ASUS W5F The patch applies cleanly on top of Len's git tree and builds fine (tested with 2.6.17-git20 + Len's ACPI tree). The broken out patches can be found on [1]. If I recall correctly there have been patches being sent to the acpi4asus list to support even more models. Probably it would be good to consider them as addition to this patch before asking for inclusion. CC'ing the original authors of the individual patches. Please review. Thanks, Timo [1] Patches to support ASUS laptops A6VA, M6A, M6V, W3030V, V6V and W5F http://nouse.net/kernel/patches/asus_acpi --- a/drivers/acpi/asus_acpi.c 2006-07-02 12:21:35.000000000 +0200 +++ b/drivers/acpi/asus_acpi.c 2006-07-02 14:40:20.000000000 +0200 @@ -121,6 +121,7 @@ A1x = 0, //A1340D, A1300F A2x, //A2500H A4G, //A4700G + A6VA, //A6VA D1x, //D1 L2D, //L2000D L3C, //L3800C @@ -133,11 +134,15 @@ M2E, //M2400E, L4400L M6N, //M6800N, W3400N M6R, //M6700R, A3000G + M6V, //M6A, M6V-B022P, M6V-8012P P30, //Samsung P30 S1x, //S1300A, but also L1400B and M2400A (L84F) S2x, //S200 (J1 reported), Victor MP-XP7210 W1N, //W1000N + W3V, //W3030V W5A, //W5A + W5F, //W5F + V6V, //V6V xxN, //M2400N, M3700N, M5200N, M6800N, S1300N, S5200N //(Centrino) END_MODEL @@ -192,6 +197,17 @@ .display_get = "\\ADVG"}, { + .name = "A6VA", + .mt_mled = "MLED", + .mt_wled = "WLED", + .mt_lcd_switch = "\\Q11", + .lcd_status = "\\RGPL", + .brightness_set = "SPLV", + .brightness_get = "GPLV", + .display_set = "SDSP", + .display_get = "\\ADVG"}, + + { .name = "D1x", .mt_mled = "MLED", .mt_lcd_switch = "\\Q0D", @@ -324,6 +340,20 @@ .display_get = "\\_SB.PCI0.P0P1.VGA.GETD"}, { + .name = "M6V", + .mt_bt_switch = "BLED", + .mt_wled = "WLED", + .mt_mled = NULL, + .mt_lcd_switch = xxN_PREFIX "_Q10", + .bt_status = "\\_SB.PCI0.SBRG.BLTS", + .lcd_status = "\\RGPL", + .wled_status = "\\WLSF", + .display_get = "\\_SB.PCI0.P0P3.VGA.GETD", + .display_set = "SDSP", + .brightness_set = "SPLV", + .brightness_get = "GPLV"}, + + { .name = "P30", .mt_wled = "WLED", .mt_lcd_switch = P30_PREFIX "_Q0E", @@ -364,6 +394,17 @@ .brightness_get = "GPLV", .display_set = "SDSP", .display_get = "\\ADVG"}, + + { + .name = "W3V", + .mt_mled = "MLED", + .mt_wled = "WLED", + .mt_lcd_switch = xxN_PREFIX "_Q10", + .lcd_status = "\\BKLT", + .brightness_set = "SPLV", + .brightness_get = "GPLV", + .display_set = "SDSP", + .display_get = "\\INFB"}, { .name = "W5A", @@ -376,6 +417,30 @@ .display_get = "\\ADVG"}, { + .name = "W5F", + .mt_bt_switch = "BLED", + .mt_wled = "WLED", + .mt_tled = "TLED", + .mt_lcd_switch = xxN_PREFIX "_Q10", + .brightness_set = "SPLV", + .brightness_get = "GPLV", + .display_set = "SDSP", + .display_get = "\\ADVG"}, + + { + .name = "V6V", + .mt_bt_switch = "BLED", + .mt_wled = "WLED", + .mt_tled = "TLED", + .mt_lcd_switch = xxN_PREFIX "_Q10", + .bt_status = "\\_SB.PCI0.SBRG.BLTS", + .display_get = "\\_SB.PCI0.POP1.VGA.GETD", + .display_set = "SDSP", + .brightness_set = "SPLV", + .brightness_get = "GPLV", + .lcd_status = "\\BKLT"}, + + { .name = "xxN", .mt_mled = "MLED", /* WLED present, but not controlled by ACPI */ @@ -682,7 +747,7 @@ { int lcd = 0; - if (hotk->model != L3H) { + if (hotk->model != A6VA && hotk->model != M6V && hotk->model != L3H) { /* We don't have to check anything if we are here */ if (!read_acpi_int(NULL, hotk->methods->lcd_status, &lcd)) printk(KERN_WARNING @@ -702,9 +767,15 @@ /* Note: the following values are partly guessed up, but otherwise they seem to work */ mt_params[0].type = ACPI_TYPE_INTEGER; - mt_params[0].integer.value = 0x02; mt_params[1].type = ACPI_TYPE_INTEGER; - mt_params[1].integer.value = 0x02; + + if (hotk->model == A6VA || hotk->model == M6V) { + mt_params[0].integer.value = 0x15; + mt_params[1].integer.value = 0x01; + } else if (hotk->model == L3H) { + mt_params[0].integer.value = 0x02; + mt_params[1].integer.value = 0x02; + } output.length = sizeof(out_obj); output.pointer = &out_obj; @@ -714,9 +785,13 @@ &input, &output); if (status != AE_OK) return -1; - if (out_obj.type == ACPI_TYPE_INTEGER) + if (out_obj.type == ACPI_TYPE_INTEGER) { /* That's what the AML code does */ - lcd = out_obj.integer.value >> 8; + if (hotk->model == A6VA || hotk->model == M6V) + lcd = out_obj.integer.value; + else if (hotk->model == L3H) + lcd = out_obj.integer.value >> 8; + } } return (lcd & 1); @@ -1079,6 +1154,8 @@ return M1A; else if (strncmp(model, "M2", 2) == 0 || strncmp(model, "L4E", 3) == 0) return M2E; + else if (strncmp(model, "M6A", 3) == 0 || strncmp(model, "M6V", 3) == 0) + return M6V; else if (strncmp(model, "L2", 2) == 0) return L2D; else if (strncmp(model, "L8", 2) == 0) @@ -1089,6 +1166,8 @@ return A1x; else if (strncmp(model, "A2", 2) == 0) return A2x; + else if (strncmp(model, "A6VA", 4) == 0) + return A6VA; else if (strncmp(model, "J1", 2) == 0) return S2x; else if (strncmp(model, "L5", 2) == 0) @@ -1097,8 +1176,14 @@ return A4G; else if (strncmp(model, "W1N", 3) == 0) return W1N; + else if (strncmp(model, "W3V", 3) == 0) + return W3V; else if (strncmp(model, "W5A", 3) == 0) return W5A; + else if (strncmp(model, "W5F", 3) == 0) + return W5F; + else if (strncmp(model, "V6V", 3) == 0) + return V6V; else return END_MODEL; } @@ -1200,9 +1285,10 @@ hotk->methods->mt_wled = NULL; /* L5D's WLED is not controlled by ACPI */ else if (strncmp(string, "M2N", 3) == 0 || + strncmp(string, "W3V", 3) == 0 || strncmp(string, "S1N", 3) == 0) hotk->methods->mt_wled = "WLED"; - /* M2N and S1N have a usable WLED */ + /* M2N, S1N and W3V have a usable WLED */ else if (asus_info) { if (strncmp(asus_info->oem_table_id, "L1", 2) == 0) hotk->methods->mled_status = NULL; - To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html