mirror of https://gitee.com/openkylin/linux.git
[ARM] Add support for init/exit methods in sa1100 MTD map driver
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
57725f0a94
commit
0d2ef7d73e
|
@ -223,7 +223,7 @@ static int sa1100_probe_subdev(struct sa_subdev_info *subdev, struct resource *r
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sa1100_destroy(struct sa_info *info)
|
static void sa1100_destroy(struct sa_info *info, struct flash_platform_data *plat)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -242,6 +242,9 @@ static void sa1100_destroy(struct sa_info *info)
|
||||||
for (i = info->num_subdev - 1; i >= 0; i--)
|
for (i = info->num_subdev - 1; i >= 0; i--)
|
||||||
sa1100_destroy_subdev(&info->subdev[i]);
|
sa1100_destroy_subdev(&info->subdev[i]);
|
||||||
kfree(info);
|
kfree(info);
|
||||||
|
|
||||||
|
if (plat->exit)
|
||||||
|
plat->exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct sa_info *__init
|
static struct sa_info *__init
|
||||||
|
@ -275,6 +278,12 @@ sa1100_setup_mtd(struct platform_device *pdev, struct flash_platform_data *plat)
|
||||||
|
|
||||||
memset(info, 0, size);
|
memset(info, 0, size);
|
||||||
|
|
||||||
|
if (plat->init) {
|
||||||
|
ret = plat->init();
|
||||||
|
if (ret)
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Claim and then map the memory regions.
|
* Claim and then map the memory regions.
|
||||||
*/
|
*/
|
||||||
|
@ -336,7 +345,7 @@ sa1100_setup_mtd(struct platform_device *pdev, struct flash_platform_data *plat)
|
||||||
return info;
|
return info;
|
||||||
|
|
||||||
err:
|
err:
|
||||||
sa1100_destroy(info);
|
sa1100_destroy(info, plat);
|
||||||
out:
|
out:
|
||||||
return ERR_PTR(ret);
|
return ERR_PTR(ret);
|
||||||
}
|
}
|
||||||
|
@ -397,8 +406,11 @@ static int __init sa1100_mtd_probe(struct device *dev)
|
||||||
static int __exit sa1100_mtd_remove(struct device *dev)
|
static int __exit sa1100_mtd_remove(struct device *dev)
|
||||||
{
|
{
|
||||||
struct sa_info *info = dev_get_drvdata(dev);
|
struct sa_info *info = dev_get_drvdata(dev);
|
||||||
|
struct flash_platform_data *plat = dev->platform_data;
|
||||||
|
|
||||||
dev_set_drvdata(dev, NULL);
|
dev_set_drvdata(dev, NULL);
|
||||||
sa1100_destroy(info);
|
sa1100_destroy(info, plat);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue