diff options
| -rw-r--r-- | drivers/acpi/blacklist.c | 17 | ||||
| -rw-r--r-- | drivers/platform/x86/thinkpad_acpi.c | 26 |
2 files changed, 36 insertions, 7 deletions
diff --git a/drivers/acpi/blacklist.c b/drivers/acpi/blacklist.c index e56b2a7b53db..23e5a0519af5 100644 --- a/drivers/acpi/blacklist.c +++ b/drivers/acpi/blacklist.c | |||
| @@ -224,6 +224,7 @@ static struct dmi_system_id acpi_osi_dmi_table[] __initdata = { | |||
| 224 | * _OSI(Linux) helps sound | 224 | * _OSI(Linux) helps sound |
| 225 | * DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad R61"), | 225 | * DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad R61"), |
| 226 | * DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T61"), | 226 | * DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T61"), |
| 227 | * T400, T500 | ||
| 227 | * _OSI(Linux) has Linux specific hooks | 228 | * _OSI(Linux) has Linux specific hooks |
| 228 | * DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad X61"), | 229 | * DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad X61"), |
| 229 | * _OSI(Linux) is a NOP: | 230 | * _OSI(Linux) is a NOP: |
| @@ -254,6 +255,22 @@ static struct dmi_system_id acpi_osi_dmi_table[] __initdata = { | |||
| 254 | DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad X61"), | 255 | DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad X61"), |
| 255 | }, | 256 | }, |
| 256 | }, | 257 | }, |
| 258 | { | ||
| 259 | .callback = dmi_enable_osi_linux, | ||
| 260 | .ident = "Lenovo ThinkPad T400", | ||
| 261 | .matches = { | ||
| 262 | DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), | ||
| 263 | DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T400"), | ||
| 264 | }, | ||
| 265 | }, | ||
| 266 | { | ||
| 267 | .callback = dmi_enable_osi_linux, | ||
| 268 | .ident = "Lenovo ThinkPad T500", | ||
| 269 | .matches = { | ||
| 270 | DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), | ||
| 271 | DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T500"), | ||
| 272 | }, | ||
| 273 | }, | ||
| 257 | {} | 274 | {} |
| 258 | }; | 275 | }; |
| 259 | 276 | ||
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c index d93108d148fc..a848c7e20aeb 100644 --- a/drivers/platform/x86/thinkpad_acpi.c +++ b/drivers/platform/x86/thinkpad_acpi.c | |||
| @@ -1680,36 +1680,48 @@ static void tpacpi_remove_driver_attributes(struct device_driver *drv) | |||
| 1680 | | (__bv1) << 8 | (__bv2) } | 1680 | | (__bv1) << 8 | (__bv2) } |
| 1681 | 1681 | ||
| 1682 | #define TPV_Q_X(__v, __bid1, __bid2, __bv1, __bv2, \ | 1682 | #define TPV_Q_X(__v, __bid1, __bid2, __bv1, __bv2, \ |
| 1683 | __eid1, __eid2, __ev1, __ev2) \ | 1683 | __eid, __ev1, __ev2) \ |
| 1684 | { .vendor = (__v), \ | 1684 | { .vendor = (__v), \ |
| 1685 | .bios = TPID(__bid1, __bid2), \ | 1685 | .bios = TPID(__bid1, __bid2), \ |
| 1686 | .ec = TPID(__eid1, __eid2), \ | 1686 | .ec = __eid, \ |
| 1687 | .quirks = (__ev1) << 24 | (__ev2) << 16 \ | 1687 | .quirks = (__ev1) << 24 | (__ev2) << 16 \ |
| 1688 | | (__bv1) << 8 | (__bv2) } | 1688 | | (__bv1) << 8 | (__bv2) } |
| 1689 | 1689 | ||
| 1690 | #define TPV_QI0(__id1, __id2, __bv1, __bv2) \ | 1690 | #define TPV_QI0(__id1, __id2, __bv1, __bv2) \ |
| 1691 | TPV_Q(PCI_VENDOR_ID_IBM, __id1, __id2, __bv1, __bv2) | 1691 | TPV_Q(PCI_VENDOR_ID_IBM, __id1, __id2, __bv1, __bv2) |
| 1692 | 1692 | ||
| 1693 | /* Outdated IBM BIOSes often lack the EC id string */ | ||
| 1693 | #define TPV_QI1(__id1, __id2, __bv1, __bv2, __ev1, __ev2) \ | 1694 | #define TPV_QI1(__id1, __id2, __bv1, __bv2, __ev1, __ev2) \ |
| 1694 | TPV_Q_X(PCI_VENDOR_ID_IBM, __id1, __id2, \ | 1695 | TPV_Q_X(PCI_VENDOR_ID_IBM, __id1, __id2, \ |
| 1695 | __bv1, __bv2, __id1, __id2, __ev1, __ev2) | 1696 | __bv1, __bv2, TPID(__id1, __id2), \ |
| 1697 | __ev1, __ev2), \ | ||
| 1698 | TPV_Q_X(PCI_VENDOR_ID_IBM, __id1, __id2, \ | ||
| 1699 | __bv1, __bv2, TPACPI_MATCH_UNKNOWN, \ | ||
| 1700 | __ev1, __ev2) | ||
| 1696 | 1701 | ||
| 1702 | /* Outdated IBM BIOSes often lack the EC id string */ | ||
| 1697 | #define TPV_QI2(__bid1, __bid2, __bv1, __bv2, \ | 1703 | #define TPV_QI2(__bid1, __bid2, __bv1, __bv2, \ |
| 1698 | __eid1, __eid2, __ev1, __ev2) \ | 1704 | __eid1, __eid2, __ev1, __ev2) \ |
| 1699 | TPV_Q_X(PCI_VENDOR_ID_IBM, __bid1, __bid2, \ | 1705 | TPV_Q_X(PCI_VENDOR_ID_IBM, __bid1, __bid2, \ |
| 1700 | __bv1, __bv2, __eid1, __eid2, __ev1, __ev2) | 1706 | __bv1, __bv2, TPID(__eid1, __eid2), \ |
| 1707 | __ev1, __ev2), \ | ||
| 1708 | TPV_Q_X(PCI_VENDOR_ID_IBM, __bid1, __bid2, \ | ||
| 1709 | __bv1, __bv2, TPACPI_MATCH_UNKNOWN, \ | ||
| 1710 | __ev1, __ev2) | ||
| 1701 | 1711 | ||
| 1702 | #define TPV_QL0(__id1, __id2, __bv1, __bv2) \ | 1712 | #define TPV_QL0(__id1, __id2, __bv1, __bv2) \ |
| 1703 | TPV_Q(PCI_VENDOR_ID_LENOVO, __id1, __id2, __bv1, __bv2) | 1713 | TPV_Q(PCI_VENDOR_ID_LENOVO, __id1, __id2, __bv1, __bv2) |
| 1704 | 1714 | ||
| 1705 | #define TPV_QL1(__id1, __id2, __bv1, __bv2, __ev1, __ev2) \ | 1715 | #define TPV_QL1(__id1, __id2, __bv1, __bv2, __ev1, __ev2) \ |
| 1706 | TPV_Q_X(PCI_VENDOR_ID_LENOVO, __id1, __id2, \ | 1716 | TPV_Q_X(PCI_VENDOR_ID_LENOVO, __id1, __id2, \ |
| 1707 | __bv1, __bv2, __id1, __id2, __ev1, __ev2) | 1717 | __bv1, __bv2, TPID(__id1, __id2), \ |
| 1718 | __ev1, __ev2) | ||
| 1708 | 1719 | ||
| 1709 | #define TPV_QL2(__bid1, __bid2, __bv1, __bv2, \ | 1720 | #define TPV_QL2(__bid1, __bid2, __bv1, __bv2, \ |
| 1710 | __eid1, __eid2, __ev1, __ev2) \ | 1721 | __eid1, __eid2, __ev1, __ev2) \ |
| 1711 | TPV_Q_X(PCI_VENDOR_ID_LENOVO, __bid1, __bid2, \ | 1722 | TPV_Q_X(PCI_VENDOR_ID_LENOVO, __bid1, __bid2, \ |
| 1712 | __bv1, __bv2, __eid1, __eid2, __ev1, __ev2) | 1723 | __bv1, __bv2, TPID(__eid1, __eid2), \ |
| 1724 | __ev1, __ev2) | ||
| 1713 | 1725 | ||
| 1714 | static const struct tpacpi_quirk tpacpi_bios_version_qtable[] __initconst = { | 1726 | static const struct tpacpi_quirk tpacpi_bios_version_qtable[] __initconst = { |
| 1715 | /* Numeric models ------------------ */ | 1727 | /* Numeric models ------------------ */ |
| @@ -6313,7 +6325,7 @@ static int brightness_write(char *buf) | |||
| 6313 | * Doing it this way makes the syscall restartable in case of EINTR | 6325 | * Doing it this way makes the syscall restartable in case of EINTR |
| 6314 | */ | 6326 | */ |
| 6315 | rc = brightness_set(level); | 6327 | rc = brightness_set(level); |
| 6316 | return (rc == -EINTR)? ERESTARTSYS : rc; | 6328 | return (rc == -EINTR)? -ERESTARTSYS : rc; |
| 6317 | } | 6329 | } |
| 6318 | 6330 | ||
| 6319 | static struct ibm_struct brightness_driver_data = { | 6331 | static struct ibm_struct brightness_driver_data = { |
