Commit 0e03f98c authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'platform-drivers-x86-v3.17-1' of...

Merge tag 'platform-drivers-x86-v3.17-1' of git://git.infradead.org/users/dvhart/linux-platform-drivers-x86

Pull x86 platform drivers fixes from Darren Hart:
 "This is my first pull request since taking on maintenance for the
  platform-drivers-x86 tree from Matthew Garrett.  These have passed my
  build testing and been run through Fengguang's LKP tests.  Due to
  timing this round, these have not spent any time in linux-next.  I
  have asked Stephen to include my for-next branch in linux-next going
  forward, once he's back from vacation.

  Details from tag:

   - toshiba_acpi: re-enable hotkeys and cleanups
   - ideapad-laptop: revert touchpad disable, and cleanup static/const
     usage
   - MAINTAINERS: update platform-drivers-x86 maintainer and tree"

* tag 'platform-drivers-x86-v3.17-1' of git://git.infradead.org/users/dvhart/linux-platform-drivers-x86:
  toshiba_acpi: fix and cleanup toshiba_kbd_bl_mode_store()
  platform/x86: toshiba: re-enable acpi hotkeys after suspend to disk
  ideapad-laptop: Constify DMI table for real!
  Revert "ideapad-laptop: Disable touchpad interface on Yoga models"
  MAINTAINERS: Update platform-drivers-x86 maintainer and tree
parents 57b252f8 aeaac098
......@@ -10070,9 +10070,9 @@ F: Documentation/x86/
F: arch/x86/
X86 PLATFORM DRIVERS
M: Matthew Garrett <matthew.garrett@nebula.com>
M: Darren Hart <dvhart@infradead.org>
L: platform-driver-x86@vger.kernel.org
T: git git://cavan.codon.org.uk/platform-drivers-x86.git
T: git git://git.infradead.org/users/dvhart/linux-platform-drivers-x86.git
S: Maintained
F: drivers/platform/x86/
......
......@@ -88,7 +88,6 @@ struct ideapad_private {
struct dentry *debug;
unsigned long cfg;
bool has_hw_rfkill_switch;
bool has_touchpad_control;
};
static bool no_bt_rfkill;
......@@ -456,7 +455,7 @@ struct ideapad_rfk_data {
int type;
};
const const struct ideapad_rfk_data ideapad_rfk_data[] = {
static const struct ideapad_rfk_data ideapad_rfk_data[] = {
{ "ideapad_wlan", CFG_WIFI_BIT, VPCCMD_W_WIFI, RFKILL_TYPE_WLAN },
{ "ideapad_bluetooth", CFG_BT_BIT, VPCCMD_W_BT, RFKILL_TYPE_BLUETOOTH },
{ "ideapad_3g", CFG_3G_BIT, VPCCMD_W_3G, RFKILL_TYPE_WWAN },
......@@ -767,9 +766,6 @@ static void ideapad_sync_touchpad_state(struct ideapad_private *priv)
{
unsigned long value;
if (!priv->has_touchpad_control)
return;
/* Without reading from EC touchpad LED doesn't switch state */
if (!read_ec_data(priv->adev->handle, VPCCMD_R_TOUCHPAD, &value)) {
/* Some IdeaPads don't really turn off touchpad - they only
......@@ -833,29 +829,7 @@ static void ideapad_acpi_notify(acpi_handle handle, u32 event, void *data)
* always results in 0 on these models, causing ideapad_laptop to wrongly
* report all radios as hardware-blocked.
*/
static struct dmi_system_id no_hw_rfkill_list[] = {
{
.ident = "Lenovo Yoga 2 11 / 13 / Pro",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Yoga 2"),
},
},
{}
};
/*
* Some models don't offer touchpad ctrl through the ideapad interface, causing
* ideapad_sync_touchpad_state to send wrong touchpad enable/disable events.
*/
static struct dmi_system_id no_touchpad_ctrl_list[] = {
{
.ident = "Lenovo Yoga 1 series",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo IdeaPad Yoga"),
},
},
static const struct dmi_system_id no_hw_rfkill_list[] = {
{
.ident = "Lenovo Yoga 2 11 / 13 / Pro",
.matches = {
......@@ -889,7 +863,6 @@ static int ideapad_acpi_add(struct platform_device *pdev)
priv->adev = adev;
priv->platform_device = pdev;
priv->has_hw_rfkill_switch = !dmi_check_system(no_hw_rfkill_list);
priv->has_touchpad_control = !dmi_check_system(no_touchpad_ctrl_list);
ret = ideapad_sysfs_init(priv);
if (ret)
......
......@@ -1255,10 +1255,15 @@ static ssize_t toshiba_kbd_bl_mode_store(struct device *dev,
const char *buf, size_t count)
{
struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
int mode = -1;
int time = -1;
int mode;
int time;
int ret;
if (sscanf(buf, "%i", &mode) != 1 && (mode != 2 || mode != 1))
ret = kstrtoint(buf, 0, &mode);
if (ret)
return ret;
if (mode != SCI_KBD_MODE_FNZ && mode != SCI_KBD_MODE_AUTO)
return -EINVAL;
/* Set the Keyboard Backlight Mode where:
......@@ -1266,11 +1271,12 @@ static ssize_t toshiba_kbd_bl_mode_store(struct device *dev,
* Auto - KBD backlight turns off automatically in given time
* FN-Z - KBD backlight "toggles" when hotkey pressed
*/
if (mode != -1 && toshiba->kbd_mode != mode) {
if (toshiba->kbd_mode != mode) {
time = toshiba->kbd_time << HCI_MISC_SHIFT;
time = time + toshiba->kbd_mode;
if (toshiba_kbd_illum_status_set(toshiba, time) < 0)
return -EIO;
ret = toshiba_kbd_illum_status_set(toshiba, time);
if (ret)
return ret;
toshiba->kbd_mode = mode;
}
......@@ -1857,9 +1863,16 @@ static int toshiba_acpi_resume(struct device *device)
{
struct toshiba_acpi_dev *dev = acpi_driver_data(to_acpi_device(device));
u32 result;
acpi_status status;
if (dev->hotkey_dev) {
status = acpi_evaluate_object(dev->acpi_dev->handle, "ENAB",
NULL, NULL);
if (ACPI_FAILURE(status))
pr_info("Unable to re-enable hotkeys\n");
if (dev->hotkey_dev)
hci_write1(dev, HCI_HOTKEY_EVENT, HCI_HOTKEY_ENABLE, &result);
}
return 0;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment