
On Friday, November 07, 2014 at 12:03:30 PM, Peng Fan wrote:
[...]
@@ -160,7 +174,7 @@ static int usb_phy_enable(int index, struct usb_ehci *ehci) val |= (USBPHY_CTRL_ENUTMILEVEL2 | USBPHY_CTRL_ENUTMILEVEL3);
__raw_writel(val, phy_ctrl);
- return val & USBPHY_CTRL_OTG_ID;
- return board_usb_phy_mode(index);
This should be called from ehci_hcd_init() right after usb_phy_enable(). Afterall, the mode detection has nothing to do with the PHY enabling.
This back to what I did in patch v2. right after usb_phy_enable(), just paste that piece of code here:
The weak function: +int __weak board_ehci_usb_mode(int index, enum usb_init_type *type) +{
return 0;
+}
type = usb_phy_enable(index, ehci) ? USB_INIT_DEVICE :
USB_INIT_HOST;
board_usb_phy_mode(index, &type);
The usb_phy_enable() should not return the PHY mode at all though. It should be the board_usb_phy_mode() which adjusts the PHY type. The usb_phy_enable() should return just a success/failure return value.
What need to do is to let board can modify the `type` like following: +int board_usb_phy_mode(int port, enum usb_init_type *type) +{
- if (port == 1)
/* port1 works in HOST Mode */
*type = USB_INIT_HOST;
return 0;
+}
This is the way that I did in patch v2. If this is fine, I'll resent this patch set.
It should really explicitly set it, not modify it, see above.
[...]