Changeset 2a5b62b in mainline


Ignore:
Timestamp:
2011-10-15T00:09:46Z (13 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
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/bus/usb/usbhid/generic/hiddev.c

    r1526c174 r2a5b62b  
    197197        const int ret = ddf_fun_unbind(fun);
    198198        if (ret != EOK) {
    199                 usb_log_error("ailed to unbind generic hid fun.\n");
     199                usb_log_error("Failed to unbind generic hid fun.\n");
    200200                return;
    201201        }
     202        usb_log_debug2("%s unbound.\n", fun->name);
    202203        ddf_fun_destroy(fun);
    203204}
  • 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
  • uspace/drv/bus/usb/usbhid/main.c

    r1526c174 r2a5b62b  
    206206        assert(!hid_dev->running);
    207207        usb_hid_destroy(hid_dev);
     208        usb_log_debug2("%s destruction complete.\n", dev->ddf_dev->name);
    208209        return EOK;
    209210}
  • uspace/drv/bus/usb/usbhid/multimedia/multimedia.c

    r1526c174 r2a5b62b  
    249249                        usb_log_error("Failed to unbind multim function.\n");
    250250                } else {
     251                        usb_log_debug2("%s unbound.\n", multim_dev->fun->name);
    251252                        ddf_fun_destroy(multim_dev->fun);
    252253                }
  • uspace/drv/bus/usb/usbhid/usbhid.c

    r1526c174 r2a5b62b  
    418418
    419419        if (hid_dev == NULL) {
    420                 usb_log_fatal("No memory!\n");
     420                usb_log_error("No memory!\n");
    421421                return NULL;
    422422        }
     
    425425            usb_hid_report_t)));
    426426        if (hid_dev->report == NULL) {
    427                 usb_log_fatal("No memory!\n");
     427                usb_log_error("No memory!\n");
    428428                free(hid_dev);
    429429                return NULL;
     
    631631
    632632        hid_dev->running = false;
    633 //      usb_hid_destroy(hid_dev);
    634633}
    635634
  • uspace/drv/bus/usb/usbhid/usbhid.h

    r1526c174 r2a5b62b  
    129129
    130130        int report_nr;
    131         bool running;
     131        volatile bool running;
    132132};
    133133
Note: See TracChangeset for help on using the changeset viewer.