aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/otg/otg.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/otg/otg.c')
-rw-r--r--drivers/usb/otg/otg.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/usb/otg/otg.c b/drivers/usb/otg/otg.c
index e1814397ca3a..2bd03d261a50 100644
--- a/drivers/usb/otg/otg.c
+++ b/drivers/usb/otg/otg.c
@@ -130,7 +130,7 @@ struct usb_phy *usb_get_phy(enum usb_phy_type type)
130 spin_lock_irqsave(&phy_lock, flags); 130 spin_lock_irqsave(&phy_lock, flags);
131 131
132 phy = __usb_find_phy(&phy_list, type); 132 phy = __usb_find_phy(&phy_list, type);
133 if (IS_ERR(phy)) { 133 if (IS_ERR(phy) || !try_module_get(phy->dev->driver->owner)) {
134 pr_err("unable to find transceiver of type %s\n", 134 pr_err("unable to find transceiver of type %s\n",
135 usb_phy_type_string(type)); 135 usb_phy_type_string(type));
136 goto err0; 136 goto err0;
@@ -228,7 +228,7 @@ struct usb_phy *usb_get_phy_dev(struct device *dev, u8 index)
228 spin_lock_irqsave(&phy_lock, flags); 228 spin_lock_irqsave(&phy_lock, flags);
229 229
230 phy = __usb_find_phy_dev(dev, &phy_bind_list, index); 230 phy = __usb_find_phy_dev(dev, &phy_bind_list, index);
231 if (IS_ERR(phy)) { 231 if (IS_ERR(phy) || !try_module_get(phy->dev->driver->owner)) {
232 pr_err("unable to find transceiver\n"); 232 pr_err("unable to find transceiver\n");
233 goto err0; 233 goto err0;
234 } 234 }
@@ -301,8 +301,12 @@ EXPORT_SYMBOL(devm_usb_put_phy);
301 */ 301 */
302void usb_put_phy(struct usb_phy *x) 302void usb_put_phy(struct usb_phy *x)
303{ 303{
304 if (x) 304 if (x) {
305 struct module *owner = x->dev->driver->owner;
306
305 put_device(x->dev); 307 put_device(x->dev);
308 module_put(owner);
309 }
306} 310}
307EXPORT_SYMBOL(usb_put_phy); 311EXPORT_SYMBOL(usb_put_phy);
308 312