• Hans de Goede's avatar
    extcon: axp288: Set USB role where necessary · d54f063c
    Hans de Goede authored
    The AXP288 BC1.2 charger detection / extcon code may seem like a strange
    place to add code to control the USB role-switch on devices with an AXP288,
    but there are 2 reasons to do this inside the axp288 extcon code:
    
    1) On many devices the USB role is controlled by ACPI AML code, but the AML
       code only switches between the host and none roles, because of Windows
       not really using device mode. To make device mode work we need to toggle
       between the none/device roles based on Vbus presence, and the axp288
       extcon gets interrupts on Vbus insertion / removal.
    
    2) In order for our BC1.2 charger detection to work properly the role
       mux must be properly set to device mode before we do the detection.
    
    Also note the Kconfig help-text / obsolete depends on USB_PHY which are
    remnants from older never upstreamed code also controlling the mux from
    the axp288 extcon code.
    
    This commit also adds code to get notifications from the INT3496 extcon
    device, which is used on some devices to notify the kernel about id-pin
    changes instead of them being handled through AML code.
    
    This fixes:
    -Device mode not working on most CHT devices with an AXP288
    -Host mode not working on devices with an INT3496 ACPI device
    -Charger-type misdetection (always SDP) on devices with an INT3496 when the
     USB role (always) gets initialized as host
    Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
    Reviewed-by: Andy Shevchenko's avatarAndy Shevchenko <andy.shevchenko@gmail.com>
    Signed-off-by: default avatarHeikki Krogerus <heikki.krogerus@linux.intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    d54f063c
extcon-axp288.c 12.8 KB