Commit 90e53c5e authored by Russell King's avatar Russell King

Merge branch 'devel-stable' into for-linus

parents fd749fe4 860660fd
...@@ -56,31 +56,28 @@ amba_lookup(const struct amba_id *table, struct amba_device *dev) ...@@ -56,31 +56,28 @@ amba_lookup(const struct amba_id *table, struct amba_device *dev)
return NULL; return NULL;
} }
static int amba_match(struct device *dev, struct device_driver *drv) static int amba_get_enable_pclk(struct amba_device *pcdev)
{ {
struct amba_device *pcdev = to_amba_device(dev); int ret;
struct amba_driver *pcdrv = to_amba_driver(drv);
/* When driver_override is set, only bind to the matching driver */ pcdev->pclk = clk_get(&pcdev->dev, "apb_pclk");
if (pcdev->driver_override) if (IS_ERR(pcdev->pclk))
return !strcmp(pcdev->driver_override, drv->name); return PTR_ERR(pcdev->pclk);
return amba_lookup(pcdrv->id_table, pcdev) != NULL; ret = clk_prepare_enable(pcdev->pclk);
if (ret)
clk_put(pcdev->pclk);
return ret;
} }
static int amba_uevent(struct device *dev, struct kobj_uevent_env *env) static void amba_put_disable_pclk(struct amba_device *pcdev)
{ {
struct amba_device *pcdev = to_amba_device(dev); clk_disable_unprepare(pcdev->pclk);
int retval = 0; clk_put(pcdev->pclk);
retval = add_uevent_var(env, "AMBA_ID=%08x", pcdev->periphid);
if (retval)
return retval;
retval = add_uevent_var(env, "MODALIAS=amba:d%08X", pcdev->periphid);
return retval;
} }
static ssize_t driver_override_show(struct device *_dev, static ssize_t driver_override_show(struct device *_dev,
struct device_attribute *attr, char *buf) struct device_attribute *attr, char *buf)
{ {
...@@ -152,102 +149,29 @@ static struct attribute *amba_dev_attrs[] = { ...@@ -152,102 +149,29 @@ static struct attribute *amba_dev_attrs[] = {
}; };
ATTRIBUTE_GROUPS(amba_dev); ATTRIBUTE_GROUPS(amba_dev);
#ifdef CONFIG_PM static int amba_match(struct device *dev, struct device_driver *drv)
/*
* Hooks to provide runtime PM of the pclk (bus clock). It is safe to
* enable/disable the bus clock at runtime PM suspend/resume as this
* does not result in loss of context.
*/
static int amba_pm_runtime_suspend(struct device *dev)
{ {
struct amba_device *pcdev = to_amba_device(dev); struct amba_device *pcdev = to_amba_device(dev);
int ret = pm_generic_runtime_suspend(dev); struct amba_driver *pcdrv = to_amba_driver(drv);
if (ret == 0 && dev->driver) { /* When driver_override is set, only bind to the matching driver */
if (pm_runtime_is_irq_safe(dev)) if (pcdev->driver_override)
clk_disable(pcdev->pclk); return !strcmp(pcdev->driver_override, drv->name);
else
clk_disable_unprepare(pcdev->pclk);
}
return ret; return amba_lookup(pcdrv->id_table, pcdev) != NULL;
} }
static int amba_pm_runtime_resume(struct device *dev) static int amba_uevent(struct device *dev, struct kobj_uevent_env *env)
{ {
struct amba_device *pcdev = to_amba_device(dev); struct amba_device *pcdev = to_amba_device(dev);
int ret; int retval = 0;
if (dev->driver) {
if (pm_runtime_is_irq_safe(dev))
ret = clk_enable(pcdev->pclk);
else
ret = clk_prepare_enable(pcdev->pclk);
/* Failure is probably fatal to the system, but... */
if (ret)
return ret;
}
return pm_generic_runtime_resume(dev);
}
#endif /* CONFIG_PM */
static const struct dev_pm_ops amba_pm = {
.suspend = pm_generic_suspend,
.resume = pm_generic_resume,
.freeze = pm_generic_freeze,
.thaw = pm_generic_thaw,
.poweroff = pm_generic_poweroff,
.restore = pm_generic_restore,
SET_RUNTIME_PM_OPS(
amba_pm_runtime_suspend,
amba_pm_runtime_resume,
NULL
)
};
/*
* Primecells are part of the Advanced Microcontroller Bus Architecture,
* so we call the bus "amba".
* DMA configuration for platform and AMBA bus is same. So here we reuse
* platform's DMA config routine.
*/
struct bus_type amba_bustype = {
.name = "amba",
.dev_groups = amba_dev_groups,
.match = amba_match,
.uevent = amba_uevent,
.dma_configure = platform_dma_configure,
.pm = &amba_pm,
};
EXPORT_SYMBOL_GPL(amba_bustype);
static int __init amba_init(void)
{
return bus_register(&amba_bustype);
}
postcore_initcall(amba_init);
static int amba_get_enable_pclk(struct amba_device *pcdev)
{
int ret;
pcdev->pclk = clk_get(&pcdev->dev, "apb_pclk");
if (IS_ERR(pcdev->pclk))
return PTR_ERR(pcdev->pclk);
ret = clk_prepare_enable(pcdev->pclk);
if (ret)
clk_put(pcdev->pclk);
return ret; retval = add_uevent_var(env, "AMBA_ID=%08x", pcdev->periphid);
} if (retval)
return retval;
static void amba_put_disable_pclk(struct amba_device *pcdev) retval = add_uevent_var(env, "MODALIAS=amba:d%08X", pcdev->periphid);
{ return retval;
clk_disable_unprepare(pcdev->pclk);
clk_put(pcdev->pclk);
} }
/* /*
...@@ -299,10 +223,10 @@ static int amba_remove(struct device *dev) ...@@ -299,10 +223,10 @@ static int amba_remove(struct device *dev)
{ {
struct amba_device *pcdev = to_amba_device(dev); struct amba_device *pcdev = to_amba_device(dev);
struct amba_driver *drv = to_amba_driver(dev->driver); struct amba_driver *drv = to_amba_driver(dev->driver);
int ret;
pm_runtime_get_sync(dev); pm_runtime_get_sync(dev);
ret = drv->remove(pcdev); if (drv->remove)
drv->remove(pcdev);
pm_runtime_put_noidle(dev); pm_runtime_put_noidle(dev);
/* Undo the runtime PM settings in amba_probe() */ /* Undo the runtime PM settings in amba_probe() */
...@@ -313,15 +237,101 @@ static int amba_remove(struct device *dev) ...@@ -313,15 +237,101 @@ static int amba_remove(struct device *dev)
amba_put_disable_pclk(pcdev); amba_put_disable_pclk(pcdev);
dev_pm_domain_detach(dev, true); dev_pm_domain_detach(dev, true);
return ret; return 0;
} }
static void amba_shutdown(struct device *dev) static void amba_shutdown(struct device *dev)
{ {
struct amba_driver *drv = to_amba_driver(dev->driver); struct amba_driver *drv;
if (!dev->driver)
return;
drv = to_amba_driver(dev->driver);
if (drv->shutdown)
drv->shutdown(to_amba_device(dev)); drv->shutdown(to_amba_device(dev));
} }
#ifdef CONFIG_PM
/*
* Hooks to provide runtime PM of the pclk (bus clock). It is safe to
* enable/disable the bus clock at runtime PM suspend/resume as this
* does not result in loss of context.
*/
static int amba_pm_runtime_suspend(struct device *dev)
{
struct amba_device *pcdev = to_amba_device(dev);
int ret = pm_generic_runtime_suspend(dev);
if (ret == 0 && dev->driver) {
if (pm_runtime_is_irq_safe(dev))
clk_disable(pcdev->pclk);
else
clk_disable_unprepare(pcdev->pclk);
}
return ret;
}
static int amba_pm_runtime_resume(struct device *dev)
{
struct amba_device *pcdev = to_amba_device(dev);
int ret;
if (dev->driver) {
if (pm_runtime_is_irq_safe(dev))
ret = clk_enable(pcdev->pclk);
else
ret = clk_prepare_enable(pcdev->pclk);
/* Failure is probably fatal to the system, but... */
if (ret)
return ret;
}
return pm_generic_runtime_resume(dev);
}
#endif /* CONFIG_PM */
static const struct dev_pm_ops amba_pm = {
.suspend = pm_generic_suspend,
.resume = pm_generic_resume,
.freeze = pm_generic_freeze,
.thaw = pm_generic_thaw,
.poweroff = pm_generic_poweroff,
.restore = pm_generic_restore,
SET_RUNTIME_PM_OPS(
amba_pm_runtime_suspend,
amba_pm_runtime_resume,
NULL
)
};
/*
* Primecells are part of the Advanced Microcontroller Bus Architecture,
* so we call the bus "amba".
* DMA configuration for platform and AMBA bus is same. So here we reuse
* platform's DMA config routine.
*/
struct bus_type amba_bustype = {
.name = "amba",
.dev_groups = amba_dev_groups,
.match = amba_match,
.uevent = amba_uevent,
.probe = amba_probe,
.remove = amba_remove,
.shutdown = amba_shutdown,
.dma_configure = platform_dma_configure,
.pm = &amba_pm,
};
EXPORT_SYMBOL_GPL(amba_bustype);
static int __init amba_init(void)
{
return bus_register(&amba_bustype);
}
postcore_initcall(amba_init);
/** /**
* amba_driver_register - register an AMBA device driver * amba_driver_register - register an AMBA device driver
* @drv: amba device driver structure * @drv: amba device driver structure
...@@ -332,12 +342,10 @@ static void amba_shutdown(struct device *dev) ...@@ -332,12 +342,10 @@ static void amba_shutdown(struct device *dev)
*/ */
int amba_driver_register(struct amba_driver *drv) int amba_driver_register(struct amba_driver *drv)
{ {
drv->drv.bus = &amba_bustype; if (!drv->probe)
return -EINVAL;
#define SETFN(fn) if (drv->fn) drv->drv.fn = amba_##fn drv->drv.bus = &amba_bustype;
SETFN(probe);
SETFN(remove);
SETFN(shutdown);
return driver_register(&drv->drv); return driver_register(&drv->drv);
} }
......
...@@ -69,11 +69,10 @@ static int nmk_rng_probe(struct amba_device *dev, const struct amba_id *id) ...@@ -69,11 +69,10 @@ static int nmk_rng_probe(struct amba_device *dev, const struct amba_id *id)
return ret; return ret;
} }
static int nmk_rng_remove(struct amba_device *dev) static void nmk_rng_remove(struct amba_device *dev)
{ {
amba_release_regions(dev); amba_release_regions(dev);
clk_disable(rng_clk); clk_disable(rng_clk);
return 0;
} }
static const struct amba_id nmk_rng_ids[] = { static const struct amba_id nmk_rng_ids[] = {
......
...@@ -3195,7 +3195,7 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id) ...@@ -3195,7 +3195,7 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id)
return ret; return ret;
} }
static int pl330_remove(struct amba_device *adev) static void pl330_remove(struct amba_device *adev)
{ {
struct pl330_dmac *pl330 = amba_get_drvdata(adev); struct pl330_dmac *pl330 = amba_get_drvdata(adev);
struct dma_pl330_chan *pch, *_p; struct dma_pl330_chan *pch, *_p;
...@@ -3235,7 +3235,6 @@ static int pl330_remove(struct amba_device *adev) ...@@ -3235,7 +3235,6 @@ static int pl330_remove(struct amba_device *adev)
if (pl330->rstc) if (pl330->rstc)
reset_control_assert(pl330->rstc); reset_control_assert(pl330->rstc);
return 0;
} }
static const struct amba_id pl330_ids[] = { static const struct amba_id pl330_ids[] = {
......
...@@ -320,7 +320,7 @@ static int pl111_amba_probe(struct amba_device *amba_dev, ...@@ -320,7 +320,7 @@ static int pl111_amba_probe(struct amba_device *amba_dev,
return ret; return ret;
} }
static int pl111_amba_remove(struct amba_device *amba_dev) static void pl111_amba_remove(struct amba_device *amba_dev)
{ {
struct device *dev = &amba_dev->dev; struct device *dev = &amba_dev->dev;
struct drm_device *drm = amba_get_drvdata(amba_dev); struct drm_device *drm = amba_get_drvdata(amba_dev);
...@@ -331,8 +331,6 @@ static int pl111_amba_remove(struct amba_device *amba_dev) ...@@ -331,8 +331,6 @@ static int pl111_amba_remove(struct amba_device *amba_dev)
drm_panel_bridge_remove(priv->bridge); drm_panel_bridge_remove(priv->bridge);
drm_dev_put(drm); drm_dev_put(drm);
of_reserved_mem_device_release(dev); of_reserved_mem_device_release(dev);
return 0;
} }
/* /*
......
...@@ -567,12 +567,11 @@ static int catu_probe(struct amba_device *adev, const struct amba_id *id) ...@@ -567,12 +567,11 @@ static int catu_probe(struct amba_device *adev, const struct amba_id *id)
return ret; return ret;
} }
static int catu_remove(struct amba_device *adev) static void catu_remove(struct amba_device *adev)
{ {
struct catu_drvdata *drvdata = dev_get_drvdata(&adev->dev); struct catu_drvdata *drvdata = dev_get_drvdata(&adev->dev);
coresight_unregister(drvdata->csdev); coresight_unregister(drvdata->csdev);
return 0;
} }
static struct amba_id catu_ids[] = { static struct amba_id catu_ids[] = {
......
...@@ -627,7 +627,7 @@ static int debug_probe(struct amba_device *adev, const struct amba_id *id) ...@@ -627,7 +627,7 @@ static int debug_probe(struct amba_device *adev, const struct amba_id *id)
return ret; return ret;
} }
static int debug_remove(struct amba_device *adev) static void debug_remove(struct amba_device *adev)
{ {
struct device *dev = &adev->dev; struct device *dev = &adev->dev;
struct debug_drvdata *drvdata = amba_get_drvdata(adev); struct debug_drvdata *drvdata = amba_get_drvdata(adev);
...@@ -642,8 +642,6 @@ static int debug_remove(struct amba_device *adev) ...@@ -642,8 +642,6 @@ static int debug_remove(struct amba_device *adev)
if (!--debug_count) if (!--debug_count)
debug_func_exit(); debug_func_exit();
return 0;
} }
static const struct amba_cs_uci_id uci_id_debug[] = { static const struct amba_cs_uci_id uci_id_debug[] = {
......
...@@ -836,7 +836,7 @@ static void cti_device_release(struct device *dev) ...@@ -836,7 +836,7 @@ static void cti_device_release(struct device *dev)
if (drvdata->csdev_release) if (drvdata->csdev_release)
drvdata->csdev_release(dev); drvdata->csdev_release(dev);
} }
static int cti_remove(struct amba_device *adev) static void cti_remove(struct amba_device *adev)
{ {
struct cti_drvdata *drvdata = dev_get_drvdata(&adev->dev); struct cti_drvdata *drvdata = dev_get_drvdata(&adev->dev);
...@@ -845,8 +845,6 @@ static int cti_remove(struct amba_device *adev) ...@@ -845,8 +845,6 @@ static int cti_remove(struct amba_device *adev)
mutex_unlock(&ect_mutex); mutex_unlock(&ect_mutex);
coresight_unregister(drvdata->csdev); coresight_unregister(drvdata->csdev);
return 0;
} }
static int cti_probe(struct amba_device *adev, const struct amba_id *id) static int cti_probe(struct amba_device *adev, const struct amba_id *id)
......
...@@ -803,7 +803,7 @@ static int etb_probe(struct amba_device *adev, const struct amba_id *id) ...@@ -803,7 +803,7 @@ static int etb_probe(struct amba_device *adev, const struct amba_id *id)
return ret; return ret;
} }
static int etb_remove(struct amba_device *adev) static void etb_remove(struct amba_device *adev)
{ {
struct etb_drvdata *drvdata = dev_get_drvdata(&adev->dev); struct etb_drvdata *drvdata = dev_get_drvdata(&adev->dev);
...@@ -814,8 +814,6 @@ static int etb_remove(struct amba_device *adev) ...@@ -814,8 +814,6 @@ static int etb_remove(struct amba_device *adev)
*/ */
misc_deregister(&drvdata->miscdev); misc_deregister(&drvdata->miscdev);
coresight_unregister(drvdata->csdev); coresight_unregister(drvdata->csdev);
return 0;
} }
#ifdef CONFIG_PM #ifdef CONFIG_PM
......
...@@ -909,7 +909,7 @@ static void clear_etmdrvdata(void *info) ...@@ -909,7 +909,7 @@ static void clear_etmdrvdata(void *info)
etmdrvdata[cpu] = NULL; etmdrvdata[cpu] = NULL;
} }
static int etm_remove(struct amba_device *adev) static void etm_remove(struct amba_device *adev)
{ {
struct etm_drvdata *drvdata = dev_get_drvdata(&adev->dev); struct etm_drvdata *drvdata = dev_get_drvdata(&adev->dev);
...@@ -932,8 +932,6 @@ static int etm_remove(struct amba_device *adev) ...@@ -932,8 +932,6 @@ static int etm_remove(struct amba_device *adev)
cpus_read_unlock(); cpus_read_unlock();
coresight_unregister(drvdata->csdev); coresight_unregister(drvdata->csdev);
return 0;
} }
#ifdef CONFIG_PM #ifdef CONFIG_PM
......
...@@ -1680,7 +1680,7 @@ static void clear_etmdrvdata(void *info) ...@@ -1680,7 +1680,7 @@ static void clear_etmdrvdata(void *info)
etmdrvdata[cpu] = NULL; etmdrvdata[cpu] = NULL;
} }
static int etm4_remove(struct amba_device *adev) static void etm4_remove(struct amba_device *adev)
{ {
struct etmv4_drvdata *drvdata = dev_get_drvdata(&adev->dev); struct etmv4_drvdata *drvdata = dev_get_drvdata(&adev->dev);
...@@ -1703,8 +1703,6 @@ static int etm4_remove(struct amba_device *adev) ...@@ -1703,8 +1703,6 @@ static int etm4_remove(struct amba_device *adev)
cpus_read_unlock(); cpus_read_unlock();
coresight_unregister(drvdata->csdev); coresight_unregister(drvdata->csdev);
return 0;
} }
static const struct amba_id etm4_ids[] = { static const struct amba_id etm4_ids[] = {
......
...@@ -370,9 +370,9 @@ static int dynamic_funnel_probe(struct amba_device *adev, ...@@ -370,9 +370,9 @@ static int dynamic_funnel_probe(struct amba_device *adev,
return funnel_probe(&adev->dev, &adev->res); return funnel_probe(&adev->dev, &adev->res);
} }
static int dynamic_funnel_remove(struct amba_device *adev) static void dynamic_funnel_remove(struct amba_device *adev)
{ {
return funnel_remove(&adev->dev); funnel_remove(&adev->dev);
} }
static const struct amba_id dynamic_funnel_ids[] = { static const struct amba_id dynamic_funnel_ids[] = {
......
...@@ -388,9 +388,9 @@ static int dynamic_replicator_probe(struct amba_device *adev, ...@@ -388,9 +388,9 @@ static int dynamic_replicator_probe(struct amba_device *adev,
return replicator_probe(&adev->dev, &adev->res); return replicator_probe(&adev->dev, &adev->res);
} }
static int dynamic_replicator_remove(struct amba_device *adev) static void dynamic_replicator_remove(struct amba_device *adev)
{ {
return replicator_remove(&adev->dev); replicator_remove(&adev->dev);
} }
static const struct amba_id dynamic_replicator_ids[] = { static const struct amba_id dynamic_replicator_ids[] = {
......
...@@ -951,15 +951,13 @@ static int stm_probe(struct amba_device *adev, const struct amba_id *id) ...@@ -951,15 +951,13 @@ static int stm_probe(struct amba_device *adev, const struct amba_id *id)
return ret; return ret;
} }
static int stm_remove(struct amba_device *adev) static void stm_remove(struct amba_device *adev)
{ {
struct stm_drvdata *drvdata = dev_get_drvdata(&adev->dev); struct stm_drvdata *drvdata = dev_get_drvdata(&adev->dev);
coresight_unregister(drvdata->csdev); coresight_unregister(drvdata->csdev);
stm_unregister_device(&drvdata->stm); stm_unregister_device(&drvdata->stm);
return 0;
} }
#ifdef CONFIG_PM #ifdef CONFIG_PM
......
...@@ -559,7 +559,7 @@ static void tmc_shutdown(struct amba_device *adev) ...@@ -559,7 +559,7 @@ static void tmc_shutdown(struct amba_device *adev)
spin_unlock_irqrestore(&drvdata->spinlock, flags); spin_unlock_irqrestore(&drvdata->spinlock, flags);
} }
static int tmc_remove(struct amba_device *adev) static void tmc_remove(struct amba_device *adev)
{ {
struct tmc_drvdata *drvdata = dev_get_drvdata(&adev->dev); struct tmc_drvdata *drvdata = dev_get_drvdata(&adev->dev);
...@@ -570,8 +570,6 @@ static int tmc_remove(struct amba_device *adev) ...@@ -570,8 +570,6 @@ static int tmc_remove(struct amba_device *adev)
*/ */
misc_deregister(&drvdata->miscdev); misc_deregister(&drvdata->miscdev);
coresight_unregister(drvdata->csdev); coresight_unregister(drvdata->csdev);
return 0;
} }
static const struct amba_id tmc_ids[] = { static const struct amba_id tmc_ids[] = {
......
...@@ -173,13 +173,11 @@ static int tpiu_probe(struct amba_device *adev, const struct amba_id *id) ...@@ -173,13 +173,11 @@ static int tpiu_probe(struct amba_device *adev, const struct amba_id *id)
return PTR_ERR(drvdata->csdev); return PTR_ERR(drvdata->csdev);
} }
static int tpiu_remove(struct amba_device *adev) static void tpiu_remove(struct amba_device *adev)
{ {
struct tpiu_drvdata *drvdata = dev_get_drvdata(&adev->dev); struct tpiu_drvdata *drvdata = dev_get_drvdata(&adev->dev);
coresight_unregister(drvdata->csdev); coresight_unregister(drvdata->csdev);
return 0;
} }
#ifdef CONFIG_PM #ifdef CONFIG_PM
......
...@@ -1055,7 +1055,7 @@ static int nmk_i2c_probe(struct amba_device *adev, const struct amba_id *id) ...@@ -1055,7 +1055,7 @@ static int nmk_i2c_probe(struct amba_device *adev, const struct amba_id *id)
return ret; return ret;
} }
static int nmk_i2c_remove(struct amba_device *adev) static void nmk_i2c_remove(struct amba_device *adev)
{ {
struct resource *res = &adev->res; struct resource *res = &adev->res;
struct nmk_i2c_dev *dev = amba_get_drvdata(adev); struct nmk_i2c_dev *dev = amba_get_drvdata(adev);
...@@ -1068,8 +1068,6 @@ static int nmk_i2c_remove(struct amba_device *adev) ...@@ -1068,8 +1068,6 @@ static int nmk_i2c_remove(struct amba_device *adev)
i2c_clr_bit(dev->virtbase + I2C_CR, I2C_CR_PE); i2c_clr_bit(dev->virtbase + I2C_CR, I2C_CR_PE);
clk_disable_unprepare(dev->clk); clk_disable_unprepare(dev->clk);
release_mem_region(res->start, resource_size(res)); release_mem_region(res->start, resource_size(res));
return 0;
} }
static struct i2c_vendor_data vendor_stn8815 = { static struct i2c_vendor_data vendor_stn8815 = {
......
...@@ -159,7 +159,7 @@ static int amba_kmi_probe(struct amba_device *dev, ...@@ -159,7 +159,7 @@ static int amba_kmi_probe(struct amba_device *dev,
return ret; return ret;
} }
static int amba_kmi_remove(struct amba_device *dev) static void amba_kmi_remove(struct amba_device *dev)
{ {
struct amba_kmi_port *kmi = amba_get_drvdata(dev); struct amba_kmi_port *kmi = amba_get_drvdata(dev);
...@@ -168,7 +168,6 @@ static int amba_kmi_remove(struct amba_device *dev) ...@@ -168,7 +168,6 @@ static int amba_kmi_remove(struct amba_device *dev)
iounmap(kmi->base); iounmap(kmi->base);
kfree(kmi); kfree(kmi);
amba_release_regions(dev); amba_release_regions(dev);
return 0;
} }
static int __maybe_unused amba_kmi_resume(struct device *dev) static int __maybe_unused amba_kmi_resume(struct device *dev)
......
...@@ -1095,14 +1095,12 @@ static int mhuv2_probe(struct amba_device *adev, const struct amba_id *id) ...@@ -1095,14 +1095,12 @@ static int mhuv2_probe(struct amba_device *adev, const struct amba_id *id)
return ret; return ret;
} }
static int mhuv2_remove(struct amba_device *adev) static void mhuv2_remove(struct amba_device *adev)
{ {
struct mhuv2 *mhu = amba_get_drvdata(adev); struct mhuv2 *mhu = amba_get_drvdata(adev);
if (mhu->frame == SENDER_FRAME) if (mhu->frame == SENDER_FRAME)
writel_relaxed(0x0, &mhu->send->access_request); writel_relaxed(0x0, &mhu->send->access_request);
return 0;
} }
static struct amba_id mhuv2_ids[] = { static struct amba_id mhuv2_ids[] = {
......
...@@ -273,14 +273,12 @@ static int pl172_probe(struct amba_device *adev, const struct amba_id *id) ...@@ -273,14 +273,12 @@ static int pl172_probe(struct amba_device *adev, const struct amba_id *id)
return ret; return ret;
} }
static int pl172_remove(struct amba_device *adev) static void pl172_remove(struct amba_device *adev)
{ {
struct pl172_data *pl172 = amba_get_drvdata(adev); struct pl172_data *pl172 = amba_get_drvdata(adev);
clk_disable_unprepare(pl172->clk); clk_disable_unprepare(pl172->clk);
amba_release_regions(adev); amba_release_regions(adev);
return 0;
} }
static const struct amba_id pl172_ids[] = { static const struct amba_id pl172_ids[] = {
......
...@@ -426,14 +426,12 @@ static int pl353_smc_probe(struct amba_device *adev, const struct amba_id *id) ...@@ -426,14 +426,12 @@ static int pl353_smc_probe(struct amba_device *adev, const struct amba_id *id)
return err; return err;
} }
static int pl353_smc_remove(struct amba_device *adev) static void pl353_smc_remove(struct amba_device *adev)
{ {
struct pl353_smc_data *pl353_smc = amba_get_drvdata(adev); struct pl353_smc_data *pl353_smc = amba_get_drvdata(adev);
clk_disable_unprepare(pl353_smc->memclk); clk_disable_unprepare(pl353_smc->memclk);
clk_disable_unprepare(pl353_smc->aclk); clk_disable_unprepare(pl353_smc->aclk);
return 0;
} }
static const struct amba_id pl353_ids[] = { static const struct amba_id pl353_ids[] = {
......
...@@ -2195,7 +2195,7 @@ static int mmci_probe(struct amba_device *dev, ...@@ -2195,7 +2195,7 @@ static int mmci_probe(struct amba_device *dev,
return ret; return ret;
} }
static int mmci_remove(struct amba_device *dev) static void mmci_remove(struct amba_device *dev)
{ {
struct mmc_host *mmc = amba_get_drvdata(dev); struct mmc_host *mmc = amba_get_drvdata(dev);
...@@ -2223,8 +2223,6 @@ static int mmci_remove(struct amba_device *dev) ...@@ -2223,8 +2223,6 @@ static int mmci_remove(struct amba_device *dev)
clk_disable_unprepare(host->clk); clk_disable_unprepare(host->clk);
mmc_free_host(mmc); mmc_free_host(mmc);
} }
return 0;
} }
#ifdef CONFIG_PM #ifdef CONFIG_PM
......
...@@ -137,7 +137,7 @@ static int pl030_probe(struct amba_device *dev, const struct amba_id *id) ...@@ -137,7 +137,7 @@ static int pl030_probe(struct amba_device *dev, const struct amba_id *id)
return ret; return ret;
} }
static int pl030_remove(struct amba_device *dev) static void pl030_remove(struct amba_device *dev)
{ {
struct pl030_rtc *rtc = amba_get_drvdata(dev); struct pl030_rtc *rtc = amba_get_drvdata(dev);
...@@ -146,8 +146,6 @@ static int pl030_remove(struct amba_device *dev) ...@@ -146,8 +146,6 @@ static int pl030_remove(struct amba_device *dev)
free_irq(dev->irq[0], rtc); free_irq(dev->irq[0], rtc);
iounmap(rtc->base); iounmap(rtc->base);
amba_release_regions(dev); amba_release_regions(dev);
return 0;
} }
static struct amba_id pl030_ids[] = { static struct amba_id pl030_ids[] = {
......
...@@ -280,7 +280,7 @@ static int pl031_set_alarm(struct device *dev, struct rtc_wkalrm *alarm) ...@@ -280,7 +280,7 @@ static int pl031_set_alarm(struct device *dev, struct rtc_wkalrm *alarm)
return 0; return 0;
} }
static int pl031_remove(struct amba_device *adev) static void pl031_remove(struct amba_device *adev)
{ {
struct pl031_local *ldata = dev_get_drvdata(&adev->dev); struct pl031_local *ldata = dev_get_drvdata(&adev->dev);
...@@ -289,8 +289,6 @@ static int pl031_remove(struct amba_device *adev) ...@@ -289,8 +289,6 @@ static int pl031_remove(struct amba_device *adev)
if (adev->irq[0]) if (adev->irq[0])
free_irq(adev->irq[0], ldata); free_irq(adev->irq[0], ldata);
amba_release_regions(adev); amba_release_regions(adev);
return 0;
} }
static int pl031_probe(struct amba_device *adev, const struct amba_id *id) static int pl031_probe(struct amba_device *adev, const struct amba_id *id)
......
...@@ -2314,13 +2314,13 @@ static int pl022_probe(struct amba_device *adev, const struct amba_id *id) ...@@ -2314,13 +2314,13 @@ static int pl022_probe(struct amba_device *adev, const struct amba_id *id)
return status; return status;
} }
static int static void
pl022_remove(struct amba_device *adev) pl022_remove(struct amba_device *adev)
{ {
struct pl022 *pl022 = amba_get_drvdata(adev); struct pl022 *pl022 = amba_get_drvdata(adev);
if (!pl022) if (!pl022)
return 0; return;
/* /*
* undo pm_runtime_put() in probe. I assume that we're not * undo pm_runtime_put() in probe. I assume that we're not
...@@ -2335,7 +2335,6 @@ pl022_remove(struct amba_device *adev) ...@@ -2335,7 +2335,6 @@ pl022_remove(struct amba_device *adev)
clk_disable_unprepare(pl022->clk); clk_disable_unprepare(pl022->clk);
amba_release_regions(adev); amba_release_regions(adev);
tasklet_disable(&pl022->pump_transfers); tasklet_disable(&pl022->pump_transfers);
return 0;
} }
#ifdef CONFIG_PM_SLEEP #ifdef CONFIG_PM_SLEEP
......
...@@ -754,7 +754,7 @@ static int pl010_probe(struct amba_device *dev, const struct amba_id *id) ...@@ -754,7 +754,7 @@ static int pl010_probe(struct amba_device *dev, const struct amba_id *id)
return ret; return ret;
} }
static int pl010_remove(struct amba_device *dev) static void pl010_remove(struct amba_device *dev)
{ {
struct uart_amba_port *uap = amba_get_drvdata(dev); struct uart_amba_port *uap = amba_get_drvdata(dev);
int i; int i;
...@@ -770,8 +770,6 @@ static int pl010_remove(struct amba_device *dev) ...@@ -770,8 +770,6 @@ static int pl010_remove(struct amba_device *dev)
if (!busy) if (!busy)
uart_unregister_driver(&amba_reg); uart_unregister_driver(&amba_reg);
return 0;
} }
#ifdef CONFIG_PM_SLEEP #ifdef CONFIG_PM_SLEEP
......
...@@ -2679,13 +2679,12 @@ static int pl011_probe(struct amba_device *dev, const struct amba_id *id) ...@@ -2679,13 +2679,12 @@ static int pl011_probe(struct amba_device *dev, const struct amba_id *id)
return pl011_register_port(uap); return pl011_register_port(uap);
} }
static int pl011_remove(struct amba_device *dev) static void pl011_remove(struct amba_device *dev)
{ {
struct uart_amba_port *uap = amba_get_drvdata(dev); struct uart_amba_port *uap = amba_get_drvdata(dev);
uart_remove_one_port(&amba_reg, &uap->port); uart_remove_one_port(&amba_reg, &uap->port);
pl011_unregister_port(uap); pl011_unregister_port(uap);
return 0;
} }
#ifdef CONFIG_PM_SLEEP #ifdef CONFIG_PM_SLEEP
......
...@@ -71,18 +71,13 @@ static int vfio_amba_probe(struct amba_device *adev, const struct amba_id *id) ...@@ -71,18 +71,13 @@ static int vfio_amba_probe(struct amba_device *adev, const struct amba_id *id)
return ret; return ret;
} }
static int vfio_amba_remove(struct amba_device *adev) static void vfio_amba_remove(struct amba_device *adev)
{ {
struct vfio_platform_device *vdev; struct vfio_platform_device *vdev =
vfio_platform_remove_common(&adev->dev);
vdev = vfio_platform_remove_common(&adev->dev);
if (vdev) {
kfree(vdev->name); kfree(vdev->name);
kfree(vdev); kfree(vdev);
return 0;
}
return -EINVAL;
} }
static const struct amba_id pl330_ids[] = { static const struct amba_id pl330_ids[] = {
......
...@@ -925,7 +925,7 @@ static int clcdfb_probe(struct amba_device *dev, const struct amba_id *id) ...@@ -925,7 +925,7 @@ static int clcdfb_probe(struct amba_device *dev, const struct amba_id *id)
return ret; return ret;
} }
static int clcdfb_remove(struct amba_device *dev) static void clcdfb_remove(struct amba_device *dev)
{ {
struct clcd_fb *fb = amba_get_drvdata(dev); struct clcd_fb *fb = amba_get_drvdata(dev);
...@@ -942,8 +942,6 @@ static int clcdfb_remove(struct amba_device *dev) ...@@ -942,8 +942,6 @@ static int clcdfb_remove(struct amba_device *dev)
kfree(fb); kfree(fb);
amba_release_regions(dev); amba_release_regions(dev);
return 0;
} }
static const struct amba_id clcdfb_id_table[] = { static const struct amba_id clcdfb_id_table[] = {
......
...@@ -305,14 +305,12 @@ sp805_wdt_probe(struct amba_device *adev, const struct amba_id *id) ...@@ -305,14 +305,12 @@ sp805_wdt_probe(struct amba_device *adev, const struct amba_id *id)
return ret; return ret;
} }
static int sp805_wdt_remove(struct amba_device *adev) static void sp805_wdt_remove(struct amba_device *adev)
{ {
struct sp805_wdt *wdt = amba_get_drvdata(adev); struct sp805_wdt *wdt = amba_get_drvdata(adev);
watchdog_unregister_device(&wdt->wdd); watchdog_unregister_device(&wdt->wdd);
watchdog_set_drvdata(&wdt->wdd, NULL); watchdog_set_drvdata(&wdt->wdd, NULL);
return 0;
} }
static int __maybe_unused sp805_wdt_suspend(struct device *dev) static int __maybe_unused sp805_wdt_suspend(struct device *dev)
......
...@@ -76,7 +76,7 @@ struct amba_device { ...@@ -76,7 +76,7 @@ struct amba_device {
struct amba_driver { struct amba_driver {
struct device_driver drv; struct device_driver drv;
int (*probe)(struct amba_device *, const struct amba_id *); int (*probe)(struct amba_device *, const struct amba_id *);
int (*remove)(struct amba_device *); void (*remove)(struct amba_device *);
void (*shutdown)(struct amba_device *); void (*shutdown)(struct amba_device *);
const struct amba_id *id_table; const struct amba_id *id_table;
}; };
......
...@@ -1055,7 +1055,7 @@ static int aaci_probe(struct amba_device *dev, ...@@ -1055,7 +1055,7 @@ static int aaci_probe(struct amba_device *dev,
return ret; return ret;
} }
static int aaci_remove(struct amba_device *dev) static void aaci_remove(struct amba_device *dev)
{ {
struct snd_card *card = amba_get_drvdata(dev); struct snd_card *card = amba_get_drvdata(dev);
...@@ -1066,8 +1066,6 @@ static int aaci_remove(struct amba_device *dev) ...@@ -1066,8 +1066,6 @@ static int aaci_remove(struct amba_device *dev)
snd_card_free(card); snd_card_free(card);
amba_release_regions(dev); amba_release_regions(dev);
} }
return 0;
} }
static struct amba_id aaci_ids[] = { static struct amba_id aaci_ids[] = {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment