|
@@ -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 <asm/byteorder.h>
|
|
@@ -1211,7 +1212,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);
|
|
@@ -1343,7 +1344,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;
|
|
|
}
|
|
@@ -1792,12 +1793,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);
|
|
@@ -1837,12 +1838,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
|
|
@@ -2154,7 +2155,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) {
|
|
@@ -2201,7 +2202,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);
|
|
@@ -2866,7 +2867,7 @@ static int __init omap_udc_probe(struct platform_device *pdev)
|
|
|
* but not having one probably means no VBUS detection.
|
|
|
*/
|
|
|
xceiv = usb_get_phy(USB_PHY_TYPE_USB2);
|
|
|
- if (xceiv)
|
|
|
+ if (!IS_ERR_OR_NULL(xceiv))
|
|
|
type = xceiv->label;
|
|
|
else if (config->otg) {
|
|
|
DBG("OTG requires external transceiver!\n");
|
|
@@ -2898,7 +2899,7 @@ static int __init 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";
|
|
|
}
|
|
@@ -3010,7 +3011,7 @@ cleanup1:
|
|
|
udc = NULL;
|
|
|
|
|
|
cleanup0:
|
|
|
- if (xceiv)
|
|
|
+ if (!IS_ERR_OR_NULL(xceiv))
|
|
|
usb_put_phy(xceiv);
|
|
|
|
|
|
if (cpu_is_omap16xx() || cpu_is_omap24xx() || cpu_is_omap7xx()) {
|
|
@@ -3040,7 +3041,7 @@ static int __exit omap_udc_remove(struct platform_device *pdev)
|
|
|
udc->done = &done;
|
|
|
|
|
|
pullup_disable(udc);
|
|
|
- if (udc->transceiver) {
|
|
|
+ if (!IS_ERR_OR_NULL(udc->transceiver)) {
|
|
|
usb_put_phy(udc->transceiver);
|
|
|
udc->transceiver = NULL;
|
|
|
}
|