Skip to content

Commit

Permalink
USB: otg: add otg_put_transceiver()
Browse files Browse the repository at this point in the history
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 <philipp.zabel@gmail.com>
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Philipp Zabel authored and Greg Kroah-Hartman committed Jan 7, 2009
1 parent 6084f1b commit 68144e0
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 2 deletions.
6 changes: 6 additions & 0 deletions arch/arm/plat-omap/usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,12 @@ struct otg_transceiver *otg_get_transceiver(void)
}
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)
Expand Down
4 changes: 2 additions & 2 deletions drivers/usb/gadget/omap_udc.c
Original file line number Diff line number Diff line change
Expand Up @@ -3006,7 +3006,7 @@ static int __init omap_udc_probe(struct platform_device *pdev)

cleanup0:
if (xceiv)
put_device(xceiv->dev);
otg_put_transceiver(xceiv);

if (cpu_is_omap16xx() || cpu_is_omap24xx()) {
clk_disable(hhc_clk);
Expand Down Expand Up @@ -3034,7 +3034,7 @@ static int __exit omap_udc_remove(struct platform_device *pdev)

pullup_disable(udc);
if (udc->transceiver) {
put_device(udc->transceiver->dev);
otg_put_transceiver(udc->transceiver);
udc->transceiver = NULL;
}
omap_writew(0, UDC_SYSCON1);
Expand Down
1 change: 1 addition & 0 deletions include/linux/usb/otg.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ extern int otg_set_transceiver(struct otg_transceiver *);

/* 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)
Expand Down

0 comments on commit 68144e0

Please sign in to comment.