diff options
author | Russell King <rmk@dyn-67.arm.linux.org.uk> | 2005-10-29 10:57:20 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2005-10-29 10:57:20 -0400 |
commit | 0d2ef7d73e0b5173af3940139569bebd2375f441 (patch) | |
tree | ce48e0c9dd216c1c32084c233842918507ee330e /drivers | |
parent | 57725f0a94435355214977bb9b0e5089bba1b173 (diff) |
[ARM] Add support for init/exit methods in sa1100 MTD map driver
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/mtd/maps/sa1100-flash.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/drivers/mtd/maps/sa1100-flash.c b/drivers/mtd/maps/sa1100-flash.c index 1920bcbc05d7..50a1d434906a 100644 --- a/drivers/mtd/maps/sa1100-flash.c +++ b/drivers/mtd/maps/sa1100-flash.c | |||
@@ -223,7 +223,7 @@ static int sa1100_probe_subdev(struct sa_subdev_info *subdev, struct resource *r | |||
223 | return ret; | 223 | return ret; |
224 | } | 224 | } |
225 | 225 | ||
226 | static void sa1100_destroy(struct sa_info *info) | 226 | static void sa1100_destroy(struct sa_info *info, struct flash_platform_data *plat) |
227 | { | 227 | { |
228 | int i; | 228 | int i; |
229 | 229 | ||
@@ -242,6 +242,9 @@ static void sa1100_destroy(struct sa_info *info) | |||
242 | for (i = info->num_subdev - 1; i >= 0; i--) | 242 | for (i = info->num_subdev - 1; i >= 0; i--) |
243 | sa1100_destroy_subdev(&info->subdev[i]); | 243 | sa1100_destroy_subdev(&info->subdev[i]); |
244 | kfree(info); | 244 | kfree(info); |
245 | |||
246 | if (plat->exit) | ||
247 | plat->exit(); | ||
245 | } | 248 | } |
246 | 249 | ||
247 | static struct sa_info *__init | 250 | static struct sa_info *__init |
@@ -275,6 +278,12 @@ sa1100_setup_mtd(struct platform_device *pdev, struct flash_platform_data *plat) | |||
275 | 278 | ||
276 | memset(info, 0, size); | 279 | memset(info, 0, size); |
277 | 280 | ||
281 | if (plat->init) { | ||
282 | ret = plat->init(); | ||
283 | if (ret) | ||
284 | goto err; | ||
285 | } | ||
286 | |||
278 | /* | 287 | /* |
279 | * Claim and then map the memory regions. | 288 | * Claim and then map the memory regions. |
280 | */ | 289 | */ |
@@ -336,7 +345,7 @@ sa1100_setup_mtd(struct platform_device *pdev, struct flash_platform_data *plat) | |||
336 | return info; | 345 | return info; |
337 | 346 | ||
338 | err: | 347 | err: |
339 | sa1100_destroy(info); | 348 | sa1100_destroy(info, plat); |
340 | out: | 349 | out: |
341 | return ERR_PTR(ret); | 350 | return ERR_PTR(ret); |
342 | } | 351 | } |
@@ -397,8 +406,11 @@ static int __init sa1100_mtd_probe(struct device *dev) | |||
397 | static int __exit sa1100_mtd_remove(struct device *dev) | 406 | static int __exit sa1100_mtd_remove(struct device *dev) |
398 | { | 407 | { |
399 | struct sa_info *info = dev_get_drvdata(dev); | 408 | struct sa_info *info = dev_get_drvdata(dev); |
409 | struct flash_platform_data *plat = dev->platform_data; | ||
410 | |||
400 | dev_set_drvdata(dev, NULL); | 411 | dev_set_drvdata(dev, NULL); |
401 | sa1100_destroy(info); | 412 | sa1100_destroy(info, plat); |
413 | |||
402 | return 0; | 414 | return 0; |
403 | } | 415 | } |
404 | 416 | ||