Lines Matching refs:sc

189           struct pseye_softc *sc = device_private(self);  in pseye_attach()  local
204 sc->sc_dev = self; in pseye_attach()
205 sc->sc_udev = dev; in pseye_attach()
206 sc->sc_iface = uiaa->uiaa_iface; in pseye_attach()
207 snprintf(sc->sc_businfo, sizeof(sc->sc_businfo), "usb:%08x", in pseye_attach()
208 sc->sc_udev->ud_cookie.cookie); in pseye_attach()
209 sc->sc_bulkin_bufferlen = PSEYE_BULKIN_BUFLEN; in pseye_attach()
211 sc->sc_dying = sc->sc_running = 0; in pseye_attach()
212 cv_init(&sc->sc_cv, device_xname(self)); in pseye_attach()
213 mutex_init(&sc->sc_mtx, MUTEX_DEFAULT, IPL_NONE); in pseye_attach()
215 id = usbd_get_interface_descriptor(sc->sc_iface); in pseye_attach()
218 sc->sc_dying = 1; in pseye_attach()
223 ed = usbd_interface2endpoint_descriptor(sc->sc_iface, i); in pseye_attach()
226 sc->sc_dying = 1; in pseye_attach()
239 sc->sc_dying = 1; in pseye_attach()
243 sc->sc_bulkin = ed_bulkin->bEndpointAddress; in pseye_attach()
245 int error = pseye_init_pipes(sc); in pseye_attach()
251 error = usbd_create_xfer(sc->sc_bulkin_pipe, sc->sc_bulkin_bufferlen, in pseye_attach()
252 0, 0, &sc->sc_bulkin_xfer); in pseye_attach()
255 pseye_close_pipes(sc); in pseye_attach()
259 sc->sc_bulkin_buffer = usbd_get_buffer(sc->sc_bulkin_xfer); in pseye_attach()
261 pseye_init(sc); in pseye_attach()
266 sc->sc_videodev = video_attach_mi(&pseye_hw_if, self, sc); in pseye_attach()
267 if (sc->sc_videodev == NULL) { in pseye_attach()
269 sc->sc_dying = 1; in pseye_attach()
273 usbd_add_drv_event(USB_EVENT_DRIVER_ATTACH, sc->sc_udev, self); in pseye_attach()
280 struct pseye_softc *sc = device_private(self); in pseye_detach() local
282 sc->sc_dying = 1; in pseye_detach()
286 if (sc->sc_videodev != NULL) { in pseye_detach()
287 config_detach(sc->sc_videodev, flags); in pseye_detach()
288 sc->sc_videodev = NULL; in pseye_detach()
291 if (sc->sc_bulkin_pipe != NULL) { in pseye_detach()
292 usbd_abort_pipe(sc->sc_bulkin_pipe); in pseye_detach()
295 if (sc->sc_bulkin_xfer != NULL) { in pseye_detach()
296 usbd_destroy_xfer(sc->sc_bulkin_xfer); in pseye_detach()
297 sc->sc_bulkin_xfer = NULL; in pseye_detach()
300 if (sc->sc_bulkin_pipe != NULL) { in pseye_detach()
301 usbd_close_pipe(sc->sc_bulkin_pipe); in pseye_detach()
302 sc->sc_bulkin_pipe = NULL; in pseye_detach()
305 mutex_enter(&sc->sc_mtx); in pseye_detach()
306 if (sc->sc_running) { in pseye_detach()
307 sc->sc_running = 0; in pseye_detach()
308 cv_wait_sig(&sc->sc_cv, &sc->sc_mtx); in pseye_detach()
310 mutex_exit(&sc->sc_mtx); in pseye_detach()
312 cv_destroy(&sc->sc_cv); in pseye_detach()
313 mutex_destroy(&sc->sc_mtx); in pseye_detach()
315 usbd_add_drv_event(USB_EVENT_DRIVER_DETACH, sc->sc_udev, sc->sc_dev); in pseye_detach()
323 struct pseye_softc *sc = device_private(self); in pseye_activate() local
327 sc->sc_dying = 1; in pseye_activate()
337 struct pseye_softc *sc = device_private(self); in pseye_childdet() local
339 if (sc->sc_videodev) { in pseye_childdet()
340 KASSERT(sc->sc_videodev == child); in pseye_childdet()
341 sc->sc_videodev = NULL; in pseye_childdet()
350 pseye_init(struct pseye_softc *sc) in pseye_init() argument
352 pseye_sccb_init(sc); in pseye_init()
354 pseye_setregv(sc, 0xc2, 0x0c); in pseye_init()
355 pseye_setregv(sc, 0x88, 0xf8); in pseye_init()
356 pseye_setregv(sc, 0xc3, 0x69); in pseye_init()
357 pseye_setregv(sc, 0x89, 0xff); in pseye_init()
358 pseye_setregv(sc, 0x76, 0x03); in pseye_init()
359 pseye_setregv(sc, 0x92, 0x01); in pseye_init()
360 pseye_setregv(sc, 0x93, 0x18); in pseye_init()
361 pseye_setregv(sc, 0x94, 0x10); in pseye_init()
362 pseye_setregv(sc, 0x95, 0x10); in pseye_init()
363 pseye_setregv(sc, 0xe2, 0x00); in pseye_init()
364 pseye_setregv(sc, 0xe7, 0x3e); in pseye_init()
366 pseye_setregv(sc, 0x96, 0x00); in pseye_init()
368 pseye_setreg(sc, 0x97, 0x20); in pseye_init()
369 pseye_setreg(sc, 0x97, 0x20); in pseye_init()
370 pseye_setreg(sc, 0x97, 0x20); in pseye_init()
371 pseye_setreg(sc, 0x97, 0x0a); in pseye_init()
372 pseye_setreg(sc, 0x97, 0x3f); in pseye_init()
373 pseye_setreg(sc, 0x97, 0x4a); in pseye_init()
374 pseye_setreg(sc, 0x97, 0x20); in pseye_init()
375 pseye_setreg(sc, 0x97, 0x15); in pseye_init()
376 pseye_setreg(sc, 0x97, 0x0b); in pseye_init()
378 pseye_setregv(sc, 0x8e, 0x40); in pseye_init()
379 pseye_setregv(sc, 0x1f, 0x81); in pseye_init()
380 pseye_setregv(sc, 0x34, 0x05); in pseye_init()
381 pseye_setregv(sc, 0xe3, 0x04); in pseye_init()
382 pseye_setregv(sc, 0x88, 0x00); in pseye_init()
383 pseye_setregv(sc, 0x89, 0x00); in pseye_init()
384 pseye_setregv(sc, 0x76, 0x00); in pseye_init()
385 pseye_setregv(sc, 0xe7, 0x2e); in pseye_init()
386 pseye_setregv(sc, 0x31, 0xf9); in pseye_init()
387 pseye_setregv(sc, 0x25, 0x42); in pseye_init()
388 pseye_setregv(sc, 0x21, 0xf0); in pseye_init()
390 pseye_setreg(sc, 0x1c, 0x00); in pseye_init()
391 pseye_setreg(sc, 0x1d, 0x40); in pseye_init()
392 pseye_setreg(sc, 0x1d, 0x02); /* payload size 0x0200 * 4 == 2048 */ in pseye_init()
393 pseye_setreg(sc, 0x1d, 0x00); in pseye_init()
394 pseye_setreg(sc, 0x1d, 0x02); /* frame size 0x025800 * 4 == 614400 */ in pseye_init()
395 pseye_setreg(sc, 0x1d, 0x58); in pseye_init()
396 pseye_setreg(sc, 0x1d, 0x00); in pseye_init()
398 pseye_setreg(sc, 0x1c, 0x0a); in pseye_init()
399 pseye_setreg(sc, 0x1d, 0x08); /* enable UVC header */ in pseye_init()
400 pseye_setreg(sc, 0x1d, 0x0e); in pseye_init()
402 pseye_setregv(sc, 0x8d, 0x1c); in pseye_init()
403 pseye_setregv(sc, 0x8e, 0x80); in pseye_init()
404 pseye_setregv(sc, 0xe5, 0x04); in pseye_init()
406 pseye_sccb_setreg(sc, 0x12, 0x80); in pseye_init()
407 pseye_sccb_setreg(sc, 0x11, 0x01); in pseye_init()
408 pseye_sccb_setreg(sc, 0x11, 0x01); in pseye_init()
409 pseye_sccb_setreg(sc, 0x11, 0x01); in pseye_init()
410 pseye_sccb_setreg(sc, 0x11, 0x01); in pseye_init()
411 pseye_sccb_setreg(sc, 0x11, 0x01); in pseye_init()
412 pseye_sccb_setreg(sc, 0x11, 0x01); in pseye_init()
413 pseye_sccb_setreg(sc, 0x11, 0x01); in pseye_init()
414 pseye_sccb_setreg(sc, 0x11, 0x01); in pseye_init()
415 pseye_sccb_setreg(sc, 0x11, 0x01); in pseye_init()
416 pseye_sccb_setreg(sc, 0x11, 0x01); in pseye_init()
417 pseye_sccb_setreg(sc, 0x11, 0x01); in pseye_init()
419 pseye_sccb_setreg(sc, 0x3d, 0x03); in pseye_init()
420 pseye_sccb_setreg(sc, 0x17, 0x26); in pseye_init()
421 pseye_sccb_setreg(sc, 0x18, 0xa0); in pseye_init()
422 pseye_sccb_setreg(sc, 0x19, 0x07); in pseye_init()
423 pseye_sccb_setreg(sc, 0x1a, 0xf0); in pseye_init()
424 pseye_sccb_setreg(sc, 0x32, 0x00); in pseye_init()
425 pseye_sccb_setreg(sc, 0x29, 0xa0); in pseye_init()
426 pseye_sccb_setreg(sc, 0x2c, 0xf0); in pseye_init()
427 pseye_sccb_setreg(sc, 0x65, 0x20); in pseye_init()
428 pseye_sccb_setreg(sc, 0x11, 0x01); in pseye_init()
429 pseye_sccb_setreg(sc, 0x42, 0x7f); in pseye_init()
430 pseye_sccb_setreg(sc, 0x63, 0xe0); in pseye_init()
431 pseye_sccb_setreg(sc, 0x64, 0xff); in pseye_init()
432 pseye_sccb_setreg(sc, 0x66, 0x00); in pseye_init()
433 pseye_sccb_setreg(sc, 0x13, 0xf0); in pseye_init()
434 pseye_sccb_setreg(sc, 0x0d, 0x41); in pseye_init()
435 pseye_sccb_setreg(sc, 0x0f, 0xc5); in pseye_init()
436 pseye_sccb_setreg(sc, 0x14, 0x11); in pseye_init()
438 pseye_sccb_setreg(sc, 0x22, 0x7f); in pseye_init()
439 pseye_sccb_setreg(sc, 0x23, 0x03); in pseye_init()
440 pseye_sccb_setreg(sc, 0x24, 0x40); in pseye_init()
441 pseye_sccb_setreg(sc, 0x25, 0x30); in pseye_init()
442 pseye_sccb_setreg(sc, 0x26, 0xa1); in pseye_init()
443 pseye_sccb_setreg(sc, 0x2a, 0x00); in pseye_init()
444 pseye_sccb_setreg(sc, 0x2b, 0x00); in pseye_init()
445 pseye_sccb_setreg(sc, 0x6b, 0xaa); in pseye_init()
446 pseye_sccb_setreg(sc, 0x13, 0xff); in pseye_init()
448 pseye_sccb_setreg(sc, 0x90, 0x05); in pseye_init()
449 pseye_sccb_setreg(sc, 0x91, 0x01); in pseye_init()
450 pseye_sccb_setreg(sc, 0x92, 0x03); in pseye_init()
451 pseye_sccb_setreg(sc, 0x93, 0x00); in pseye_init()
452 pseye_sccb_setreg(sc, 0x94, 0x60); in pseye_init()
453 pseye_sccb_setreg(sc, 0x95, 0x3c); in pseye_init()
454 pseye_sccb_setreg(sc, 0x96, 0x24); in pseye_init()
455 pseye_sccb_setreg(sc, 0x97, 0x1e); in pseye_init()
456 pseye_sccb_setreg(sc, 0x98, 0x62); in pseye_init()
457 pseye_sccb_setreg(sc, 0x99, 0x80); in pseye_init()
458 pseye_sccb_setreg(sc, 0x9a, 0x1e); in pseye_init()
459 pseye_sccb_setreg(sc, 0x9b, 0x08); in pseye_init()
460 pseye_sccb_setreg(sc, 0x9c, 0x20); in pseye_init()
461 pseye_sccb_setreg(sc, 0x9e, 0x81); in pseye_init()
463 pseye_sccb_setreg(sc, 0xa6, 0x04); in pseye_init()
464 pseye_sccb_setreg(sc, 0x7e, 0x0c); in pseye_init()
465 pseye_sccb_setreg(sc, 0x7f, 0x16); in pseye_init()
467 pseye_sccb_setreg(sc, 0x80, 0x2a); in pseye_init()
468 pseye_sccb_setreg(sc, 0x81, 0x4e); in pseye_init()
469 pseye_sccb_setreg(sc, 0x82, 0x61); in pseye_init()
470 pseye_sccb_setreg(sc, 0x83, 0x6f); in pseye_init()
471 pseye_sccb_setreg(sc, 0x84, 0x7b); in pseye_init()
472 pseye_sccb_setreg(sc, 0x85, 0x86); in pseye_init()
473 pseye_sccb_setreg(sc, 0x86, 0x8e); in pseye_init()
474 pseye_sccb_setreg(sc, 0x87, 0x97); in pseye_init()
475 pseye_sccb_setreg(sc, 0x88, 0xa4); in pseye_init()
476 pseye_sccb_setreg(sc, 0x89, 0xaf); in pseye_init()
477 pseye_sccb_setreg(sc, 0x8a, 0xc5); in pseye_init()
478 pseye_sccb_setreg(sc, 0x8b, 0xd7); in pseye_init()
479 pseye_sccb_setreg(sc, 0x8c, 0xe8); in pseye_init()
480 pseye_sccb_setreg(sc, 0x8d, 0x20); in pseye_init()
482 pseye_sccb_setreg(sc, 0x0c, 0x90); in pseye_init()
484 pseye_setregv(sc, 0xc0, 0x50); in pseye_init()
485 pseye_setregv(sc, 0xc1, 0x3c); in pseye_init()
486 pseye_setregv(sc, 0xc2, 0x0c); in pseye_init()
488 pseye_sccb_setreg(sc, 0x2b, 0x00); in pseye_init()
489 pseye_sccb_setreg(sc, 0x22, 0x7f); in pseye_init()
490 pseye_sccb_setreg(sc, 0x23, 0x03); in pseye_init()
491 pseye_sccb_setreg(sc, 0x11, 0x01); in pseye_init()
492 pseye_sccb_setreg(sc, 0x0c, 0xd0); in pseye_init()
493 pseye_sccb_setreg(sc, 0x64, 0xff); in pseye_init()
494 pseye_sccb_setreg(sc, 0x0d, 0x41); in pseye_init()
496 pseye_sccb_setreg(sc, 0x14, 0x41); in pseye_init()
497 pseye_sccb_setreg(sc, 0x0e, 0xcd); in pseye_init()
498 pseye_sccb_setreg(sc, 0xac, 0xbf); in pseye_init()
499 pseye_sccb_setreg(sc, 0x8e, 0x00); in pseye_init()
500 pseye_sccb_setreg(sc, 0x0c, 0xd0); in pseye_init()
502 pseye_stop(sc); in pseye_init()
506 pseye_sccb_init(struct pseye_softc *sc) in pseye_sccb_init() argument
508 pseye_setregv(sc, 0xe7, 0x3a); in pseye_sccb_init()
509 pseye_setreg(sc, PSEYE_SCCB_ADDRESS, 0x60); in pseye_sccb_init()
510 pseye_setreg(sc, PSEYE_SCCB_ADDRESS, 0x60); in pseye_sccb_init()
511 pseye_setreg(sc, PSEYE_SCCB_ADDRESS, 0x60); in pseye_sccb_init()
512 pseye_setreg(sc, PSEYE_SCCB_ADDRESS, 0x42); in pseye_sccb_init()
516 pseye_stop(struct pseye_softc *sc) in pseye_stop() argument
518 pseye_led(sc, false); in pseye_stop()
519 pseye_setreg(sc, 0xe0, 0x09); in pseye_stop()
523 pseye_start(struct pseye_softc *sc) in pseye_start() argument
525 pseye_led(sc, true); in pseye_start()
526 pseye_setreg(sc, 0xe0, 0x00); in pseye_start()
530 pseye_led(struct pseye_softc *sc, bool enabled) in pseye_led() argument
534 val = pseye_getreg(sc, 0x21); in pseye_led()
535 pseye_setreg(sc, 0x21, val | 0x80); in pseye_led()
537 val = pseye_getreg(sc, 0x23); in pseye_led()
542 pseye_setreg(sc, 0x23, val); in pseye_led()
546 pseye_getreg(struct pseye_softc *sc, uint16_t reg) in pseye_getreg() argument
558 err = usbd_do_request(sc->sc_udev, &req, &buf); in pseye_getreg()
560 aprint_error_dev(sc->sc_dev, "couldn't read reg 0x%04x: %s\n", in pseye_getreg()
569 pseye_setreg(struct pseye_softc *sc, uint16_t reg, uint8_t val) in pseye_setreg() argument
580 err = usbd_do_request(sc->sc_udev, &req, &val); in pseye_setreg()
582 aprint_error_dev(sc->sc_dev, "couldn't write reg 0x%04x: %s\n", in pseye_setreg()
587 pseye_setregv(struct pseye_softc *sc, uint16_t reg, uint8_t val) in pseye_setregv() argument
589 pseye_setreg(sc, reg, val); in pseye_setregv()
590 if (pseye_getreg(sc, reg) != val) in pseye_setregv()
591 aprint_error_dev(sc->sc_dev, "couldn't verify reg 0x%04x\n", in pseye_setregv()
596 pseye_sccb_setreg(struct pseye_softc *sc, uint8_t reg, uint8_t val) in pseye_sccb_setreg() argument
598 pseye_setreg(sc, PSEYE_SCCB_SUBADDR, reg); in pseye_sccb_setreg()
599 pseye_setreg(sc, PSEYE_SCCB_WRITE, val); in pseye_sccb_setreg()
600 pseye_setreg(sc, PSEYE_SCCB_OPERATION, PSEYE_SCCB_OP_WRITE_3); in pseye_sccb_setreg()
602 if (pseye_sccb_status(sc) == false) in pseye_sccb_setreg()
603 aprint_error_dev(sc->sc_dev, "couldn't write sccb reg 0x%04x\n", in pseye_sccb_setreg()
608 pseye_sccb_status(struct pseye_softc *sc) in pseye_sccb_status() argument
614 reg = pseye_getreg(sc, PSEYE_SCCB_STATUS); in pseye_sccb_status()
621 aprint_error_dev(sc->sc_dev, "timeout reading sccb status\n"); in pseye_sccb_status()
626 pseye_get_frame(struct pseye_softc *sc, uint32_t *plen) in pseye_get_frame() argument
628 if (sc->sc_dying) in pseye_get_frame()
631 return usbd_bulk_transfer(sc->sc_bulkin_xfer, sc->sc_bulkin_pipe, in pseye_get_frame()
632 USBD_SHORT_XFER_OK, 1000, sc->sc_bulkin_buffer, plen); in pseye_get_frame()
636 pseye_init_pipes(struct pseye_softc *sc) in pseye_init_pipes() argument
640 if (sc->sc_dying) in pseye_init_pipes()
643 err = usbd_open_pipe(sc->sc_iface, sc->sc_bulkin, 0, in pseye_init_pipes()
644 &sc->sc_bulkin_pipe); in pseye_init_pipes()
646 aprint_error_dev(sc->sc_dev, "couldn't open bulk-in pipe: %s\n", in pseye_init_pipes()
655 pseye_close_pipes(struct pseye_softc *sc) in pseye_close_pipes() argument
657 if (sc->sc_bulkin_pipe != NULL) { in pseye_close_pipes()
658 usbd_abort_pipe(sc->sc_bulkin_pipe); in pseye_close_pipes()
659 usbd_close_pipe(sc->sc_bulkin_pipe); in pseye_close_pipes()
660 sc->sc_bulkin_pipe = NULL; in pseye_close_pipes()
667 pseye_submit_payload(struct pseye_softc *sc, uint32_t tlen) in pseye_submit_payload() argument
671 uint8_t *buf = sc->sc_bulkin_buffer; in pseye_submit_payload()
697 video_submit_payload(sc->sc_videodev, &payload); in pseye_submit_payload()
709 struct pseye_softc *sc = opaque; in pseye_transfer_thread() local
713 while (sc->sc_running) { in pseye_transfer_thread()
714 len = sc->sc_bulkin_bufferlen; in pseye_transfer_thread()
715 error = pseye_get_frame(sc, &len); in pseye_transfer_thread()
717 pseye_submit_payload(sc, len); in pseye_transfer_thread()
720 mutex_enter(&sc->sc_mtx); in pseye_transfer_thread()
721 cv_broadcast(&sc->sc_cv); in pseye_transfer_thread()
722 mutex_exit(&sc->sc_mtx); in pseye_transfer_thread()
731 struct pseye_softc *sc = opaque; in pseye_open() local
733 if (sc->sc_dying) in pseye_open()
736 pseye_start(sc); in pseye_open()
744 struct pseye_softc *sc = opaque; in pseye_close() local
746 pseye_stop(sc); in pseye_close()
758 struct pseye_softc *sc = opaque; in pseye_get_businfo() local
760 return sc->sc_businfo; in pseye_get_businfo()
829 struct pseye_softc *sc = opaque; in pseye_start_transfer() local
832 mutex_enter(&sc->sc_mtx); in pseye_start_transfer()
833 if (sc->sc_running == 0) { in pseye_start_transfer()
834 sc->sc_running = 1; in pseye_start_transfer()
836 opaque, NULL, "%s", device_xname(sc->sc_dev)); in pseye_start_transfer()
838 aprint_error_dev(sc->sc_dev, "transfer already in progress\n"); in pseye_start_transfer()
839 mutex_exit(&sc->sc_mtx); in pseye_start_transfer()
847 struct pseye_softc *sc = opaque; in pseye_stop_transfer() local
849 mutex_enter(&sc->sc_mtx); in pseye_stop_transfer()
850 if (sc->sc_running) { in pseye_stop_transfer()
851 sc->sc_running = 0; in pseye_stop_transfer()
852 cv_wait_sig(&sc->sc_cv, &sc->sc_mtx); in pseye_stop_transfer()
854 mutex_exit(&sc->sc_mtx); in pseye_stop_transfer()