• Rafał Miłecki's avatar
    usb: core: Introduce a USB port LED trigger · 0f247626
    Rafał Miłecki authored
    This commit adds a new trigger responsible for turning on LED when USB
    device gets connected to the selected USB port. This can can useful for
    various home routers that have USB port(s) and a proper LED telling user
    a device is connected.
    
    The trigger gets its documentation file but basically it just requires
    enabling it and selecting USB ports (e.g. echo 1 > ports/usb1-1).
    
    There was a long discussion on design of this driver. Its current state
    is a result of picking them most adjustable solution as others couldn't
    handle all cases.
    
    1) It wasn't possible for the driver to register separated trigger for
       each USB port. Some physical USB ports are handled by more than one
       controller and so by more than one USB port. E.g. USB 2.0 physical
       port may be handled by OHCI's port and EHCI's port.
       It's also not possible to assign more than 1 trigger to a single LED
       and implementing such feature would be tricky due to syncing triggers
       and sysfs conflicts with old triggers.
    
    2) Another idea was to register trigger per USB hub. This wouldn't allow
       handling devices with multiple USB LEDs and controllers (hubs)
       controlling more than 1 physical port. It's common for hubs to have
       few ports and each may have its own LED.
    
    This final trigger is highly flexible. It allows selecting any USB ports
    for any LED. It was also modified (comparing to the initial version) to
    allow choosing ports rather than having user /guess/ proper names. It
    was successfully tested on SmartRG SR400ac which has 3 USB LEDs,
    2 physical ports and 3 controllers.
    
    It was noted USB subsystem already has usb-gadget and usb-host triggers
    but they are pretty trivial ones. They indicate activity only and can't
    have ports specified.
    
    In future it may be good idea to consider adding activity support to
    usbport as well. This should allow switching to this more generic driver
    and maybe marking old ones as obsolete.
    This can be implemented with another sysfs file for setting mode. The
    default mode wouldn't change so there won't be ABI breakage and so such
    feature can be safely implemented later.
    
    There was also an idea of supporting other devices (PCI, SDIO, etc.) but
    as this driver already contains some USB specific code (and will get
    more) these should be probably separated drivers (triggers).
    Signed-off-by: 's avatarRafał Miłecki <rafal@milecki.pl>
    Signed-off-by: 's avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    0f247626