Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 316854
b: refs/heads/master
c: c2e935a
h: refs/heads/master
v: v3
  • Loading branch information
Richard Zhao authored and Greg Kroah-Hartman committed Jun 13, 2012
1 parent e204398 commit 2017dbe
Show file tree
Hide file tree
Showing 7 changed files with 32 additions and 35 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 4527715979a34601b783f5f12774586c679c2a89
refs/heads/master: c2e935a7db6e7354e9dd138b7f6f4c53affc09d9
21 changes: 10 additions & 11 deletions trunk/drivers/usb/host/ehci-fsl.c
Original file line number Diff line number Diff line change
Expand Up @@ -142,19 +142,19 @@ static int usb_hcd_fsl_probe(const struct hc_driver *driver,
if (pdata->operating_mode == FSL_USB2_DR_OTG) {
struct ehci_hcd *ehci = hcd_to_ehci(hcd);

ehci->transceiver = usb_get_transceiver();
dev_dbg(&pdev->dev, "hcd=0x%p ehci=0x%p, transceiver=0x%p\n",
hcd, ehci, ehci->transceiver);
hcd->phy = usb_get_transceiver();
dev_dbg(&pdev->dev, "hcd=0x%p ehci=0x%p, phy=0x%p\n",
hcd, ehci, hcd->phy);

if (ehci->transceiver) {
retval = otg_set_host(ehci->transceiver->otg,
if (hcd->phy) {
retval = otg_set_host(hcd->phy->otg,
&ehci_to_hcd(ehci)->self);
if (retval) {
usb_put_transceiver(ehci->transceiver);
usb_put_transceiver(hcd->phy);
goto err4;
}
} else {
dev_err(&pdev->dev, "can't find transceiver\n");
dev_err(&pdev->dev, "can't find phy\n");
retval = -ENODEV;
goto err4;
}
Expand Down Expand Up @@ -190,11 +190,10 @@ static void usb_hcd_fsl_remove(struct usb_hcd *hcd,
struct platform_device *pdev)
{
struct fsl_usb2_platform_data *pdata = pdev->dev.platform_data;
struct ehci_hcd *ehci = hcd_to_ehci(hcd);

if (ehci->transceiver) {
otg_set_host(ehci->transceiver->otg, NULL);
usb_put_transceiver(ehci->transceiver);
if (hcd->phy) {
otg_set_host(hcd->phy->otg, NULL);
usb_put_transceiver(hcd->phy);
}

usb_remove_hcd(hcd);
Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/usb/host/ehci-hub.c
Original file line number Diff line number Diff line change
Expand Up @@ -724,7 +724,7 @@ static int ehci_hub_control (
#ifdef CONFIG_USB_OTG
if ((hcd->self.otg_port == (wIndex + 1))
&& hcd->self.b_hnp_enable) {
otg_start_hnp(ehci->transceiver->otg);
otg_start_hnp(hcd->phy->otg);
break;
}
#endif
Expand Down
4 changes: 0 additions & 4 deletions trunk/drivers/usb/host/ehci.h
Original file line number Diff line number Diff line change
Expand Up @@ -175,10 +175,6 @@ struct ehci_hcd { /* one per controller */
#ifdef DEBUG
struct dentry *debug_dir;
#endif
/*
* OTG controllers and transceivers need software interaction
*/
struct usb_phy *transceiver;
};

/* convert between an HCD pointer and the corresponding EHCI_HCD */
Expand Down
27 changes: 14 additions & 13 deletions trunk/drivers/usb/host/ohci-omap.c
Original file line number Diff line number Diff line change
Expand Up @@ -167,14 +167,15 @@ static int omap_1510_local_bus_init(void)

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;
u32 l;

otg_start_hnp(ohci->transceiver->otg);
otg_start_hnp(hcd->phy->otg);

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]);
l = omap_readl(OTG_CTRL);
l &= ~OTG_A_BUSREQ;
Expand Down Expand Up @@ -211,18 +212,18 @@ static int ohci_omap_init(struct usb_hcd *hcd)

#ifdef CONFIG_USB_OTG
if (need_transceiver) {
ohci->transceiver = usb_get_transceiver();
if (ohci->transceiver) {
int status = otg_set_host(ohci->transceiver->otg,
hcd->phy = usb_get_transceiver();
if (hcd->phy) {
int status = otg_set_host(hcd->phy->otg,
&ohci_to_hcd(ohci)->self);
dev_dbg(hcd->self.controller, "init %s transceiver, status %d\n",
ohci->transceiver->label, status);
dev_dbg(hcd->self.controller, "init %s phy, status %d\n",
hcd->phy->label, status);
if (status) {
usb_put_transceiver(ohci->transceiver);
usb_put_transceiver(hcd->phy);
return status;
}
} else {
dev_err(hcd->self.controller, "can't find transceiver\n");
dev_err(hcd->self.controller, "can't find phy\n");
return -ENODEV;
}
ohci->start_hnp = start_hnp;
Expand Down Expand Up @@ -403,9 +404,9 @@ usb_hcd_omap_remove (struct usb_hcd *hcd, struct platform_device *pdev)
struct ohci_hcd *ohci = hcd_to_ohci (hcd);

usb_remove_hcd(hcd);
if (ohci->transceiver) {
(void) otg_set_host(ohci->transceiver->otg, 0);
usb_put_transceiver(ohci->transceiver);
if (hcd->phy) {
(void) otg_set_host(hcd->phy->otg, 0);
usb_put_transceiver(hcd->phy);
}
if (machine_is_omap_osk())
gpio_free(9);
Expand Down
5 changes: 0 additions & 5 deletions trunk/drivers/usb/host/ohci.h
Original file line number Diff line number Diff line change
Expand Up @@ -372,11 +372,6 @@ struct ohci_hcd {
struct ed *ed_controltail; /* last in ctrl list */
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);

/*
Expand Down
6 changes: 6 additions & 0 deletions trunk/include/linux/usb/hcd.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,12 @@ struct usb_hcd {
*/
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
* change while the host controller is running. Always use
* set_bit() or clear_bit() to change their values.
Expand Down

0 comments on commit 2017dbe

Please sign in to comment.