Hi tech@,

This is an attempt at adding lid state detection in ykbec(4). Tested on
a Lemote Yeeloong 8101B.

Comments? OK?

Index: share/man/man4/man4.loongson/ykbec.4
===================================================================
RCS file: /cvs/src/share/man/man4/man4.loongson/ykbec.4,v
retrieving revision 1.3
diff -u -p -r1.3 ykbec.4
--- share/man/man4/man4.loongson/ykbec.4        25 Feb 2010 10:07:11 -0000      
1.3
+++ share/man/man4/man4.loongson/ykbec.4        12 Nov 2016 15:10:03 -0000
@@ -40,9 +40,11 @@ Battery control
 Button events
 .It
 Power management
+.It
+Lid state
 .El
 .Pp
-Fan and battery information is made available via the
+Fan, battery, and lid information is made available via the
 .Xr sysctl 3
 hardware sensor interface.
 Not all the device interfaces are supported under
Index: sys/arch/loongson/dev/kb3310.c
===================================================================
RCS file: /cvs/src/sys/arch/loongson/dev/kb3310.c,v
retrieving revision 1.20
diff -u -p -r1.20 kb3310.c
--- sys/arch/loongson/dev/kb3310.c      8 Jan 2016 15:54:13 -0000       1.20
+++ sys/arch/loongson/dev/kb3310.c      12 Nov 2016 15:10:05 -0000
@@ -76,8 +76,10 @@ static const struct {
 #define YKBEC_CHARGING 7
        { "Battery charging",           SENSOR_INDICATOR },
 #define YKBEC_AC       8
-       { "AC-Power",                   SENSOR_INDICATOR }
-#define YKBEC_NSENSORS 9
+       { "AC-Power",                   SENSOR_INDICATOR },
+#define YKBEC_LID      9
+       { "Lid open",                   SENSOR_INDICATOR }
+#define YKBEC_NSENSORS 10
 };
 
 struct ykbec_softc {
@@ -310,6 +312,10 @@ ykbec_read16(struct ykbec_softc *mcsc, u
 #define        REG_FAN_ON                      1
 #define REG_FAN_OFF                    0
 
+#define REG_LID_STATE                  0xf4bd
+#define LID_OPEN                       1
+#define LID_CLOSED                     0
+
 #define YKBEC_SCI_IRQ                  0xa
 
 #ifdef DEBUG
@@ -337,7 +343,7 @@ ykbec_refresh(void *arg)
 {
        struct ykbec_softc *sc = (struct ykbec_softc *)arg;
        u_int val, bat_charge, bat_status, charge_status, bat_state, power_flag;
-       u_int cap_pct, fullcap;
+       u_int lid_state, cap_pct, fullcap;
        int current;
 #if NAPM > 0
        struct apm_power_info old;
@@ -376,11 +382,14 @@ ykbec_refresh(void *arg)
        charge_status = ykbec_read(sc, REG_CHARGE_STATUS);
        bat_state = ykbec_read(sc, REG_BAT_STATE);
        power_flag = ykbec_read(sc, REG_POWER_FLAG);
+       lid_state = ykbec_read(sc, REG_LID_STATE);
 
        sc->sc_sensor[YKBEC_CHARGING].value = !!ISSET(bat_state,
            BAT_STATE_CHARGING);
        sc->sc_sensor[YKBEC_AC].value = !!ISSET(power_flag,
            POWER_FLAG_ADAPTER_IN);
+
+       sc->sc_sensor[YKBEC_LID].value = !!ISSET(lid_state, LID_OPEN);
 
        sc->sc_sensor[YKBEC_CAP].status = ISSET(bat_status, BAT_STATUS_BAT_LOW) 
?
                SENSOR_S_CRIT : SENSOR_S_OK;

Reply via email to