diff options
Diffstat (limited to 'drivers/acpi/ibm_acpi.c')
-rw-r--r-- | drivers/acpi/ibm_acpi.c | 83 |
1 files changed, 80 insertions, 3 deletions
diff --git a/drivers/acpi/ibm_acpi.c b/drivers/acpi/ibm_acpi.c index 5cc090326ddc..15fc12482ba0 100644 --- a/drivers/acpi/ibm_acpi.c +++ b/drivers/acpi/ibm_acpi.c | |||
@@ -160,13 +160,13 @@ IBM_HANDLE(cmos, root, "\\UCMS", /* R50, R50e, R50p, R51, T4x, X31, X40 */ | |||
160 | "\\CMOS", /* A3x, G4x, R32, T23, T30, X22-24, X30 */ | 160 | "\\CMOS", /* A3x, G4x, R32, T23, T30, X22-24, X30 */ |
161 | "\\CMS", /* R40, R40e */ | 161 | "\\CMS", /* R40, R40e */ |
162 | ); /* all others */ | 162 | ); /* all others */ |
163 | 163 | #ifdef CONFIG_ACPI_IBM_DOCK | |
164 | IBM_HANDLE(dock, root, "\\_SB.GDCK", /* X30, X31, X40 */ | 164 | IBM_HANDLE(dock, root, "\\_SB.GDCK", /* X30, X31, X40 */ |
165 | "\\_SB.PCI0.DOCK", /* 600e/x,770e,770x,A2xm/p,T20-22,X20-21 */ | 165 | "\\_SB.PCI0.DOCK", /* 600e/x,770e,770x,A2xm/p,T20-22,X20-21 */ |
166 | "\\_SB.PCI0.PCI1.DOCK", /* all others */ | 166 | "\\_SB.PCI0.PCI1.DOCK", /* all others */ |
167 | "\\_SB.PCI.ISA.SLCE", /* 570 */ | 167 | "\\_SB.PCI.ISA.SLCE", /* 570 */ |
168 | ); /* A21e,G4x,R30,R31,R32,R40,R40e,R50e */ | 168 | ); /* A21e,G4x,R30,R31,R32,R40,R40e,R50e */ |
169 | 169 | #endif | |
170 | IBM_HANDLE(bay, root, "\\_SB.PCI.IDE.SECN.MAST", /* 570 */ | 170 | IBM_HANDLE(bay, root, "\\_SB.PCI.IDE.SECN.MAST", /* 570 */ |
171 | "\\_SB.PCI0.IDE0.IDES.IDSM", /* 600e/x, 770e, 770x */ | 171 | "\\_SB.PCI0.IDE0.IDES.IDSM", /* 600e/x, 770e, 770x */ |
172 | "\\_SB.PCI0.IDE0.SCND.MSTR", /* all others */ | 172 | "\\_SB.PCI0.IDE0.SCND.MSTR", /* all others */ |
@@ -567,6 +567,69 @@ static int bluetooth_write(char *buf) | |||
567 | return 0; | 567 | return 0; |
568 | } | 568 | } |
569 | 569 | ||
570 | static int wan_supported; | ||
571 | |||
572 | static int wan_init(void) | ||
573 | { | ||
574 | wan_supported = hkey_handle && | ||
575 | acpi_evalf(hkey_handle, NULL, "GWAN", "qv"); | ||
576 | |||
577 | return 0; | ||
578 | } | ||
579 | |||
580 | static int wan_status(void) | ||
581 | { | ||
582 | int status; | ||
583 | |||
584 | if (!wan_supported || | ||
585 | !acpi_evalf(hkey_handle, &status, "GWAN", "d")) | ||
586 | status = 0; | ||
587 | |||
588 | return status; | ||
589 | } | ||
590 | |||
591 | static int wan_read(char *p) | ||
592 | { | ||
593 | int len = 0; | ||
594 | int status = wan_status(); | ||
595 | |||
596 | if (!wan_supported) | ||
597 | len += sprintf(p + len, "status:\t\tnot supported\n"); | ||
598 | else if (!(status & 1)) | ||
599 | len += sprintf(p + len, "status:\t\tnot installed\n"); | ||
600 | else { | ||
601 | len += sprintf(p + len, "status:\t\t%s\n", enabled(status, 1)); | ||
602 | len += sprintf(p + len, "commands:\tenable, disable\n"); | ||
603 | } | ||
604 | |||
605 | return len; | ||
606 | } | ||
607 | |||
608 | static int wan_write(char *buf) | ||
609 | { | ||
610 | int status = wan_status(); | ||
611 | char *cmd; | ||
612 | int do_cmd = 0; | ||
613 | |||
614 | if (!wan_supported) | ||
615 | return -ENODEV; | ||
616 | |||
617 | while ((cmd = next_cmd(&buf))) { | ||
618 | if (strlencmp(cmd, "enable") == 0) { | ||
619 | status |= 2; | ||
620 | } else if (strlencmp(cmd, "disable") == 0) { | ||
621 | status &= ~2; | ||
622 | } else | ||
623 | return -EINVAL; | ||
624 | do_cmd = 1; | ||
625 | } | ||
626 | |||
627 | if (do_cmd && !acpi_evalf(hkey_handle, NULL, "SWAN", "vd", status)) | ||
628 | return -EIO; | ||
629 | |||
630 | return 0; | ||
631 | } | ||
632 | |||
570 | static int video_supported; | 633 | static int video_supported; |
571 | static int video_orig_autosw; | 634 | static int video_orig_autosw; |
572 | 635 | ||
@@ -844,7 +907,7 @@ static int _sta(acpi_handle handle) | |||
844 | 907 | ||
845 | return status; | 908 | return status; |
846 | } | 909 | } |
847 | 910 | #ifdef CONFIG_ACPI_IBM_DOCK | |
848 | #define dock_docked() (_sta(dock_handle) & 1) | 911 | #define dock_docked() (_sta(dock_handle) & 1) |
849 | 912 | ||
850 | static int dock_read(char *p) | 913 | static int dock_read(char *p) |
@@ -907,6 +970,7 @@ static void dock_notify(struct ibm_struct *ibm, u32 event) | |||
907 | acpi_bus_generate_event(ibm->device, event, 0); /* unknown */ | 970 | acpi_bus_generate_event(ibm->device, event, 0); /* unknown */ |
908 | } | 971 | } |
909 | } | 972 | } |
973 | #endif | ||
910 | 974 | ||
911 | static int bay_status_supported; | 975 | static int bay_status_supported; |
912 | static int bay_status2_supported; | 976 | static int bay_status2_supported; |
@@ -1562,6 +1626,13 @@ static struct ibm_struct ibms[] = { | |||
1562 | .write = bluetooth_write, | 1626 | .write = bluetooth_write, |
1563 | }, | 1627 | }, |
1564 | { | 1628 | { |
1629 | .name = "wan", | ||
1630 | .init = wan_init, | ||
1631 | .read = wan_read, | ||
1632 | .write = wan_write, | ||
1633 | .experimental = 1, | ||
1634 | }, | ||
1635 | { | ||
1565 | .name = "video", | 1636 | .name = "video", |
1566 | .init = video_init, | 1637 | .init = video_init, |
1567 | .read = video_read, | 1638 | .read = video_read, |
@@ -1574,6 +1645,7 @@ static struct ibm_struct ibms[] = { | |||
1574 | .read = light_read, | 1645 | .read = light_read, |
1575 | .write = light_write, | 1646 | .write = light_write, |
1576 | }, | 1647 | }, |
1648 | #ifdef CONFIG_ACPI_IBM_DOCK | ||
1577 | { | 1649 | { |
1578 | .name = "dock", | 1650 | .name = "dock", |
1579 | .read = dock_read, | 1651 | .read = dock_read, |
@@ -1589,6 +1661,7 @@ static struct ibm_struct ibms[] = { | |||
1589 | .handle = &pci_handle, | 1661 | .handle = &pci_handle, |
1590 | .type = ACPI_SYSTEM_NOTIFY, | 1662 | .type = ACPI_SYSTEM_NOTIFY, |
1591 | }, | 1663 | }, |
1664 | #endif | ||
1592 | { | 1665 | { |
1593 | .name = "bay", | 1666 | .name = "bay", |
1594 | .init = bay_init, | 1667 | .init = bay_init, |
@@ -1880,7 +1953,9 @@ IBM_PARAM(hotkey); | |||
1880 | IBM_PARAM(bluetooth); | 1953 | IBM_PARAM(bluetooth); |
1881 | IBM_PARAM(video); | 1954 | IBM_PARAM(video); |
1882 | IBM_PARAM(light); | 1955 | IBM_PARAM(light); |
1956 | #ifdef CONFIG_ACPI_IBM_DOCK | ||
1883 | IBM_PARAM(dock); | 1957 | IBM_PARAM(dock); |
1958 | #endif | ||
1884 | IBM_PARAM(bay); | 1959 | IBM_PARAM(bay); |
1885 | IBM_PARAM(cmos); | 1960 | IBM_PARAM(cmos); |
1886 | IBM_PARAM(led); | 1961 | IBM_PARAM(led); |
@@ -1927,7 +2002,9 @@ static int __init acpi_ibm_init(void) | |||
1927 | IBM_HANDLE_INIT(hkey); | 2002 | IBM_HANDLE_INIT(hkey); |
1928 | IBM_HANDLE_INIT(lght); | 2003 | IBM_HANDLE_INIT(lght); |
1929 | IBM_HANDLE_INIT(cmos); | 2004 | IBM_HANDLE_INIT(cmos); |
2005 | #ifdef CONFIG_ACPI_IBM_DOCK | ||
1930 | IBM_HANDLE_INIT(dock); | 2006 | IBM_HANDLE_INIT(dock); |
2007 | #endif | ||
1931 | IBM_HANDLE_INIT(pci); | 2008 | IBM_HANDLE_INIT(pci); |
1932 | IBM_HANDLE_INIT(bay); | 2009 | IBM_HANDLE_INIT(bay); |
1933 | if (bay_handle) | 2010 | if (bay_handle) |