Commit ec766278 authored by Lee, Chun-Yi's avatar Lee, Chun-Yi Committed by Greg Kroah-Hartman

msi-laptop: Add resume method for set the SCM load again

Implement the resume method for set the load SCM flag after system reusme.
Without this patch, the wifi function key on SCM model will back to BIOS
control mode then confuse with the userland software control.
e.g. MSI N034
Signed-off-by: default avatarLee, Chun-Yi <jlee@novell.com>
Cc: Lennart Poettering <mzxreary@0pointer.de>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 472ea12d
...@@ -77,6 +77,8 @@ ...@@ -77,6 +77,8 @@
#define MSI_STANDARD_EC_SCM_LOAD_ADDRESS 0x2d #define MSI_STANDARD_EC_SCM_LOAD_ADDRESS 0x2d
#define MSI_STANDARD_EC_SCM_LOAD_MASK (1 << 0) #define MSI_STANDARD_EC_SCM_LOAD_MASK (1 << 0)
static int msi_laptop_resume(struct platform_device *device);
static int force; static int force;
module_param(force, bool, 0); module_param(force, bool, 0);
MODULE_PARM_DESC(force, "Force driver load, ignore DMI data"); MODULE_PARM_DESC(force, "Force driver load, ignore DMI data");
...@@ -395,7 +397,8 @@ static struct platform_driver msipf_driver = { ...@@ -395,7 +397,8 @@ static struct platform_driver msipf_driver = {
.driver = { .driver = {
.name = "msi-laptop-pf", .name = "msi-laptop-pf",
.owner = THIS_MODULE, .owner = THIS_MODULE,
} },
.resume = msi_laptop_resume,
}; };
static struct platform_device *msipf_device; static struct platform_device *msipf_device;
...@@ -584,6 +587,27 @@ static int rfkill_init(struct platform_device *sdev) ...@@ -584,6 +587,27 @@ static int rfkill_init(struct platform_device *sdev)
return retval; return retval;
} }
static int msi_laptop_resume(struct platform_device *device)
{
u8 data;
int result;
if (!load_scm_model)
return 0;
/* set load SCM to disable hardware control by fn key */
result = ec_read(MSI_STANDARD_EC_SCM_LOAD_ADDRESS, &data);
if (result < 0)
return result;
result = ec_write(MSI_STANDARD_EC_SCM_LOAD_ADDRESS,
data | MSI_STANDARD_EC_SCM_LOAD_MASK);
if (result < 0)
return result;
return 0;
}
static int load_scm_model_init(struct platform_device *sdev) static int load_scm_model_init(struct platform_device *sdev)
{ {
u8 data; u8 data;
......
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