mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 18:51:56 -04:00
platform-drivers-x86 for 4.6-1
Significant refactoring of Dell laptop drivers, modularizing the smbios code.
Multiple new platforms added for ideapad, asus, dell, and alienware using
existing quirks. A few fixes and cleanups.
hp-wmi:
- Remove GPS rfkill support via pre-2009 interface
- fix unregister order in hp_wmi_rfkill_setup() once again
ideapad-laptop:
- Add ideapad Y700 (15) to the no_hw_rfkill DMI list
fujitsu-laptop:
- Support radio toggle button
intel-hid:
- allocate correct amount of memory for private struct
platform/x86:
- Make intel_scu_ipc explicitly non-modular
intel_pmc_ipc:
- Avoid pending IPC1 command during legacy suspend
- Fix GCR register base address and length
asus-nb-wmi:
- add wapf=4 quirk for ASUS X75VD
intel_telemetry_pltdrv:
- Change verbosity control bits
dell-rbtn:
- Add a comment about the XPS 13 9350
dell-wmi, dell-laptop:
- depends DMI
dell-wmi:
- support Dell Inspiron M5110
- properly process Dell Instant Launch hotkey
- enable receiving WMI events on Dell Vostro V131
- Support new hotkeys on the XPS 13 9350 (Skylake)
- Clean up hotkey table size check
- Stop storing pointers to DMI tables
dell-laptop:
- move dell_smi_error() to dell-smbios
- use dell_smbios_find_token() instead of find_token_location()
- use dell_smbios_find_token() instead of find_token_id()
- extract SMBIOS-related code to a separate module
dell-smbios:
- rename dell_smi_error() to dell_smbios_error()
- make da_tokens static
- remove find_token_{id,location}()
- implement new function for finding DMI table 0xDA tokens
- make the SMBIOS buffer static
- return the SMBIOS buffer from dell_smbios_get_buffer()
- don't return an SMBIOS buffer from dell_smbios_send_request()
- don't pass an SMBIOS buffer to dell_smbios_send_request()
- rename dell_send_request() to dell_smbios_send_request()
- rename release_buffer() to dell_smbios_release_buffer()
- rename clear_buffer() to dell_smbios_clear_buffer()
- rename get_buffer() to dell_smbios_get_buffer()
dell-led:
- use dell_smbios_send_request() for performing SMBIOS calls
- use dell_smbios_find_token() for finding mic DMI tokens
toshiba_acpi:
- Add a module parameter to disable hotkeys registration
- Add sysfs entries for the Cooling Method feature
- Add support for cooling method feature
Documentation/ABI:
- Update sysfs-driver-toshiba_acpi file
thinkpad_acpi:
- Remove ambiguous logging for "Unsupported brightness interface"
alienware-wmi:
- whitespace improvements
- Add support for two new systems: ASM200 and ASM201.
- Add support for deep sleep control.
- Add initial support for alienware graphics amplifier.
- Add support for new platform: X51-R3
- Clean up whitespace for ASM100 platform
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iQEcBAABAgAGBQJW8s77AAoJEKbMaAwKp364iVgH/18Tpefbc7uOrNak4zfTmvVO
CQjLdbnbCYoeNjwgdYSZNlaR+E2TuMdqmBXXLEr3kqicpmX15l+V5y8xJkDmGpxw
0RmwJnkdIpmkZcjb3/2abOtIuOj1Y/tXCp5mY1FoaDYBQVzO+ZsPEGNQcMu5uJpa
qZTw9UwiSPUspTrHHbS7/Bzv7yFnxlWC1nmt6G5zL4OMEv2AGbuVSstXVGySIML5
TfFdisUBIXQplzwpDytHGqtGUJMc0NnT1s66beuo1oBdEFTFtBNpFySW3goV2nrZ
JPbvyaV3tD24NYNmU9WH653InX4KuaGiJRWVT31a/I5HVVlx7mZdUYRI+EYAnmE=
=e0E4
-----END PGP SIGNATURE-----
Merge tag 'platform-drivers-x86-v4.6-1' of git://git.infradead.org/users/dvhart/linux-platform-drivers-x86
Pull x86 platform driver updates from Darren Hart:
"Significant refactoring of Dell laptop drivers, modularizing the
smbios code. Multiple new platforms added for ideapad, asus, dell,
and alienware using existing quirks. A few fixes and cleanups.
hp-wmi:
- Remove GPS rfkill support via pre-2009 interface
- fix unregister order in hp_wmi_rfkill_setup() once again
ideapad-laptop:
- Add ideapad Y700 (15) to the no_hw_rfkill DMI list
fujitsu-laptop:
- Support radio toggle button
intel-hid:
- allocate correct amount of memory for private struct
platform/x86:
- Make intel_scu_ipc explicitly non-modular
intel_pmc_ipc:
- Avoid pending IPC1 command during legacy suspend
- Fix GCR register base address and length
asus-nb-wmi:
- add wapf=4 quirk for ASUS X75VD
intel_telemetry_pltdrv:
- Change verbosity control bits
dell-rbtn:
- Add a comment about the XPS 13 9350
dell-wmi, dell-laptop:
- depends DMI
dell-wmi:
- support Dell Inspiron M5110
- properly process Dell Instant Launch hotkey
- enable receiving WMI events on Dell Vostro V131
- Support new hotkeys on the XPS 13 9350 (Skylake)
- Clean up hotkey table size check
- Stop storing pointers to DMI tables
dell-laptop:
- move dell_smi_error() to dell-smbios
- use dell_smbios_find_token() instead of find_token_location()
- use dell_smbios_find_token() instead of find_token_id()
- extract SMBIOS-related code to a separate module
dell-smbios:
- rename dell_smi_error() to dell_smbios_error()
- make da_tokens static
- remove find_token_{id,location}()
- implement new function for finding DMI table 0xDA tokens
- make the SMBIOS buffer static
- return the SMBIOS buffer from dell_smbios_get_buffer()
- don't return an SMBIOS buffer from dell_smbios_send_request()
- don't pass an SMBIOS buffer to dell_smbios_send_request()
- rename dell_send_request() to dell_smbios_send_request()
- rename release_buffer() to dell_smbios_release_buffer()
- rename clear_buffer() to dell_smbios_clear_buffer()
- rename get_buffer() to dell_smbios_get_buffer()
dell-led:
- use dell_smbios_send_request() for performing SMBIOS calls
- use dell_smbios_find_token() for finding mic DMI tokens
toshiba_acpi:
- Add a module parameter to disable hotkeys registration
- Add sysfs entries for the Cooling Method feature
- Add support for cooling method feature
Documentation/ABI:
- Update sysfs-driver-toshiba_acpi file
thinkpad_acpi:
- Remove ambiguous logging for "Unsupported brightness interface"
alienware-wmi:
- whitespace improvements
- Add support for two new systems: ASM200 and ASM201.
- Add support for deep sleep control.
- Add initial support for alienware graphics amplifier.
- Add support for new platform: X51-R3
- Clean up whitespace for ASM100 platform"
* tag 'platform-drivers-x86-v4.6-1' of git://git.infradead.org/users/dvhart/linux-platform-drivers-x86: (47 commits)
hp-wmi: Remove GPS rfkill support via pre-2009 interface
hp-wmi: fix unregister order in hp_wmi_rfkill_setup() once again
dell-wmi: support Dell Inspiron M5110
dell-wmi: properly process Dell Instant Launch hotkey
dell-wmi: enable receiving WMI events on Dell Vostro V131
dell-smbios: rename dell_smi_error() to dell_smbios_error()
dell-laptop: move dell_smi_error() to dell-smbios
ideapad-laptop: Add ideapad Y700 (15) to the no_hw_rfkill DMI list
fujitsu-laptop: Support radio toggle button
intel-hid: allocate correct amount of memory for private struct
platform/x86: Make intel_scu_ipc explicitly non-modular
intel_pmc_ipc: Avoid pending IPC1 command during legacy suspend
intel_pmc_ipc: Fix GCR register base address and length
asus-nb-wmi: add wapf=4 quirk for ASUS X75VD
intel_telemetry_pltdrv: Change verbosity control bits
dell-rbtn: Add a comment about the XPS 13 9350
dell-wmi: Support new hotkeys on the XPS 13 9350 (Skylake)
dell-wmi: Clean up hotkey table size check
dell-wmi, dell-laptop: depends DMI
dell-wmi: Stop storing pointers to DMI tables
...
This commit is contained in:
commit
5a010c73cd
21 changed files with 1026 additions and 536 deletions
|
|
@ -443,6 +443,7 @@ config LEDS_DELL_NETBOOKS
|
|||
tristate "External LED on Dell Business Netbooks"
|
||||
depends on LEDS_CLASS
|
||||
depends on X86 && ACPI_WMI
|
||||
depends on DELL_SMBIOS
|
||||
help
|
||||
This adds support for the Latitude 2100 and similar
|
||||
notebooks that have an external LED.
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@
|
|||
#include <linux/module.h>
|
||||
#include <linux/dmi.h>
|
||||
#include <linux/dell-led.h>
|
||||
#include "../platform/x86/dell-smbios.h"
|
||||
|
||||
MODULE_AUTHOR("Louis Davis/Jim Dailey");
|
||||
MODULE_DESCRIPTION("Dell LED Control Driver");
|
||||
|
|
@ -42,120 +43,32 @@ MODULE_ALIAS("wmi:" DELL_LED_BIOS_GUID);
|
|||
#define CMD_LED_OFF 17
|
||||
#define CMD_LED_BLINK 18
|
||||
|
||||
struct app_wmi_args {
|
||||
u16 class;
|
||||
u16 selector;
|
||||
u32 arg1;
|
||||
u32 arg2;
|
||||
u32 arg3;
|
||||
u32 arg4;
|
||||
u32 res1;
|
||||
u32 res2;
|
||||
u32 res3;
|
||||
u32 res4;
|
||||
char dummy[92];
|
||||
};
|
||||
|
||||
#define GLOBAL_MIC_MUTE_ENABLE 0x364
|
||||
#define GLOBAL_MIC_MUTE_DISABLE 0x365
|
||||
|
||||
struct dell_bios_data_token {
|
||||
u16 tokenid;
|
||||
u16 location;
|
||||
u16 value;
|
||||
};
|
||||
|
||||
struct __attribute__ ((__packed__)) dell_bios_calling_interface {
|
||||
struct dmi_header header;
|
||||
u16 cmd_io_addr;
|
||||
u8 cmd_io_code;
|
||||
u32 supported_cmds;
|
||||
struct dell_bios_data_token damap[];
|
||||
};
|
||||
|
||||
static struct dell_bios_data_token dell_mic_tokens[2];
|
||||
|
||||
static int dell_wmi_perform_query(struct app_wmi_args *args)
|
||||
{
|
||||
struct app_wmi_args *bios_return;
|
||||
union acpi_object *obj;
|
||||
struct acpi_buffer input;
|
||||
struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL };
|
||||
acpi_status status;
|
||||
u32 rc = -EINVAL;
|
||||
|
||||
input.length = 128;
|
||||
input.pointer = args;
|
||||
|
||||
status = wmi_evaluate_method(DELL_APP_GUID, 0, 1, &input, &output);
|
||||
if (!ACPI_SUCCESS(status))
|
||||
goto err_out0;
|
||||
|
||||
obj = output.pointer;
|
||||
if (!obj)
|
||||
goto err_out0;
|
||||
|
||||
if (obj->type != ACPI_TYPE_BUFFER)
|
||||
goto err_out1;
|
||||
|
||||
bios_return = (struct app_wmi_args *)obj->buffer.pointer;
|
||||
rc = bios_return->res1;
|
||||
if (rc)
|
||||
goto err_out1;
|
||||
|
||||
memcpy(args, bios_return, sizeof(struct app_wmi_args));
|
||||
rc = 0;
|
||||
|
||||
err_out1:
|
||||
kfree(obj);
|
||||
err_out0:
|
||||
return rc;
|
||||
}
|
||||
|
||||
static void __init find_micmute_tokens(const struct dmi_header *dm, void *dummy)
|
||||
{
|
||||
struct dell_bios_calling_interface *calling_interface;
|
||||
struct dell_bios_data_token *token;
|
||||
int token_size = sizeof(struct dell_bios_data_token);
|
||||
int i = 0;
|
||||
|
||||
if (dm->type == 0xda && dm->length > 17) {
|
||||
calling_interface = container_of(dm,
|
||||
struct dell_bios_calling_interface, header);
|
||||
|
||||
token = &calling_interface->damap[i];
|
||||
while (token->tokenid != 0xffff) {
|
||||
if (token->tokenid == GLOBAL_MIC_MUTE_DISABLE)
|
||||
memcpy(&dell_mic_tokens[0], token, token_size);
|
||||
else if (token->tokenid == GLOBAL_MIC_MUTE_ENABLE)
|
||||
memcpy(&dell_mic_tokens[1], token, token_size);
|
||||
|
||||
i++;
|
||||
token = &calling_interface->damap[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int dell_micmute_led_set(int state)
|
||||
{
|
||||
struct app_wmi_args args;
|
||||
struct dell_bios_data_token *token;
|
||||
struct calling_interface_buffer *buffer;
|
||||
struct calling_interface_token *token;
|
||||
|
||||
if (!wmi_has_guid(DELL_APP_GUID))
|
||||
return -ENODEV;
|
||||
|
||||
if (state == 0 || state == 1)
|
||||
token = &dell_mic_tokens[state];
|
||||
if (state == 0)
|
||||
token = dell_smbios_find_token(GLOBAL_MIC_MUTE_DISABLE);
|
||||
else if (state == 1)
|
||||
token = dell_smbios_find_token(GLOBAL_MIC_MUTE_ENABLE);
|
||||
else
|
||||
return -EINVAL;
|
||||
|
||||
memset(&args, 0, sizeof(struct app_wmi_args));
|
||||
if (!token)
|
||||
return -ENODEV;
|
||||
|
||||
args.class = 1;
|
||||
args.arg1 = token->location;
|
||||
args.arg2 = token->value;
|
||||
|
||||
dell_wmi_perform_query(&args);
|
||||
buffer = dell_smbios_get_buffer();
|
||||
buffer->input[0] = token->location;
|
||||
buffer->input[1] = token->value;
|
||||
dell_smbios_send_request(1, 0);
|
||||
dell_smbios_release_buffer();
|
||||
|
||||
return state;
|
||||
}
|
||||
|
|
@ -177,14 +90,6 @@ int dell_app_wmi_led_set(int whichled, int on)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(dell_app_wmi_led_set);
|
||||
|
||||
static int __init dell_micmute_led_init(void)
|
||||
{
|
||||
memset(dell_mic_tokens, 0, sizeof(struct dell_bios_data_token) * 2);
|
||||
dmi_walk(find_micmute_tokens, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct bios_args {
|
||||
unsigned char length;
|
||||
unsigned char result_code;
|
||||
|
|
@ -330,9 +235,6 @@ static int __init dell_led_init(void)
|
|||
if (!wmi_has_guid(DELL_LED_BIOS_GUID) && !wmi_has_guid(DELL_APP_GUID))
|
||||
return -ENODEV;
|
||||
|
||||
if (wmi_has_guid(DELL_APP_GUID))
|
||||
error = dell_micmute_led_init();
|
||||
|
||||
if (wmi_has_guid(DELL_LED_BIOS_GUID)) {
|
||||
error = led_off();
|
||||
if (error != 0)
|
||||
|
|
|
|||
Loading…
Reference in a new issue