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 <johan...@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" }
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to