diff options
| author | John W. Linville <linville@tuxdriver.com> | 2012-09-07 15:07:55 -0400 | 
|---|---|---|
| committer | John W. Linville <linville@tuxdriver.com> | 2012-09-07 15:07:55 -0400 | 
| commit | fac805f8c198092de9a2842efd7f5022e2937b18 (patch) | |
| tree | 7557809c373f97a343c427d8fded0696060394ce /drivers/platform/x86/asus-nb-wmi.c | |
| parent | 2461c7d60f9f3821274e4acf9019cba8b82c94b5 (diff) | |
| parent | f10723841e624c0726c70356b31d91befed01dd6 (diff) | |
| download | olio-linux-3.10-fac805f8c198092de9a2842efd7f5022e2937b18.tar.xz olio-linux-3.10-fac805f8c198092de9a2842efd7f5022e2937b18.zip  | |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless
Diffstat (limited to 'drivers/platform/x86/asus-nb-wmi.c')
| -rw-r--r-- | drivers/platform/x86/asus-nb-wmi.c | 108 | 
1 files changed, 105 insertions, 3 deletions
diff --git a/drivers/platform/x86/asus-nb-wmi.c b/drivers/platform/x86/asus-nb-wmi.c index 99a30b51313..6b0ebdeae91 100644 --- a/drivers/platform/x86/asus-nb-wmi.c +++ b/drivers/platform/x86/asus-nb-wmi.c @@ -26,6 +26,7 @@  #include <linux/input.h>  #include <linux/input/sparse-keymap.h>  #include <linux/fb.h> +#include <linux/dmi.h>  #include "asus-wmi.h" @@ -48,18 +49,115 @@ MODULE_ALIAS("wmi:"ASUS_NB_WMI_EVENT_GUID);   *  1  | Hardware  | Software   *  4  | Software  | Software   */ -static uint wapf; +static int wapf = -1;  module_param(wapf, uint, 0444);  MODULE_PARM_DESC(wapf, "WAPF value"); +static struct quirk_entry *quirks; +  static struct quirk_entry quirk_asus_unknown = { +	.wapf = 0, +}; + +static struct quirk_entry quirk_asus_x401u = { +	.wapf = 4, +}; + +static int dmi_matched(const struct dmi_system_id *dmi) +{ +	quirks = dmi->driver_data; +	return 1; +} + +static struct dmi_system_id asus_quirks[] = { +	{ +		.callback = dmi_matched, +		.ident = "ASUSTeK COMPUTER INC. X401U", +		.matches = { +			DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), +			DMI_MATCH(DMI_PRODUCT_NAME, "X401U"), +		}, +		.driver_data = &quirk_asus_x401u, +	}, +	{ +		.callback = dmi_matched, +		.ident = "ASUSTeK COMPUTER INC. X401A1", +		.matches = { +			DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), +			DMI_MATCH(DMI_PRODUCT_NAME, "X401A1"), +		}, +		.driver_data = &quirk_asus_x401u, +	}, +	{ +		.callback = dmi_matched, +		.ident = "ASUSTeK COMPUTER INC. X501U", +		.matches = { +			DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), +			DMI_MATCH(DMI_PRODUCT_NAME, "X501U"), +		}, +		.driver_data = &quirk_asus_x401u, +	}, +	{ +		.callback = dmi_matched, +		.ident = "ASUSTeK COMPUTER INC. X501A1", +		.matches = { +			DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), +			DMI_MATCH(DMI_PRODUCT_NAME, "X501A1"), +		}, +		.driver_data = &quirk_asus_x401u, +	}, +	{ +		.callback = dmi_matched, +		.ident = "ASUSTeK COMPUTER INC. X55A", +		.matches = { +			DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), +			DMI_MATCH(DMI_PRODUCT_NAME, "X55A"), +		}, +		.driver_data = &quirk_asus_x401u, +	}, +	{ +		.callback = dmi_matched, +		.ident = "ASUSTeK COMPUTER INC. X55C", +		.matches = { +			DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), +			DMI_MATCH(DMI_PRODUCT_NAME, "X55C"), +		}, +		.driver_data = &quirk_asus_x401u, +	}, +	{ +		.callback = dmi_matched, +		.ident = "ASUSTeK COMPUTER INC. X55U", +		.matches = { +			DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), +			DMI_MATCH(DMI_PRODUCT_NAME, "X55U"), +		}, +		.driver_data = &quirk_asus_x401u, +	}, +	{ +		.callback = dmi_matched, +		.ident = "ASUSTeK COMPUTER INC. X55VD", +		.matches = { +			DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), +			DMI_MATCH(DMI_PRODUCT_NAME, "X55VD"), +		}, +		.driver_data = &quirk_asus_x401u, +	}, +	{},  };  static void asus_nb_wmi_quirks(struct asus_wmi_driver *driver)  { -	driver->quirks = &quirk_asus_unknown; -	driver->quirks->wapf = wapf; +	quirks = &quirk_asus_unknown; +	dmi_check_system(asus_quirks); + +	driver->quirks = quirks;  	driver->panel_power = FB_BLANK_UNBLANK; + +	/* overwrite the wapf setting if the wapf paramater is specified */ +	if (wapf != -1) +		quirks->wapf = wapf; +	else +		wapf = quirks->wapf;  }  static const struct key_entry asus_nb_wmi_keymap[] = { @@ -94,6 +192,10 @@ static const struct key_entry asus_nb_wmi_keymap[] = {  	{ KE_KEY, 0x8A, { KEY_PROG1 } },  	{ KE_KEY, 0x95, { KEY_MEDIA } },  	{ KE_KEY, 0x99, { KEY_PHONE } }, +	{ KE_KEY, 0xA0, { KEY_SWITCHVIDEOMODE } }, /* SDSP HDMI only */ +	{ KE_KEY, 0xA1, { KEY_SWITCHVIDEOMODE } }, /* SDSP LCD + HDMI */ +	{ KE_KEY, 0xA2, { KEY_SWITCHVIDEOMODE } }, /* SDSP CRT + HDMI */ +	{ KE_KEY, 0xA3, { KEY_SWITCHVIDEOMODE } }, /* SDSP TV + HDMI */  	{ KE_KEY, 0xb5, { KEY_CALC } },  	{ KE_KEY, 0xc4, { KEY_KBDILLUMUP } },  	{ KE_KEY, 0xc5, { KEY_KBDILLUMDOWN } },  |