sunxi: usb: Do not call phy_probe from hcd code

The 2/3 usb-phys on the sunxi SoCs are really a single separate functional
block, and are modelled as such in devicetree. So once we've moved all the
sunxi usb code to the driver-model then phy_probe will be called once
for the entire block from the driver-model enumeration code.

Move to this now as this also avoids problems with phy_probe being called
multiple times once we introduce ohci support. This also allows us to get rid
of the sunxi_usb_phy_enabled_count variable as phy_probe now is guaranteed
to be called only once.

Since we're effectively rewriting the probe / remove functions, move them
to the end of the file while we are at it, as that is the most logical place
for them.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Ian Campbell <ijc@hellion.org.uk>
This commit is contained in:
Hans de Goede
2015-04-27 16:50:04 +02:00
parent 2aacc4239c
commit e13afeef6f
10 changed files with 76 additions and 63 deletions

View File

@@ -20,11 +20,7 @@ int ehci_hcd_init(int index, enum usb_init_type init, struct ehci_hccr **hccr,
struct ehci_hcor **hcor)
{
struct sunxi_ccm_reg *ccm = (struct sunxi_ccm_reg *)SUNXI_CCM_BASE;
int ahb_gate_offset, err;
err = sunxi_usb_phy_probe(index + 1);
if (err)
return err;
int ahb_gate_offset;
ahb_gate_offset = index ? AHB_GATE_OFFSET_USB_EHCI1 :
AHB_GATE_OFFSET_USB_EHCI0;
@@ -66,5 +62,5 @@ int ehci_hcd_stop(int index)
#endif
clrbits_le32(&ccm->ahb_gate0, 1 << ahb_gate_offset);
return sunxi_usb_phy_remove(index + 1);
return 0;
}

View File

@@ -250,15 +250,10 @@ static int sunxi_musb_init(struct musb *musb)
pr_debug("%s():\n", __func__);
err = sunxi_usb_phy_probe(0);
if (err)
return err;
if (is_host_enabled(musb)) {
err = sunxi_usb_phy_vbus_detect(0);
if (err) {
eprintf("Error: A charger is plugged into the OTG\n");
sunxi_usb_phy_remove(0);
return -EIO;
}
}
@@ -296,7 +291,7 @@ static int sunxi_musb_exit(struct musb *musb)
sunxi_usb_phy_power_off(0);
sunxi_usb_phy_exit(0);
return sunxi_usb_phy_remove(0);
return 0;
}
const struct musb_platform_ops sunxi_musb_ops = {