diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/acpi/asus_acpi.c | 67 |
1 files changed, 37 insertions, 30 deletions
diff --git a/drivers/acpi/asus_acpi.c b/drivers/acpi/asus_acpi.c index e9ee4c52a5f6..c7ac9297a204 100644 --- a/drivers/acpi/asus_acpi.c +++ b/drivers/acpi/asus_acpi.c | |||
| @@ -138,6 +138,7 @@ struct asus_hotk { | |||
| 138 | S2x, //S200 (J1 reported), Victor MP-XP7210 | 138 | S2x, //S200 (J1 reported), Victor MP-XP7210 |
| 139 | W1N, //W1000N | 139 | W1N, //W1000N |
| 140 | W5A, //W5A | 140 | W5A, //W5A |
| 141 | W3V, //W3030V | ||
| 141 | xxN, //M2400N, M3700N, M5200N, M6800N, S1300N, S5200N | 142 | xxN, //M2400N, M3700N, M5200N, M6800N, S1300N, S5200N |
| 142 | //(Centrino) | 143 | //(Centrino) |
| 143 | END_MODEL | 144 | END_MODEL |
| @@ -376,6 +377,17 @@ static struct model_data model_conf[END_MODEL] = { | |||
| 376 | .display_get = "\\ADVG"}, | 377 | .display_get = "\\ADVG"}, |
| 377 | 378 | ||
| 378 | { | 379 | { |
| 380 | .name = "W3V", | ||
| 381 | .mt_mled = "MLED", | ||
| 382 | .mt_wled = "WLED", | ||
| 383 | .mt_lcd_switch = xxN_PREFIX "_Q10", | ||
| 384 | .lcd_status = "\\BKLT", | ||
| 385 | .brightness_set = "SPLV", | ||
| 386 | .brightness_get = "GPLV", | ||
| 387 | .display_set = "SDSP", | ||
| 388 | .display_get = "\\INFB"}, | ||
| 389 | |||
| 390 | { | ||
| 379 | .name = "xxN", | 391 | .name = "xxN", |
| 380 | .mt_mled = "MLED", | 392 | .mt_mled = "MLED", |
| 381 | /* WLED present, but not controlled by ACPI */ | 393 | /* WLED present, but not controlled by ACPI */ |
| @@ -555,11 +567,11 @@ static int | |||
| 555 | write_led(const char __user * buffer, unsigned long count, | 567 | write_led(const char __user * buffer, unsigned long count, |
| 556 | char *ledname, int ledmask, int invert) | 568 | char *ledname, int ledmask, int invert) |
| 557 | { | 569 | { |
| 558 | int value; | 570 | int rv, value; |
| 559 | int led_out = 0; | 571 | int led_out = 0; |
| 560 | 572 | ||
| 561 | count = parse_arg(buffer, count, &value); | 573 | rv = parse_arg(buffer, count, &value); |
| 562 | if (count > 0) | 574 | if (rv > 0) |
| 563 | led_out = value ? 1 : 0; | 575 | led_out = value ? 1 : 0; |
| 564 | 576 | ||
| 565 | hotk->status = | 577 | hotk->status = |
| @@ -572,7 +584,7 @@ write_led(const char __user * buffer, unsigned long count, | |||
| 572 | printk(KERN_WARNING "Asus ACPI: LED (%s) write failed\n", | 584 | printk(KERN_WARNING "Asus ACPI: LED (%s) write failed\n", |
| 573 | ledname); | 585 | ledname); |
| 574 | 586 | ||
| 575 | return count; | 587 | return rv; |
| 576 | } | 588 | } |
| 577 | 589 | ||
| 578 | /* | 590 | /* |
| @@ -607,20 +619,18 @@ static int | |||
| 607 | proc_write_ledd(struct file *file, const char __user * buffer, | 619 | proc_write_ledd(struct file *file, const char __user * buffer, |
| 608 | unsigned long count, void *data) | 620 | unsigned long count, void *data) |
| 609 | { | 621 | { |
| 610 | int value; | 622 | int rv, value; |
| 611 | 623 | ||
| 612 | count = parse_arg(buffer, count, &value); | 624 | rv = parse_arg(buffer, count, &value); |
| 613 | if (count > 0) { | 625 | if (rv > 0) { |
| 614 | if (!write_acpi_int | 626 | if (!write_acpi_int |
| 615 | (hotk->handle, hotk->methods->mt_ledd, value, NULL)) | 627 | (hotk->handle, hotk->methods->mt_ledd, value, NULL)) |
| 616 | printk(KERN_WARNING | 628 | printk(KERN_WARNING |
| 617 | "Asus ACPI: LED display write failed\n"); | 629 | "Asus ACPI: LED display write failed\n"); |
| 618 | else | 630 | else |
| 619 | hotk->ledd_status = (u32) value; | 631 | hotk->ledd_status = (u32) value; |
| 620 | } else if (count < 0) | 632 | } |
| 621 | printk(KERN_WARNING "Asus ACPI: Error reading user input\n"); | 633 | return rv; |
| 622 | |||
| 623 | return count; | ||
| 624 | } | 634 | } |
| 625 | 635 | ||
| 626 | /* | 636 | /* |
| @@ -761,12 +771,12 @@ static int | |||
| 761 | proc_write_lcd(struct file *file, const char __user * buffer, | 771 | proc_write_lcd(struct file *file, const char __user * buffer, |
| 762 | unsigned long count, void *data) | 772 | unsigned long count, void *data) |
| 763 | { | 773 | { |
| 764 | int value; | 774 | int rv, value; |
| 765 | 775 | ||
| 766 | count = parse_arg(buffer, count, &value); | 776 | rv = parse_arg(buffer, count, &value); |
| 767 | if (count > 0) | 777 | if (rv > 0) |
| 768 | set_lcd_state(value); | 778 | set_lcd_state(value); |
| 769 | return count; | 779 | return rv; |
| 770 | } | 780 | } |
| 771 | 781 | ||
| 772 | static int read_brightness(void) | 782 | static int read_brightness(void) |
| @@ -830,18 +840,15 @@ static int | |||
| 830 | proc_write_brn(struct file *file, const char __user * buffer, | 840 | proc_write_brn(struct file *file, const char __user * buffer, |
| 831 | unsigned long count, void *data) | 841 | unsigned long count, void *data) |
| 832 | { | 842 | { |
| 833 | int value; | 843 | int rv, value; |
| 834 | 844 | ||
| 835 | count = parse_arg(buffer, count, &value); | 845 | rv = parse_arg(buffer, count, &value); |
| 836 | if (count > 0) { | 846 | if (rv > 0) { |
| 837 | value = (0 < value) ? ((15 < value) ? 15 : value) : 0; | 847 | value = (0 < value) ? ((15 < value) ? 15 : value) : 0; |
| 838 | /* 0 <= value <= 15 */ | 848 | /* 0 <= value <= 15 */ |
| 839 | set_brightness(value); | 849 | set_brightness(value); |
| 840 | } else if (count < 0) { | ||
| 841 | printk(KERN_WARNING "Asus ACPI: Error reading user input\n"); | ||
| 842 | } | 850 | } |
| 843 | 851 | return rv; | |
| 844 | return count; | ||
| 845 | } | 852 | } |
| 846 | 853 | ||
| 847 | static void set_display(int value) | 854 | static void set_display(int value) |
| @@ -880,15 +887,12 @@ static int | |||
| 880 | proc_write_disp(struct file *file, const char __user * buffer, | 887 | proc_write_disp(struct file *file, const char __user * buffer, |
| 881 | unsigned long count, void *data) | 888 | unsigned long count, void *data) |
| 882 | { | 889 | { |
| 883 | int value; | 890 | int rv, value; |
| 884 | 891 | ||
| 885 | count = parse_arg(buffer, count, &value); | 892 | rv = parse_arg(buffer, count, &value); |
| 886 | if (count > 0) | 893 | if (rv > 0) |
| 887 | set_display(value); | 894 | set_display(value); |
| 888 | else if (count < 0) | 895 | return rv; |
| 889 | printk(KERN_WARNING "Asus ACPI: Error reading user input\n"); | ||
| 890 | |||
| 891 | return count; | ||
| 892 | } | 896 | } |
| 893 | 897 | ||
| 894 | typedef int (proc_readfunc) (char *page, char **start, off_t off, int count, | 898 | typedef int (proc_readfunc) (char *page, char **start, off_t off, int count, |
| @@ -1097,6 +1101,8 @@ static int asus_model_match(char *model) | |||
| 1097 | return A4G; | 1101 | return A4G; |
| 1098 | else if (strncmp(model, "W1N", 3) == 0) | 1102 | else if (strncmp(model, "W1N", 3) == 0) |
| 1099 | return W1N; | 1103 | return W1N; |
| 1104 | else if (strncmp(model, "W3V", 3) == 0) | ||
| 1105 | return W3V; | ||
| 1100 | else if (strncmp(model, "W5A", 3) == 0) | 1106 | else if (strncmp(model, "W5A", 3) == 0) |
| 1101 | return W5A; | 1107 | return W5A; |
| 1102 | else | 1108 | else |
| @@ -1200,9 +1206,10 @@ static int asus_hotk_get_info(void) | |||
| 1200 | hotk->methods->mt_wled = NULL; | 1206 | hotk->methods->mt_wled = NULL; |
| 1201 | /* L5D's WLED is not controlled by ACPI */ | 1207 | /* L5D's WLED is not controlled by ACPI */ |
| 1202 | else if (strncmp(string, "M2N", 3) == 0 || | 1208 | else if (strncmp(string, "M2N", 3) == 0 || |
| 1209 | strncmp(string, "W3V", 3) == 0 || | ||
| 1203 | strncmp(string, "S1N", 3) == 0) | 1210 | strncmp(string, "S1N", 3) == 0) |
| 1204 | hotk->methods->mt_wled = "WLED"; | 1211 | hotk->methods->mt_wled = "WLED"; |
| 1205 | /* M2N and S1N have a usable WLED */ | 1212 | /* M2N, S1N and W3V have a usable WLED */ |
| 1206 | else if (asus_info) { | 1213 | else if (asus_info) { |
| 1207 | if (strncmp(asus_info->oem_table_id, "L1", 2) == 0) | 1214 | if (strncmp(asus_info->oem_table_id, "L1", 2) == 0) |
| 1208 | hotk->methods->mled_status = NULL; | 1215 | hotk->methods->mled_status = NULL; |
