usb: phy: Fix deferred probing
Commit 1290a958d4 ("usb: phy: propagate __of_usb_find_phy()'s error on
failure") actually broke the deferred probing mechanism, since it now returns
EPROBE_DEFER only when the try_module_get call fails, but not when the phy
lookup does.
All the other similar functions seem to return ENODEV when try_module_get
fails, and the error code of either __usb_find_phy or __of_usb_find_phy
otherwise.
In order to have a consistent behaviour, and a meaningful EPROBE_DEFER, always
return EPROBE_DEFER when __(of_)usb_find_phy fails to look up the requested
phy, that will be propagated by the caller, and ENODEV if try_module_get fails.
Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
Tested-by: Olof Johansson <olof@lixom.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
	
	
This commit is contained in:
		
					parent
					
						
							
								56abcab833
							
						
					
				
			
			
				commit
				
					
						9c9d82492b
					
				
			
		
					 1 changed files with 3 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -34,7 +34,7 @@ static struct usb_phy *__usb_find_phy(struct list_head *list,
 | 
			
		|||
		return phy;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return ERR_PTR(-ENODEV);
 | 
			
		||||
	return ERR_PTR(-EPROBE_DEFER);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static struct usb_phy *__usb_find_phy_dev(struct device *dev,
 | 
			
		||||
| 
						 | 
				
			
			@ -66,7 +66,7 @@ static struct usb_phy *__of_usb_find_phy(struct device_node *node)
 | 
			
		|||
		return phy;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return ERR_PTR(-ENODEV);
 | 
			
		||||
	return ERR_PTR(-EPROBE_DEFER);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void devm_usb_phy_release(struct device *dev, void *res)
 | 
			
		||||
| 
						 | 
				
			
			@ -192,7 +192,7 @@ struct usb_phy *devm_usb_get_phy_by_phandle(struct device *dev,
 | 
			
		|||
	phy = __of_usb_find_phy(node);
 | 
			
		||||
	if (IS_ERR(phy) || !try_module_get(phy->dev->driver->owner)) {
 | 
			
		||||
		if (!IS_ERR(phy))
 | 
			
		||||
			phy = ERR_PTR(-EPROBE_DEFER);
 | 
			
		||||
			phy = ERR_PTR(-ENODEV);
 | 
			
		||||
 | 
			
		||||
		devres_free(ptr);
 | 
			
		||||
		goto err1;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue