svn commit: r298937 - head/sys/dev/asmc

Adrian Chadd adrian at FreeBSD.org
Mon May 2 19:15:17 UTC 2016


Author: adrian
Date: Mon May  2 19:15:16 2016
New Revision: 298937
URL: https://svnweb.freebsd.org/changeset/base/298937

Log:
  [asmc] add support for more models and restore keyboard backlight after resume.
  
  This patch adds support for restoring backlight after resume and adds models
  Macbook3,1
  MacbookAir5,1
  MacbookAir5,2
  
  It also incorporates fixes for bug #175260, bug #203610 and bug #203512
  so those can be closed if this patch is applied.
  
  PR:		kern/209156
  PR: kern/175260
  PR: kern/203610
  PR: kern/203512
  Submitted by:	Johannes Lundberg <johannes at brilliantservice.co.jp>

Modified:
  head/sys/dev/asmc/asmc.c
  head/sys/dev/asmc/asmcvar.h

Modified: head/sys/dev/asmc/asmc.c
==============================================================================
--- head/sys/dev/asmc/asmc.c	Mon May  2 19:07:44 2016	(r298936)
+++ head/sys/dev/asmc/asmc.c	Mon May  2 19:15:16 2016	(r298937)
@@ -63,6 +63,7 @@ __FBSDID("$FreeBSD$");
 static int 	asmc_probe(device_t dev);
 static int 	asmc_attach(device_t dev);
 static int 	asmc_detach(device_t dev);
+static int 	asmc_resume(device_t dev);
 
 /*
  * SMC functions.
@@ -137,10 +138,18 @@ static struct asmc_model *asmc_match(dev
 #define ASMC_SMS_FUNCS	asmc_mb_sysctl_sms_x, asmc_mb_sysctl_sms_y, \
 			asmc_mb_sysctl_sms_z
 
+#define ASMC_SMS_FUNCS_DISABLED NULL,NULL,NULL
+
 #define ASMC_FAN_FUNCS	asmc_mb_sysctl_fanid, asmc_mb_sysctl_fanspeed, asmc_mb_sysctl_fansafespeed, \
 			asmc_mb_sysctl_fanminspeed, \
 			asmc_mb_sysctl_fanmaxspeed, \
 			asmc_mb_sysctl_fantargetspeed
+
+#define ASMC_FAN_FUNCS2	asmc_mb_sysctl_fanid, asmc_mb_sysctl_fanspeed, NULL, \
+			asmc_mb_sysctl_fanminspeed, \
+			asmc_mb_sysctl_fanmaxspeed, \
+			asmc_mb_sysctl_fantargetspeed
+
 #define ASMC_LIGHT_FUNCS asmc_mbp_sysctl_light_left, \
 			 asmc_mbp_sysctl_light_right, \
 			 asmc_mbp_sysctl_light_control
@@ -158,6 +167,12 @@ struct asmc_model asmc_models[] = {
 	  ASMC_MB_TEMPS, ASMC_MB_TEMPNAMES, ASMC_MB_TEMPDESCS
 	},
 
+	{
+	  "MacBook3,1", "Apple SMC MacBook Core 2 Duo",
+	  ASMC_SMS_FUNCS, ASMC_FAN_FUNCS, NULL, NULL, NULL,
+	  ASMC_MB31_TEMPS, ASMC_MB31_TEMPNAMES, ASMC_MB31_TEMPDESCS
+	},
+
 	{ 
 	  "MacBookPro1,1", "Apple SMC MacBook Pro Core Duo (15-inch)",
 	  ASMC_SMS_FUNCS, ASMC_FAN_FUNCS, ASMC_LIGHT_FUNCS,
@@ -260,12 +275,30 @@ struct asmc_model asmc_models[] = {
 	  ASMC_MBA3_TEMPS, ASMC_MBA3_TEMPNAMES, ASMC_MBA3_TEMPDESCS
 	},	
 
+	{
+	  "MacBookAir5,1", "Apple SMC MacBook Air 11-inch (Mid 2012)",
+	  ASMC_SMS_FUNCS_DISABLED,
+	  ASMC_FAN_FUNCS2, 
+	  ASMC_LIGHT_FUNCS,
+	  ASMC_MBA5_TEMPS, ASMC_MBA5_TEMPNAMES, ASMC_MBA5_TEMPDESCS
+	},	
+
+	{
+	  "MacBookAir5,2", "Apple SMC MacBook Air 13-inch (Mid 2012)",
+	  ASMC_SMS_FUNCS_DISABLED,
+	  ASMC_FAN_FUNCS2, 
+	  ASMC_LIGHT_FUNCS,
+	  ASMC_MBA5_TEMPS, ASMC_MBA5_TEMPNAMES, ASMC_MBA5_TEMPDESCS
+	},	
+
 	
 	{ NULL, NULL }
 };
 
 #undef ASMC_SMS_FUNCS
+#undef ASMC_SMS_FUNCS_DISABLED
 #undef ASMC_FAN_FUNCS
+#undef ASMC_FAN_FUNCS2
 #undef ASMC_LIGHT_FUNCS
 
 /*
@@ -275,6 +308,7 @@ static device_method_t	asmc_methods[] = 
 	DEVMETHOD(device_probe,		asmc_probe),
 	DEVMETHOD(device_attach,	asmc_attach),
 	DEVMETHOD(device_detach,	asmc_detach),
+	DEVMETHOD(device_resume,	asmc_resume),
 
 	{ 0, 0 }
 };
@@ -301,6 +335,8 @@ static char *asmc_ids[] = { "APP0001", N
 
 static devclass_t asmc_devclass;
 
+static unsigned int light_control = 0;
+
 DRIVER_MODULE(asmc, acpi, asmc_driver, asmc_devclass, NULL, NULL);
 MODULE_DEPEND(asmc, acpi, 1, 1, 1);
 
@@ -581,6 +617,17 @@ asmc_detach(device_t dev)
 	return (0);
 }
 
+static int
+asmc_resume(device_t dev)
+{
+    uint8_t buf[2];
+    buf[0] = light_control;
+    buf[1] = 0x00;
+    asmc_key_write(dev, ASMC_KEY_LIGHTVALUE, buf, sizeof buf);
+    return (0);
+}
+
+
 #ifdef DEBUG
 void asmc_dumpall(device_t dev)
 {
@@ -879,7 +926,7 @@ out:
 		snprintf(buf, sizeof(buf), "key %d is: %s, type %s "
 		    "(len %d), data", number, key, type, maxlen);
 		for (i = 0; i < maxlen; i++) {
-			snprintf(buf2, sizeof(buf), " %02x", v[i]);
+			snprintf(buf2, sizeof(buf2), " %02x", v[i]);
 			strlcat(buf, buf2, sizeof(buf));
 		}
 		strlcat(buf, " \n", sizeof(buf));
@@ -1324,17 +1371,16 @@ asmc_mbp_sysctl_light_control(SYSCTL_HAN
 	device_t dev = (device_t) arg1;
 	uint8_t buf[2];
 	int error;
-	static unsigned int level;
 	int v;
 
-	v = level;
+	v = light_control;
 	error = sysctl_handle_int(oidp, &v, 0, req);
 
 	if (error == 0 && req->newptr != NULL) {
 		if (v < 0 || v > 255)
 			return (EINVAL);
-		level = v;
-		buf[0] = level;
+		light_control = v;
+		buf[0] = light_control;
 		buf[1] = 0x00;
 		asmc_key_write(dev, ASMC_KEY_LIGHTVALUE, buf, sizeof buf);
 	}

Modified: head/sys/dev/asmc/asmcvar.h
==============================================================================
--- head/sys/dev/asmc/asmcvar.h	Mon May  2 19:07:44 2016	(r298936)
+++ head/sys/dev/asmc/asmcvar.h	Mon May  2 19:15:16 2016	(r298937)
@@ -144,7 +144,19 @@ struct asmc_softc {
 				  "Northbridge Point 2", "Heatsink 1", \
 				  "Heatsink 2", "Memory Bank A", }
 
-#define ASMC_MBP_TEMPS		{ "TB0T", "Th0H", "Th1H", "Tm0P", \
+#define ASMC_MB31_TEMPS		{ "TB0T", "TN0P",  "Th0H", "Th1H", \
+				  "TM0P", NULL }
+
+#define ASMC_MB31_TEMPNAMES	{ "enclosure", "northbridge1", \
+				  "heatsink1", "heatsink2", \
+				  "memory", }
+
+#define ASMC_MB31_TEMPDESCS	{ "Enclosure Bottomside", \
+				  "Northbridge Point 1", \
+				  "Heatsink 1","Heatsink 2" \
+				  "Memory Bank A", } 
+
+#define ASMC_MBP_TEMPS		{ "TB0T", "Th0H", "Th1H", "Tm0P",	\
 				  "TG0H", "TG0P", "TG0T", NULL }
 
 #define ASMC_MBP_TEMPNAMES	{ "enclosure", "heatsink1", \
@@ -337,3 +349,24 @@ struct asmc_softc {
 
 #define	ASMC_MBA3_TEMPDESCS	{ "Enclosure Bottom", "TB1T", "TB2T", \
 				  "TC0D", "TC0E", "TC0P" }
+
+#define	ASMC_MBA5_TEMPS		{ "TB0T", "TB1T", "TB2T", "TC0C", \
+                         	  "TC0D", "TC0E", "TC0F", "TC0P", \
+	                          "TC1C", "TC2C", "TCGC", "TCSA", \
+	                          "TCXC", "THSP", "TM0P", "TPCD", \
+	                          "Ta0P", "Th1H", "Tm0P", "Tm1P", \
+	                          "Ts0P", "Ts0S", NULL }
+
+#define	ASMC_MBA5_TEMPNAMES	{ "enclosure1", "enclosure2", "enclosure3", "TC0C", \
+	                          "cpudiode", "cputemp1", "cputemp2", "cpuproximity", \
+	                          "cpucore1", "cpucore2", "cpupeci", "pecisa", \
+	                          "TCXC", "THSP", "memorybank", "pchdie", \
+	                          "Ta0P", "heatpipe", "mainboardproximity1", "mainboardproximity2", \
+	                          "palmrest", "memoryproximity" }
+
+#define	ASMC_MBA5_TEMPDESCS	{ "Enclosure Bottom 1", "Enclosure Bottom 2", "Enclosure Bottom 3", "TC0C",\
+	                          "CPU Diode", "CPU Temp 1", "CPU Temp 2", "CPU Proximity", \
+	                          "CPU Core 1", "CPU Core 2", "CPU Peci Core", "PECI SA", \
+	                          "TCXC", "THSP", "Memory Bank A", "PCH Die", \
+	                          "Ta0P", "Heatpipe", "Mainboard Proximity 1", "Mainboard Proximity 2", \
+	                          "Palm Rest", "Memory Proximity" }


More information about the svn-src-head mailing list