add missing otg_put_transceiver() call
Subsystems (4)
PATCH 3/5 add missing otg_put_transceiver() call
From: Philipp Zabel <[email protected]>
As Russell King points out, calling put_device(otg_transceiver->dev) directly in driver cleanup paths makes assumptions about otg_transceiver internals.
Signed-off-by Philipp Zabel <[email protected]>
Signed-off-by David Brownell <[email protected]>
Signed-off-by Greg Kroah-Hartman <[email protected]>
--- arch/arm/plat-omap/usb.c | 6 ++++++ drivers/usb/gadget/omap_udc.c | 4 ++-- include/linux/usb/otg.h | 1 + 3 files changed, 9 insertions(+), 2 deletions(-)
arch/arm/plat-omap/usb.c +6 -0
@@ -96,6 +96,12 @@ struct otg_transceiver *otg_get_transcei }EXPORT_SYMBOL (otg_get_transceiver); +void otg_put_transceiver (struct otg_transceiver *x) +{ +put_device (x->dev); +} +EXPORT_SYMBOL (otg_put_transceiver); +int otg_set_transceiver (struct otg_transceiver *x) {if (xceiv && x)
drivers/usb/gadget/omap_udc.c +2 -2
@@ -3006,7 +3006,7 @@ cleanup1: cleanup0:if (xceiv) -put_device (xceiv->dev); +otg_put_transceiver (xceiv);if (cpu_is_omap16xx () ||cpu_is_omap24xx ()) {clk_disable (hhc_clk);
@@ -3034,7 +3034,7 @@ static int __exit omap_udc_remove(structpullup_disable (udc);if (udc->transceiver) { -put_device (udc->transceiver->dev); +otg_put_transceiver (udc->transceiver); udc->transceiver =NULL ; }omap_writew (0 ,UDC_SYSCON1 );
include/linux/usb/otg.h +1 -0
@@ -84,6 +84,7 @@ extern int otg_set_transceiver(struct ot/* for usb host and peripheral controller drivers */ extern struct otg_transceiver *otg_get_transceiver (void ); +extern void otg_put_transceiver (struct otg_transceiver *);static inline int otg_start_hnp (struct otg_transceiver *otg)