USB: move transceiver from ehci_hcd and ohci_hcd to hcd and rename it as phy
- to decrease redundant since both ehci_hcd and ohci_hcd have the same variable - it helps access phy in usb core code - phy is more meaningful than transceiver Signed-off-by: Richard Zhao <richard.zhao@freescale.com> Acked-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
4527715979
commit
c2e935a7db
|
@ -142,19 +142,19 @@ static int usb_hcd_fsl_probe(const struct hc_driver *driver,
|
||||||
if (pdata->operating_mode == FSL_USB2_DR_OTG) {
|
if (pdata->operating_mode == FSL_USB2_DR_OTG) {
|
||||||
struct ehci_hcd *ehci = hcd_to_ehci(hcd);
|
struct ehci_hcd *ehci = hcd_to_ehci(hcd);
|
||||||
|
|
||||||
ehci->transceiver = usb_get_transceiver();
|
hcd->phy = usb_get_transceiver();
|
||||||
dev_dbg(&pdev->dev, "hcd=0x%p ehci=0x%p, transceiver=0x%p\n",
|
dev_dbg(&pdev->dev, "hcd=0x%p ehci=0x%p, phy=0x%p\n",
|
||||||
hcd, ehci, ehci->transceiver);
|
hcd, ehci, hcd->phy);
|
||||||
|
|
||||||
if (ehci->transceiver) {
|
if (hcd->phy) {
|
||||||
retval = otg_set_host(ehci->transceiver->otg,
|
retval = otg_set_host(hcd->phy->otg,
|
||||||
&ehci_to_hcd(ehci)->self);
|
&ehci_to_hcd(ehci)->self);
|
||||||
if (retval) {
|
if (retval) {
|
||||||
usb_put_transceiver(ehci->transceiver);
|
usb_put_transceiver(hcd->phy);
|
||||||
goto err4;
|
goto err4;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
dev_err(&pdev->dev, "can't find transceiver\n");
|
dev_err(&pdev->dev, "can't find phy\n");
|
||||||
retval = -ENODEV;
|
retval = -ENODEV;
|
||||||
goto err4;
|
goto err4;
|
||||||
}
|
}
|
||||||
|
@ -190,11 +190,10 @@ static void usb_hcd_fsl_remove(struct usb_hcd *hcd,
|
||||||
struct platform_device *pdev)
|
struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct fsl_usb2_platform_data *pdata = pdev->dev.platform_data;
|
struct fsl_usb2_platform_data *pdata = pdev->dev.platform_data;
|
||||||
struct ehci_hcd *ehci = hcd_to_ehci(hcd);
|
|
||||||
|
|
||||||
if (ehci->transceiver) {
|
if (hcd->phy) {
|
||||||
otg_set_host(ehci->transceiver->otg, NULL);
|
otg_set_host(hcd->phy->otg, NULL);
|
||||||
usb_put_transceiver(ehci->transceiver);
|
usb_put_transceiver(hcd->phy);
|
||||||
}
|
}
|
||||||
|
|
||||||
usb_remove_hcd(hcd);
|
usb_remove_hcd(hcd);
|
||||||
|
|
|
@ -724,7 +724,7 @@ static int ehci_hub_control (
|
||||||
#ifdef CONFIG_USB_OTG
|
#ifdef CONFIG_USB_OTG
|
||||||
if ((hcd->self.otg_port == (wIndex + 1))
|
if ((hcd->self.otg_port == (wIndex + 1))
|
||||||
&& hcd->self.b_hnp_enable) {
|
&& hcd->self.b_hnp_enable) {
|
||||||
otg_start_hnp(ehci->transceiver->otg);
|
otg_start_hnp(hcd->phy->otg);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -175,10 +175,6 @@ struct ehci_hcd { /* one per controller */
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
struct dentry *debug_dir;
|
struct dentry *debug_dir;
|
||||||
#endif
|
#endif
|
||||||
/*
|
|
||||||
* OTG controllers and transceivers need software interaction
|
|
||||||
*/
|
|
||||||
struct usb_phy *transceiver;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* convert between an HCD pointer and the corresponding EHCI_HCD */
|
/* convert between an HCD pointer and the corresponding EHCI_HCD */
|
||||||
|
|
|
@ -167,14 +167,15 @@ static int omap_1510_local_bus_init(void)
|
||||||
|
|
||||||
static void start_hnp(struct ohci_hcd *ohci)
|
static void start_hnp(struct ohci_hcd *ohci)
|
||||||
{
|
{
|
||||||
const unsigned port = ohci_to_hcd(ohci)->self.otg_port - 1;
|
struct usb_hcd *hcd = ohci_to_hcd(ohci);
|
||||||
|
const unsigned port = hcd->self.otg_port - 1;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
u32 l;
|
u32 l;
|
||||||
|
|
||||||
otg_start_hnp(ohci->transceiver->otg);
|
otg_start_hnp(hcd->phy->otg);
|
||||||
|
|
||||||
local_irq_save(flags);
|
local_irq_save(flags);
|
||||||
ohci->transceiver->state = OTG_STATE_A_SUSPEND;
|
hcd->phy->state = OTG_STATE_A_SUSPEND;
|
||||||
writel (RH_PS_PSS, &ohci->regs->roothub.portstatus [port]);
|
writel (RH_PS_PSS, &ohci->regs->roothub.portstatus [port]);
|
||||||
l = omap_readl(OTG_CTRL);
|
l = omap_readl(OTG_CTRL);
|
||||||
l &= ~OTG_A_BUSREQ;
|
l &= ~OTG_A_BUSREQ;
|
||||||
|
@ -211,18 +212,18 @@ static int ohci_omap_init(struct usb_hcd *hcd)
|
||||||
|
|
||||||
#ifdef CONFIG_USB_OTG
|
#ifdef CONFIG_USB_OTG
|
||||||
if (need_transceiver) {
|
if (need_transceiver) {
|
||||||
ohci->transceiver = usb_get_transceiver();
|
hcd->phy = usb_get_transceiver();
|
||||||
if (ohci->transceiver) {
|
if (hcd->phy) {
|
||||||
int status = otg_set_host(ohci->transceiver->otg,
|
int status = otg_set_host(hcd->phy->otg,
|
||||||
&ohci_to_hcd(ohci)->self);
|
&ohci_to_hcd(ohci)->self);
|
||||||
dev_dbg(hcd->self.controller, "init %s transceiver, status %d\n",
|
dev_dbg(hcd->self.controller, "init %s phy, status %d\n",
|
||||||
ohci->transceiver->label, status);
|
hcd->phy->label, status);
|
||||||
if (status) {
|
if (status) {
|
||||||
usb_put_transceiver(ohci->transceiver);
|
usb_put_transceiver(hcd->phy);
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
dev_err(hcd->self.controller, "can't find transceiver\n");
|
dev_err(hcd->self.controller, "can't find phy\n");
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
ohci->start_hnp = start_hnp;
|
ohci->start_hnp = start_hnp;
|
||||||
|
@ -403,9 +404,9 @@ usb_hcd_omap_remove (struct usb_hcd *hcd, struct platform_device *pdev)
|
||||||
struct ohci_hcd *ohci = hcd_to_ohci (hcd);
|
struct ohci_hcd *ohci = hcd_to_ohci (hcd);
|
||||||
|
|
||||||
usb_remove_hcd(hcd);
|
usb_remove_hcd(hcd);
|
||||||
if (ohci->transceiver) {
|
if (hcd->phy) {
|
||||||
(void) otg_set_host(ohci->transceiver->otg, 0);
|
(void) otg_set_host(hcd->phy->otg, 0);
|
||||||
usb_put_transceiver(ohci->transceiver);
|
usb_put_transceiver(hcd->phy);
|
||||||
}
|
}
|
||||||
if (machine_is_omap_osk())
|
if (machine_is_omap_osk())
|
||||||
gpio_free(9);
|
gpio_free(9);
|
||||||
|
|
|
@ -372,11 +372,6 @@ struct ohci_hcd {
|
||||||
struct ed *ed_controltail; /* last in ctrl list */
|
struct ed *ed_controltail; /* last in ctrl list */
|
||||||
struct ed *periodic [NUM_INTS]; /* shadow int_table */
|
struct ed *periodic [NUM_INTS]; /* shadow int_table */
|
||||||
|
|
||||||
/*
|
|
||||||
* OTG controllers and transceivers need software interaction;
|
|
||||||
* other external transceivers should be software-transparent
|
|
||||||
*/
|
|
||||||
struct usb_phy *transceiver;
|
|
||||||
void (*start_hnp)(struct ohci_hcd *ohci);
|
void (*start_hnp)(struct ohci_hcd *ohci);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -93,6 +93,12 @@ struct usb_hcd {
|
||||||
*/
|
*/
|
||||||
const struct hc_driver *driver; /* hw-specific hooks */
|
const struct hc_driver *driver; /* hw-specific hooks */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* OTG and some Host controllers need software interaction with phys;
|
||||||
|
* other external phys should be software-transparent
|
||||||
|
*/
|
||||||
|
struct usb_phy *phy;
|
||||||
|
|
||||||
/* Flags that need to be manipulated atomically because they can
|
/* Flags that need to be manipulated atomically because they can
|
||||||
* change while the host controller is running. Always use
|
* change while the host controller is running. Always use
|
||||||
* set_bit() or clear_bit() to change their values.
|
* set_bit() or clear_bit() to change their values.
|
||||||
|
|
Loading…
Reference in New Issue