Merge branch 'devel-stable' into for-linus
This commit is contained in:
Коммит
90e53c5e09
|
@ -56,31 +56,28 @@ amba_lookup(const struct amba_id *table, struct amba_device *dev)
|
|||
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);
|
||||
struct amba_driver *pcdrv = to_amba_driver(drv);
|
||||
int ret;
|
||||
|
||||
/* When driver_override is set, only bind to the matching driver */
|
||||
if (pcdev->driver_override)
|
||||
return !strcmp(pcdev->driver_override, drv->name);
|
||||
pcdev->pclk = clk_get(&pcdev->dev, "apb_pclk");
|
||||
if (IS_ERR(pcdev->pclk))
|
||||
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);
|
||||
int retval = 0;
|
||||
|
||||
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;
|
||||
clk_disable_unprepare(pcdev->pclk);
|
||||
clk_put(pcdev->pclk);
|
||||
}
|
||||
|
||||
|
||||
static ssize_t driver_override_show(struct device *_dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
|
@ -152,6 +149,109 @@ static struct attribute *amba_dev_attrs[] = {
|
|||
};
|
||||
ATTRIBUTE_GROUPS(amba_dev);
|
||||
|
||||
static int amba_match(struct device *dev, struct device_driver *drv)
|
||||
{
|
||||
struct amba_device *pcdev = to_amba_device(dev);
|
||||
struct amba_driver *pcdrv = to_amba_driver(drv);
|
||||
|
||||
/* When driver_override is set, only bind to the matching driver */
|
||||
if (pcdev->driver_override)
|
||||
return !strcmp(pcdev->driver_override, drv->name);
|
||||
|
||||
return amba_lookup(pcdrv->id_table, pcdev) != NULL;
|
||||
}
|
||||
|
||||
static int amba_uevent(struct device *dev, struct kobj_uevent_env *env)
|
||||
{
|
||||
struct amba_device *pcdev = to_amba_device(dev);
|
||||
int retval = 0;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
/*
|
||||
* These are the device model conversion veneers; they convert the
|
||||
* device model structures to our more specific structures.
|
||||
*/
|
||||
static int amba_probe(struct device *dev)
|
||||
{
|
||||
struct amba_device *pcdev = to_amba_device(dev);
|
||||
struct amba_driver *pcdrv = to_amba_driver(dev->driver);
|
||||
const struct amba_id *id = amba_lookup(pcdrv->id_table, pcdev);
|
||||
int ret;
|
||||
|
||||
do {
|
||||
ret = of_clk_set_defaults(dev->of_node, false);
|
||||
if (ret < 0)
|
||||
break;
|
||||
|
||||
ret = dev_pm_domain_attach(dev, true);
|
||||
if (ret)
|
||||
break;
|
||||
|
||||
ret = amba_get_enable_pclk(pcdev);
|
||||
if (ret) {
|
||||
dev_pm_domain_detach(dev, true);
|
||||
break;
|
||||
}
|
||||
|
||||
pm_runtime_get_noresume(dev);
|
||||
pm_runtime_set_active(dev);
|
||||
pm_runtime_enable(dev);
|
||||
|
||||
ret = pcdrv->probe(pcdev, id);
|
||||
if (ret == 0)
|
||||
break;
|
||||
|
||||
pm_runtime_disable(dev);
|
||||
pm_runtime_set_suspended(dev);
|
||||
pm_runtime_put_noidle(dev);
|
||||
|
||||
amba_put_disable_pclk(pcdev);
|
||||
dev_pm_domain_detach(dev, true);
|
||||
} while (0);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int amba_remove(struct device *dev)
|
||||
{
|
||||
struct amba_device *pcdev = to_amba_device(dev);
|
||||
struct amba_driver *drv = to_amba_driver(dev->driver);
|
||||
|
||||
pm_runtime_get_sync(dev);
|
||||
if (drv->remove)
|
||||
drv->remove(pcdev);
|
||||
pm_runtime_put_noidle(dev);
|
||||
|
||||
/* Undo the runtime PM settings in amba_probe() */
|
||||
pm_runtime_disable(dev);
|
||||
pm_runtime_set_suspended(dev);
|
||||
pm_runtime_put_noidle(dev);
|
||||
|
||||
amba_put_disable_pclk(pcdev);
|
||||
dev_pm_domain_detach(dev, true);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void amba_shutdown(struct device *dev)
|
||||
{
|
||||
struct amba_driver *drv;
|
||||
|
||||
if (!dev->driver)
|
||||
return;
|
||||
|
||||
drv = to_amba_driver(dev->driver);
|
||||
if (drv->shutdown)
|
||||
drv->shutdown(to_amba_device(dev));
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
/*
|
||||
* Hooks to provide runtime PM of the pclk (bus clock). It is safe to
|
||||
|
@ -217,6 +317,9 @@ struct bus_type amba_bustype = {
|
|||
.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,
|
||||
};
|
||||
|
@ -229,99 +332,6 @@ static int __init amba_init(void)
|
|||
|
||||
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;
|
||||
}
|
||||
|
||||
static void amba_put_disable_pclk(struct amba_device *pcdev)
|
||||
{
|
||||
clk_disable_unprepare(pcdev->pclk);
|
||||
clk_put(pcdev->pclk);
|
||||
}
|
||||
|
||||
/*
|
||||
* These are the device model conversion veneers; they convert the
|
||||
* device model structures to our more specific structures.
|
||||
*/
|
||||
static int amba_probe(struct device *dev)
|
||||
{
|
||||
struct amba_device *pcdev = to_amba_device(dev);
|
||||
struct amba_driver *pcdrv = to_amba_driver(dev->driver);
|
||||
const struct amba_id *id = amba_lookup(pcdrv->id_table, pcdev);
|
||||
int ret;
|
||||
|
||||
do {
|
||||
ret = of_clk_set_defaults(dev->of_node, false);
|
||||
if (ret < 0)
|
||||
break;
|
||||
|
||||
ret = dev_pm_domain_attach(dev, true);
|
||||
if (ret)
|
||||
break;
|
||||
|
||||
ret = amba_get_enable_pclk(pcdev);
|
||||
if (ret) {
|
||||
dev_pm_domain_detach(dev, true);
|
||||
break;
|
||||
}
|
||||
|
||||
pm_runtime_get_noresume(dev);
|
||||
pm_runtime_set_active(dev);
|
||||
pm_runtime_enable(dev);
|
||||
|
||||
ret = pcdrv->probe(pcdev, id);
|
||||
if (ret == 0)
|
||||
break;
|
||||
|
||||
pm_runtime_disable(dev);
|
||||
pm_runtime_set_suspended(dev);
|
||||
pm_runtime_put_noidle(dev);
|
||||
|
||||
amba_put_disable_pclk(pcdev);
|
||||
dev_pm_domain_detach(dev, true);
|
||||
} while (0);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int amba_remove(struct device *dev)
|
||||
{
|
||||
struct amba_device *pcdev = to_amba_device(dev);
|
||||
struct amba_driver *drv = to_amba_driver(dev->driver);
|
||||
int ret;
|
||||
|
||||
pm_runtime_get_sync(dev);
|
||||
ret = drv->remove(pcdev);
|
||||
pm_runtime_put_noidle(dev);
|
||||
|
||||
/* Undo the runtime PM settings in amba_probe() */
|
||||
pm_runtime_disable(dev);
|
||||
pm_runtime_set_suspended(dev);
|
||||
pm_runtime_put_noidle(dev);
|
||||
|
||||
amba_put_disable_pclk(pcdev);
|
||||
dev_pm_domain_detach(dev, true);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void amba_shutdown(struct device *dev)
|
||||
{
|
||||
struct amba_driver *drv = to_amba_driver(dev->driver);
|
||||
drv->shutdown(to_amba_device(dev));
|
||||
}
|
||||
|
||||
/**
|
||||
* amba_driver_register - register an AMBA device driver
|
||||
* @drv: amba device driver structure
|
||||
|
@ -332,12 +342,10 @@ static void amba_shutdown(struct device *dev)
|
|||
*/
|
||||
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
|
||||
SETFN(probe);
|
||||
SETFN(remove);
|
||||
SETFN(shutdown);
|
||||
drv->drv.bus = &amba_bustype;
|
||||
|
||||
return driver_register(&drv->drv);
|
||||
}
|
||||
|
|
|
@ -69,11 +69,10 @@ out_clk:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int nmk_rng_remove(struct amba_device *dev)
|
||||
static void nmk_rng_remove(struct amba_device *dev)
|
||||
{
|
||||
amba_release_regions(dev);
|
||||
clk_disable(rng_clk);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct amba_id nmk_rng_ids[] = {
|
||||
|
|
|
@ -3195,7 +3195,7 @@ probe_err2:
|
|||
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 dma_pl330_chan *pch, *_p;
|
||||
|
@ -3235,7 +3235,6 @@ static int pl330_remove(struct amba_device *adev)
|
|||
|
||||
if (pl330->rstc)
|
||||
reset_control_assert(pl330->rstc);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct amba_id pl330_ids[] = {
|
||||
|
|
|
@ -320,7 +320,7 @@ dev_put:
|
|||
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 drm_device *drm = amba_get_drvdata(amba_dev);
|
||||
|
@ -331,8 +331,6 @@ static int pl111_amba_remove(struct amba_device *amba_dev)
|
|||
drm_panel_bridge_remove(priv->bridge);
|
||||
drm_dev_put(drm);
|
||||
of_reserved_mem_device_release(dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -567,12 +567,11 @@ out:
|
|||
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);
|
||||
|
||||
coresight_unregister(drvdata->csdev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct amba_id catu_ids[] = {
|
||||
|
|
|
@ -627,7 +627,7 @@ err:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int debug_remove(struct amba_device *adev)
|
||||
static void debug_remove(struct amba_device *adev)
|
||||
{
|
||||
struct device *dev = &adev->dev;
|
||||
struct debug_drvdata *drvdata = amba_get_drvdata(adev);
|
||||
|
@ -642,8 +642,6 @@ static int debug_remove(struct amba_device *adev)
|
|||
|
||||
if (!--debug_count)
|
||||
debug_func_exit();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct amba_cs_uci_id uci_id_debug[] = {
|
||||
|
|
|
@ -836,7 +836,7 @@ static void cti_device_release(struct device *dev)
|
|||
if (drvdata->csdev_release)
|
||||
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);
|
||||
|
||||
|
@ -845,8 +845,6 @@ static int cti_remove(struct amba_device *adev)
|
|||
mutex_unlock(&ect_mutex);
|
||||
|
||||
coresight_unregister(drvdata->csdev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cti_probe(struct amba_device *adev, const struct amba_id *id)
|
||||
|
|
|
@ -803,7 +803,7 @@ err_misc_register:
|
|||
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);
|
||||
|
||||
|
@ -814,8 +814,6 @@ static int etb_remove(struct amba_device *adev)
|
|||
*/
|
||||
misc_deregister(&drvdata->miscdev);
|
||||
coresight_unregister(drvdata->csdev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
|
|
|
@ -909,7 +909,7 @@ static void clear_etmdrvdata(void *info)
|
|||
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);
|
||||
|
||||
|
@ -932,8 +932,6 @@ static int etm_remove(struct amba_device *adev)
|
|||
cpus_read_unlock();
|
||||
|
||||
coresight_unregister(drvdata->csdev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
|
|
|
@ -1680,7 +1680,7 @@ static void clear_etmdrvdata(void *info)
|
|||
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);
|
||||
|
||||
|
@ -1703,8 +1703,6 @@ static int etm4_remove(struct amba_device *adev)
|
|||
cpus_read_unlock();
|
||||
|
||||
coresight_unregister(drvdata->csdev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct amba_id etm4_ids[] = {
|
||||
|
|
|
@ -370,9 +370,9 @@ static int dynamic_funnel_probe(struct amba_device *adev,
|
|||
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[] = {
|
||||
|
|
|
@ -388,9 +388,9 @@ static int dynamic_replicator_probe(struct amba_device *adev,
|
|||
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[] = {
|
||||
|
|
|
@ -951,15 +951,13 @@ stm_unregister:
|
|||
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);
|
||||
|
||||
coresight_unregister(drvdata->csdev);
|
||||
|
||||
stm_unregister_device(&drvdata->stm);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
|
|
|
@ -559,7 +559,7 @@ out:
|
|||
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);
|
||||
|
||||
|
@ -570,8 +570,6 @@ static int tmc_remove(struct amba_device *adev)
|
|||
*/
|
||||
misc_deregister(&drvdata->miscdev);
|
||||
coresight_unregister(drvdata->csdev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct amba_id tmc_ids[] = {
|
||||
|
|
|
@ -173,13 +173,11 @@ static int tpiu_probe(struct amba_device *adev, const struct amba_id *id)
|
|||
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);
|
||||
|
||||
coresight_unregister(drvdata->csdev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
|
|
|
@ -1055,7 +1055,7 @@ static int nmk_i2c_probe(struct amba_device *adev, const struct amba_id *id)
|
|||
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 nmk_i2c_dev *dev = amba_get_drvdata(adev);
|
||||
|
@ -1068,8 +1068,6 @@ static int nmk_i2c_remove(struct amba_device *adev)
|
|||
i2c_clr_bit(dev->virtbase + I2C_CR, I2C_CR_PE);
|
||||
clk_disable_unprepare(dev->clk);
|
||||
release_mem_region(res->start, resource_size(res));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct i2c_vendor_data vendor_stn8815 = {
|
||||
|
|
|
@ -159,7 +159,7 @@ static int amba_kmi_probe(struct amba_device *dev,
|
|||
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);
|
||||
|
||||
|
@ -168,7 +168,6 @@ static int amba_kmi_remove(struct amba_device *dev)
|
|||
iounmap(kmi->base);
|
||||
kfree(kmi);
|
||||
amba_release_regions(dev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
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)
|
|||
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);
|
||||
|
||||
if (mhu->frame == SENDER_FRAME)
|
||||
writel_relaxed(0x0, &mhu->send->access_request);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct amba_id mhuv2_ids[] = {
|
||||
|
|
|
@ -273,14 +273,12 @@ err_clk_enable:
|
|||
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);
|
||||
|
||||
clk_disable_unprepare(pl172->clk);
|
||||
amba_release_regions(adev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct amba_id pl172_ids[] = {
|
||||
|
|
|
@ -426,14 +426,12 @@ out_clk_dis_aper:
|
|||
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);
|
||||
|
||||
clk_disable_unprepare(pl353_smc->memclk);
|
||||
clk_disable_unprepare(pl353_smc->aclk);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct amba_id pl353_ids[] = {
|
||||
|
|
|
@ -2195,7 +2195,7 @@ static int mmci_probe(struct amba_device *dev,
|
|||
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);
|
||||
|
||||
|
@ -2223,8 +2223,6 @@ static int mmci_remove(struct amba_device *dev)
|
|||
clk_disable_unprepare(host->clk);
|
||||
mmc_free_host(mmc);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
|
|
|
@ -137,7 +137,7 @@ static int pl030_probe(struct amba_device *dev, const struct amba_id *id)
|
|||
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);
|
||||
|
||||
|
@ -146,8 +146,6 @@ static int pl030_remove(struct amba_device *dev)
|
|||
free_irq(dev->irq[0], rtc);
|
||||
iounmap(rtc->base);
|
||||
amba_release_regions(dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct amba_id pl030_ids[] = {
|
||||
|
|
|
@ -280,7 +280,7 @@ static int pl031_set_alarm(struct device *dev, struct rtc_wkalrm *alarm)
|
|||
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);
|
||||
|
||||
|
@ -289,8 +289,6 @@ static int pl031_remove(struct amba_device *adev)
|
|||
if (adev->irq[0])
|
||||
free_irq(adev->irq[0], ldata);
|
||||
amba_release_regions(adev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
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)
|
|||
return status;
|
||||
}
|
||||
|
||||
static int
|
||||
static void
|
||||
pl022_remove(struct amba_device *adev)
|
||||
{
|
||||
struct pl022 *pl022 = amba_get_drvdata(adev);
|
||||
|
||||
if (!pl022)
|
||||
return 0;
|
||||
return;
|
||||
|
||||
/*
|
||||
* undo pm_runtime_put() in probe. I assume that we're not
|
||||
|
@ -2335,7 +2335,6 @@ pl022_remove(struct amba_device *adev)
|
|||
clk_disable_unprepare(pl022->clk);
|
||||
amba_release_regions(adev);
|
||||
tasklet_disable(&pl022->pump_transfers);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
|
|
|
@ -754,7 +754,7 @@ static int pl010_probe(struct amba_device *dev, const struct amba_id *id)
|
|||
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);
|
||||
int i;
|
||||
|
@ -770,8 +770,6 @@ static int pl010_remove(struct amba_device *dev)
|
|||
|
||||
if (!busy)
|
||||
uart_unregister_driver(&amba_reg);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
|
|
|
@ -2679,13 +2679,12 @@ static int pl011_probe(struct amba_device *dev, const struct amba_id *id)
|
|||
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);
|
||||
|
||||
uart_remove_one_port(&amba_reg, &uap->port);
|
||||
pl011_unregister_port(uap);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
|
|
|
@ -71,18 +71,13 @@ static int vfio_amba_probe(struct amba_device *adev, const struct amba_id *id)
|
|||
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);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return -EINVAL;
|
||||
kfree(vdev->name);
|
||||
kfree(vdev);
|
||||
}
|
||||
|
||||
static const struct amba_id pl330_ids[] = {
|
||||
|
|
|
@ -925,7 +925,7 @@ static int clcdfb_probe(struct amba_device *dev, const struct amba_id *id)
|
|||
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);
|
||||
|
||||
|
@ -942,8 +942,6 @@ static int clcdfb_remove(struct amba_device *dev)
|
|||
kfree(fb);
|
||||
|
||||
amba_release_regions(dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct amba_id clcdfb_id_table[] = {
|
||||
|
|
|
@ -305,14 +305,12 @@ err:
|
|||
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);
|
||||
|
||||
watchdog_unregister_device(&wdt->wdd);
|
||||
watchdog_set_drvdata(&wdt->wdd, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __maybe_unused sp805_wdt_suspend(struct device *dev)
|
||||
|
|
|
@ -76,7 +76,7 @@ struct amba_device {
|
|||
struct amba_driver {
|
||||
struct device_driver drv;
|
||||
int (*probe)(struct amba_device *, const struct amba_id *);
|
||||
int (*remove)(struct amba_device *);
|
||||
void (*remove)(struct amba_device *);
|
||||
void (*shutdown)(struct amba_device *);
|
||||
const struct amba_id *id_table;
|
||||
};
|
||||
|
|
|
@ -1055,7 +1055,7 @@ static int aaci_probe(struct amba_device *dev,
|
|||
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);
|
||||
|
||||
|
@ -1066,8 +1066,6 @@ static int aaci_remove(struct amba_device *dev)
|
|||
snd_card_free(card);
|
||||
amba_release_regions(dev);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct amba_id aaci_ids[] = {
|
||||
|
|
Загрузка…
Ссылка в новой задаче