diff options
Diffstat (limited to 'drivers/mtd/nand/fsl_upm.c')
| -rw-r--r-- | drivers/mtd/nand/fsl_upm.c | 54 | 
1 files changed, 14 insertions, 40 deletions
diff --git a/drivers/mtd/nand/fsl_upm.c b/drivers/mtd/nand/fsl_upm.c index efdcca94ce5..4d203e84e8c 100644 --- a/drivers/mtd/nand/fsl_upm.c +++ b/drivers/mtd/nand/fsl_upm.c @@ -18,6 +18,7 @@  #include <linux/mtd/nand_ecc.h>  #include <linux/mtd/partitions.h>  #include <linux/mtd/mtd.h> +#include <linux/of_address.h>  #include <linux/of_platform.h>  #include <linux/of_gpio.h>  #include <linux/io.h> @@ -33,10 +34,7 @@ struct fsl_upm_nand {  	struct mtd_info mtd;  	struct nand_chip chip;  	int last_ctrl; -#ifdef CONFIG_MTD_PARTITIONS  	struct mtd_partition *parts; -#endif -  	struct fsl_upm upm;  	uint8_t upm_addr_offset;  	uint8_t upm_cmd_offset; @@ -155,15 +153,13 @@ static void fun_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len)  		fun_wait_rnb(fun);  } -static int __devinit fun_chip_init(struct fsl_upm_nand *fun, -				   const struct device_node *upm_np, -				   const struct resource *io_res) +static int fun_chip_init(struct fsl_upm_nand *fun, +			 const struct device_node *upm_np, +			 const struct resource *io_res)  {  	int ret;  	struct device_node *flash_np; -#ifdef CONFIG_MTD_PARTITIONS -	static const char *part_types[] = { "cmdlinepart", NULL, }; -#endif +	struct mtd_part_parser_data ppdata;  	fun->chip.IO_ADDR_R = fun->io_base;  	fun->chip.IO_ADDR_W = fun->io_base; @@ -197,28 +193,16 @@ static int __devinit fun_chip_init(struct fsl_upm_nand *fun,  	if (ret)  		goto err; -#ifdef CONFIG_MTD_PARTITIONS -	ret = parse_mtd_partitions(&fun->mtd, part_types, &fun->parts, 0); - -#ifdef CONFIG_MTD_OF_PARTS -	if (ret == 0) { -		ret = of_mtd_parse_partitions(fun->dev, flash_np, &fun->parts); -		if (ret < 0) -			goto err; -	} -#endif -	if (ret > 0) -		ret = add_mtd_partitions(&fun->mtd, fun->parts, ret); -	else -#endif -		ret = add_mtd_device(&fun->mtd); +	ppdata.of_node = flash_np; +	ret = mtd_device_parse_register(&fun->mtd, NULL, &ppdata, NULL, 0);  err:  	of_node_put(flash_np); +	if (ret) +		kfree(fun->mtd.name);  	return ret;  } -static int __devinit fun_probe(struct platform_device *ofdev, -			       const struct of_device_id *ofid) +static int fun_probe(struct platform_device *ofdev)  {  	struct fsl_upm_nand *fun;  	struct resource io_res; @@ -335,7 +319,7 @@ err1:  	return ret;  } -static int __devexit fun_remove(struct platform_device *ofdev) +static int fun_remove(struct platform_device *ofdev)  {  	struct fsl_upm_nand *fun = dev_get_drvdata(&ofdev->dev);  	int i; @@ -360,27 +344,17 @@ static const struct of_device_id of_fun_match[] = {  };  MODULE_DEVICE_TABLE(of, of_fun_match); -static struct of_platform_driver of_fun_driver = { +static struct platform_driver of_fun_driver = {  	.driver = {  		.name = "fsl,upm-nand",  		.owner = THIS_MODULE,  		.of_match_table = of_fun_match,  	},  	.probe		= fun_probe, -	.remove		= __devexit_p(fun_remove), +	.remove		= fun_remove,  }; -static int __init fun_module_init(void) -{ -	return of_register_platform_driver(&of_fun_driver); -} -module_init(fun_module_init); - -static void __exit fun_module_exit(void) -{ -	of_unregister_platform_driver(&of_fun_driver); -} -module_exit(fun_module_exit); +module_platform_driver(of_fun_driver);  MODULE_LICENSE("GPL");  MODULE_AUTHOR("Anton Vorontsov <avorontsov@ru.mvista.com>");  | 
