USB: otg: add otg_put_transceiver()
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>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
6084f1bf0c
commit
68144e0cc9
@@ -96,6 +96,12 @@ struct otg_transceiver *otg_get_transceiver(void)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(otg_get_transceiver);
|
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)
|
int otg_set_transceiver(struct otg_transceiver *x)
|
||||||
{
|
{
|
||||||
if (xceiv && x)
|
if (xceiv && x)
|
||||||
|
@@ -3006,7 +3006,7 @@ cleanup1:
|
|||||||
|
|
||||||
cleanup0:
|
cleanup0:
|
||||||
if (xceiv)
|
if (xceiv)
|
||||||
put_device(xceiv->dev);
|
otg_put_transceiver(xceiv);
|
||||||
|
|
||||||
if (cpu_is_omap16xx() || cpu_is_omap24xx()) {
|
if (cpu_is_omap16xx() || cpu_is_omap24xx()) {
|
||||||
clk_disable(hhc_clk);
|
clk_disable(hhc_clk);
|
||||||
@@ -3034,7 +3034,7 @@ static int __exit omap_udc_remove(struct platform_device *pdev)
|
|||||||
|
|
||||||
pullup_disable(udc);
|
pullup_disable(udc);
|
||||||
if (udc->transceiver) {
|
if (udc->transceiver) {
|
||||||
put_device(udc->transceiver->dev);
|
otg_put_transceiver(udc->transceiver);
|
||||||
udc->transceiver = NULL;
|
udc->transceiver = NULL;
|
||||||
}
|
}
|
||||||
omap_writew(0, UDC_SYSCON1);
|
omap_writew(0, UDC_SYSCON1);
|
||||||
|
@@ -84,6 +84,7 @@ extern int otg_set_transceiver(struct otg_transceiver *);
|
|||||||
|
|
||||||
/* for usb host and peripheral controller drivers */
|
/* for usb host and peripheral controller drivers */
|
||||||
extern struct otg_transceiver *otg_get_transceiver(void);
|
extern struct otg_transceiver *otg_get_transceiver(void);
|
||||||
|
extern void otg_put_transceiver(struct otg_transceiver *);
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
otg_start_hnp(struct otg_transceiver *otg)
|
otg_start_hnp(struct otg_transceiver *otg)
|
||||||
|
Reference in New Issue
Block a user