platform-drivers-x86 for 4.3-1
Significant work on toshiba_acpi, including new hardware support, refactoring, and cleanups. Extend device support for asus, ideapad, and acer systems. New surface pro 3 buttons driver. Misc. minor cleanups for thinkpad and hp-wireless. acer-wmi: - No rfkill on HP Omen 15 wifi thinkpad_acpi - Remove side effects from vdbg_printk -> no_printk macro surface pro 3 - Add support driver for Surface Pro 3 buttons hp-wireless - remove unneeded goto/label in hpwl_init ideapad-laptop - add alternative representation for Yoga 2 to DMI table - Add Lenovo Yoga 3 14 to no_hw_rfkill dmi list asus-laptop - Add key found on Asus F3M MAINTAINERS - Remove Toshiba Linux mailing list address toshiba_acpi: - Bump driver version to 0.23 - Remove unnecessary checks and returns in HCI/SCI functions - Refactor *{get, set} functions return value - Remove "*not supported" feature prints - Change *available functions return type - Add set_fan_status function - Change some variables to avoid warnings from ninja-check - Reorder toshiba_acpi_alt_keymap entries - Remove unused wireless defines - Transflective backlight updates - Avoid registering input device on WMI event laptops - Add /dev/toshiba_acpi device - Adapt /proc/acpi/toshiba/keys to TOS1900 devices -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAABAgAGBQJV6K71AAoJEKbMaAwKp364lzAIAIKeesYU4VevKg2wL6Em/dVP 4ftDgzhvFRQhM0CEe+uR8NWFNB/CVKVSphKD5mFtc0NAs0S0Eo/tmAlERfeq0qkt HFSpP80deU+CwjURLo4wgMbPBPudHA3bNDZfSY6vq+/JhakdtheLyAODOda7uegz PHV0zrgDntwVDAuBPTB2h6KigFXSc3soGCWcHTjD0PLNvTGvWOiNYO7otsclNzFc qC0uerR4ryt6OFtul900/U/x1bfM9OAFNSnqWpfkkhQ4nskmkzDsyXutXm3CtXso Ol3YS0Saj3gBGUmYua1smSU5u4IU9cQNeq6EEgR4jdHt2QQ8fJfmT0v5UgeiHHw= =UZPt -----END PGP SIGNATURE----- Merge tag 'platform-drivers-x86-v4.3-1' of git://git.infradead.org/users/dvhart/linux-platform-drivers-x86 Pull x86 platform driver updates from Darren Hart: "Significant work on toshiba_acpi, including new hardware support, refactoring, and cleanups. Extend device support for asus, ideapad, and acer systems. New surface pro 3 buttons driver. Misc minor cleanups for thinkpad and hp-wireless. acer-wmi: - No rfkill on HP Omen 15 wifi thinkpad_acpi: - Remove side effects from vdbg_printk -> no_printk macro surface pro 3: - Add support driver for Surface Pro 3 buttons hp-wireless: - remove unneeded goto/label in hpwl_init ideapad-laptop: - add alternative representation for Yoga 2 to DMI table - Add Lenovo Yoga 3 14 to no_hw_rfkill dmi list asus-laptop: - Add key found on Asus F3M MAINTAINERS: - Remove Toshiba Linux mailing list address toshiba_acpi: - Bump driver version to 0.23 - Remove unnecessary checks and returns in HCI/SCI functions - Refactor *{get, set} functions return value - Remove "*not supported" feature prints - Change *available functions return type - Add set_fan_status function - Change some variables to avoid warnings from ninja-check - Reorder toshiba_acpi_alt_keymap entries - Remove unused wireless defines - Transflective backlight updates - Avoid registering input device on WMI event laptops - Add /dev/toshiba_acpi device - Adapt /proc/acpi/toshiba/keys to TOS1900 devices" * tag 'platform-drivers-x86-v4.3-1' of git://git.infradead.org/users/dvhart/linux-platform-drivers-x86: (21 commits) acer-wmi: No rfkill on HP Omen 15 wifi thinkpad_acpi: Remove side effects from vdbg_printk -> no_printk macro surface pro 3: Add support driver for Surface Pro 3 buttons hp-wireless: remove unneeded goto/label in hpwl_init ideapad-laptop: add alternative representation for Yoga 2 to DMI table asus-laptop: Add key found on Asus F3M MAINTAINERS: Remove Toshiba Linux mailing list address ideapad-laptop: Add Lenovo Yoga 3 14 to no_hw_rfkill dmi list toshiba_acpi: Bump driver version to 0.23 toshiba_acpi: Remove unnecessary checks and returns in HCI/SCI functions toshiba_acpi: Refactor *{get, set} functions return value toshiba_acpi: Remove "*not supported" feature prints toshiba_acpi: Change *available functions return type toshiba_acpi: Add set_fan_status function toshiba_acpi: Change some variables to avoid warnings from ninja-check toshiba_acpi: Reorder toshiba_acpi_alt_keymap entries toshiba_acpi: Remove unused wireless defines toshiba_acpi: Transflective backlight updates toshiba_acpi: Avoid registering input device on WMI event laptops toshiba_acpi: Add /dev/toshiba_acpi device ...
This commit is contained in:
commit
3af6e98f25
12 changed files with 703 additions and 390 deletions
|
@ -265,7 +265,7 @@ Code Seq#(hex) Include File Comments
|
||||||
's' all linux/cdk.h
|
's' all linux/cdk.h
|
||||||
't' 00-7F linux/ppp-ioctl.h
|
't' 00-7F linux/ppp-ioctl.h
|
||||||
't' 80-8F linux/isdn_ppp.h
|
't' 80-8F linux/isdn_ppp.h
|
||||||
't' 90 linux/toshiba.h
|
't' 90-91 linux/toshiba.h toshiba and toshiba_acpi SMM
|
||||||
'u' 00-1F linux/smb_fs.h gone
|
'u' 00-1F linux/smb_fs.h gone
|
||||||
'u' 20-3F linux/uvcvideo.h USB video class host driver
|
'u' 20-3F linux/uvcvideo.h USB video class host driver
|
||||||
'v' 00-1F linux/ext2_fs.h conflict!
|
'v' 00-1F linux/ext2_fs.h conflict!
|
||||||
|
|
|
@ -6847,6 +6847,12 @@ T: git git://git.monstr.eu/linux-2.6-microblaze.git
|
||||||
S: Supported
|
S: Supported
|
||||||
F: arch/microblaze/
|
F: arch/microblaze/
|
||||||
|
|
||||||
|
MICROSOFT SURFACE PRO 3 BUTTON DRIVER
|
||||||
|
M: Chen Yu <yu.c.chen@intel.com>
|
||||||
|
L: platform-driver-x86@vger.kernel.org
|
||||||
|
S: Supported
|
||||||
|
F: drivers/platform/x86/surfacepro3_button.c
|
||||||
|
|
||||||
MICROTEK X6 SCANNER
|
MICROTEK X6 SCANNER
|
||||||
M: Oliver Neukum <oliver@neukum.org>
|
M: Oliver Neukum <oliver@neukum.org>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
@ -10489,7 +10495,6 @@ F: drivers/platform/x86/toshiba_haps.c
|
||||||
|
|
||||||
TOSHIBA SMM DRIVER
|
TOSHIBA SMM DRIVER
|
||||||
M: Jonathan Buzzard <jonathan@buzzard.org.uk>
|
M: Jonathan Buzzard <jonathan@buzzard.org.uk>
|
||||||
L: tlinux-users@tce.toshiba-dme.co.jp
|
|
||||||
W: http://www.buzzard.org.uk/toshiba/
|
W: http://www.buzzard.org.uk/toshiba/
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/char/toshiba.c
|
F: drivers/char/toshiba.c
|
||||||
|
|
|
@ -919,4 +919,9 @@ config INTEL_PMC_IPC
|
||||||
The PMC is an ARC processor which defines IPC commands for communication
|
The PMC is an ARC processor which defines IPC commands for communication
|
||||||
with other entities in the CPU.
|
with other entities in the CPU.
|
||||||
|
|
||||||
|
config SURFACE_PRO3_BUTTON
|
||||||
|
tristate "Power/home/volume buttons driver for Microsoft Surface Pro 3 tablet"
|
||||||
|
depends on ACPI && INPUT
|
||||||
|
---help---
|
||||||
|
This driver handles the power/home/volume buttons on the Microsoft Surface Pro 3 tablet.
|
||||||
endif # X86_PLATFORM_DEVICES
|
endif # X86_PLATFORM_DEVICES
|
||||||
|
|
|
@ -60,3 +60,4 @@ obj-$(CONFIG_INTEL_SMARTCONNECT) += intel-smartconnect.o
|
||||||
obj-$(CONFIG_PVPANIC) += pvpanic.o
|
obj-$(CONFIG_PVPANIC) += pvpanic.o
|
||||||
obj-$(CONFIG_ALIENWARE_WMI) += alienware-wmi.o
|
obj-$(CONFIG_ALIENWARE_WMI) += alienware-wmi.o
|
||||||
obj-$(CONFIG_INTEL_PMC_IPC) += intel_pmc_ipc.o
|
obj-$(CONFIG_INTEL_PMC_IPC) += intel_pmc_ipc.o
|
||||||
|
obj-$(CONFIG_SURFACE_PRO3_BUTTON) += surfacepro3_button.o
|
||||||
|
|
|
@ -807,6 +807,7 @@ static const struct acpi_device_id norfkill_ids[] __initconst = {
|
||||||
{ "IBM0068", 0},
|
{ "IBM0068", 0},
|
||||||
{ "LEN0068", 0},
|
{ "LEN0068", 0},
|
||||||
{ "SNY5001", 0}, /* sony-laptop in charge */
|
{ "SNY5001", 0}, /* sony-laptop in charge */
|
||||||
|
{ "HPQ6601", 0},
|
||||||
{ "", 0},
|
{ "", 0},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -332,6 +332,7 @@ static const struct key_entry asus_keymap[] = {
|
||||||
{KE_KEY, 0x65, { KEY_SWITCHVIDEOMODE } }, /* SDSP LCD + TV */
|
{KE_KEY, 0x65, { KEY_SWITCHVIDEOMODE } }, /* SDSP LCD + TV */
|
||||||
{KE_KEY, 0x66, { KEY_SWITCHVIDEOMODE } }, /* SDSP CRT + TV */
|
{KE_KEY, 0x66, { KEY_SWITCHVIDEOMODE } }, /* SDSP CRT + TV */
|
||||||
{KE_KEY, 0x67, { KEY_SWITCHVIDEOMODE } }, /* SDSP LCD + CRT + TV */
|
{KE_KEY, 0x67, { KEY_SWITCHVIDEOMODE } }, /* SDSP LCD + CRT + TV */
|
||||||
|
{KE_KEY, 0x6A, { KEY_TOUCHPAD_TOGGLE } }, /* Lock Touchpad Fn + F9 */
|
||||||
{KE_KEY, 0x6B, { KEY_TOUCHPAD_TOGGLE } }, /* Lock Touchpad */
|
{KE_KEY, 0x6B, { KEY_TOUCHPAD_TOGGLE } }, /* Lock Touchpad */
|
||||||
{KE_KEY, 0x6C, { KEY_SLEEP } }, /* Suspend */
|
{KE_KEY, 0x6C, { KEY_SLEEP } }, /* Suspend */
|
||||||
{KE_KEY, 0x6D, { KEY_SLEEP } }, /* Hibernate */
|
{KE_KEY, 0x6D, { KEY_SLEEP } }, /* Hibernate */
|
||||||
|
|
|
@ -114,14 +114,9 @@ static int __init hpwl_init(void)
|
||||||
|
|
||||||
pr_info("Initializing HPQ6001 module\n");
|
pr_info("Initializing HPQ6001 module\n");
|
||||||
err = acpi_bus_register_driver(&hpwl_driver);
|
err = acpi_bus_register_driver(&hpwl_driver);
|
||||||
if (err) {
|
if (err)
|
||||||
pr_err("Unable to register HP wireless control driver.\n");
|
pr_err("Unable to register HP wireless control driver.\n");
|
||||||
goto error_acpi_register;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
error_acpi_register:
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -852,6 +852,20 @@ static const struct dmi_system_id no_hw_rfkill_list[] = {
|
||||||
DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Yoga 2"),
|
DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Yoga 2"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.ident = "Lenovo Yoga 3 14",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Yoga 3 14"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.ident = "Lenovo Yoga 2 11 / 13 / Pro",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||||
|
DMI_MATCH(DMI_BOARD_NAME, "Yoga2"),
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.ident = "Lenovo Yoga 3 Pro 1370",
|
.ident = "Lenovo Yoga 3 Pro 1370",
|
||||||
.matches = {
|
.matches = {
|
||||||
|
|
216
drivers/platform/x86/surfacepro3_button.c
Normal file
216
drivers/platform/x86/surfacepro3_button.c
Normal file
|
@ -0,0 +1,216 @@
|
||||||
|
/*
|
||||||
|
* power/home/volume button support for
|
||||||
|
* Microsoft Surface Pro 3 tablet.
|
||||||
|
*
|
||||||
|
* Copyright (c) 2015 Intel Corporation.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; version 2
|
||||||
|
* of the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <linux/init.h>
|
||||||
|
#include <linux/types.h>
|
||||||
|
#include <linux/input.h>
|
||||||
|
#include <linux/acpi.h>
|
||||||
|
#include <acpi/button.h>
|
||||||
|
|
||||||
|
#define SURFACE_BUTTON_HID "MSHW0028"
|
||||||
|
#define SURFACE_BUTTON_OBJ_NAME "VGBI"
|
||||||
|
#define SURFACE_BUTTON_DEVICE_NAME "Surface Pro 3 Buttons"
|
||||||
|
|
||||||
|
#define SURFACE_BUTTON_NOTIFY_PRESS_POWER 0xc6
|
||||||
|
#define SURFACE_BUTTON_NOTIFY_RELEASE_POWER 0xc7
|
||||||
|
|
||||||
|
#define SURFACE_BUTTON_NOTIFY_PRESS_HOME 0xc4
|
||||||
|
#define SURFACE_BUTTON_NOTIFY_RELEASE_HOME 0xc5
|
||||||
|
|
||||||
|
#define SURFACE_BUTTON_NOTIFY_PRESS_VOLUME_UP 0xc0
|
||||||
|
#define SURFACE_BUTTON_NOTIFY_RELEASE_VOLUME_UP 0xc1
|
||||||
|
|
||||||
|
#define SURFACE_BUTTON_NOTIFY_PRESS_VOLUME_DOWN 0xc2
|
||||||
|
#define SURFACE_BUTTON_NOTIFY_RELEASE_VOLUME_DOWN 0xc3
|
||||||
|
|
||||||
|
ACPI_MODULE_NAME("surface pro 3 button");
|
||||||
|
|
||||||
|
MODULE_AUTHOR("Chen Yu");
|
||||||
|
MODULE_DESCRIPTION("Surface Pro3 Button Driver");
|
||||||
|
MODULE_LICENSE("GPL v2");
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Power button, Home button, Volume buttons support is supposed to
|
||||||
|
* be covered by drivers/input/misc/soc_button_array.c, which is implemented
|
||||||
|
* according to "Windows ACPI Design Guide for SoC Platforms".
|
||||||
|
* However surface pro3 seems not to obey the specs, instead it uses
|
||||||
|
* device VGBI(MSHW0028) for dispatching the events.
|
||||||
|
* We choose acpi_driver rather than platform_driver/i2c_driver because
|
||||||
|
* although VGBI has an i2c resource connected to i2c controller, it
|
||||||
|
* is not embedded in any i2c controller's scope, thus neither platform_device
|
||||||
|
* will be created, nor i2c_client will be enumerated, we have to use
|
||||||
|
* acpi_driver.
|
||||||
|
*/
|
||||||
|
static const struct acpi_device_id surface_button_device_ids[] = {
|
||||||
|
{SURFACE_BUTTON_HID, 0},
|
||||||
|
{"", 0},
|
||||||
|
};
|
||||||
|
MODULE_DEVICE_TABLE(acpi, surface_button_device_ids);
|
||||||
|
|
||||||
|
struct surface_button {
|
||||||
|
unsigned int type;
|
||||||
|
struct input_dev *input;
|
||||||
|
char phys[32]; /* for input device */
|
||||||
|
unsigned long pushed;
|
||||||
|
bool suspended;
|
||||||
|
};
|
||||||
|
|
||||||
|
static void surface_button_notify(struct acpi_device *device, u32 event)
|
||||||
|
{
|
||||||
|
struct surface_button *button = acpi_driver_data(device);
|
||||||
|
struct input_dev *input;
|
||||||
|
int key_code = KEY_RESERVED;
|
||||||
|
bool pressed = false;
|
||||||
|
|
||||||
|
switch (event) {
|
||||||
|
/* Power button press,release handle */
|
||||||
|
case SURFACE_BUTTON_NOTIFY_PRESS_POWER:
|
||||||
|
pressed = true;
|
||||||
|
/*fall through*/
|
||||||
|
case SURFACE_BUTTON_NOTIFY_RELEASE_POWER:
|
||||||
|
key_code = KEY_POWER;
|
||||||
|
break;
|
||||||
|
/* Home button press,release handle */
|
||||||
|
case SURFACE_BUTTON_NOTIFY_PRESS_HOME:
|
||||||
|
pressed = true;
|
||||||
|
/*fall through*/
|
||||||
|
case SURFACE_BUTTON_NOTIFY_RELEASE_HOME:
|
||||||
|
key_code = KEY_LEFTMETA;
|
||||||
|
break;
|
||||||
|
/* Volume up button press,release handle */
|
||||||
|
case SURFACE_BUTTON_NOTIFY_PRESS_VOLUME_UP:
|
||||||
|
pressed = true;
|
||||||
|
/*fall through*/
|
||||||
|
case SURFACE_BUTTON_NOTIFY_RELEASE_VOLUME_UP:
|
||||||
|
key_code = KEY_VOLUMEUP;
|
||||||
|
break;
|
||||||
|
/* Volume down button press,release handle */
|
||||||
|
case SURFACE_BUTTON_NOTIFY_PRESS_VOLUME_DOWN:
|
||||||
|
pressed = true;
|
||||||
|
/*fall through*/
|
||||||
|
case SURFACE_BUTTON_NOTIFY_RELEASE_VOLUME_DOWN:
|
||||||
|
key_code = KEY_VOLUMEDOWN;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
dev_info_ratelimited(&device->dev,
|
||||||
|
"Unsupported event [0x%x]\n", event);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
input = button->input;
|
||||||
|
if (KEY_RESERVED == key_code)
|
||||||
|
return;
|
||||||
|
if (pressed)
|
||||||
|
pm_wakeup_event(&device->dev, 0);
|
||||||
|
if (button->suspended)
|
||||||
|
return;
|
||||||
|
input_report_key(input, key_code, pressed?1:0);
|
||||||
|
input_sync(input);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_PM_SLEEP
|
||||||
|
static int surface_button_suspend(struct device *dev)
|
||||||
|
{
|
||||||
|
struct acpi_device *device = to_acpi_device(dev);
|
||||||
|
struct surface_button *button = acpi_driver_data(device);
|
||||||
|
|
||||||
|
button->suspended = true;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int surface_button_resume(struct device *dev)
|
||||||
|
{
|
||||||
|
struct acpi_device *device = to_acpi_device(dev);
|
||||||
|
struct surface_button *button = acpi_driver_data(device);
|
||||||
|
|
||||||
|
button->suspended = false;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static int surface_button_add(struct acpi_device *device)
|
||||||
|
{
|
||||||
|
struct surface_button *button;
|
||||||
|
struct input_dev *input;
|
||||||
|
const char *hid = acpi_device_hid(device);
|
||||||
|
char *name;
|
||||||
|
int error;
|
||||||
|
|
||||||
|
if (strncmp(acpi_device_bid(device), SURFACE_BUTTON_OBJ_NAME,
|
||||||
|
strlen(SURFACE_BUTTON_OBJ_NAME)))
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
|
button = kzalloc(sizeof(struct surface_button), GFP_KERNEL);
|
||||||
|
if (!button)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
device->driver_data = button;
|
||||||
|
button->input = input = input_allocate_device();
|
||||||
|
if (!input) {
|
||||||
|
error = -ENOMEM;
|
||||||
|
goto err_free_button;
|
||||||
|
}
|
||||||
|
|
||||||
|
name = acpi_device_name(device);
|
||||||
|
strcpy(name, SURFACE_BUTTON_DEVICE_NAME);
|
||||||
|
snprintf(button->phys, sizeof(button->phys), "%s/buttons", hid);
|
||||||
|
|
||||||
|
input->name = name;
|
||||||
|
input->phys = button->phys;
|
||||||
|
input->id.bustype = BUS_HOST;
|
||||||
|
input->dev.parent = &device->dev;
|
||||||
|
input_set_capability(input, EV_KEY, KEY_POWER);
|
||||||
|
input_set_capability(input, EV_KEY, KEY_LEFTMETA);
|
||||||
|
input_set_capability(input, EV_KEY, KEY_VOLUMEUP);
|
||||||
|
input_set_capability(input, EV_KEY, KEY_VOLUMEDOWN);
|
||||||
|
|
||||||
|
error = input_register_device(input);
|
||||||
|
if (error)
|
||||||
|
goto err_free_input;
|
||||||
|
dev_info(&device->dev,
|
||||||
|
"%s [%s]\n", name, acpi_device_bid(device));
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
err_free_input:
|
||||||
|
input_free_device(input);
|
||||||
|
err_free_button:
|
||||||
|
kfree(button);
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int surface_button_remove(struct acpi_device *device)
|
||||||
|
{
|
||||||
|
struct surface_button *button = acpi_driver_data(device);
|
||||||
|
|
||||||
|
input_unregister_device(button->input);
|
||||||
|
kfree(button);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static SIMPLE_DEV_PM_OPS(surface_button_pm,
|
||||||
|
surface_button_suspend, surface_button_resume);
|
||||||
|
|
||||||
|
static struct acpi_driver surface_button_driver = {
|
||||||
|
.name = "surface_pro3_button",
|
||||||
|
.class = "SurfacePro3",
|
||||||
|
.ids = surface_button_device_ids,
|
||||||
|
.ops = {
|
||||||
|
.add = surface_button_add,
|
||||||
|
.remove = surface_button_remove,
|
||||||
|
.notify = surface_button_notify,
|
||||||
|
},
|
||||||
|
.drv.pm = &surface_button_pm,
|
||||||
|
};
|
||||||
|
|
||||||
|
module_acpi_driver(surface_button_driver);
|
|
@ -402,7 +402,7 @@ static const char *str_supported(int is_supported);
|
||||||
#else
|
#else
|
||||||
static inline const char *str_supported(int is_supported) { return ""; }
|
static inline const char *str_supported(int is_supported) { return ""; }
|
||||||
#define vdbg_printk(a_dbg_level, format, arg...) \
|
#define vdbg_printk(a_dbg_level, format, arg...) \
|
||||||
no_printk(format, ##arg)
|
do { if (0) no_printk(format, ##arg); } while (0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void tpacpi_log_usertask(const char * const what)
|
static void tpacpi_log_usertask(const char * const what)
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,6 +1,7 @@
|
||||||
/* toshiba.h -- Linux driver for accessing the SMM on Toshiba laptops
|
/* toshiba.h -- Linux driver for accessing the SMM on Toshiba laptops
|
||||||
*
|
*
|
||||||
* Copyright (c) 1996-2000 Jonathan A. Buzzard (jonathan@buzzard.org.uk)
|
* Copyright (c) 1996-2000 Jonathan A. Buzzard (jonathan@buzzard.org.uk)
|
||||||
|
* Copyright (c) 2015 Azael Avalos <coproscefalo@gmail.com>
|
||||||
*
|
*
|
||||||
* Thanks to Juergen Heinzl <juergen@monocerus.demon.co.uk> for the pointers
|
* Thanks to Juergen Heinzl <juergen@monocerus.demon.co.uk> for the pointers
|
||||||
* on making sure the structure is aligned and packed.
|
* on making sure the structure is aligned and packed.
|
||||||
|
@ -20,9 +21,18 @@
|
||||||
#ifndef _UAPI_LINUX_TOSHIBA_H
|
#ifndef _UAPI_LINUX_TOSHIBA_H
|
||||||
#define _UAPI_LINUX_TOSHIBA_H
|
#define _UAPI_LINUX_TOSHIBA_H
|
||||||
|
|
||||||
#define TOSH_PROC "/proc/toshiba"
|
/*
|
||||||
#define TOSH_DEVICE "/dev/toshiba"
|
* Toshiba modules paths
|
||||||
#define TOSH_SMM _IOWR('t', 0x90, int) /* broken: meant 24 bytes */
|
*/
|
||||||
|
|
||||||
|
#define TOSH_PROC "/proc/toshiba"
|
||||||
|
#define TOSH_DEVICE "/dev/toshiba"
|
||||||
|
#define TOSHIBA_ACPI_PROC "/proc/acpi/toshiba"
|
||||||
|
#define TOSHIBA_ACPI_DEVICE "/dev/toshiba_acpi"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Toshiba SMM structure
|
||||||
|
*/
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
unsigned int eax;
|
unsigned int eax;
|
||||||
|
@ -33,5 +43,21 @@ typedef struct {
|
||||||
unsigned int edi __attribute__ ((packed));
|
unsigned int edi __attribute__ ((packed));
|
||||||
} SMMRegisters;
|
} SMMRegisters;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* IOCTLs (0x90 - 0x91)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define TOSH_SMM _IOWR('t', 0x90, SMMRegisters)
|
||||||
|
/*
|
||||||
|
* Convenience toshiba_acpi command.
|
||||||
|
*
|
||||||
|
* The System Configuration Interface (SCI) is opened/closed internally
|
||||||
|
* to avoid userspace of buggy BIOSes.
|
||||||
|
*
|
||||||
|
* The toshiba_acpi module checks whether the eax register is set with
|
||||||
|
* SCI_GET (0xf300) or SCI_SET (0xf400), returning -EINVAL if not.
|
||||||
|
*/
|
||||||
|
#define TOSHIBA_ACPI_SCI _IOWR('t', 0x91, SMMRegisters)
|
||||||
|
|
||||||
|
|
||||||
#endif /* _UAPI_LINUX_TOSHIBA_H */
|
#endif /* _UAPI_LINUX_TOSHIBA_H */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue