You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge tag 'xceiv-for-v3.6' of git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb into usb-next
usb: phy: patches for v3.6 merge window We are starting to support multiple USB phys as we should thanks for Kishon's work. DeviceTree support for USB PHYs won't come until discussion with DeviceTree maintainer is finished. Together with that series, we have one fix for twl4030 which missed a IRQF_ONESHOT annotation when requesting a threaded IRQ without a top half handler, and removal of an unused variable compilation warning to isp1301_omap.
This commit is contained in:
@@ -2517,7 +2517,7 @@ static int __devexit ab8500_charger_remove(struct platform_device *pdev)
|
||||
dev_err(di->dev, "%s mask and set failed\n", __func__);
|
||||
|
||||
usb_unregister_notifier(di->usb_phy, &di->nb);
|
||||
usb_put_transceiver(di->usb_phy);
|
||||
usb_put_phy(di->usb_phy);
|
||||
|
||||
/* Delete the work queue */
|
||||
destroy_workqueue(di->charger_wq);
|
||||
@@ -2688,8 +2688,8 @@ static int __devinit ab8500_charger_probe(struct platform_device *pdev)
|
||||
goto free_ac;
|
||||
}
|
||||
|
||||
di->usb_phy = usb_get_transceiver();
|
||||
if (!di->usb_phy) {
|
||||
di->usb_phy = usb_get_phy(USB_PHY_TYPE_USB2);
|
||||
if (IS_ERR_OR_NULL(di->usb_phy)) {
|
||||
dev_err(di->dev, "failed to get usb transceiver\n");
|
||||
ret = -EINVAL;
|
||||
goto free_usb;
|
||||
@@ -2747,7 +2747,7 @@ free_irq:
|
||||
free_irq(irq, di);
|
||||
}
|
||||
put_usb_phy:
|
||||
usb_put_transceiver(di->usb_phy);
|
||||
usb_put_phy(di->usb_phy);
|
||||
free_usb:
|
||||
power_supply_unregister(&di->usb_chg.psy);
|
||||
free_ac:
|
||||
|
||||
@@ -415,8 +415,8 @@ static int __devinit isp1704_charger_probe(struct platform_device *pdev)
|
||||
if (!isp)
|
||||
return -ENOMEM;
|
||||
|
||||
isp->phy = usb_get_transceiver();
|
||||
if (!isp->phy)
|
||||
isp->phy = usb_get_phy(USB_PHY_TYPE_USB2);
|
||||
if (IS_ERR_OR_NULL(isp->phy))
|
||||
goto fail0;
|
||||
|
||||
isp->dev = &pdev->dev;
|
||||
@@ -475,7 +475,7 @@ fail2:
|
||||
power_supply_unregister(&isp->psy);
|
||||
fail1:
|
||||
isp1704_charger_set_power(isp, 0);
|
||||
usb_put_transceiver(isp->phy);
|
||||
usb_put_phy(isp->phy);
|
||||
fail0:
|
||||
kfree(isp);
|
||||
|
||||
@@ -490,7 +490,7 @@ static int __devexit isp1704_charger_remove(struct platform_device *pdev)
|
||||
|
||||
usb_unregister_notifier(isp->phy, &isp->nb);
|
||||
power_supply_unregister(&isp->psy);
|
||||
usb_put_transceiver(isp->phy);
|
||||
usb_put_phy(isp->phy);
|
||||
isp1704_charger_set_power(isp, 0);
|
||||
kfree(isp);
|
||||
|
||||
|
||||
+11
-11
@@ -321,12 +321,12 @@ static int pda_power_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
#ifdef CONFIG_USB_OTG_UTILS
|
||||
transceiver = usb_get_transceiver();
|
||||
if (transceiver && !pdata->is_usb_online) {
|
||||
pdata->is_usb_online = otg_is_usb_online;
|
||||
}
|
||||
if (transceiver && !pdata->is_ac_online) {
|
||||
pdata->is_ac_online = otg_is_ac_online;
|
||||
transceiver = usb_get_phy(USB_PHY_TYPE_USB2);
|
||||
if (!IS_ERR_OR_NULL(transceiver)) {
|
||||
if (!pdata->is_usb_online)
|
||||
pdata->is_usb_online = otg_is_usb_online;
|
||||
if (!pdata->is_ac_online)
|
||||
pdata->is_ac_online = otg_is_ac_online;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -373,7 +373,7 @@ static int pda_power_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
#ifdef CONFIG_USB_OTG_UTILS
|
||||
if (transceiver && pdata->use_otg_notifier) {
|
||||
if (!IS_ERR_OR_NULL(transceiver) && pdata->use_otg_notifier) {
|
||||
otg_nb.notifier_call = otg_handle_notification;
|
||||
ret = usb_register_notifier(transceiver, &otg_nb);
|
||||
if (ret) {
|
||||
@@ -408,8 +408,8 @@ usb_supply_failed:
|
||||
if (pdata->is_ac_online && ac_irq)
|
||||
free_irq(ac_irq->start, &pda_psy_ac);
|
||||
#ifdef CONFIG_USB_OTG_UTILS
|
||||
if (transceiver)
|
||||
usb_put_transceiver(transceiver);
|
||||
if (!IS_ERR_OR_NULL(transceiver))
|
||||
usb_put_phy(transceiver);
|
||||
#endif
|
||||
ac_irq_failed:
|
||||
if (pdata->is_ac_online)
|
||||
@@ -443,8 +443,8 @@ static int pda_power_remove(struct platform_device *pdev)
|
||||
if (pdata->is_ac_online)
|
||||
power_supply_unregister(&pda_psy_ac);
|
||||
#ifdef CONFIG_USB_OTG_UTILS
|
||||
if (transceiver)
|
||||
usb_put_transceiver(transceiver);
|
||||
if (!IS_ERR_OR_NULL(transceiver))
|
||||
usb_put_phy(transceiver);
|
||||
#endif
|
||||
if (ac_draw) {
|
||||
regulator_put(ac_draw);
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <linux/init.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/i2c/twl.h>
|
||||
@@ -479,8 +480,8 @@ static int __init twl4030_bci_probe(struct platform_device *pdev)
|
||||
|
||||
INIT_WORK(&bci->work, twl4030_bci_usb_work);
|
||||
|
||||
bci->transceiver = usb_get_transceiver();
|
||||
if (bci->transceiver != NULL) {
|
||||
bci->transceiver = usb_get_phy(USB_PHY_TYPE_USB2);
|
||||
if (!IS_ERR_OR_NULL(bci->transceiver)) {
|
||||
bci->usb_nb.notifier_call = twl4030_bci_usb_ncb;
|
||||
usb_register_notifier(bci->transceiver, &bci->usb_nb);
|
||||
}
|
||||
@@ -507,9 +508,9 @@ static int __init twl4030_bci_probe(struct platform_device *pdev)
|
||||
return 0;
|
||||
|
||||
fail_unmask_interrupts:
|
||||
if (bci->transceiver != NULL) {
|
||||
if (!IS_ERR_OR_NULL(bci->transceiver)) {
|
||||
usb_unregister_notifier(bci->transceiver, &bci->usb_nb);
|
||||
usb_put_transceiver(bci->transceiver);
|
||||
usb_put_phy(bci->transceiver);
|
||||
}
|
||||
free_irq(bci->irq_bci, bci);
|
||||
fail_bci_irq:
|
||||
@@ -538,9 +539,9 @@ static int __exit twl4030_bci_remove(struct platform_device *pdev)
|
||||
twl_i2c_write_u8(TWL4030_MODULE_INTERRUPTS, 0xff,
|
||||
TWL4030_INTERRUPTS_BCIIMR2A);
|
||||
|
||||
if (bci->transceiver != NULL) {
|
||||
if (!IS_ERR_OR_NULL(bci->transceiver)) {
|
||||
usb_unregister_notifier(bci->transceiver, &bci->usb_nb);
|
||||
usb_put_transceiver(bci->transceiver);
|
||||
usb_put_phy(bci->transceiver);
|
||||
}
|
||||
free_irq(bci->irq_bci, bci);
|
||||
free_irq(bci->irq_chg, bci);
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#include <linux/device.h>
|
||||
#include <linux/dmapool.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/module.h>
|
||||
@@ -1687,7 +1688,7 @@ static int udc_start(struct ci13xxx *udc)
|
||||
|
||||
udc->gadget.ep0 = &udc->ep0in->ep;
|
||||
|
||||
udc->transceiver = usb_get_transceiver();
|
||||
udc->transceiver = usb_get_phy(USB_PHY_TYPE_USB2);
|
||||
|
||||
if (udc->udc_driver->flags & CI13XXX_REQUIRE_TRANSCEIVER) {
|
||||
if (udc->transceiver == NULL) {
|
||||
@@ -1712,7 +1713,7 @@ static int udc_start(struct ci13xxx *udc)
|
||||
if (retval)
|
||||
goto unreg_device;
|
||||
|
||||
if (udc->transceiver) {
|
||||
if (!IS_ERR_OR_NULL(udc->transceiver)) {
|
||||
retval = otg_set_peripheral(udc->transceiver->otg,
|
||||
&udc->gadget);
|
||||
if (retval)
|
||||
@@ -1729,9 +1730,9 @@ static int udc_start(struct ci13xxx *udc)
|
||||
return retval;
|
||||
|
||||
remove_trans:
|
||||
if (udc->transceiver) {
|
||||
if (!IS_ERR_OR_NULL(udc->transceiver)) {
|
||||
otg_set_peripheral(udc->transceiver->otg, &udc->gadget);
|
||||
usb_put_transceiver(udc->transceiver);
|
||||
usb_put_phy(udc->transceiver);
|
||||
}
|
||||
|
||||
dev_err(dev, "error = %i\n", retval);
|
||||
@@ -1740,8 +1741,8 @@ remove_dbg:
|
||||
unreg_device:
|
||||
device_unregister(&udc->gadget.dev);
|
||||
put_transceiver:
|
||||
if (udc->transceiver)
|
||||
usb_put_transceiver(udc->transceiver);
|
||||
if (!IS_ERR_OR_NULL(udc->transceiver))
|
||||
usb_put_phy(udc->transceiver);
|
||||
free_pools:
|
||||
dma_pool_destroy(udc->td_pool);
|
||||
free_qh_pool:
|
||||
@@ -1772,9 +1773,9 @@ static void udc_stop(struct ci13xxx *udc)
|
||||
dma_pool_destroy(udc->td_pool);
|
||||
dma_pool_destroy(udc->qh_pool);
|
||||
|
||||
if (udc->transceiver) {
|
||||
if (!IS_ERR_OR_NULL(udc->transceiver)) {
|
||||
otg_set_peripheral(udc->transceiver->otg, NULL);
|
||||
usb_put_transceiver(udc->transceiver);
|
||||
usb_put_phy(udc->transceiver);
|
||||
}
|
||||
dbg_remove_files(&udc->gadget.dev);
|
||||
device_unregister(&udc->gadget.dev);
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/list.h>
|
||||
@@ -1229,7 +1230,7 @@ static int fsl_vbus_draw(struct usb_gadget *gadget, unsigned mA)
|
||||
struct fsl_udc *udc;
|
||||
|
||||
udc = container_of(gadget, struct fsl_udc, gadget);
|
||||
if (udc->transceiver)
|
||||
if (!IS_ERR_OR_NULL(udc->transceiver))
|
||||
return usb_phy_set_power(udc->transceiver, mA);
|
||||
return -ENOTSUPP;
|
||||
}
|
||||
@@ -1983,13 +1984,13 @@ static int fsl_start(struct usb_gadget_driver *driver,
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (udc_controller->transceiver) {
|
||||
if (!IS_ERR_OR_NULL(udc_controller->transceiver)) {
|
||||
/* Suspend the controller until OTG enable it */
|
||||
udc_controller->stopped = 1;
|
||||
printk(KERN_INFO "Suspend udc for OTG auto detect\n");
|
||||
|
||||
/* connect to bus through transceiver */
|
||||
if (udc_controller->transceiver) {
|
||||
if (!IS_ERR_OR_NULL(udc_controller->transceiver)) {
|
||||
retval = otg_set_peripheral(
|
||||
udc_controller->transceiver->otg,
|
||||
&udc_controller->gadget);
|
||||
@@ -2030,7 +2031,7 @@ static int fsl_stop(struct usb_gadget_driver *driver)
|
||||
if (!driver || driver != udc_controller->driver || !driver->unbind)
|
||||
return -EINVAL;
|
||||
|
||||
if (udc_controller->transceiver)
|
||||
if (!IS_ERR_OR_NULL(udc_controller->transceiver))
|
||||
otg_set_peripheral(udc_controller->transceiver->otg, NULL);
|
||||
|
||||
/* stop DR, disable intr */
|
||||
@@ -2455,8 +2456,8 @@ static int __init fsl_udc_probe(struct platform_device *pdev)
|
||||
|
||||
#ifdef CONFIG_USB_OTG
|
||||
if (pdata->operating_mode == FSL_USB2_DR_OTG) {
|
||||
udc_controller->transceiver = usb_get_transceiver();
|
||||
if (!udc_controller->transceiver) {
|
||||
udc_controller->transceiver = usb_get_phy(USB_PHY_TYPE_USB2);
|
||||
if (IS_ERR_OR_NULL(udc_controller->transceiver)) {
|
||||
ERR("Can't find OTG driver!\n");
|
||||
ret = -ENODEV;
|
||||
goto err_kfree;
|
||||
@@ -2540,7 +2541,7 @@ static int __init fsl_udc_probe(struct platform_device *pdev)
|
||||
goto err_free_irq;
|
||||
}
|
||||
|
||||
if (!udc_controller->transceiver) {
|
||||
if (IS_ERR_OR_NULL(udc_controller->transceiver)) {
|
||||
/* initialize usb hw reg except for regs for EP,
|
||||
* leave usbintr reg untouched */
|
||||
dr_controller_setup(udc_controller);
|
||||
@@ -2565,7 +2566,7 @@ static int __init fsl_udc_probe(struct platform_device *pdev)
|
||||
if (ret < 0)
|
||||
goto err_free_irq;
|
||||
|
||||
if (udc_controller->transceiver)
|
||||
if (!IS_ERR_OR_NULL(udc_controller->transceiver))
|
||||
udc_controller->gadget.is_otg = 1;
|
||||
|
||||
/* setup QH and epctrl for ep0 */
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#include <linux/sched.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/list.h>
|
||||
@@ -1381,7 +1382,7 @@ static int mv_udc_start(struct usb_gadget_driver *driver,
|
||||
return retval;
|
||||
}
|
||||
|
||||
if (udc->transceiver) {
|
||||
if (!IS_ERR_OR_NULL(udc->transceiver)) {
|
||||
retval = otg_set_peripheral(udc->transceiver->otg,
|
||||
&udc->gadget);
|
||||
if (retval) {
|
||||
@@ -2107,7 +2108,7 @@ static int __devexit mv_udc_remove(struct platform_device *dev)
|
||||
* then vbus irq will not be requested in udc driver.
|
||||
*/
|
||||
if (udc->pdata && udc->pdata->vbus
|
||||
&& udc->clock_gating && udc->transceiver == NULL)
|
||||
&& udc->clock_gating && IS_ERR_OR_NULL(udc->transceiver))
|
||||
free_irq(udc->pdata->vbus->irq, &dev->dev);
|
||||
|
||||
/* free memory allocated in probe */
|
||||
@@ -2180,7 +2181,7 @@ static int __devinit mv_udc_probe(struct platform_device *dev)
|
||||
|
||||
#ifdef CONFIG_USB_OTG_UTILS
|
||||
if (pdata->mode == MV_USB_MODE_OTG)
|
||||
udc->transceiver = usb_get_transceiver();
|
||||
udc->transceiver = usb_get_phy(USB_PHY_TYPE_USB2);
|
||||
#endif
|
||||
|
||||
udc->clknum = pdata->clknum;
|
||||
@@ -2325,7 +2326,7 @@ static int __devinit mv_udc_probe(struct platform_device *dev)
|
||||
eps_init(udc);
|
||||
|
||||
/* VBUS detect: we can disable/enable clock on demand.*/
|
||||
if (udc->transceiver)
|
||||
if (!IS_ERR_OR_NULL(udc->transceiver))
|
||||
udc->clock_gating = 1;
|
||||
else if (pdata->vbus) {
|
||||
udc->clock_gating = 1;
|
||||
@@ -2369,7 +2370,7 @@ static int __devinit mv_udc_probe(struct platform_device *dev)
|
||||
|
||||
err_unregister:
|
||||
if (udc->pdata && udc->pdata->vbus
|
||||
&& udc->clock_gating && udc->transceiver == NULL)
|
||||
&& udc->clock_gating && IS_ERR_OR_NULL(udc->transceiver))
|
||||
free_irq(pdata->vbus->irq, &dev->dev);
|
||||
device_unregister(&udc->gadget.dev);
|
||||
err_free_irq:
|
||||
@@ -2404,7 +2405,7 @@ static int mv_udc_suspend(struct device *_dev)
|
||||
struct mv_udc *udc = the_controller;
|
||||
|
||||
/* if OTG is enabled, the following will be done in OTG driver*/
|
||||
if (udc->transceiver)
|
||||
if (!IS_ERR_OR_NULL(udc->transceiver))
|
||||
return 0;
|
||||
|
||||
if (udc->pdata->vbus && udc->pdata->vbus->poll)
|
||||
@@ -2437,7 +2438,7 @@ static int mv_udc_resume(struct device *_dev)
|
||||
int retval;
|
||||
|
||||
/* if OTG is enabled, the following will be done in OTG driver*/
|
||||
if (udc->transceiver)
|
||||
if (!IS_ERR_OR_NULL(udc->transceiver))
|
||||
return 0;
|
||||
|
||||
if (!udc->clock_gating) {
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
#include <linux/usb/otg.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/prefetch.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
@@ -1152,7 +1153,7 @@ static int omap_wakeup(struct usb_gadget *gadget)
|
||||
|
||||
/* NOTE: non-OTG systems may use SRP TOO... */
|
||||
} else if (!(udc->devstat & UDC_ATT)) {
|
||||
if (udc->transceiver)
|
||||
if (!IS_ERR_OR_NULL(udc->transceiver))
|
||||
retval = otg_start_srp(udc->transceiver->otg);
|
||||
}
|
||||
spin_unlock_irqrestore(&udc->lock, flags);
|
||||
@@ -1284,7 +1285,7 @@ static int omap_vbus_draw(struct usb_gadget *gadget, unsigned mA)
|
||||
struct omap_udc *udc;
|
||||
|
||||
udc = container_of(gadget, struct omap_udc, gadget);
|
||||
if (udc->transceiver)
|
||||
if (!IS_ERR_OR_NULL(udc->transceiver))
|
||||
return usb_phy_set_power(udc->transceiver, mA);
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
@@ -1734,12 +1735,12 @@ static void devstate_irq(struct omap_udc *udc, u16 irq_src)
|
||||
if (devstat & UDC_ATT) {
|
||||
udc->gadget.speed = USB_SPEED_FULL;
|
||||
VDBG("connect\n");
|
||||
if (!udc->transceiver)
|
||||
if (IS_ERR_OR_NULL(udc->transceiver))
|
||||
pullup_enable(udc);
|
||||
/* if (driver->connect) call it */
|
||||
} else if (udc->gadget.speed != USB_SPEED_UNKNOWN) {
|
||||
udc->gadget.speed = USB_SPEED_UNKNOWN;
|
||||
if (!udc->transceiver)
|
||||
if (IS_ERR_OR_NULL(udc->transceiver))
|
||||
pullup_disable(udc);
|
||||
DBG("disconnect, gadget %s\n",
|
||||
udc->driver->driver.name);
|
||||
@@ -1779,12 +1780,12 @@ static void devstate_irq(struct omap_udc *udc, u16 irq_src)
|
||||
udc->driver->suspend(&udc->gadget);
|
||||
spin_lock(&udc->lock);
|
||||
}
|
||||
if (udc->transceiver)
|
||||
if (!IS_ERR_OR_NULL(udc->transceiver))
|
||||
usb_phy_set_suspend(
|
||||
udc->transceiver, 1);
|
||||
} else {
|
||||
VDBG("resume\n");
|
||||
if (udc->transceiver)
|
||||
if (!IS_ERR_OR_NULL(udc->transceiver))
|
||||
usb_phy_set_suspend(
|
||||
udc->transceiver, 0);
|
||||
if (udc->gadget.speed == USB_SPEED_FULL
|
||||
@@ -2092,7 +2093,7 @@ static int omap_udc_start(struct usb_gadget_driver *driver,
|
||||
omap_writew(UDC_IRQ_SRC_MASK, UDC_IRQ_SRC);
|
||||
|
||||
/* connect to bus through transceiver */
|
||||
if (udc->transceiver) {
|
||||
if (!IS_ERR_OR_NULL(udc->transceiver)) {
|
||||
status = otg_set_peripheral(udc->transceiver->otg,
|
||||
&udc->gadget);
|
||||
if (status < 0) {
|
||||
@@ -2139,7 +2140,7 @@ static int omap_udc_stop(struct usb_gadget_driver *driver)
|
||||
if (machine_without_vbus_sense())
|
||||
omap_vbus_session(&udc->gadget, 0);
|
||||
|
||||
if (udc->transceiver)
|
||||
if (!IS_ERR_OR_NULL(udc->transceiver))
|
||||
(void) otg_set_peripheral(udc->transceiver->otg, NULL);
|
||||
else
|
||||
pullup_disable(udc);
|
||||
@@ -2829,8 +2830,8 @@ static int __devinit omap_udc_probe(struct platform_device *pdev)
|
||||
* use it. Except for OTG, we don't _need_ to talk to one;
|
||||
* but not having one probably means no VBUS detection.
|
||||
*/
|
||||
xceiv = usb_get_transceiver();
|
||||
if (xceiv)
|
||||
xceiv = usb_get_phy(USB_PHY_TYPE_USB2);
|
||||
if (!IS_ERR_OR_NULL(xceiv))
|
||||
type = xceiv->label;
|
||||
else if (config->otg) {
|
||||
DBG("OTG requires external transceiver!\n");
|
||||
@@ -2854,7 +2855,7 @@ static int __devinit omap_udc_probe(struct platform_device *pdev)
|
||||
case 16:
|
||||
case 19:
|
||||
case 25:
|
||||
if (!xceiv) {
|
||||
if (IS_ERR_OR_NULL(xceiv)) {
|
||||
DBG("external transceiver not registered!\n");
|
||||
type = "unknown";
|
||||
}
|
||||
@@ -2956,8 +2957,8 @@ cleanup1:
|
||||
udc = NULL;
|
||||
|
||||
cleanup0:
|
||||
if (xceiv)
|
||||
usb_put_transceiver(xceiv);
|
||||
if (!IS_ERR_OR_NULL(xceiv))
|
||||
usb_put_phy(xceiv);
|
||||
|
||||
if (cpu_is_omap16xx() || cpu_is_omap7xx()) {
|
||||
clk_disable(hhc_clk);
|
||||
@@ -2986,8 +2987,8 @@ static int __devexit omap_udc_remove(struct platform_device *pdev)
|
||||
udc->done = &done;
|
||||
|
||||
pullup_disable(udc);
|
||||
if (udc->transceiver) {
|
||||
usb_put_transceiver(udc->transceiver);
|
||||
if (!IS_ERR_OR_NULL(udc->transceiver)) {
|
||||
usb_put_phy(udc->transceiver);
|
||||
udc->transceiver = NULL;
|
||||
}
|
||||
omap_writew(0, UDC_SYSCON1);
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/init.h>
|
||||
@@ -993,7 +994,7 @@ static int pxa25x_udc_vbus_draw(struct usb_gadget *_gadget, unsigned mA)
|
||||
|
||||
udc = container_of(_gadget, struct pxa25x_udc, gadget);
|
||||
|
||||
if (udc->transceiver)
|
||||
if (!IS_ERR_OR_NULL(udc->transceiver))
|
||||
return usb_phy_set_power(udc->transceiver, mA);
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
@@ -1299,7 +1300,7 @@ fail:
|
||||
DMSG("registered gadget driver '%s'\n", driver->driver.name);
|
||||
|
||||
/* connect to bus through transceiver */
|
||||
if (dev->transceiver) {
|
||||
if (!IS_ERR_OR_NULL(dev->transceiver)) {
|
||||
retval = otg_set_peripheral(dev->transceiver->otg,
|
||||
&dev->gadget);
|
||||
if (retval) {
|
||||
@@ -1359,7 +1360,7 @@ static int pxa25x_stop(struct usb_gadget_driver *driver)
|
||||
stop_activity(dev, driver);
|
||||
local_irq_enable();
|
||||
|
||||
if (dev->transceiver)
|
||||
if (!IS_ERR_OR_NULL(dev->transceiver))
|
||||
(void) otg_set_peripheral(dev->transceiver->otg, NULL);
|
||||
|
||||
driver->unbind(&dev->gadget);
|
||||
@@ -2159,7 +2160,7 @@ static int __init pxa25x_udc_probe(struct platform_device *pdev)
|
||||
dev->dev = &pdev->dev;
|
||||
dev->mach = pdev->dev.platform_data;
|
||||
|
||||
dev->transceiver = usb_get_transceiver();
|
||||
dev->transceiver = usb_get_phy(USB_PHY_TYPE_USB2);
|
||||
|
||||
if (gpio_is_valid(dev->mach->gpio_pullup)) {
|
||||
if ((retval = gpio_request(dev->mach->gpio_pullup,
|
||||
@@ -2237,8 +2238,8 @@ lubbock_fail0:
|
||||
if (gpio_is_valid(dev->mach->gpio_pullup))
|
||||
gpio_free(dev->mach->gpio_pullup);
|
||||
err_gpio_pullup:
|
||||
if (dev->transceiver) {
|
||||
usb_put_transceiver(dev->transceiver);
|
||||
if (!IS_ERR_OR_NULL(dev->transceiver)) {
|
||||
usb_put_phy(dev->transceiver);
|
||||
dev->transceiver = NULL;
|
||||
}
|
||||
clk_put(dev->clk);
|
||||
@@ -2279,8 +2280,8 @@ static int __exit pxa25x_udc_remove(struct platform_device *pdev)
|
||||
|
||||
clk_put(dev->clk);
|
||||
|
||||
if (dev->transceiver) {
|
||||
usb_put_transceiver(dev->transceiver);
|
||||
if (!IS_ERR_OR_NULL(dev->transceiver)) {
|
||||
usb_put_phy(dev->transceiver);
|
||||
dev->transceiver = NULL;
|
||||
}
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/list.h>
|
||||
@@ -1573,7 +1574,7 @@ static int should_enable_udc(struct pxa_udc *udc)
|
||||
int put_on;
|
||||
|
||||
put_on = ((udc->pullup_on) && (udc->driver));
|
||||
put_on &= ((udc->vbus_sensed) || (!udc->transceiver));
|
||||
put_on &= ((udc->vbus_sensed) || (IS_ERR_OR_NULL(udc->transceiver)));
|
||||
return put_on;
|
||||
}
|
||||
|
||||
@@ -1594,7 +1595,7 @@ static int should_disable_udc(struct pxa_udc *udc)
|
||||
int put_off;
|
||||
|
||||
put_off = ((!udc->pullup_on) || (!udc->driver));
|
||||
put_off |= ((!udc->vbus_sensed) && (udc->transceiver));
|
||||
put_off |= ((!udc->vbus_sensed) && (!IS_ERR_OR_NULL(udc->transceiver)));
|
||||
return put_off;
|
||||
}
|
||||
|
||||
@@ -1665,7 +1666,7 @@ static int pxa_udc_vbus_draw(struct usb_gadget *_gadget, unsigned mA)
|
||||
struct pxa_udc *udc;
|
||||
|
||||
udc = to_gadget_udc(_gadget);
|
||||
if (udc->transceiver)
|
||||
if (!IS_ERR_OR_NULL(udc->transceiver))
|
||||
return usb_phy_set_power(udc->transceiver, mA);
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
@@ -1834,7 +1835,7 @@ static int pxa27x_udc_start(struct usb_gadget_driver *driver,
|
||||
dev_dbg(udc->dev, "registered gadget driver '%s'\n",
|
||||
driver->driver.name);
|
||||
|
||||
if (udc->transceiver) {
|
||||
if (!IS_ERR_OR_NULL(udc->transceiver)) {
|
||||
retval = otg_set_peripheral(udc->transceiver->otg,
|
||||
&udc->gadget);
|
||||
if (retval) {
|
||||
@@ -1908,7 +1909,7 @@ static int pxa27x_udc_stop(struct usb_gadget_driver *driver)
|
||||
dev_info(udc->dev, "unregistered gadget driver '%s'\n",
|
||||
driver->driver.name);
|
||||
|
||||
if (udc->transceiver)
|
||||
if (!IS_ERR_OR_NULL(udc->transceiver))
|
||||
return otg_set_peripheral(udc->transceiver->otg, NULL);
|
||||
return 0;
|
||||
}
|
||||
@@ -2464,7 +2465,7 @@ static int __init pxa_udc_probe(struct platform_device *pdev)
|
||||
|
||||
udc->dev = &pdev->dev;
|
||||
udc->mach = pdev->dev.platform_data;
|
||||
udc->transceiver = usb_get_transceiver();
|
||||
udc->transceiver = usb_get_phy(USB_PHY_TYPE_USB2);
|
||||
|
||||
gpio = udc->mach->gpio_pullup;
|
||||
if (gpio_is_valid(gpio)) {
|
||||
@@ -2543,7 +2544,7 @@ static int __exit pxa_udc_remove(struct platform_device *_dev)
|
||||
if (gpio_is_valid(gpio))
|
||||
gpio_free(gpio);
|
||||
|
||||
usb_put_transceiver(udc->transceiver);
|
||||
usb_put_phy(udc->transceiver);
|
||||
|
||||
udc->transceiver = NULL;
|
||||
platform_set_drvdata(_dev, NULL);
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include <linux/io.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/usb/ch9.h>
|
||||
#include <linux/usb/gadget.h>
|
||||
#include <linux/usb/otg.h>
|
||||
@@ -1165,7 +1166,7 @@ static int s3c_hsudc_start(struct usb_gadget *gadget,
|
||||
}
|
||||
|
||||
/* connect to bus through transceiver */
|
||||
if (hsudc->transceiver) {
|
||||
if (!IS_ERR_OR_NULL(hsudc->transceiver)) {
|
||||
ret = otg_set_peripheral(hsudc->transceiver->otg,
|
||||
&hsudc->gadget);
|
||||
if (ret) {
|
||||
@@ -1220,7 +1221,7 @@ static int s3c_hsudc_stop(struct usb_gadget *gadget,
|
||||
s3c_hsudc_stop_activity(hsudc);
|
||||
spin_unlock_irqrestore(&hsudc->lock, flags);
|
||||
|
||||
if (hsudc->transceiver)
|
||||
if (!IS_ERR_OR_NULL(hsudc->transceiver))
|
||||
(void) otg_set_peripheral(hsudc->transceiver->otg, NULL);
|
||||
|
||||
disable_irq(hsudc->irq);
|
||||
@@ -1249,7 +1250,7 @@ static int s3c_hsudc_vbus_draw(struct usb_gadget *gadget, unsigned mA)
|
||||
if (!hsudc)
|
||||
return -ENODEV;
|
||||
|
||||
if (hsudc->transceiver)
|
||||
if (!IS_ERR_OR_NULL(hsudc->transceiver))
|
||||
return usb_phy_set_power(hsudc->transceiver, mA);
|
||||
|
||||
return -EOPNOTSUPP;
|
||||
@@ -1282,7 +1283,7 @@ static int __devinit s3c_hsudc_probe(struct platform_device *pdev)
|
||||
hsudc->dev = dev;
|
||||
hsudc->pd = pdev->dev.platform_data;
|
||||
|
||||
hsudc->transceiver = usb_get_transceiver();
|
||||
hsudc->transceiver = usb_get_phy(USB_PHY_TYPE_USB2);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(hsudc->supplies); i++)
|
||||
hsudc->supplies[i].supply = s3c_hsudc_supply_names[i];
|
||||
@@ -1385,8 +1386,8 @@ err_irq:
|
||||
err_remap:
|
||||
release_mem_region(res->start, resource_size(res));
|
||||
err_res:
|
||||
if (hsudc->transceiver)
|
||||
usb_put_transceiver(hsudc->transceiver);
|
||||
if (!IS_ERR_OR_NULL(hsudc->transceiver))
|
||||
usb_put_phy(hsudc->transceiver);
|
||||
|
||||
regulator_bulk_free(ARRAY_SIZE(hsudc->supplies), hsudc->supplies);
|
||||
err_supplies:
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
#include <linux/types.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/pm.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/fsl_devices.h>
|
||||
|
||||
@@ -142,15 +143,15 @@ 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);
|
||||
|
||||
hcd->phy = usb_get_transceiver();
|
||||
hcd->phy = usb_get_phy(USB_PHY_TYPE_USB2);
|
||||
dev_dbg(&pdev->dev, "hcd=0x%p ehci=0x%p, phy=0x%p\n",
|
||||
hcd, ehci, hcd->phy);
|
||||
|
||||
if (hcd->phy) {
|
||||
if (!IS_ERR_OR_NULL(hcd->phy)) {
|
||||
retval = otg_set_host(hcd->phy->otg,
|
||||
&ehci_to_hcd(ehci)->self);
|
||||
if (retval) {
|
||||
usb_put_transceiver(hcd->phy);
|
||||
usb_put_phy(hcd->phy);
|
||||
goto err4;
|
||||
}
|
||||
} else {
|
||||
@@ -191,9 +192,9 @@ static void usb_hcd_fsl_remove(struct usb_hcd *hcd,
|
||||
{
|
||||
struct fsl_usb2_platform_data *pdata = pdev->dev.platform_data;
|
||||
|
||||
if (hcd->phy) {
|
||||
if (!IS_ERR_OR_NULL(hcd->phy)) {
|
||||
otg_set_host(hcd->phy->otg, NULL);
|
||||
usb_put_transceiver(hcd->phy);
|
||||
usb_put_phy(hcd->phy);
|
||||
}
|
||||
|
||||
usb_remove_hcd(hcd);
|
||||
|
||||
@@ -145,8 +145,8 @@ static int ehci_msm_probe(struct platform_device *pdev)
|
||||
* powering up VBUS, mapping of registers address space and power
|
||||
* management.
|
||||
*/
|
||||
phy = usb_get_transceiver();
|
||||
if (!phy) {
|
||||
phy = usb_get_phy(USB_PHY_TYPE_USB2);
|
||||
if (IS_ERR_OR_NULL(phy)) {
|
||||
dev_err(&pdev->dev, "unable to find transceiver\n");
|
||||
ret = -ENODEV;
|
||||
goto unmap;
|
||||
@@ -169,7 +169,7 @@ static int ehci_msm_probe(struct platform_device *pdev)
|
||||
return 0;
|
||||
|
||||
put_transceiver:
|
||||
usb_put_transceiver(phy);
|
||||
usb_put_phy(phy);
|
||||
unmap:
|
||||
iounmap(hcd->regs);
|
||||
put_hcd:
|
||||
@@ -187,7 +187,7 @@ static int __devexit ehci_msm_remove(struct platform_device *pdev)
|
||||
pm_runtime_set_suspended(&pdev->dev);
|
||||
|
||||
otg_set_host(phy->otg, NULL);
|
||||
usb_put_transceiver(phy);
|
||||
usb_put_phy(phy);
|
||||
|
||||
usb_put_hcd(hcd);
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/usb/otg.h>
|
||||
#include <linux/platform_data/mv_usb.h>
|
||||
|
||||
@@ -253,8 +254,8 @@ static int mv_ehci_probe(struct platform_device *pdev)
|
||||
ehci_mv->mode = pdata->mode;
|
||||
if (ehci_mv->mode == MV_USB_MODE_OTG) {
|
||||
#ifdef CONFIG_USB_OTG_UTILS
|
||||
ehci_mv->otg = usb_get_transceiver();
|
||||
if (!ehci_mv->otg) {
|
||||
ehci_mv->otg = usb_get_phy(USB_PHY_TYPE_USB2);
|
||||
if (IS_ERR_OR_NULL(ehci_mv->otg)) {
|
||||
dev_err(&pdev->dev,
|
||||
"unable to find transceiver\n");
|
||||
retval = -ENODEV;
|
||||
@@ -302,8 +303,8 @@ err_set_vbus:
|
||||
pdata->set_vbus(0);
|
||||
#ifdef CONFIG_USB_OTG_UTILS
|
||||
err_put_transceiver:
|
||||
if (ehci_mv->otg)
|
||||
usb_put_transceiver(ehci_mv->otg);
|
||||
if (!IS_ERR_OR_NULL(ehci_mv->otg))
|
||||
usb_put_phy(ehci_mv->otg);
|
||||
#endif
|
||||
err_disable_clk:
|
||||
mv_ehci_disable(ehci_mv);
|
||||
@@ -331,9 +332,9 @@ static int mv_ehci_remove(struct platform_device *pdev)
|
||||
if (hcd->rh_registered)
|
||||
usb_remove_hcd(hcd);
|
||||
|
||||
if (ehci_mv->otg) {
|
||||
if (!IS_ERR_OR_NULL(ehci_mv->otg)) {
|
||||
otg_set_host(ehci_mv->otg->otg, NULL);
|
||||
usb_put_transceiver(ehci_mv->otg);
|
||||
usb_put_phy(ehci_mv->otg);
|
||||
}
|
||||
|
||||
if (ehci_mv->mode == MV_USB_MODE_HOST) {
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
|
||||
#include <linux/clk.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/platform_data/tegra_usb.h>
|
||||
#include <linux/irq.h>
|
||||
@@ -749,8 +750,8 @@ static int tegra_ehci_probe(struct platform_device *pdev)
|
||||
|
||||
#ifdef CONFIG_USB_OTG_UTILS
|
||||
if (pdata->operating_mode == TEGRA_USB_OTG) {
|
||||
tegra->transceiver = usb_get_transceiver();
|
||||
if (tegra->transceiver)
|
||||
tegra->transceiver = usb_get_phy(USB_PHY_TYPE_USB2);
|
||||
if (!IS_ERR_OR_NULL(tegra->transceiver))
|
||||
otg_set_host(tegra->transceiver->otg, &hcd->self);
|
||||
}
|
||||
#endif
|
||||
@@ -773,9 +774,9 @@ static int tegra_ehci_probe(struct platform_device *pdev)
|
||||
|
||||
fail:
|
||||
#ifdef CONFIG_USB_OTG_UTILS
|
||||
if (tegra->transceiver) {
|
||||
if (!IS_ERR_OR_NULL(tegra->transceiver)) {
|
||||
otg_set_host(tegra->transceiver->otg, NULL);
|
||||
usb_put_transceiver(tegra->transceiver);
|
||||
usb_put_phy(tegra->transceiver);
|
||||
}
|
||||
#endif
|
||||
tegra_usb_phy_close(tegra->phy);
|
||||
@@ -808,9 +809,9 @@ static int tegra_ehci_remove(struct platform_device *pdev)
|
||||
pm_runtime_put_noidle(&pdev->dev);
|
||||
|
||||
#ifdef CONFIG_USB_OTG_UTILS
|
||||
if (tegra->transceiver) {
|
||||
if (!IS_ERR_OR_NULL(tegra->transceiver)) {
|
||||
otg_set_host(tegra->transceiver->otg, NULL);
|
||||
usb_put_transceiver(tegra->transceiver);
|
||||
usb_put_phy(tegra->transceiver);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
#include <linux/jiffies.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/gpio.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
@@ -212,14 +213,14 @@ static int ohci_omap_init(struct usb_hcd *hcd)
|
||||
|
||||
#ifdef CONFIG_USB_OTG
|
||||
if (need_transceiver) {
|
||||
hcd->phy = usb_get_transceiver();
|
||||
if (hcd->phy) {
|
||||
hcd->phy = usb_get_phy(USB_PHY_TYPE_USB2);
|
||||
if (!IS_ERR_OR_NULL(hcd->phy)) {
|
||||
int status = otg_set_host(hcd->phy->otg,
|
||||
&ohci_to_hcd(ohci)->self);
|
||||
dev_dbg(hcd->self.controller, "init %s phy, status %d\n",
|
||||
hcd->phy->label, status);
|
||||
if (status) {
|
||||
usb_put_transceiver(hcd->phy);
|
||||
usb_put_phy(hcd->phy);
|
||||
return status;
|
||||
}
|
||||
} else {
|
||||
@@ -404,9 +405,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 (hcd->phy) {
|
||||
if (!IS_ERR_OR_NULL(hcd->phy)) {
|
||||
(void) otg_set_host(hcd->phy->otg, 0);
|
||||
usb_put_transceiver(hcd->phy);
|
||||
usb_put_phy(hcd->phy);
|
||||
}
|
||||
if (machine_is_omap_osk())
|
||||
gpio_free(9);
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#include <linux/init.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
@@ -364,8 +365,8 @@ static int am35x_musb_init(struct musb *musb)
|
||||
return -ENODEV;
|
||||
|
||||
usb_nop_xceiv_register();
|
||||
musb->xceiv = usb_get_transceiver();
|
||||
if (!musb->xceiv)
|
||||
musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2);
|
||||
if (IS_ERR_OR_NULL(musb->xceiv))
|
||||
return -ENODEV;
|
||||
|
||||
if (is_host_enabled(musb))
|
||||
@@ -406,7 +407,7 @@ static int am35x_musb_exit(struct musb *musb)
|
||||
if (data->set_phy_power)
|
||||
data->set_phy_power(0);
|
||||
|
||||
usb_put_transceiver(musb->xceiv);
|
||||
usb_put_phy(musb->xceiv);
|
||||
usb_nop_xceiv_unregister();
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <linux/list.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/prefetch.h>
|
||||
@@ -415,8 +416,8 @@ static int bfin_musb_init(struct musb *musb)
|
||||
gpio_direction_output(musb->config->gpio_vrsel, 0);
|
||||
|
||||
usb_nop_xceiv_register();
|
||||
musb->xceiv = usb_get_transceiver();
|
||||
if (!musb->xceiv) {
|
||||
musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2);
|
||||
if (IS_ERR_OR_NULL(musb->xceiv)) {
|
||||
gpio_free(musb->config->gpio_vrsel);
|
||||
return -ENODEV;
|
||||
}
|
||||
@@ -440,7 +441,7 @@ static int bfin_musb_exit(struct musb *musb)
|
||||
{
|
||||
gpio_free(musb->config->gpio_vrsel);
|
||||
|
||||
usb_put_transceiver(musb->xceiv);
|
||||
usb_put_phy(musb->xceiv);
|
||||
usb_nop_xceiv_unregister();
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#include <linux/init.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
@@ -425,8 +426,8 @@ static int da8xx_musb_init(struct musb *musb)
|
||||
goto fail;
|
||||
|
||||
usb_nop_xceiv_register();
|
||||
musb->xceiv = usb_get_transceiver();
|
||||
if (!musb->xceiv)
|
||||
musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2);
|
||||
if (IS_ERR_OR_NULL(musb->xceiv))
|
||||
goto fail;
|
||||
|
||||
if (is_host_enabled(musb))
|
||||
@@ -458,7 +459,7 @@ static int da8xx_musb_exit(struct musb *musb)
|
||||
|
||||
phy_off();
|
||||
|
||||
usb_put_transceiver(musb->xceiv);
|
||||
usb_put_phy(musb->xceiv);
|
||||
usb_nop_xceiv_unregister();
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
#include <linux/list.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/platform_device.h>
|
||||
@@ -385,8 +386,8 @@ static int davinci_musb_init(struct musb *musb)
|
||||
u32 revision;
|
||||
|
||||
usb_nop_xceiv_register();
|
||||
musb->xceiv = usb_get_transceiver();
|
||||
if (!musb->xceiv)
|
||||
musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2);
|
||||
if (IS_ERR_OR_NULL(musb->xceiv))
|
||||
goto unregister;
|
||||
|
||||
musb->mregs += DAVINCI_BASE_OFFSET;
|
||||
@@ -444,7 +445,7 @@ static int davinci_musb_init(struct musb *musb)
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
usb_put_transceiver(musb->xceiv);
|
||||
usb_put_phy(musb->xceiv);
|
||||
unregister:
|
||||
usb_nop_xceiv_unregister();
|
||||
return -ENODEV;
|
||||
@@ -494,7 +495,7 @@ static int davinci_musb_exit(struct musb *musb)
|
||||
|
||||
phy_off();
|
||||
|
||||
usb_put_transceiver(musb->xceiv);
|
||||
usb_put_phy(musb->xceiv);
|
||||
usb_nop_xceiv_unregister();
|
||||
|
||||
return 0;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user