Changeset 8123695a in mainline for uspace/drv/usbhub


Ignore:
Timestamp:
2011-04-02T16:07:29Z (15 years ago)
Author:
Matus Dekanek <smekideki@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
322a8066
Parents:
c6ba274
Message:

ohci root hub set/clear feature requests redesigned
hub: fix for non-removable devices 3.0

Location:
uspace/drv/usbhub
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/usbhub/port_status.h

    rc6ba274 r8123695a  
    9595}
    9696
     97/**
     98 * set the device request to be a port feature clear request
     99 * @param request
     100 * @param port
     101 * @param feature_selector
     102 */
     103static inline void usb_hub_set_disable_port_feature_request(
     104usb_device_request_setup_packet_t * request, uint16_t port,
     105                uint16_t feature_selector
     106){
     107        request->index = port;
     108        request->request_type = USB_HUB_REQ_TYPE_SET_PORT_FEATURE;
     109        request->request = USB_HUB_REQUEST_CLEAR_FEATURE;
     110        request->value = feature_selector;
     111        request->length = 0;
     112}
    97113
    98114/**
  • uspace/drv/usbhub/usbhub.c

    rc6ba274 r8123695a  
    317317                        //set the status change bit, so it will be noticed in driver loop
    318318                        if(usb_port_dev_connected(&status)){
    319                                 usb_hub_set_enable_port_feature_request(&request, port,
    320                                                 USB_HUB_FEATURE_C_PORT_CONNECTION);
     319                                usb_hub_set_disable_port_feature_request(&request, port,
     320                                                USB_HUB_FEATURE_PORT_CONNECTION);
    321321                                opResult = usb_pipe_control_read(
    322322                                                hub->control_pipe,
     
    326326                                if (opResult != EOK) {
    327327                                        usb_log_warning(
    328                                                         "could not set port change on port %d errno:%d\n",
     328                                                        "could not clear port connection on port %d errno:%d\n",
    329329                                                        port, opResult);
    330330                                }
     331                                usb_log_debug("cleared port connection\n");
     332                                usb_hub_set_enable_port_feature_request(&request, port,
     333                                                USB_HUB_FEATURE_PORT_ENABLE);
     334                                opResult = usb_pipe_control_read(
     335                                                hub->control_pipe,
     336                                                &request, sizeof(usb_device_request_setup_packet_t),
     337                                                &status, 4, &rcvd_size
     338                                                );
     339                                if (opResult != EOK) {
     340                                        usb_log_warning(
     341                                                        "could not set port enabled on port %d errno:%d\n",
     342                                                        port, opResult);
     343                                }
     344                                usb_log_debug("port set to enabled - should lead to connection change\n");
    331345                        }
    332346                }
     
    613627        //something connected/disconnected
    614628        if (usb_port_connect_change(&status)) {
     629                usb_log_debug("connection change on port\n");
    615630                if (usb_port_dev_connected(&status)) {
    616631                        usb_log_debug("some connection changed\n");
     
    623638        if (usb_port_overcurrent_change(&status)) {
    624639                //check if it was not auto-resolved
     640                usb_log_debug("overcurrent change on port\n");
    625641                if(usb_port_over_current(&status)){
    626642                        usb_hub_over_current(hub,port);
     
    639655                }
    640656        }
     657        usb_log_debug("status %x\n ",status);
    641658
    642659        usb_port_set_connect_change(&status, false);
Note: See TracChangeset for help on using the changeset viewer.