• Home
  • Raw
  • Download

Lines Matching +full:hw +full:- +full:settle +full:- +full:time

1 // SPDX-License-Identifier: GPL-2.0
14 * - /sys/bus/adb to list the devices and infos
15 * - more /dev/adb to allow userland to receive the
16 * flow of auto-polling datas from a given device.
17 * - move bus probe to a kernel thread
106 * time adb_unregister returns, we know that the old handler isn't being
117 printk("adb reply (%d)", req->reply_len);
118 for(i = 0; i < req->reply_len; i++)
119 printk(" %x", req->reply[i]);
143 /* Note we reset noMovement to 0 each time we move a device */ in adb_scan_bus()
164 * by HW TechNote 01: in adb_scan_bus()
166 * http://developer.apple.com/technotes/hw/hw_01.html in adb_scan_bus()
188 highFree--; in adb_scan_bus()
267 if (adb_controller->autopoll) in __adb_suspend()
268 adb_controller->autopoll(0); in __adb_suspend()
321 /* xmon may do early-init */ in adb_init()
330 if (!driver->probe()) { in adb_init()
335 if (adb_controller != NULL && adb_controller->init && in adb_init()
336 adb_controller->init()) in adb_init()
361 return -ENXIO; in do_adb_reset_bus()
363 if (adb_controller->autopoll) in do_adb_reset_bus()
364 adb_controller->autopoll(0); in do_adb_reset_bus()
370 /* Let the trackpad settle down */ in do_adb_reset_bus()
380 if (adb_controller->reset_bus) in do_adb_reset_bus()
381 ret = adb_controller->reset_bus(); in do_adb_reset_bus()
386 /* Let the trackpad settle down */ in do_adb_reset_bus()
392 if (adb_controller->autopoll) in do_adb_reset_bus()
393 adb_controller->autopoll(autopoll_devs); in do_adb_reset_bus()
406 if ((adb_controller == NULL)||(adb_controller->poll == NULL)) in adb_poll()
408 adb_controller->poll(); in adb_poll()
414 struct completion *comp = req->arg; in adb_sync_req_done()
428 if ((adb_controller == NULL) || (adb_controller->send_request == NULL)) in adb_request()
429 return -ENXIO; in adb_request()
431 return -EINVAL; in adb_request()
433 req->nbytes = nbytes+1; in adb_request()
434 req->done = done; in adb_request()
435 req->reply_expected = flags & ADBREQ_REPLY; in adb_request()
436 req->data[0] = ADB_PACKET; in adb_request()
439 req->data[i+1] = va_arg(list, int); in adb_request()
445 /* Synchronous requests block using an on-stack completion */ in adb_request()
448 req->done = adb_sync_req_done; in adb_request()
449 req->arg = &comp; in adb_request()
453 rc = adb_controller->send_request(req, 0); in adb_request()
455 if ((flags & ADBREQ_SYNC) && !rc && !req->complete) in adb_request()
476 ids->nids = 0; in adb_register()
489 ids->id[ids->nids++] = i; in adb_register()
493 return ids->nids; in adb_register()
500 int ret = -ENODEV; in adb_unregister()
614 struct adbdev_state *state = (struct adbdev_state *) req->arg; in adb_write_done()
617 if (!req->complete) { in adb_write_done()
618 req->reply_len = 0; in adb_write_done()
619 req->complete = 1; in adb_write_done()
621 spin_lock_irqsave(&state->lock, flags); in adb_write_done()
622 atomic_dec(&state->n_pending); in adb_write_done()
623 if (!state->inuse) { in adb_write_done()
625 if (atomic_read(&state->n_pending) == 0) { in adb_write_done()
626 spin_unlock_irqrestore(&state->lock, flags); in adb_write_done()
631 struct adb_request **ap = &state->completed; in adb_write_done()
633 ap = &(*ap)->next; in adb_write_done()
634 req->next = NULL; in adb_write_done()
636 wake_up_interruptible(&state->wait_queue); in adb_write_done()
638 spin_unlock_irqrestore(&state->lock, flags); in adb_write_done()
644 int ret = -EINVAL; in do_adb_query()
646 switch(req->data[1]) { in do_adb_query()
648 if (req->nbytes < 3) in do_adb_query()
651 req->reply[0] = adb_handler[req->data[2]].original_address; in do_adb_query()
652 req->reply[1] = adb_handler[req->data[2]].handler_id; in do_adb_query()
654 req->complete = 1; in do_adb_query()
655 req->reply_len = 2; in do_adb_query()
670 ret = -ENXIO; in adb_open()
675 ret = -ENOMEM; in adb_open()
678 file->private_data = state; in adb_open()
679 spin_lock_init(&state->lock); in adb_open()
680 atomic_set(&state->n_pending, 0); in adb_open()
681 state->completed = NULL; in adb_open()
682 init_waitqueue_head(&state->wait_queue); in adb_open()
683 state->inuse = 1; in adb_open()
692 struct adbdev_state *state = file->private_data; in adb_release()
697 file->private_data = NULL; in adb_release()
698 spin_lock_irqsave(&state->lock, flags); in adb_release()
699 if (atomic_read(&state->n_pending) == 0 in adb_release()
700 && state->completed == NULL) { in adb_release()
701 spin_unlock_irqrestore(&state->lock, flags); in adb_release()
704 state->inuse = 0; in adb_release()
705 spin_unlock_irqrestore(&state->lock, flags); in adb_release()
716 struct adbdev_state *state = file->private_data; in adb_read()
722 return -EINVAL; in adb_read()
723 if (count > sizeof(req->reply)) in adb_read()
724 count = sizeof(req->reply); in adb_read()
727 spin_lock_irqsave(&state->lock, flags); in adb_read()
728 add_wait_queue(&state->wait_queue, &wait); in adb_read()
732 req = state->completed; in adb_read()
734 state->completed = req->next; in adb_read()
735 else if (atomic_read(&state->n_pending) == 0) in adb_read()
736 ret = -EIO; in adb_read()
740 if (file->f_flags & O_NONBLOCK) { in adb_read()
741 ret = -EAGAIN; in adb_read()
745 ret = -ERESTARTSYS; in adb_read()
748 spin_unlock_irqrestore(&state->lock, flags); in adb_read()
750 spin_lock_irqsave(&state->lock, flags); in adb_read()
754 remove_wait_queue(&state->wait_queue, &wait); in adb_read()
755 spin_unlock_irqrestore(&state->lock, flags); in adb_read()
760 ret = req->reply_len; in adb_read()
763 if (ret > 0 && copy_to_user(buf, req->reply, ret)) in adb_read()
764 ret = -EFAULT; in adb_read()
774 struct adbdev_state *state = file->private_data; in adb_write()
777 if (count < 2 || count > sizeof(req->data)) in adb_write()
778 return -EINVAL; in adb_write()
780 return -ENXIO; in adb_write()
785 return -ENOMEM; in adb_write()
787 req->nbytes = count; in adb_write()
788 req->done = adb_write_done; in adb_write()
789 req->arg = (void *) state; in adb_write()
790 req->complete = 0; in adb_write()
792 ret = -EFAULT; in adb_write()
793 if (copy_from_user(req->data, buf, count)) in adb_write()
796 atomic_inc(&state->n_pending); in adb_write()
802 if (req->data[0] == ADB_QUERY) { in adb_write()
806 ret = -EINVAL; in adb_write()
811 else if ((req->data[0] == ADB_PACKET) && (count > 1) in adb_write()
812 && (req->data[1] == ADB_BUSRESET)) { in adb_write()
815 atomic_dec(&state->n_pending); in adb_write()
820 req->reply_expected = ((req->data[1] & 0xc) == 0xc); in adb_write()
821 if (adb_controller && adb_controller->send_request) in adb_write()
822 ret = adb_controller->send_request(req, 0); in adb_write()
824 ret = -ENXIO; in adb_write()
829 atomic_dec(&state->n_pending); in adb_write()
878 return -ENODEV; in adb_dummy_probe()