diff options
| author | Thomas Gleixner <tglx@linutronix.de> | 2018-06-22 21:20:35 +0200 | 
|---|---|---|
| committer | Thomas Gleixner <tglx@linutronix.de> | 2018-06-22 21:20:35 +0200 | 
| commit | 7731b8bc94e599c9a79e428f3359ff2c34b7576a (patch) | |
| tree | 879f18ccbe274122f2d4f095b43cbc7f953e0ada /drivers/base/platform.c | |
| parent | 48e315618dc4dc8904182cd221e3d395d5d97005 (diff) | |
| parent | 9ffc59d57228d74809700be6f7ecb1db10292f05 (diff) | |
Merge branch 'linus' into x86/urgent
Required to queue a dependent fix.
Diffstat (limited to 'drivers/base/platform.c')
| -rw-r--r-- | drivers/base/platform.c | 35 | 
1 files changed, 25 insertions, 10 deletions
diff --git a/drivers/base/platform.c b/drivers/base/platform.c index 8075ddc70a17..dff82a3c2caa 100644 --- a/drivers/base/platform.c +++ b/drivers/base/platform.c @@ -572,17 +572,16 @@ static int platform_drv_probe(struct device *_dev)  		return ret;  	ret = dev_pm_domain_attach(_dev, true); -	if (ret != -EPROBE_DEFER) { -		if (drv->probe) { -			ret = drv->probe(dev); -			if (ret) -				dev_pm_domain_detach(_dev, true); -		} else { -			/* don't fail if just dev_pm_domain_attach failed */ -			ret = 0; -		} +	if (ret) +		goto out; + +	if (drv->probe) { +		ret = drv->probe(dev); +		if (ret) +			dev_pm_domain_detach(_dev, true);  	} +out:  	if (drv->prevent_deferred_probe && ret == -EPROBE_DEFER) {  		dev_warn(_dev, "probe deferral not supported\n");  		ret = -ENXIO; @@ -1130,6 +1129,22 @@ int platform_pm_restore(struct device *dev)  #endif /* CONFIG_HIBERNATE_CALLBACKS */ +int platform_dma_configure(struct device *dev) +{ +	enum dev_dma_attr attr; +	int ret = 0; + +	if (dev->of_node) { +		ret = of_dma_configure(dev, dev->of_node, true); +	} else if (has_acpi_companion(dev)) { +		attr = acpi_get_dma_attr(to_acpi_device_node(dev->fwnode)); +		if (attr != DEV_DMA_NOT_SUPPORTED) +			ret = acpi_dma_configure(dev, attr); +	} + +	return ret; +} +  static const struct dev_pm_ops platform_dev_pm_ops = {  	.runtime_suspend = pm_generic_runtime_suspend,  	.runtime_resume = pm_generic_runtime_resume, @@ -1141,8 +1156,8 @@ struct bus_type platform_bus_type = {  	.dev_groups	= platform_dev_groups,  	.match		= platform_match,  	.uevent		= platform_uevent, +	.dma_configure	= platform_dma_configure,  	.pm		= &platform_dev_pm_ops, -	.force_dma	= true,  };  EXPORT_SYMBOL_GPL(platform_bus_type);  | 
