aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/platform/x86/msi-laptop.c
diff options
context:
space:
mode:
authorLee, Chun-Yi <jlee@novell.com>2010-01-26 11:13:45 -0500
committerGreg Kroah-Hartman <gregkh@suse.de>2010-03-07 20:04:53 -0500
commitec766278ba927f3d3c75211ea7697aae37f327f0 (patch)
tree71e40d734fa95525e2968d6620c11c73be37b080 /drivers/platform/x86/msi-laptop.c
parent472ea12d1a265c868e1605abb59bf21f595eedfc (diff)
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: Lee, Chun-Yi <jlee@novell.com> Cc: Lennart Poettering <mzxreary@0pointer.de> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/platform/x86/msi-laptop.c')
-rw-r--r--drivers/platform/x86/msi-laptop.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/drivers/platform/x86/msi-laptop.c b/drivers/platform/x86/msi-laptop.c
index ff21d1acf3be..af1b62f76117 100644
--- a/drivers/platform/x86/msi-laptop.c
+++ b/drivers/platform/x86/msi-laptop.c
@@ -77,6 +77,8 @@
77#define MSI_STANDARD_EC_SCM_LOAD_ADDRESS 0x2d 77#define MSI_STANDARD_EC_SCM_LOAD_ADDRESS 0x2d
78#define MSI_STANDARD_EC_SCM_LOAD_MASK (1 << 0) 78#define MSI_STANDARD_EC_SCM_LOAD_MASK (1 << 0)
79 79
80static int msi_laptop_resume(struct platform_device *device);
81
80static int force; 82static int force;
81module_param(force, bool, 0); 83module_param(force, bool, 0);
82MODULE_PARM_DESC(force, "Force driver load, ignore DMI data"); 84MODULE_PARM_DESC(force, "Force driver load, ignore DMI data");
@@ -395,7 +397,8 @@ static struct platform_driver msipf_driver = {
395 .driver = { 397 .driver = {
396 .name = "msi-laptop-pf", 398 .name = "msi-laptop-pf",
397 .owner = THIS_MODULE, 399 .owner = THIS_MODULE,
398 } 400 },
401 .resume = msi_laptop_resume,
399}; 402};
400 403
401static struct platform_device *msipf_device; 404static struct platform_device *msipf_device;
@@ -584,6 +587,27 @@ err_bluetooth:
584 return retval; 587 return retval;
585} 588}
586 589
590static int msi_laptop_resume(struct platform_device *device)
591{
592 u8 data;
593 int result;
594
595 if (!load_scm_model)
596 return 0;
597
598 /* set load SCM to disable hardware control by fn key */
599 result = ec_read(MSI_STANDARD_EC_SCM_LOAD_ADDRESS, &data);
600 if (result < 0)
601 return result;
602
603 result = ec_write(MSI_STANDARD_EC_SCM_LOAD_ADDRESS,
604 data | MSI_STANDARD_EC_SCM_LOAD_MASK);
605 if (result < 0)
606 return result;
607
608 return 0;
609}
610
587static int load_scm_model_init(struct platform_device *sdev) 611static int load_scm_model_init(struct platform_device *sdev)
588{ 612{
589 u8 data; 613 u8 data;