MCPcopy Create free account
hub / github.com/F-Stack/f-stack / axp8xx_sysctl

Function axp8xx_sysctl

freebsd/arm/allwinner/axp81x.c:953–1055  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

951}
952
953static int
954axp8xx_sysctl(SYSCTL_HANDLER_ARGS)
955{
956 struct axp8xx_softc *sc;
957 device_t dev = arg1;
958 enum axp8xx_sensor sensor = arg2;
959 const struct axp8xx_config *c;
960 uint8_t data;
961 int val, i, found, batt_val;
962 uint8_t lo, hi;
963
964 sc = device_get_softc(dev);
965 c = sc->config;
966
967 for (found = 0, i = 0; i < sc->nsensors; i++) {
968 if (sc->sensors[i].id == sensor) {
969 found = 1;
970 break;
971 }
972 }
973
974 if (found == 0)
975 return (ENOENT);
976
977 switch (sensor) {
978 case AXP_SENSOR_ACIN_PRESENT:
979 if (axp8xx_read(dev, AXP_POWERSRC, &data, 1) == 0)
980 val = !!(data & AXP_POWERSRC_ACIN);
981 break;
982 case AXP_SENSOR_VBUS_PRESENT:
983 if (axp8xx_read(dev, AXP_POWERSRC, &data, 1) == 0)
984 val = !!(data & AXP_POWERSRC_VBUS);
985 break;
986 case AXP_SENSOR_BATT_PRESENT:
987 if (axp8xx_read(dev, AXP_POWERMODE, &data, 1) == 0) {
988 if (data & AXP_POWERMODE_BAT_VALID)
989 val = !!(data & AXP_POWERMODE_BAT_PRESENT);
990 }
991 break;
992 case AXP_SENSOR_BATT_CHARGING:
993 if (axp8xx_read(dev, AXP_POWERMODE, &data, 1) == 0)
994 val = !!(data & AXP_POWERMODE_BAT_CHARGING);
995 break;
996 case AXP_SENSOR_BATT_CHARGE_STATE:
997 if (axp8xx_read(dev, AXP_BAT_CAP, &data, 1) == 0 &&
998 (data & AXP_BAT_CAP_VALID) != 0) {
999 batt_val = (data & AXP_BAT_CAP_PERCENT);
1000 if (batt_val <= sc->shut_thres)
1001 val = BATT_CAPACITY_CRITICAL;
1002 else if (batt_val <= sc->warn_thres)
1003 val = BATT_CAPACITY_WARNING;
1004 else
1005 val = BATT_CAPACITY_NORMAL;
1006 }
1007 break;
1008 case AXP_SENSOR_BATT_CAPACITY_PERCENT:
1009 if (axp8xx_read(dev, AXP_BAT_CAP, &data, 1) == 0 &&
1010 (data & AXP_BAT_CAP_VALID) != 0)

Callers

nothing calls this directly

Calls 3

device_get_softcFunction · 0.85
axp8xx_readFunction · 0.85
sysctl_handle_opaqueFunction · 0.85

Tested by

no test coverage detected