Lines Matching +full:ts +full:- +full:attached

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
86 static int pmu_gettime(device_t dev, struct timespec *ts);
87 static int pmu_settime(device_t dev, struct timespec *ts);
115 * List of battery-related sysctls we might ask for
192 -1, -1, -1, -1, -1, -1, -1, -1,
193 -1, -1, -1, -1, -1, -1, -1, -1,
194 0x01, 0x01, -1, -1, -1, -1, -1, -1,
195 0x00, 0x00, -1, -1, -1, -1, -1, 0x00,
196 -1, 0x00, 0x02, 0x01, 0x01, -1, -1, -1,
197 0x00, -1, -1, -1, -1, -1, -1, -1,
198 0x04, 0x14, -1, 0x03, -1, -1, -1, -1,
199 0x00, 0x00, 0x02, 0x02, -1, -1, -1, -1,
200 0x01, 0x01, -1, -1, -1, -1, -1, -1,
201 0x00, 0x00, -1, -1, 0x01, -1, -1, -1,
202 0x01, 0x00, 0x02, 0x02, -1, 0x01, 0x03, 0x01,
203 0x00, 0x01, 0x00, 0x00, 0x00, -1, -1, -1,
204 0x02, -1, -1, -1, -1, -1, -1, -1,
205 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -1, -1,
206 0x01, 0x01, 0x01, -1, -1, -1, -1, -1,
207 0x00, 0x00, -1, -1, -1, 0x05, 0x04, 0x04,
208 0x04, -1, 0x00, -1, -1, -1, -1, -1,
209 0x00, -1, -1, -1, -1, -1, -1, -1,
210 0x01, 0x02, -1, -1, -1, -1, -1, -1,
211 0x00, 0x00, -1, -1, -1, -1, -1, -1,
212 0x02, 0x02, 0x02, 0x04, -1, 0x00, -1, -1,
213 0x01, 0x01, 0x03, 0x02, -1, -1, -1, -1,
214 -1, -1, -1, -1, -1, -1, -1, -1,
215 -1, -1, -1, -1, -1, -1, -1, -1,
216 -1, -1, -1, -1, -1, -1, -1, -1,
217 -1, -1, -1, -1, -1, -1, -1, -1,
218 0x00, -1, -1, -1, -1, -1, -1, -1,
219 0x01, 0x01, -1, -1, 0x00, 0x00, -1, -1,
220 -1, 0x04, 0x00, -1, -1, -1, -1, -1,
221 0x03, -1, 0x00, -1, 0x00, -1, -1, 0x00,
222 -1, -1, -1, -1, -1, -1, -1, -1,
223 -1, -1, -1, -1, -1, -1, -1, -1
229 -1, -1, -1, -1, -1, -1, -1, -1,
231 0x02, 0x02, -1, -1, -1, -1, -1, 0x00,
233 -1, -1, -1, -1, -1, -1, -1, -1,
235 0x05, 0x15, -1, 0x02, -1, -1, -1, -1,
237 0x02, 0x02, -1, -1, -1, -1, -1, -1,
239 0x02, 0x00, 0x03, 0x03, -1, -1, -1, -1,
241 0x04, 0x04, 0x03, 0x09, -1, -1, -1, -1,
243 -1, -1, -1, -1, -1, 0x01, 0x01, 0x01,
245 0x06, -1, -1, -1, -1, -1, -1, -1,
247 0x02, 0x02, -1, -1, -1, -1, -1, -1,
249 0x02, 0x00, 0x00, 0x00, -1, -1, -1, -1,
251 -1, -1, -1, -1, -1, -1, -1, -1,
253 -1, -1, -1, -1, -1, -1, -1, -1,
255 0x02, 0x02, -1, -1, 0x02, -1, -1, -1,
257 -1, -1, 0x02, -1, -1, -1, -1, 0x00,
259 -1, -1, -1, -1, -1, -1, -1, -1,
279 if (strcmp(type, "extint-gpio1") != 0) in pmuextint_probe()
291 if (strcmp(type, "via-pmu") != 0) in pmu_probe()
304 sc->sc_irqrid = 0; in setup_pmu_intr()
305 sc->sc_irq = bus_alloc_resource_any(extint, SYS_RES_IRQ, &sc->sc_irqrid, in setup_pmu_intr()
307 if (sc->sc_irq == NULL) { in setup_pmu_intr()
312 if (bus_setup_intr(dev, sc->sc_irq, INTR_TYPE_MISC | INTR_MPSAFE in setup_pmu_intr()
313 | INTR_ENTROPY, NULL, pmu_intr, dev, &sc->sc_ih) != 0) { in setup_pmu_intr()
315 bus_release_resource(dev, SYS_RES_IRQ, sc->sc_irqrid, in setup_pmu_intr()
316 sc->sc_irq); in setup_pmu_intr()
347 sc->sc_dev = dev; in pmu_attach()
349 sc->sc_memrid = 0; in pmu_attach()
350 sc->sc_memr = bus_alloc_resource_any(dev, SYS_RES_MEMORY, in pmu_attach()
351 &sc->sc_memrid, RF_ACTIVE); in pmu_attach()
353 mtx_init(&sc->sc_mutex,"pmu",NULL,MTX_DEF | MTX_RECURSE); in pmu_attach()
355 if (sc->sc_memr == NULL) { in pmu_attach()
361 * Our interrupt is attached to a GPIO pin. Depending on probe order, in pmu_attach()
371 sc->sc_autopoll = 0; in pmu_attach()
372 sc->sc_batteries = 0; in pmu_attach()
373 sc->adb_bus = NULL; in pmu_attach()
374 sc->sc_leddev = NULL; in pmu_attach()
402 sc->adb_bus = device_add_child(dev,"adb",DEVICE_UNIT_ANY); in pmu_attach()
405 if (strncmp(name, "power-mgt", 9) == 0) { in pmu_attach()
408 if (OF_getprop(child, "prim-info", prim_info, in pmu_attach()
410 sc->sc_batteries = (prim_info[6] >> 16) & 0xff; in pmu_attach()
412 if (bootverbose && sc->sc_batteries > 0) in pmu_attach()
414 sc->sc_batteries); in pmu_attach()
429 if (sc->sc_batteries > 0) { in pmu_attach()
448 for (i = 0; i < sc->sc_batteries; i++) { in pmu_attach()
506 sc->sc_leddev = led_create(pmu_set_sleepled, sc, "sleepled"); in pmu_attach()
536 if (sc->sc_leddev != NULL) in pmu_detach()
537 led_destroy(sc->sc_leddev); in pmu_detach()
539 bus_teardown_intr(dev, sc->sc_irq, sc->sc_ih); in pmu_detach()
540 bus_release_resource(dev, SYS_RES_IRQ, sc->sc_irqrid, sc->sc_irq); in pmu_detach()
541 bus_release_resource(dev, SYS_RES_MEMORY, sc->sc_memrid, sc->sc_memr); in pmu_detach()
542 mtx_destroy(&sc->sc_mutex); in pmu_detach()
550 return (bus_read_1(sc->sc_memr, offset)); in pmu_read_reg()
556 bus_write_1(sc->sc_memr, offset, value); in pmu_write_reg()
600 int i, rcv_len = -1; in pmu_send()
708 mtx_lock(&sc->sc_mutex); in pmu_intr()
713 mtx_unlock(&sc->sc_mutex); in pmu_intr()
723 * re-enable autopoll here whenever we receive an ACK for a in pmu_intr()
726 mtx_lock(&sc->sc_mutex); in pmu_intr()
729 if (sc->sc_autopoll) { in pmu_intr()
731 (sc->sc_autopoll >> 8) & 0xff, in pmu_intr()
732 sc->sc_autopoll & 0xff}; in pmu_intr()
738 mtx_unlock(&sc->sc_mutex); in pmu_intr()
740 adb_receive_raw_packet(sc->adb_bus,resp[1],resp[2], in pmu_intr()
741 len - 3,&resp[3]); in pmu_intr()
745 if ((resp[2] & PMU_ENV_LID_CLOSED) && (!sc->lid_closed)) { in pmu_intr()
746 sc->lid_closed = 1; in pmu_intr()
749 else if (!(resp[2] & PMU_ENV_LID_CLOSED) && (sc->lid_closed)) { in pmu_intr()
751 sc->lid_closed = 0; in pmu_intr()
776 mtx_lock(&sc->sc_mutex); in pmu_adb_send()
778 mtx_unlock(&sc->sc_mutex); in pmu_adb_send()
791 /* magical incantation to re-enable autopolling */ in pmu_adb_autopoll()
795 mtx_lock(&sc->sc_mutex); in pmu_adb_autopoll()
797 if (sc->sc_autopoll == mask) { in pmu_adb_autopoll()
798 mtx_unlock(&sc->sc_mutex); in pmu_adb_autopoll()
802 sc->sc_autopoll = mask & 0xffff; in pmu_adb_autopoll()
809 mtx_unlock(&sc->sc_mutex); in pmu_adb_autopoll()
838 mtx_lock(&sc->sc_mutex); in pmu_set_sleepled()
840 mtx_unlock(&sc->sc_mutex); in pmu_set_sleepled()
854 mtx_lock(&sc->sc_mutex); in pmu_server_mode()
856 mtx_unlock(&sc->sc_mutex); in pmu_server_mode()
866 if (error || !req->newptr) in pmu_server_mode()
878 mtx_lock(&sc->sc_mutex); in pmu_server_mode()
880 mtx_unlock(&sc->sc_mutex); in pmu_server_mode()
894 mtx_lock(&sc->sc_mutex); in pmu_query_battery()
896 mtx_unlock(&sc->sc_mutex); in pmu_query_battery()
899 return (-1); in pmu_query_battery()
906 info->state = resp[2]; in pmu_query_battery()
919 info->charge = resp[3]; in pmu_query_battery()
920 info->maxcharge = resp[4]; in pmu_query_battery()
922 info->current = (int8_t)resp[5]; in pmu_query_battery()
923 info->voltage = resp[6]; in pmu_query_battery()
928 * Byte 3-4 Charge in pmu_query_battery()
929 * Byte 5-6 Max Charge in pmu_query_battery()
930 * Byte 7-8 Current in pmu_query_battery()
931 * Byte 9-10 Voltage in pmu_query_battery()
934 info->charge = (resp[3] << 8) | resp[4]; in pmu_query_battery()
935 info->maxcharge = (resp[5] << 8) | resp[6]; in pmu_query_battery()
937 info->current = (int16_t)((resp[7] << 8) | resp[8]); in pmu_query_battery()
938 info->voltage = (resp[9] << 8) | resp[10]; in pmu_query_battery()
941 device_printf(sc->sc_dev, "Unknown battery info format (%d)!\n", in pmu_query_battery()
943 return (-1); in pmu_query_battery()
955 new_acline = (batt->state & PMU_PWR_AC_PRESENT) ? 1 : 0; in pmu_battery_notify()
956 old_acline = (old->state & PMU_PWR_AC_PRESENT) ? 1 : 0; in pmu_battery_notify()
996 if (error || !req->newptr) in pmu_battmon()
1066 result = (batt.maxcharge - batt.charge) /* mAh */ * 60 in pmu_battquery_sysctl()
1070 / (-batt.current /* mA */); in pmu_battquery_sysctl()
1078 result = -1; in pmu_battquery_sysctl()
1089 pmu_gettime(device_t dev, struct timespec *ts) in pmu_gettime() argument
1095 mtx_lock(&sc->sc_mutex); in pmu_gettime()
1097 mtx_unlock(&sc->sc_mutex); in pmu_gettime()
1100 ts->tv_sec = sec - DIFF19041970; in pmu_gettime()
1101 ts->tv_nsec = 0; in pmu_gettime()
1107 pmu_settime(device_t dev, struct timespec *ts) in pmu_settime() argument
1112 sec = ts->tv_sec + DIFF19041970; in pmu_settime()
1114 mtx_lock(&sc->sc_mutex); in pmu_settime()
1116 mtx_unlock(&sc->sc_mutex); in pmu_settime()