int ukbd_enable(void *v, int on) { struct ukbd_softc *sc = v; if (on && sc->sc_dying) return (EIO); /* Should only be called to change state */ if (sc->sc_enabled == on) { #ifdef DIAGNOSTIC printf("ukbd_enable: %s: bad call on=%d\n", USBDEVNAME(sc->sc_hdev.sc_dev), on); #endif return (EBUSY); } DPRINTF(("ukbd_enable: sc=%p on=%d\n", sc, on)); sc->sc_enabled = on; if (on) { return (uhidev_open(&sc->sc_hdev)); } else { uhidev_close(&sc->sc_hdev); return (0); } }
int uoakv_detach(struct device *self, int flags) { struct uoakv_softc *sc = (struct uoakv_softc *)self; struct uoak_softc *scc = &sc->sc_uoak_softc; int i, rv = 0; wakeup(&sc->sc_sensortask); sensordev_deinstall(&sc->sc_sensordev); for (i = 0; i < OAK_V_MAXSENSORS; i++) uoak_sensor_detach(scc, &sc->sc_sensor[i].v); if (sc->sc_sensortask != NULL) sensor_task_unregister(sc->sc_sensortask); if (sc->sc_hdev.sc_state & UHIDEV_OPEN) uhidev_close(&sc->sc_hdev); if (scc->sc_ibuf != NULL) { free(scc->sc_ibuf, M_USBDEV); scc->sc_ibuf = NULL; } return (rv); }
void ums_disable(void *v) { struct ums_softc *sc = v; struct hidms *ms = &sc->sc_ms; hidms_disable(ms); uhidev_close(&sc->sc_hdev); }
void utpms_disable(void *v) { struct utpms_softc *sc = v; if (!(sc->sc_status & UTPMS_ENABLED)) return; sc->sc_status &= ~UTPMS_ENABLED; uhidev_close(&sc->sc_hdev); }
int ukbd_detach(struct device *self, int flags) { struct ukbd_softc *sc = (struct ukbd_softc *)self; struct hidkbd *kbd = &sc->sc_kbd; int rv; rv = hidkbd_detach(kbd, flags); /* The console keyboard does not get a disable call, so check pipe. */ if (sc->sc_hdev.sc_state & UHIDEV_OPEN) uhidev_close(&sc->sc_hdev); return (rv); }
void ums_disable(void *v) { struct ums_softc *sc = v; DPRINTFN(1,("ums_disable: sc=%p\n", sc)); #ifdef DIAGNOSTIC if (!sc->sc_enabled) { printf("ums_disable: not enabled\n"); return; } #endif sc->sc_enabled = 0; uhidev_close(&sc->sc_hdev); }
int uhidclose(dev_t dev, int flag, int mode, struct proc *p) { struct uhid_softc *sc; sc = uhid_cd.cd_devs[UHIDUNIT(dev)]; DPRINTF(("uhidclose: sc=%p\n", sc)); clfree(&sc->sc_q); free(sc->sc_obuf, M_USBDEV); sc->sc_async = NULL; uhidev_close(&sc->sc_hdev); return (0); }
int uslhcom_detach(struct device *self, int flags) { struct uslhcom_softc *sc = (struct uslhcom_softc *)self; DPRINTF(("uslhcom_detach: sc=%p flags=%d\n", sc, flags)); if (sc->sc_subdev != NULL) { config_detach(sc->sc_subdev, flags); sc->sc_subdev = NULL; } if (sc->sc_hdev.sc_state & UHIDEV_OPEN) uhidev_close(&sc->sc_hdev); return 0; }
int ukbd_detach(device_t self, int flags) { struct ukbd_softc *sc = device_private(self); int rv = 0; DPRINTF(("ukbd_detach: sc=%p flags=%d\n", sc, flags)); pmf_device_deregister(self); if (sc->sc_console_keyboard) { #if 0 /* * XXX Should probably disconnect our consops, * XXX and either notify some other keyboard that * XXX it can now be the console, or if there aren't * XXX any more USB keyboards, set ukbd_is_console * XXX back to 1 so that the next USB keyboard attached * XXX to the system will get it. */ panic("ukbd_detach: console keyboard"); #else /* * Disconnect our consops and set ukbd_is_console * back to 1 so that the next USB keyboard attached * to the system will get it. * XXX Should notify some other keyboard that it can be * XXX console, if there are any other keyboards. */ printf("%s: was console keyboard\n", USBDEVNAME(sc->sc_hdev.sc_dev)); wskbd_cndetach(); ukbd_is_console = 1; #endif } /* No need to do reference counting of ukbd, wskbd has all the goo. */ if (sc->sc_wskbddev != NULL) rv = config_detach(sc->sc_wskbddev, flags); /* The console keyboard does not get a disable call, so check pipe. */ if (sc->sc_hdev.sc_state & UHIDEV_OPEN) uhidev_close(&sc->sc_hdev); return (rv); }
int ukbd_enable(void *v, int on) { struct ukbd_softc *sc = v; struct hidkbd *kbd = &sc->sc_kbd; int rv; if (on && usbd_is_dying(sc->sc_hdev.sc_udev)) return EIO; if ((rv = hidkbd_enable(kbd, on)) != 0) return rv; if (on) { return uhidev_open(&sc->sc_hdev); } else { uhidev_close(&sc->sc_hdev); return 0; } }
int utwitch_detach(struct device *self, int flags) { struct utwitch_softc *sc = (struct utwitch_softc *)self; int rv = 0; wakeup(&sc->sc_sensortask); sensordev_deinstall(&sc->sc_sensordev); sensor_detach(&sc->sc_sensordev, &sc->sc_sensor_val); sensor_detach(&sc->sc_sensordev, &sc->sc_sensor_delta); if (sc->sc_sensortask != NULL) sensor_task_unregister(sc->sc_sensortask); if (sc->sc_hdev.sc_state & UHIDEV_OPEN) uhidev_close(&sc->sc_hdev); if (sc->sc_ibuf != NULL) { free(sc->sc_ibuf, M_USBDEV, 0); sc->sc_ibuf = NULL; } return (rv); }
int ukbd_enable(void *v, int on) { struct ukbd_softc *sc = v; if (on && sc->sc_dying) return (EIO); /* Should only be called to change state */ if (sc->sc_enabled == on) { DPRINTF(("ukbd_enable: %s: bad call on=%d\n", sc->sc_hdev.sc_dev.dv_xname, on)); return (EBUSY); } DPRINTF(("ukbd_enable: sc=%p on=%d\n", sc, on)); sc->sc_enabled = on; if (on) { return (uhidev_open(&sc->sc_hdev)); } else { uhidev_close(&sc->sc_hdev); return (0); } }