Changeset 37fce70 in mainline


Ignore:
Timestamp:
2018-01-21T20:12:10Z (6 years ago)
Author:
Ondřej Hlavatý <aearsis@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
36e8a0c8
Parents:
cd0cf81
Message:

usbhub: move powering ports to a separate fuction

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/bus/usb/usbhub/usbhub.c

    rcd0cf81 r37fce70  
    299299}
    300300
     301static void usb_hub_power_ports(usb_hub_dev_t *hub_dev)
     302{
     303        if (hub_dev->power_switched) {
     304                usb_log_info("(%p): Power switching not supported, "
     305                    "ports always powered.", hub_dev);
     306                return;
     307        }
     308
     309        usb_log_info("(%p): Hub port power switching enabled (%s).", hub_dev,
     310            hub_dev->per_port_power ? "per port" : "ganged");
     311
     312        for (unsigned int port = 0; port < hub_dev->port_count; ++port) {
     313                usb_log_debug("(%p): Powering port %u.", hub_dev, port + 1);
     314                const int ret = usb_hub_set_port_feature(hub_dev, port + 1, USB_HUB_FEATURE_PORT_POWER);
     315
     316                if (ret != EOK) {
     317                        usb_log_error("(%p-%u): Cannot power on port: %s.",
     318                            hub_dev, hub_dev->ports[port].port_number,
     319                            str_error(ret));
     320                        /* Continue to try at least other ports */
     321                }
     322        }
     323}
     324
    301325/**
    302326 * Load hub-specific information into hub_dev structure and process if needed
     
    360384            descriptor.characteristics & HUB_CHAR_POWER_PER_PORT_FLAG;
    361385
    362         if (!hub_dev->power_switched) {
    363                 usb_log_info("(%p): Power switching not supported, "
    364                     "ports always powered.", hub_dev);
    365                 return EOK;
    366         }
    367 
    368         usb_log_info("(%p): Hub port power switching enabled (%s).", hub_dev,
    369             hub_dev->per_port_power ? "per port" : "ganged");
    370 
    371         for (unsigned int port = 0; port < hub_dev->port_count; ++port) {
    372                 usb_log_debug("(%p): Powering port %u.", hub_dev, port + 1);
    373                 const int ret = usb_hub_set_port_feature(hub_dev, port + 1, USB_HUB_FEATURE_PORT_POWER);
    374 
    375                 if (ret != EOK) {
    376                         usb_log_error("(%p-%u): Cannot power on port: %s.",
    377                             hub_dev, hub_dev->ports[port].port_number,
    378                             str_error(ret));
    379                 } else {
    380                         if (!hub_dev->per_port_power) {
    381                                 usb_log_debug("(%p) Ganged power switching, port %u is probably already powered.", hub_dev, port + 1);
    382                         } else {
    383                                 usb_log_warning("(%p): Failed to power port %u.", hub_dev, port + 1);
    384                         }
    385                 }
    386         }
     386        usb_hub_power_ports(hub_dev);
     387
    387388        return EOK;
    388389}
Note: See TracChangeset for help on using the changeset viewer.