diff options
author | Jiri Kosina <jkosina@suse.cz> | 2010-06-16 12:08:13 -0400 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.cz> | 2010-06-16 12:08:13 -0400 |
commit | f1bbbb6912662b9f6070c5bfc4ca9eb1f06a9d5b (patch) | |
tree | c2c130a74be25b0b2dff992e1a195e2728bdaadd /drivers/mtd | |
parent | fd0961ff67727482bb20ca7e8ea97b83e9de2ddb (diff) | |
parent | 7e27d6e778cd87b6f2415515d7127eba53fe5d02 (diff) |
Merge branch 'master' into for-next
Diffstat (limited to 'drivers/mtd')
-rw-r--r-- | drivers/mtd/maps/physmap_of.c | 13 | ||||
-rw-r--r-- | drivers/mtd/maps/pismo.c | 2 | ||||
-rw-r--r-- | drivers/mtd/maps/sun_uflash.c | 9 | ||||
-rw-r--r-- | drivers/mtd/mtdchar.c | 30 | ||||
-rw-r--r-- | drivers/mtd/nand/Kconfig | 21 | ||||
-rw-r--r-- | drivers/mtd/nand/fsl_elbc_nand.c | 11 | ||||
-rw-r--r-- | drivers/mtd/nand/fsl_upm.c | 24 | ||||
-rw-r--r-- | drivers/mtd/nand/mpc5121_nfc.c | 8 | ||||
-rw-r--r-- | drivers/mtd/nand/ndfc.c | 15 | ||||
-rw-r--r-- | drivers/mtd/nand/pasemi_nand.c | 9 | ||||
-rw-r--r-- | drivers/mtd/nand/r852.c | 27 | ||||
-rw-r--r-- | drivers/mtd/nand/socrates_nand.c | 11 | ||||
-rw-r--r-- | drivers/mtd/ubi/cdev.c | 3 |
13 files changed, 106 insertions, 77 deletions
diff --git a/drivers/mtd/maps/physmap_of.c b/drivers/mtd/maps/physmap_of.c index 36dbcee1ac29..ba124baa646d 100644 --- a/drivers/mtd/maps/physmap_of.c +++ b/drivers/mtd/maps/physmap_of.c | |||
@@ -143,7 +143,7 @@ static int of_flash_remove(struct of_device *dev) | |||
143 | static struct mtd_info * __devinit obsolete_probe(struct of_device *dev, | 143 | static struct mtd_info * __devinit obsolete_probe(struct of_device *dev, |
144 | struct map_info *map) | 144 | struct map_info *map) |
145 | { | 145 | { |
146 | struct device_node *dp = dev->node; | 146 | struct device_node *dp = dev->dev.of_node; |
147 | const char *of_probe; | 147 | const char *of_probe; |
148 | struct mtd_info *mtd; | 148 | struct mtd_info *mtd; |
149 | static const char *rom_probe_types[] | 149 | static const char *rom_probe_types[] |
@@ -221,7 +221,7 @@ static int __devinit of_flash_probe(struct of_device *dev, | |||
221 | #ifdef CONFIG_MTD_PARTITIONS | 221 | #ifdef CONFIG_MTD_PARTITIONS |
222 | const char **part_probe_types; | 222 | const char **part_probe_types; |
223 | #endif | 223 | #endif |
224 | struct device_node *dp = dev->node; | 224 | struct device_node *dp = dev->dev.of_node; |
225 | struct resource res; | 225 | struct resource res; |
226 | struct of_flash *info; | 226 | struct of_flash *info; |
227 | const char *probe_type = match->data; | 227 | const char *probe_type = match->data; |
@@ -245,7 +245,7 @@ static int __devinit of_flash_probe(struct of_device *dev, | |||
245 | p = of_get_property(dp, "reg", &count); | 245 | p = of_get_property(dp, "reg", &count); |
246 | if (count % reg_tuple_size != 0) { | 246 | if (count % reg_tuple_size != 0) { |
247 | dev_err(&dev->dev, "Malformed reg property on %s\n", | 247 | dev_err(&dev->dev, "Malformed reg property on %s\n", |
248 | dev->node->full_name); | 248 | dev->dev.of_node->full_name); |
249 | err = -EINVAL; | 249 | err = -EINVAL; |
250 | goto err_flash_remove; | 250 | goto err_flash_remove; |
251 | } | 251 | } |
@@ -418,8 +418,11 @@ static struct of_device_id of_flash_match[] = { | |||
418 | MODULE_DEVICE_TABLE(of, of_flash_match); | 418 | MODULE_DEVICE_TABLE(of, of_flash_match); |
419 | 419 | ||
420 | static struct of_platform_driver of_flash_driver = { | 420 | static struct of_platform_driver of_flash_driver = { |
421 | .name = "of-flash", | 421 | .driver = { |
422 | .match_table = of_flash_match, | 422 | .name = "of-flash", |
423 | .owner = THIS_MODULE, | ||
424 | .of_match_table = of_flash_match, | ||
425 | }, | ||
423 | .probe = of_flash_probe, | 426 | .probe = of_flash_probe, |
424 | .remove = of_flash_remove, | 427 | .remove = of_flash_remove, |
425 | }; | 428 | }; |
diff --git a/drivers/mtd/maps/pismo.c b/drivers/mtd/maps/pismo.c index eb476b7f8d11..f4ce273e93fd 100644 --- a/drivers/mtd/maps/pismo.c +++ b/drivers/mtd/maps/pismo.c | |||
@@ -234,7 +234,6 @@ static int __devexit pismo_remove(struct i2c_client *client) | |||
234 | /* FIXME: set_vpp needs saner arguments */ | 234 | /* FIXME: set_vpp needs saner arguments */ |
235 | pismo_setvpp_remove_fix(pismo); | 235 | pismo_setvpp_remove_fix(pismo); |
236 | 236 | ||
237 | i2c_set_clientdata(client, NULL); | ||
238 | kfree(pismo); | 237 | kfree(pismo); |
239 | 238 | ||
240 | return 0; | 239 | return 0; |
@@ -286,7 +285,6 @@ static int __devinit pismo_probe(struct i2c_client *client, | |||
286 | return 0; | 285 | return 0; |
287 | 286 | ||
288 | exit_free: | 287 | exit_free: |
289 | i2c_set_clientdata(client, NULL); | ||
290 | kfree(pismo); | 288 | kfree(pismo); |
291 | return ret; | 289 | return ret; |
292 | } | 290 | } |
diff --git a/drivers/mtd/maps/sun_uflash.c b/drivers/mtd/maps/sun_uflash.c index fadc4c45b455..0391c2527bd7 100644 --- a/drivers/mtd/maps/sun_uflash.c +++ b/drivers/mtd/maps/sun_uflash.c | |||
@@ -110,7 +110,7 @@ int uflash_devinit(struct of_device *op, struct device_node *dp) | |||
110 | 110 | ||
111 | static int __devinit uflash_probe(struct of_device *op, const struct of_device_id *match) | 111 | static int __devinit uflash_probe(struct of_device *op, const struct of_device_id *match) |
112 | { | 112 | { |
113 | struct device_node *dp = op->node; | 113 | struct device_node *dp = op->dev.of_node; |
114 | 114 | ||
115 | /* Flashprom must have the "user" property in order to | 115 | /* Flashprom must have the "user" property in order to |
116 | * be used by this driver. | 116 | * be used by this driver. |
@@ -149,8 +149,11 @@ static const struct of_device_id uflash_match[] = { | |||
149 | MODULE_DEVICE_TABLE(of, uflash_match); | 149 | MODULE_DEVICE_TABLE(of, uflash_match); |
150 | 150 | ||
151 | static struct of_platform_driver uflash_driver = { | 151 | static struct of_platform_driver uflash_driver = { |
152 | .name = DRIVER_NAME, | 152 | .driver = { |
153 | .match_table = uflash_match, | 153 | .name = DRIVER_NAME, |
154 | .owner = THIS_MODULE, | ||
155 | .of_match_table = uflash_match, | ||
156 | }, | ||
154 | .probe = uflash_probe, | 157 | .probe = uflash_probe, |
155 | .remove = __devexit_p(uflash_remove), | 158 | .remove = __devexit_p(uflash_remove), |
156 | }; | 159 | }; |
diff --git a/drivers/mtd/mtdchar.c b/drivers/mtd/mtdchar.c index 8bb5e4a66328..91c8013cf0d9 100644 --- a/drivers/mtd/mtdchar.c +++ b/drivers/mtd/mtdchar.c | |||
@@ -404,14 +404,9 @@ static int mtd_do_writeoob(struct file *file, struct mtd_info *mtd, | |||
404 | if (ops.ooboffs && ops.ooblen > (mtd->oobsize - ops.ooboffs)) | 404 | if (ops.ooboffs && ops.ooblen > (mtd->oobsize - ops.ooboffs)) |
405 | return -EINVAL; | 405 | return -EINVAL; |
406 | 406 | ||
407 | ops.oobbuf = kmalloc(length, GFP_KERNEL); | 407 | ops.oobbuf = memdup_user(ptr, length); |
408 | if (!ops.oobbuf) | 408 | if (IS_ERR(ops.oobbuf)) |
409 | return -ENOMEM; | 409 | return PTR_ERR(ops.oobbuf); |
410 | |||
411 | if (copy_from_user(ops.oobbuf, ptr, length)) { | ||
412 | kfree(ops.oobbuf); | ||
413 | return -EFAULT; | ||
414 | } | ||
415 | 410 | ||
416 | start &= ~((uint64_t)mtd->oobsize - 1); | 411 | start &= ~((uint64_t)mtd->oobsize - 1); |
417 | ret = mtd->write_oob(mtd, start, &ops); | 412 | ret = mtd->write_oob(mtd, start, &ops); |
@@ -468,8 +463,7 @@ static int mtd_do_readoob(struct mtd_info *mtd, uint64_t start, | |||
468 | return ret; | 463 | return ret; |
469 | } | 464 | } |
470 | 465 | ||
471 | static int mtd_ioctl(struct inode *inode, struct file *file, | 466 | static int mtd_ioctl(struct file *file, u_int cmd, u_long arg) |
472 | u_int cmd, u_long arg) | ||
473 | { | 467 | { |
474 | struct mtd_file_info *mfi = file->private_data; | 468 | struct mtd_file_info *mfi = file->private_data; |
475 | struct mtd_info *mtd = mfi->mtd; | 469 | struct mtd_info *mtd = mfi->mtd; |
@@ -840,6 +834,17 @@ static int mtd_ioctl(struct inode *inode, struct file *file, | |||
840 | return ret; | 834 | return ret; |
841 | } /* memory_ioctl */ | 835 | } /* memory_ioctl */ |
842 | 836 | ||
837 | static long mtd_unlocked_ioctl(struct file *file, u_int cmd, u_long arg) | ||
838 | { | ||
839 | int ret; | ||
840 | |||
841 | lock_kernel(); | ||
842 | ret = mtd_ioctl(file, cmd, arg); | ||
843 | unlock_kernel(); | ||
844 | |||
845 | return ret; | ||
846 | } | ||
847 | |||
843 | #ifdef CONFIG_COMPAT | 848 | #ifdef CONFIG_COMPAT |
844 | 849 | ||
845 | struct mtd_oob_buf32 { | 850 | struct mtd_oob_buf32 { |
@@ -854,7 +859,6 @@ struct mtd_oob_buf32 { | |||
854 | static long mtd_compat_ioctl(struct file *file, unsigned int cmd, | 859 | static long mtd_compat_ioctl(struct file *file, unsigned int cmd, |
855 | unsigned long arg) | 860 | unsigned long arg) |
856 | { | 861 | { |
857 | struct inode *inode = file->f_path.dentry->d_inode; | ||
858 | struct mtd_file_info *mfi = file->private_data; | 862 | struct mtd_file_info *mfi = file->private_data; |
859 | struct mtd_info *mtd = mfi->mtd; | 863 | struct mtd_info *mtd = mfi->mtd; |
860 | void __user *argp = compat_ptr(arg); | 864 | void __user *argp = compat_ptr(arg); |
@@ -892,7 +896,7 @@ static long mtd_compat_ioctl(struct file *file, unsigned int cmd, | |||
892 | break; | 896 | break; |
893 | } | 897 | } |
894 | default: | 898 | default: |
895 | ret = mtd_ioctl(inode, file, cmd, (unsigned long)argp); | 899 | ret = mtd_ioctl(file, cmd, (unsigned long)argp); |
896 | } | 900 | } |
897 | 901 | ||
898 | unlock_kernel(); | 902 | unlock_kernel(); |
@@ -960,7 +964,7 @@ static const struct file_operations mtd_fops = { | |||
960 | .llseek = mtd_lseek, | 964 | .llseek = mtd_lseek, |
961 | .read = mtd_read, | 965 | .read = mtd_read, |
962 | .write = mtd_write, | 966 | .write = mtd_write, |
963 | .ioctl = mtd_ioctl, | 967 | .unlocked_ioctl = mtd_unlocked_ioctl, |
964 | #ifdef CONFIG_COMPAT | 968 | #ifdef CONFIG_COMPAT |
965 | .compat_ioctl = mtd_compat_ioctl, | 969 | .compat_ioctl = mtd_compat_ioctl, |
966 | #endif | 970 | #endif |
diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig index 98a04b3c9526..ffc3720929f1 100644 --- a/drivers/mtd/nand/Kconfig +++ b/drivers/mtd/nand/Kconfig | |||
@@ -1,13 +1,3 @@ | |||
1 | menuconfig MTD_NAND | ||
2 | tristate "NAND Device Support" | ||
3 | depends on MTD | ||
4 | select MTD_NAND_IDS | ||
5 | select MTD_NAND_ECC | ||
6 | help | ||
7 | This enables support for accessing all type of NAND flash | ||
8 | devices. For further information see | ||
9 | <http://www.linux-mtd.infradead.org/doc/nand.html>. | ||
10 | |||
11 | config MTD_NAND_ECC | 1 | config MTD_NAND_ECC |
12 | tristate | 2 | tristate |
13 | 3 | ||
@@ -19,6 +9,17 @@ config MTD_NAND_ECC_SMC | |||
19 | Software ECC according to the Smart Media Specification. | 9 | Software ECC according to the Smart Media Specification. |
20 | The original Linux implementation had byte 0 and 1 swapped. | 10 | The original Linux implementation had byte 0 and 1 swapped. |
21 | 11 | ||
12 | |||
13 | menuconfig MTD_NAND | ||
14 | tristate "NAND Device Support" | ||
15 | depends on MTD | ||
16 | select MTD_NAND_IDS | ||
17 | select MTD_NAND_ECC | ||
18 | help | ||
19 | This enables support for accessing all type of NAND flash | ||
20 | devices. For further information see | ||
21 | <http://www.linux-mtd.infradead.org/doc/nand.html>. | ||
22 | |||
22 | if MTD_NAND | 23 | if MTD_NAND |
23 | 24 | ||
24 | config MTD_NAND_VERIFY_WRITE | 25 | config MTD_NAND_VERIFY_WRITE |
diff --git a/drivers/mtd/nand/fsl_elbc_nand.c b/drivers/mtd/nand/fsl_elbc_nand.c index 3f38fb8e6666..5084cc517944 100644 --- a/drivers/mtd/nand/fsl_elbc_nand.c +++ b/drivers/mtd/nand/fsl_elbc_nand.c | |||
@@ -1030,14 +1030,14 @@ static int __devinit fsl_elbc_ctrl_probe(struct of_device *ofdev, | |||
1030 | init_waitqueue_head(&ctrl->controller.wq); | 1030 | init_waitqueue_head(&ctrl->controller.wq); |
1031 | init_waitqueue_head(&ctrl->irq_wait); | 1031 | init_waitqueue_head(&ctrl->irq_wait); |
1032 | 1032 | ||
1033 | ctrl->regs = of_iomap(ofdev->node, 0); | 1033 | ctrl->regs = of_iomap(ofdev->dev.of_node, 0); |
1034 | if (!ctrl->regs) { | 1034 | if (!ctrl->regs) { |
1035 | dev_err(&ofdev->dev, "failed to get memory region\n"); | 1035 | dev_err(&ofdev->dev, "failed to get memory region\n"); |
1036 | ret = -ENODEV; | 1036 | ret = -ENODEV; |
1037 | goto err; | 1037 | goto err; |
1038 | } | 1038 | } |
1039 | 1039 | ||
1040 | ctrl->irq = of_irq_to_resource(ofdev->node, 0, NULL); | 1040 | ctrl->irq = of_irq_to_resource(ofdev->dev.of_node, 0, NULL); |
1041 | if (ctrl->irq == NO_IRQ) { | 1041 | if (ctrl->irq == NO_IRQ) { |
1042 | dev_err(&ofdev->dev, "failed to get irq resource\n"); | 1042 | dev_err(&ofdev->dev, "failed to get irq resource\n"); |
1043 | ret = -ENODEV; | 1043 | ret = -ENODEV; |
@@ -1058,7 +1058,7 @@ static int __devinit fsl_elbc_ctrl_probe(struct of_device *ofdev, | |||
1058 | goto err; | 1058 | goto err; |
1059 | } | 1059 | } |
1060 | 1060 | ||
1061 | for_each_child_of_node(ofdev->node, child) | 1061 | for_each_child_of_node(ofdev->dev.of_node, child) |
1062 | if (of_device_is_compatible(child, "fsl,elbc-fcm-nand")) | 1062 | if (of_device_is_compatible(child, "fsl,elbc-fcm-nand")) |
1063 | fsl_elbc_chip_probe(ctrl, child); | 1063 | fsl_elbc_chip_probe(ctrl, child); |
1064 | 1064 | ||
@@ -1078,9 +1078,10 @@ static const struct of_device_id fsl_elbc_match[] = { | |||
1078 | 1078 | ||
1079 | static struct of_platform_driver fsl_elbc_ctrl_driver = { | 1079 | static struct of_platform_driver fsl_elbc_ctrl_driver = { |
1080 | .driver = { | 1080 | .driver = { |
1081 | .name = "fsl-elbc", | 1081 | .name = "fsl-elbc", |
1082 | .owner = THIS_MODULE, | ||
1083 | .of_match_table = fsl_elbc_match, | ||
1082 | }, | 1084 | }, |
1083 | .match_table = fsl_elbc_match, | ||
1084 | .probe = fsl_elbc_ctrl_probe, | 1085 | .probe = fsl_elbc_ctrl_probe, |
1085 | .remove = fsl_elbc_ctrl_remove, | 1086 | .remove = fsl_elbc_ctrl_remove, |
1086 | }; | 1087 | }; |
diff --git a/drivers/mtd/nand/fsl_upm.c b/drivers/mtd/nand/fsl_upm.c index 2d215ccb564d..1312eda57ba6 100644 --- a/drivers/mtd/nand/fsl_upm.c +++ b/drivers/mtd/nand/fsl_upm.c | |||
@@ -232,7 +232,7 @@ static int __devinit fun_probe(struct of_device *ofdev, | |||
232 | if (!fun) | 232 | if (!fun) |
233 | return -ENOMEM; | 233 | return -ENOMEM; |
234 | 234 | ||
235 | ret = of_address_to_resource(ofdev->node, 0, &io_res); | 235 | ret = of_address_to_resource(ofdev->dev.of_node, 0, &io_res); |
236 | if (ret) { | 236 | if (ret) { |
237 | dev_err(&ofdev->dev, "can't get IO base\n"); | 237 | dev_err(&ofdev->dev, "can't get IO base\n"); |
238 | goto err1; | 238 | goto err1; |
@@ -244,7 +244,8 @@ static int __devinit fun_probe(struct of_device *ofdev, | |||
244 | goto err1; | 244 | goto err1; |
245 | } | 245 | } |
246 | 246 | ||
247 | prop = of_get_property(ofdev->node, "fsl,upm-addr-offset", &size); | 247 | prop = of_get_property(ofdev->dev.of_node, "fsl,upm-addr-offset", |
248 | &size); | ||
248 | if (!prop || size != sizeof(uint32_t)) { | 249 | if (!prop || size != sizeof(uint32_t)) { |
249 | dev_err(&ofdev->dev, "can't get UPM address offset\n"); | 250 | dev_err(&ofdev->dev, "can't get UPM address offset\n"); |
250 | ret = -EINVAL; | 251 | ret = -EINVAL; |
@@ -252,7 +253,7 @@ static int __devinit fun_probe(struct of_device *ofdev, | |||
252 | } | 253 | } |
253 | fun->upm_addr_offset = *prop; | 254 | fun->upm_addr_offset = *prop; |
254 | 255 | ||
255 | prop = of_get_property(ofdev->node, "fsl,upm-cmd-offset", &size); | 256 | prop = of_get_property(ofdev->dev.of_node, "fsl,upm-cmd-offset", &size); |
256 | if (!prop || size != sizeof(uint32_t)) { | 257 | if (!prop || size != sizeof(uint32_t)) { |
257 | dev_err(&ofdev->dev, "can't get UPM command offset\n"); | 258 | dev_err(&ofdev->dev, "can't get UPM command offset\n"); |
258 | ret = -EINVAL; | 259 | ret = -EINVAL; |
@@ -260,7 +261,7 @@ static int __devinit fun_probe(struct of_device *ofdev, | |||
260 | } | 261 | } |
261 | fun->upm_cmd_offset = *prop; | 262 | fun->upm_cmd_offset = *prop; |
262 | 263 | ||
263 | prop = of_get_property(ofdev->node, | 264 | prop = of_get_property(ofdev->dev.of_node, |
264 | "fsl,upm-addr-line-cs-offsets", &size); | 265 | "fsl,upm-addr-line-cs-offsets", &size); |
265 | if (prop && (size / sizeof(uint32_t)) > 0) { | 266 | if (prop && (size / sizeof(uint32_t)) > 0) { |
266 | fun->mchip_count = size / sizeof(uint32_t); | 267 | fun->mchip_count = size / sizeof(uint32_t); |
@@ -276,7 +277,7 @@ static int __devinit fun_probe(struct of_device *ofdev, | |||
276 | 277 | ||
277 | for (i = 0; i < fun->mchip_count; i++) { | 278 | for (i = 0; i < fun->mchip_count; i++) { |
278 | fun->rnb_gpio[i] = -1; | 279 | fun->rnb_gpio[i] = -1; |
279 | rnb_gpio = of_get_gpio(ofdev->node, i); | 280 | rnb_gpio = of_get_gpio(ofdev->dev.of_node, i); |
280 | if (rnb_gpio >= 0) { | 281 | if (rnb_gpio >= 0) { |
281 | ret = gpio_request(rnb_gpio, dev_name(&ofdev->dev)); | 282 | ret = gpio_request(rnb_gpio, dev_name(&ofdev->dev)); |
282 | if (ret) { | 283 | if (ret) { |
@@ -292,13 +293,13 @@ static int __devinit fun_probe(struct of_device *ofdev, | |||
292 | } | 293 | } |
293 | } | 294 | } |
294 | 295 | ||
295 | prop = of_get_property(ofdev->node, "chip-delay", NULL); | 296 | prop = of_get_property(ofdev->dev.of_node, "chip-delay", NULL); |
296 | if (prop) | 297 | if (prop) |
297 | fun->chip_delay = *prop; | 298 | fun->chip_delay = *prop; |
298 | else | 299 | else |
299 | fun->chip_delay = 50; | 300 | fun->chip_delay = 50; |
300 | 301 | ||
301 | prop = of_get_property(ofdev->node, "fsl,upm-wait-flags", &size); | 302 | prop = of_get_property(ofdev->dev.of_node, "fsl,upm-wait-flags", &size); |
302 | if (prop && size == sizeof(uint32_t)) | 303 | if (prop && size == sizeof(uint32_t)) |
303 | fun->wait_flags = *prop; | 304 | fun->wait_flags = *prop; |
304 | else | 305 | else |
@@ -315,7 +316,7 @@ static int __devinit fun_probe(struct of_device *ofdev, | |||
315 | fun->dev = &ofdev->dev; | 316 | fun->dev = &ofdev->dev; |
316 | fun->last_ctrl = NAND_CLE; | 317 | fun->last_ctrl = NAND_CLE; |
317 | 318 | ||
318 | ret = fun_chip_init(fun, ofdev->node, &io_res); | 319 | ret = fun_chip_init(fun, ofdev->dev.of_node, &io_res); |
319 | if (ret) | 320 | if (ret) |
320 | goto err2; | 321 | goto err2; |
321 | 322 | ||
@@ -360,8 +361,11 @@ static const struct of_device_id of_fun_match[] = { | |||
360 | MODULE_DEVICE_TABLE(of, of_fun_match); | 361 | MODULE_DEVICE_TABLE(of, of_fun_match); |
361 | 362 | ||
362 | static struct of_platform_driver of_fun_driver = { | 363 | static struct of_platform_driver of_fun_driver = { |
363 | .name = "fsl,upm-nand", | 364 | .driver = { |
364 | .match_table = of_fun_match, | 365 | .name = "fsl,upm-nand", |
366 | .owner = THIS_MODULE, | ||
367 | .of_match_table = of_fun_match, | ||
368 | }, | ||
365 | .probe = fun_probe, | 369 | .probe = fun_probe, |
366 | .remove = __devexit_p(fun_remove), | 370 | .remove = __devexit_p(fun_remove), |
367 | }; | 371 | }; |
diff --git a/drivers/mtd/nand/mpc5121_nfc.c b/drivers/mtd/nand/mpc5121_nfc.c index 3d0867d829cb..0a130dcaa129 100644 --- a/drivers/mtd/nand/mpc5121_nfc.c +++ b/drivers/mtd/nand/mpc5121_nfc.c | |||
@@ -650,7 +650,7 @@ static void mpc5121_nfc_free(struct device *dev, struct mtd_info *mtd) | |||
650 | static int __devinit mpc5121_nfc_probe(struct of_device *op, | 650 | static int __devinit mpc5121_nfc_probe(struct of_device *op, |
651 | const struct of_device_id *match) | 651 | const struct of_device_id *match) |
652 | { | 652 | { |
653 | struct device_node *rootnode, *dn = op->node; | 653 | struct device_node *rootnode, *dn = op->dev.of_node; |
654 | struct device *dev = &op->dev; | 654 | struct device *dev = &op->dev; |
655 | struct mpc5121_nfc_prv *prv; | 655 | struct mpc5121_nfc_prv *prv; |
656 | struct resource res; | 656 | struct resource res; |
@@ -889,12 +889,12 @@ static struct of_device_id mpc5121_nfc_match[] __devinitdata = { | |||
889 | }; | 889 | }; |
890 | 890 | ||
891 | static struct of_platform_driver mpc5121_nfc_driver = { | 891 | static struct of_platform_driver mpc5121_nfc_driver = { |
892 | .match_table = mpc5121_nfc_match, | ||
893 | .probe = mpc5121_nfc_probe, | 892 | .probe = mpc5121_nfc_probe, |
894 | .remove = __devexit_p(mpc5121_nfc_remove), | 893 | .remove = __devexit_p(mpc5121_nfc_remove), |
895 | .driver = { | 894 | .driver = { |
896 | .name = DRV_NAME, | 895 | .name = DRV_NAME, |
897 | .owner = THIS_MODULE, | 896 | .owner = THIS_MODULE, |
897 | .of_match_table = mpc5121_nfc_match, | ||
898 | }, | 898 | }, |
899 | }; | 899 | }; |
900 | 900 | ||
diff --git a/drivers/mtd/nand/ndfc.c b/drivers/mtd/nand/ndfc.c index b983cae8c298..98fd2bdf8be1 100644 --- a/drivers/mtd/nand/ndfc.c +++ b/drivers/mtd/nand/ndfc.c | |||
@@ -239,14 +239,14 @@ static int __devinit ndfc_probe(struct of_device *ofdev, | |||
239 | dev_set_drvdata(&ofdev->dev, ndfc); | 239 | dev_set_drvdata(&ofdev->dev, ndfc); |
240 | 240 | ||
241 | /* Read the reg property to get the chip select */ | 241 | /* Read the reg property to get the chip select */ |
242 | reg = of_get_property(ofdev->node, "reg", &len); | 242 | reg = of_get_property(ofdev->dev.of_node, "reg", &len); |
243 | if (reg == NULL || len != 12) { | 243 | if (reg == NULL || len != 12) { |
244 | dev_err(&ofdev->dev, "unable read reg property (%d)\n", len); | 244 | dev_err(&ofdev->dev, "unable read reg property (%d)\n", len); |
245 | return -ENOENT; | 245 | return -ENOENT; |
246 | } | 246 | } |
247 | ndfc->chip_select = reg[0]; | 247 | ndfc->chip_select = reg[0]; |
248 | 248 | ||
249 | ndfc->ndfcbase = of_iomap(ofdev->node, 0); | 249 | ndfc->ndfcbase = of_iomap(ofdev->dev.of_node, 0); |
250 | if (!ndfc->ndfcbase) { | 250 | if (!ndfc->ndfcbase) { |
251 | dev_err(&ofdev->dev, "failed to get memory\n"); | 251 | dev_err(&ofdev->dev, "failed to get memory\n"); |
252 | return -EIO; | 252 | return -EIO; |
@@ -255,20 +255,20 @@ static int __devinit ndfc_probe(struct of_device *ofdev, | |||
255 | ccr = NDFC_CCR_BS(ndfc->chip_select); | 255 | ccr = NDFC_CCR_BS(ndfc->chip_select); |
256 | 256 | ||
257 | /* It is ok if ccr does not exist - just default to 0 */ | 257 | /* It is ok if ccr does not exist - just default to 0 */ |
258 | reg = of_get_property(ofdev->node, "ccr", NULL); | 258 | reg = of_get_property(ofdev->dev.of_node, "ccr", NULL); |
259 | if (reg) | 259 | if (reg) |
260 | ccr |= *reg; | 260 | ccr |= *reg; |
261 | 261 | ||
262 | out_be32(ndfc->ndfcbase + NDFC_CCR, ccr); | 262 | out_be32(ndfc->ndfcbase + NDFC_CCR, ccr); |
263 | 263 | ||
264 | /* Set the bank settings if given */ | 264 | /* Set the bank settings if given */ |
265 | reg = of_get_property(ofdev->node, "bank-settings", NULL); | 265 | reg = of_get_property(ofdev->dev.of_node, "bank-settings", NULL); |
266 | if (reg) { | 266 | if (reg) { |
267 | int offset = NDFC_BCFG0 + (ndfc->chip_select << 2); | 267 | int offset = NDFC_BCFG0 + (ndfc->chip_select << 2); |
268 | out_be32(ndfc->ndfcbase + offset, *reg); | 268 | out_be32(ndfc->ndfcbase + offset, *reg); |
269 | } | 269 | } |
270 | 270 | ||
271 | err = ndfc_chip_init(ndfc, ofdev->node); | 271 | err = ndfc_chip_init(ndfc, ofdev->dev.of_node); |
272 | if (err) { | 272 | if (err) { |
273 | iounmap(ndfc->ndfcbase); | 273 | iounmap(ndfc->ndfcbase); |
274 | return err; | 274 | return err; |
@@ -294,9 +294,10 @@ MODULE_DEVICE_TABLE(of, ndfc_match); | |||
294 | 294 | ||
295 | static struct of_platform_driver ndfc_driver = { | 295 | static struct of_platform_driver ndfc_driver = { |
296 | .driver = { | 296 | .driver = { |
297 | .name = "ndfc", | 297 | .name = "ndfc", |
298 | .owner = THIS_MODULE, | ||
299 | .of_match_table = ndfc_match, | ||
298 | }, | 300 | }, |
299 | .match_table = ndfc_match, | ||
300 | .probe = ndfc_probe, | 301 | .probe = ndfc_probe, |
301 | .remove = __devexit_p(ndfc_remove), | 302 | .remove = __devexit_p(ndfc_remove), |
302 | }; | 303 | }; |
diff --git a/drivers/mtd/nand/pasemi_nand.c b/drivers/mtd/nand/pasemi_nand.c index 090a05c12cbe..f02af24d033a 100644 --- a/drivers/mtd/nand/pasemi_nand.c +++ b/drivers/mtd/nand/pasemi_nand.c | |||
@@ -93,7 +93,7 @@ static int __devinit pasemi_nand_probe(struct of_device *ofdev, | |||
93 | const struct of_device_id *match) | 93 | const struct of_device_id *match) |
94 | { | 94 | { |
95 | struct pci_dev *pdev; | 95 | struct pci_dev *pdev; |
96 | struct device_node *np = ofdev->node; | 96 | struct device_node *np = ofdev->dev.of_node; |
97 | struct resource res; | 97 | struct resource res; |
98 | struct nand_chip *chip; | 98 | struct nand_chip *chip; |
99 | int err = 0; | 99 | int err = 0; |
@@ -221,8 +221,11 @@ MODULE_DEVICE_TABLE(of, pasemi_nand_match); | |||
221 | 221 | ||
222 | static struct of_platform_driver pasemi_nand_driver = | 222 | static struct of_platform_driver pasemi_nand_driver = |
223 | { | 223 | { |
224 | .name = (char*)driver_name, | 224 | .driver = { |
225 | .match_table = pasemi_nand_match, | 225 | .name = (char*)driver_name, |
226 | .owner = THIS_MODULE, | ||
227 | .of_match_table = pasemi_nand_match, | ||
228 | }, | ||
226 | .probe = pasemi_nand_probe, | 229 | .probe = pasemi_nand_probe, |
227 | .remove = pasemi_nand_remove, | 230 | .remove = pasemi_nand_remove, |
228 | }; | 231 | }; |
diff --git a/drivers/mtd/nand/r852.c b/drivers/mtd/nand/r852.c index 78a423295474..bcfc851fe550 100644 --- a/drivers/mtd/nand/r852.c +++ b/drivers/mtd/nand/r852.c | |||
@@ -150,7 +150,6 @@ static void r852_dma_done(struct r852_device *dev, int error) | |||
150 | if (dev->phys_dma_addr && dev->phys_dma_addr != dev->phys_bounce_buffer) | 150 | if (dev->phys_dma_addr && dev->phys_dma_addr != dev->phys_bounce_buffer) |
151 | pci_unmap_single(dev->pci_dev, dev->phys_dma_addr, R852_DMA_LEN, | 151 | pci_unmap_single(dev->pci_dev, dev->phys_dma_addr, R852_DMA_LEN, |
152 | dev->dma_dir ? PCI_DMA_FROMDEVICE : PCI_DMA_TODEVICE); | 152 | dev->dma_dir ? PCI_DMA_FROMDEVICE : PCI_DMA_TODEVICE); |
153 | complete(&dev->dma_done); | ||
154 | } | 153 | } |
155 | 154 | ||
156 | /* | 155 | /* |
@@ -182,6 +181,7 @@ static void r852_do_dma(struct r852_device *dev, uint8_t *buf, int do_read) | |||
182 | /* Set dma direction */ | 181 | /* Set dma direction */ |
183 | dev->dma_dir = do_read; | 182 | dev->dma_dir = do_read; |
184 | dev->dma_stage = 1; | 183 | dev->dma_stage = 1; |
184 | INIT_COMPLETION(dev->dma_done); | ||
185 | 185 | ||
186 | dbg_verbose("doing dma %s ", do_read ? "read" : "write"); | 186 | dbg_verbose("doing dma %s ", do_read ? "read" : "write"); |
187 | 187 | ||
@@ -494,6 +494,11 @@ int r852_ecc_correct(struct mtd_info *mtd, uint8_t *dat, | |||
494 | if (dev->card_unstable) | 494 | if (dev->card_unstable) |
495 | return 0; | 495 | return 0; |
496 | 496 | ||
497 | if (dev->dma_error) { | ||
498 | dev->dma_error = 0; | ||
499 | return -1; | ||
500 | } | ||
501 | |||
497 | r852_write_reg(dev, R852_CTL, dev->ctlreg | R852_CTL_ECC_ACCESS); | 502 | r852_write_reg(dev, R852_CTL, dev->ctlreg | R852_CTL_ECC_ACCESS); |
498 | ecc_reg = r852_read_reg_dword(dev, R852_DATALINE); | 503 | ecc_reg = r852_read_reg_dword(dev, R852_DATALINE); |
499 | r852_write_reg(dev, R852_CTL, dev->ctlreg); | 504 | r852_write_reg(dev, R852_CTL, dev->ctlreg); |
@@ -707,6 +712,7 @@ void r852_card_detect_work(struct work_struct *work) | |||
707 | container_of(work, struct r852_device, card_detect_work.work); | 712 | container_of(work, struct r852_device, card_detect_work.work); |
708 | 713 | ||
709 | r852_card_update_present(dev); | 714 | r852_card_update_present(dev); |
715 | r852_update_card_detect(dev); | ||
710 | dev->card_unstable = 0; | 716 | dev->card_unstable = 0; |
711 | 717 | ||
712 | /* False alarm */ | 718 | /* False alarm */ |
@@ -722,7 +728,6 @@ void r852_card_detect_work(struct work_struct *work) | |||
722 | else | 728 | else |
723 | r852_unregister_nand_device(dev); | 729 | r852_unregister_nand_device(dev); |
724 | exit: | 730 | exit: |
725 | /* Update detection logic */ | ||
726 | r852_update_card_detect(dev); | 731 | r852_update_card_detect(dev); |
727 | } | 732 | } |
728 | 733 | ||
@@ -796,6 +801,7 @@ static irqreturn_t r852_irq(int irq, void *data) | |||
796 | if (dma_status & R852_DMA_IRQ_ERROR) { | 801 | if (dma_status & R852_DMA_IRQ_ERROR) { |
797 | dbg("recieved dma error IRQ"); | 802 | dbg("recieved dma error IRQ"); |
798 | r852_dma_done(dev, -EIO); | 803 | r852_dma_done(dev, -EIO); |
804 | complete(&dev->dma_done); | ||
799 | goto out; | 805 | goto out; |
800 | } | 806 | } |
801 | 807 | ||
@@ -825,8 +831,10 @@ static irqreturn_t r852_irq(int irq, void *data) | |||
825 | r852_dma_enable(dev); | 831 | r852_dma_enable(dev); |
826 | 832 | ||
827 | /* Operation done */ | 833 | /* Operation done */ |
828 | if (dev->dma_stage == 3) | 834 | if (dev->dma_stage == 3) { |
829 | r852_dma_done(dev, 0); | 835 | r852_dma_done(dev, 0); |
836 | complete(&dev->dma_done); | ||
837 | } | ||
830 | goto out; | 838 | goto out; |
831 | } | 839 | } |
832 | 840 | ||
@@ -940,18 +948,19 @@ int r852_probe(struct pci_dev *pci_dev, const struct pci_device_id *id) | |||
940 | 948 | ||
941 | r852_dma_test(dev); | 949 | r852_dma_test(dev); |
942 | 950 | ||
951 | dev->irq = pci_dev->irq; | ||
952 | spin_lock_init(&dev->irqlock); | ||
953 | |||
954 | dev->card_detected = 0; | ||
955 | r852_card_update_present(dev); | ||
956 | |||
943 | /*register irq handler*/ | 957 | /*register irq handler*/ |
944 | error = -ENODEV; | 958 | error = -ENODEV; |
945 | if (request_irq(pci_dev->irq, &r852_irq, IRQF_SHARED, | 959 | if (request_irq(pci_dev->irq, &r852_irq, IRQF_SHARED, |
946 | DRV_NAME, dev)) | 960 | DRV_NAME, dev)) |
947 | goto error10; | 961 | goto error10; |
948 | 962 | ||
949 | dev->irq = pci_dev->irq; | ||
950 | spin_lock_init(&dev->irqlock); | ||
951 | |||
952 | /* kick initial present test */ | 963 | /* kick initial present test */ |
953 | dev->card_detected = 0; | ||
954 | r852_card_update_present(dev); | ||
955 | queue_delayed_work(dev->card_workqueue, | 964 | queue_delayed_work(dev->card_workqueue, |
956 | &dev->card_detect_work, 0); | 965 | &dev->card_detect_work, 0); |
957 | 966 | ||
@@ -1081,7 +1090,7 @@ int r852_resume(struct device *device) | |||
1081 | dev->card_detected ? "added" : "removed"); | 1090 | dev->card_detected ? "added" : "removed"); |
1082 | 1091 | ||
1083 | queue_delayed_work(dev->card_workqueue, | 1092 | queue_delayed_work(dev->card_workqueue, |
1084 | &dev->card_detect_work, 1000); | 1093 | &dev->card_detect_work, msecs_to_jiffies(1000)); |
1085 | return 0; | 1094 | return 0; |
1086 | } | 1095 | } |
1087 | 1096 | ||
diff --git a/drivers/mtd/nand/socrates_nand.c b/drivers/mtd/nand/socrates_nand.c index b37cbde6e7db..cc728b12de82 100644 --- a/drivers/mtd/nand/socrates_nand.c +++ b/drivers/mtd/nand/socrates_nand.c | |||
@@ -183,7 +183,7 @@ static int __devinit socrates_nand_probe(struct of_device *ofdev, | |||
183 | return -ENOMEM; | 183 | return -ENOMEM; |
184 | } | 184 | } |
185 | 185 | ||
186 | host->io_base = of_iomap(ofdev->node, 0); | 186 | host->io_base = of_iomap(ofdev->dev.of_node, 0); |
187 | if (host->io_base == NULL) { | 187 | if (host->io_base == NULL) { |
188 | printk(KERN_ERR "socrates_nand: ioremap failed\n"); | 188 | printk(KERN_ERR "socrates_nand: ioremap failed\n"); |
189 | kfree(host); | 189 | kfree(host); |
@@ -244,7 +244,7 @@ static int __devinit socrates_nand_probe(struct of_device *ofdev, | |||
244 | #ifdef CONFIG_MTD_OF_PARTS | 244 | #ifdef CONFIG_MTD_OF_PARTS |
245 | if (num_partitions == 0) { | 245 | if (num_partitions == 0) { |
246 | num_partitions = of_mtd_parse_partitions(&ofdev->dev, | 246 | num_partitions = of_mtd_parse_partitions(&ofdev->dev, |
247 | ofdev->node, | 247 | ofdev->dev.of_node, |
248 | &partitions); | 248 | &partitions); |
249 | if (num_partitions < 0) { | 249 | if (num_partitions < 0) { |
250 | res = num_partitions; | 250 | res = num_partitions; |
@@ -301,8 +301,11 @@ static const struct of_device_id socrates_nand_match[] = | |||
301 | MODULE_DEVICE_TABLE(of, socrates_nand_match); | 301 | MODULE_DEVICE_TABLE(of, socrates_nand_match); |
302 | 302 | ||
303 | static struct of_platform_driver socrates_nand_driver = { | 303 | static struct of_platform_driver socrates_nand_driver = { |
304 | .name = "socrates_nand", | 304 | .driver = { |
305 | .match_table = socrates_nand_match, | 305 | .name = "socrates_nand", |
306 | .owner = THIS_MODULE, | ||
307 | .of_match_table = socrates_nand_match, | ||
308 | }, | ||
306 | .probe = socrates_nand_probe, | 309 | .probe = socrates_nand_probe, |
307 | .remove = __devexit_p(socrates_nand_remove), | 310 | .remove = __devexit_p(socrates_nand_remove), |
308 | }; | 311 | }; |
diff --git a/drivers/mtd/ubi/cdev.c b/drivers/mtd/ubi/cdev.c index 72ebb3f06b86..4dfa6b90c21c 100644 --- a/drivers/mtd/ubi/cdev.c +++ b/drivers/mtd/ubi/cdev.c | |||
@@ -189,8 +189,7 @@ static loff_t vol_cdev_llseek(struct file *file, loff_t offset, int origin) | |||
189 | return new_offset; | 189 | return new_offset; |
190 | } | 190 | } |
191 | 191 | ||
192 | static int vol_cdev_fsync(struct file *file, struct dentry *dentry, | 192 | static int vol_cdev_fsync(struct file *file, int datasync) |
193 | int datasync) | ||
194 | { | 193 | { |
195 | struct ubi_volume_desc *desc = file->private_data; | 194 | struct ubi_volume_desc *desc = file->private_data; |
196 | struct ubi_device *ubi = desc->vol->ubi; | 195 | struct ubi_device *ubi = desc->vol->ubi; |