提交 4bfc89d2 编写于 作者: L Linus Torvalds

Merge tag 'platform-drivers-x86-v4.4-2' of...

Merge tag 'platform-drivers-x86-v4.4-2' of git://git.infradead.org/users/dvhart/linux-platform-drivers-x86

Pull another x86 platform driver update from Darren Hart:
 "Support for the unfortunately rather unique ESC key on the Ideapad
  Yoga 3 and two DMI matches for rfkill support.  Solitary fix for
  potential missed errors for asus-wmi.  Downgrade a thinkpad_acpi
  message to info.

  asus-wmi:
   - fix error handling in store_sys_wmi()

  ideapad-laptop:
   - Add Lenovo Yoga 900 to no_hw_rfkill dmi list
   - include Yoga 3 1170 in add rfkill whitelist
   - add support for Yoga 3 ESC key

  thinkpad_acpi:
   - Don't yell on unsupported brightness interfaces"

* tag 'platform-drivers-x86-v4.4-2' of git://git.infradead.org/users/dvhart/linux-platform-drivers-x86:
  asus-wmi: fix error handling in store_sys_wmi()
  ideapad-laptop: Add Lenovo Yoga 900 to no_hw_rfkill dmi list
  ideapad-laptop: include Yoga 3 1170 in add rfkill whitelist
  ideapad-laptop: add support for Yoga 3 ESC key
  thinkpad_acpi: Don't yell on unsupported brightness interfaces
...@@ -345,6 +345,7 @@ config IDEAPAD_LAPTOP ...@@ -345,6 +345,7 @@ config IDEAPAD_LAPTOP
depends on SERIO_I8042 depends on SERIO_I8042
depends on BACKLIGHT_CLASS_DEVICE depends on BACKLIGHT_CLASS_DEVICE
depends on ACPI_VIDEO || ACPI_VIDEO = n depends on ACPI_VIDEO || ACPI_VIDEO = n
depends on ACPI_WMI || ACPI_WMI = n
select INPUT_SPARSEKMAP select INPUT_SPARSEKMAP
help help
This is a driver for Lenovo IdeaPad netbooks contains drivers for This is a driver for Lenovo IdeaPad netbooks contains drivers for
......
...@@ -1682,7 +1682,7 @@ static ssize_t store_sys_wmi(struct asus_wmi *asus, int devid, ...@@ -1682,7 +1682,7 @@ static ssize_t store_sys_wmi(struct asus_wmi *asus, int devid,
int rv, err, value; int rv, err, value;
value = asus_wmi_get_devstate_simple(asus, devid); value = asus_wmi_get_devstate_simple(asus, devid);
if (value == -ENODEV) /* Check device presence */ if (value < 0)
return value; return value;
rv = parse_arg(buf, count, &value); rv = parse_arg(buf, count, &value);
......
...@@ -47,6 +47,10 @@ ...@@ -47,6 +47,10 @@
#define CFG_WIFI_BIT (18) #define CFG_WIFI_BIT (18)
#define CFG_CAMERA_BIT (19) #define CFG_CAMERA_BIT (19)
#if IS_ENABLED(CONFIG_ACPI_WMI)
static const char ideapad_wmi_fnesc_event[] = "26CAB2E5-5CF1-46AE-AAC3-4A12B6BA50E6";
#endif
enum { enum {
VPCCMD_R_VPC1 = 0x10, VPCCMD_R_VPC1 = 0x10,
VPCCMD_R_BL_MAX, VPCCMD_R_BL_MAX,
...@@ -567,6 +571,8 @@ static const struct key_entry ideapad_keymap[] = { ...@@ -567,6 +571,8 @@ static const struct key_entry ideapad_keymap[] = {
{ KE_KEY, 65, { KEY_PROG4 } }, { KE_KEY, 65, { KEY_PROG4 } },
{ KE_KEY, 66, { KEY_TOUCHPAD_OFF } }, { KE_KEY, 66, { KEY_TOUCHPAD_OFF } },
{ KE_KEY, 67, { KEY_TOUCHPAD_ON } }, { KE_KEY, 67, { KEY_TOUCHPAD_ON } },
{ KE_KEY, 128, { KEY_ESC } },
{ KE_END, 0 }, { KE_END, 0 },
}; };
...@@ -825,6 +831,19 @@ static void ideapad_acpi_notify(acpi_handle handle, u32 event, void *data) ...@@ -825,6 +831,19 @@ static void ideapad_acpi_notify(acpi_handle handle, u32 event, void *data)
} }
} }
#if IS_ENABLED(CONFIG_ACPI_WMI)
static void ideapad_wmi_notify(u32 value, void *context)
{
switch (value) {
case 128:
ideapad_input_report(context, value);
break;
default:
pr_info("Unknown WMI event %u\n", value);
}
}
#endif
/* /*
* Some ideapads don't have a hardware rfkill switch, reading VPCCMD_R_RF * Some ideapads don't have a hardware rfkill switch, reading VPCCMD_R_RF
* always results in 0 on these models, causing ideapad_laptop to wrongly * always results in 0 on these models, causing ideapad_laptop to wrongly
...@@ -853,24 +872,31 @@ static const struct dmi_system_id no_hw_rfkill_list[] = { ...@@ -853,24 +872,31 @@ static const struct dmi_system_id no_hw_rfkill_list[] = {
}, },
}, },
{ {
.ident = "Lenovo Yoga 3 14", .ident = "Lenovo Yoga 2 11 / 13 / Pro",
.matches = { .matches = {
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Yoga 3 14"), DMI_MATCH(DMI_BOARD_NAME, "Yoga2"),
}, },
}, },
{ {
.ident = "Lenovo Yoga 2 11 / 13 / Pro", .ident = "Lenovo Yoga 3 1170 / 1470",
.matches = { .matches = {
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
DMI_MATCH(DMI_BOARD_NAME, "Yoga2"), DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Yoga 3"),
}, },
}, },
{ {
.ident = "Lenovo Yoga 3 Pro 1370", .ident = "Lenovo Yoga 3 Pro 1370",
.matches = { .matches = {
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo YOGA 3 Pro-1370"), DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo YOGA 3"),
},
},
{
.ident = "Lenovo Yoga 900",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo YOGA 900"),
}, },
}, },
{} {}
...@@ -935,8 +961,18 @@ static int ideapad_acpi_add(struct platform_device *pdev) ...@@ -935,8 +961,18 @@ static int ideapad_acpi_add(struct platform_device *pdev)
ACPI_DEVICE_NOTIFY, ideapad_acpi_notify, priv); ACPI_DEVICE_NOTIFY, ideapad_acpi_notify, priv);
if (ret) if (ret)
goto notification_failed; goto notification_failed;
#if IS_ENABLED(CONFIG_ACPI_WMI)
ret = wmi_install_notify_handler(ideapad_wmi_fnesc_event, ideapad_wmi_notify, priv);
if (ret != AE_OK && ret != AE_NOT_EXIST)
goto notification_failed_wmi;
#endif
return 0; return 0;
#if IS_ENABLED(CONFIG_ACPI_WMI)
notification_failed_wmi:
acpi_remove_notify_handler(priv->adev->handle,
ACPI_DEVICE_NOTIFY, ideapad_acpi_notify);
#endif
notification_failed: notification_failed:
ideapad_backlight_exit(priv); ideapad_backlight_exit(priv);
backlight_failed: backlight_failed:
...@@ -955,6 +991,9 @@ static int ideapad_acpi_remove(struct platform_device *pdev) ...@@ -955,6 +991,9 @@ static int ideapad_acpi_remove(struct platform_device *pdev)
struct ideapad_private *priv = dev_get_drvdata(&pdev->dev); struct ideapad_private *priv = dev_get_drvdata(&pdev->dev);
int i; int i;
#if IS_ENABLED(CONFIG_ACPI_WMI)
wmi_remove_notify_handler(ideapad_wmi_fnesc_event);
#endif
acpi_remove_notify_handler(priv->adev->handle, acpi_remove_notify_handler(priv->adev->handle,
ACPI_DEVICE_NOTIFY, ideapad_acpi_notify); ACPI_DEVICE_NOTIFY, ideapad_acpi_notify);
ideapad_backlight_exit(priv); ideapad_backlight_exit(priv);
......
...@@ -6459,8 +6459,7 @@ static void __init tpacpi_detect_brightness_capabilities(void) ...@@ -6459,8 +6459,7 @@ static void __init tpacpi_detect_brightness_capabilities(void)
pr_info("detected a 8-level brightness capable ThinkPad\n"); pr_info("detected a 8-level brightness capable ThinkPad\n");
break; break;
default: default:
pr_err("Unsupported brightness interface, " pr_info("Unsupported brightness interface\n");
"please contact %s\n", TPACPI_MAIL);
tp_features.bright_unkfw = 1; tp_features.bright_unkfw = 1;
bright_maxlvl = b - 1; bright_maxlvl = b - 1;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册