Changeset 2a5b62b in mainline for uspace/drv/bus/usb/usbhid/kbd


Ignore:
Timestamp:
2011-10-15T00:09:46Z (14 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
8a121b1
Parents:
1526c174
Message:

usbhid: Wait for autorepeat fibril during destruction.

Fixes random failure on keyboard unplug.
Add a bunch of debug messages.

Location:
uspace/drv/bus/usb/usbhid/kbd
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/bus/usb/usbhid/kbd/kbddev.c

    r1526c174 r2a5b62b  
    502502
    503503        if (kbd_dev == NULL) {
    504                 usb_log_fatal("No memory!\n");
     504                usb_log_error("No memory!\n");
    505505                return NULL;
    506506        }
     
    624624
    625625        if (kbd_dev->keys == NULL) {
    626                 usb_log_fatal("No memory!\n");
     626                usb_log_error("No memory!\n");
    627627                free(kbd_dev);
    628628                return ENOMEM;
     
    633633
    634634        if (kbd_dev->keys_old == NULL) {
    635                 usb_log_fatal("No memory!\n");
     635                usb_log_error("No memory!\n");
    636636                free(kbd_dev->keys);
    637637                free(kbd_dev);
     
    797797                usb_log_warning("Failed to unbind kbd function.\n");
    798798        } else {
     799                usb_log_debug2("%s unbound.\n", kbd_dev->fun->name);
    799800                kbd_dev->fun->driver_data = NULL;
    800801                ddf_fun_destroy(kbd_dev->fun);
     
    811812
    812813        if (data != NULL) {
    813                 usb_kbd_t *kbd_dev = (usb_kbd_t *)data;
     814                usb_kbd_t *kbd_dev = data;
    814815                if (usb_kbd_is_initialized(kbd_dev)) {
    815816                        usb_kbd_mark_unusable(kbd_dev);
    816                 } else {
     817                        /* wait for autorepeat */
     818                        async_usleep(CHECK_DELAY);
    817819                        usb_kbd_destroy(kbd_dev);
    818820                }
  • uspace/drv/bus/usb/usbhid/kbd/kbdrepeat.c

    r1526c174 r2a5b62b  
    4646
    4747
    48 /** Delay between auto-repeat state checks when no key is being repeated. */
    49 static unsigned int CHECK_DELAY = 10000;
    5048
    5149/*----------------------------------------------------------------------------*/
     
    7977                // check if the kbd structure is usable
    8078                if (!usb_kbd_is_initialized(kbd)) {
    81                         if (usb_kbd_is_ready_to_destroy(kbd)) {
    82                                 usb_kbd_destroy(kbd);
    83                         }
     79                        usb_log_warning("kbd not ready, exiting autorepeat.\n");
    8480                        return;
    8581                }
  • uspace/drv/bus/usb/usbhid/kbd/kbdrepeat.h

    r1526c174 r2a5b62b  
    3737#define USB_HID_KBDREPEAT_H_
    3838
     39/** Delay between auto-repeat state checks when no key is being repeated. */
     40#define CHECK_DELAY 10000
     41
    3942struct usb_kbd_t;
    4043
Note: See TracChangeset for help on using the changeset viewer.