Hi,

On Mon, Aug 15, 2016 at 09:21:31PM +0200, Hans de Goede wrote:
> On some devices the musb otg controller can be used in both device and
> host mode, but requires software mode switching since there is no id pin
> connected. The usb0 phy code will default to device mode in this case.
> 
> On some systems usb0 is connected to a female USB-A port. It can still
> be used in device mode when using software mode switching and a USB
> A to A cable. To configure the controller to support both modes we must
> set its "dr_mode" dt property to "otg" (*). For these setups the device
> mode default is wrong, for a female USB-A port the default should be
> host mode.
> 
> This commit adds support to the sun4i phy code for a new
> "allwinner,usb0-usb-a-connector" dt property which can be used in dt
> files to indicate this scenario and when present it changes the default
> mode to host mode.

As I commented in patch 0/7, this dt prop is unneccesary.

Regards,
-Bin.

> 
> *) dr_mode = "host" is used when device mode is _never_ used. E.g.
> a wifi module soldered onto the PCB is connected to the musb controller.
> 
> Signed-off-by: Hans de Goede <hdego...@redhat.com>
> ---
> Changes in v2:
> -New patch in v2 of this patchset
> ---
>  Documentation/devicetree/bindings/phy/sun4i-usb-phy.txt | 2 ++
>  drivers/phy/phy-sun4i-usb.c                             | 9 ++++++++-
>  2 files changed, 10 insertions(+), 1 deletion(-)
> 
> diff --git a/Documentation/devicetree/bindings/phy/sun4i-usb-phy.txt 
> b/Documentation/devicetree/bindings/phy/sun4i-usb-phy.txt
> index 287150d..8646b53 100644
> --- a/Documentation/devicetree/bindings/phy/sun4i-usb-phy.txt
> +++ b/Documentation/devicetree/bindings/phy/sun4i-usb-phy.txt
> @@ -35,6 +35,8 @@ Optional properties:
>  - usb0_vbus-supply : regulator phandle for controller usb0 vbus
>  - usb1_vbus-supply : regulator phandle for controller usb1 vbus
>  - usb2_vbus-supply : regulator phandle for controller usb2 vbus
> +- allwinner,usb0-usb-a-connector: usb0 is connected to an USB-A connector,
> +                     rather then an USB-B connector as one would expect 
> (bool)
>  
>  Example:
>       usbphy: phy@0x01c13400 {
> diff --git a/drivers/phy/phy-sun4i-usb.c b/drivers/phy/phy-sun4i-usb.c
> index c17b099..82fb46a 100644
> --- a/drivers/phy/phy-sun4i-usb.c
> +++ b/drivers/phy/phy-sun4i-usb.c
> @@ -137,6 +137,7 @@ struct sun4i_usb_phy_data {
>       int vbus_det_irq;
>       int id_det;
>       int vbus_det;
> +     int id_det_default;
>       struct delayed_work detect;
>  };
>  
> @@ -328,7 +329,7 @@ static int sun4i_usb_phy0_get_id_det(struct 
> sun4i_usb_phy_data *data)
>               if (data->id_det_gpio)
>                       return gpiod_get_value_cansleep(data->id_det_gpio);
>               else
> -                     return 1; /* Fallback to peripheral mode */
> +                     return data->id_det_default;
>       case USB_DR_MODE_HOST:
>               return 0;
>       case USB_DR_MODE_PERIPHERAL:
> @@ -621,6 +622,12 @@ static int sun4i_usb_phy_probe(struct platform_device 
> *pdev)
>       if (IS_ERR(data->base))
>               return PTR_ERR(data->base);
>  
> +     /* Set id-det default for when there is no id-det gpio */
> +     if (of_property_read_bool(np, "allwinner,usb0-usb-a-connector"))
> +             data->id_det_default = 0; /* Host (USB-A connector) */
> +     else
> +             data->id_det_default = 1; /* Device (USB-B connector) */
> +
>       data->id_det_gpio = devm_gpiod_get_optional(dev, "usb0_id_det",
>                                                   GPIOD_IN);
>       if (IS_ERR(data->id_det_gpio))
> -- 
> 2.7.4
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to