diff options
Diffstat (limited to 'drivers/base/platform.c')
| -rw-r--r-- | drivers/base/platform.c | 17 | 
1 files changed, 13 insertions, 4 deletions
| diff --git a/drivers/base/platform.c b/drivers/base/platform.c index 4f8bef3eb5a8..47051cd25113 100644 --- a/drivers/base/platform.c +++ b/drivers/base/platform.c @@ -488,6 +488,11 @@ static int platform_drv_probe(struct device *_dev)  	if (ret && ACPI_HANDLE(_dev))  		acpi_dev_pm_detach(_dev, true); +	if (drv->prevent_deferred_probe && ret == -EPROBE_DEFER) { +		dev_warn(_dev, "probe deferral not supported\n"); +		ret = -ENXIO; +	} +  	return ret;  } @@ -553,8 +558,7 @@ EXPORT_SYMBOL_GPL(platform_driver_unregister);  /**   * platform_driver_probe - register driver for non-hotpluggable device   * @drv: platform driver structure - * @probe: the driver probe routine, probably from an __init section, - *         must not return -EPROBE_DEFER. + * @probe: the driver probe routine, probably from an __init section   *   * Use this instead of platform_driver_register() when you know the device   * is not hotpluggable and has already been registered, and you want to @@ -565,8 +569,7 @@ EXPORT_SYMBOL_GPL(platform_driver_unregister);   * into system-on-chip processors, where the controller devices have been   * configured as part of board setup.   * - * This is incompatible with deferred probing so probe() must not - * return -EPROBE_DEFER. + * Note that this is incompatible with deferred probing.   *   * Returns zero if the driver registered and bound to a device, else returns   * a negative error code and with the driver not registered. @@ -576,6 +579,12 @@ int __init_or_module platform_driver_probe(struct platform_driver *drv,  {  	int retval, code; +	/* +	 * Prevent driver from requesting probe deferral to avoid further +	 * futile probe attempts. +	 */ +	drv->prevent_deferred_probe = true; +  	/* make sure driver won't have bind/unbind attributes */  	drv->driver.suppress_bind_attrs = true; |