diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2016-01-13 22:25:54 +0300 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-01-13 22:25:54 +0300 | 
| commit | ac53b2e053fffc74372da94e734b92f37e70d32c (patch) | |
| tree | cda82af0fcded5d230e9f56104d3988b7a75c8aa /drivers/mtd/nand/gpio.c | |
| parent | cf09112d160e6db21ff8427ce696f819b957423b (diff) | |
| parent | 9146cbd52b11d4ade62dba8f238ec5e421c3fa2b (diff) | |
| download | linux-ac53b2e053fffc74372da94e734b92f37e70d32c.tar.xz | |
Merge tag 'for-linus-20160112' of git://git.infradead.org/linux-mtd
Pull MTD updates from Brian Norris:
 "Generic MTD:
   - populate the MTD device 'of_node' field (and get a proper 'of_node'
     symlink in sysfs)
     This yielded some new helper functions, and changes across a
     variety of drivers
   - partitioning cleanups, to prepare for better device-tree based
     partitioning in the future
     Eliminate a lot of boilerplate for drivers that want to use
     OF-based partition parsing
     The DT bindings for this didn't settle yet, so most non-cleanup
     portions are deferred for a future release
  NAND:
   - embed a struct mtd_info inside struct nand_chip
     This is really long overdue; too many drivers have to do the same
     silly boilerplate to allocate and link up two "independent"
     structs, when in fact, everyone is assuming there is an exact 1:1
     relationship between a NAND chips struct and its underlying MTD.
     This aids improved helpers and should make certain abstractions
     easier in the future.
     Also causes a lot of churn, helped along by some automated code
     transformations
   - add more core support for detecting (and "correcting") bitflips in
     erased pages; requires opt-in by drivers, but at least we kill a
     few bad implementations and hopefully stave off future ones
   - pxa3xx_nand: cleanups, a few fixes, and PM improvements
   - new JZ4780 NAND driver
  SPI NOR:
   - provide default erase function, for controllers that just want to
     send the SECTOR_ERASE command directly
   - fix some module auto-loading issues with device tree
     ("jedec,spi-nor")
   - error handling fixes
   - new Mediatek QSPI flash driver
  Other:
   - cfi: force valid geometry Kconfig (finally!)
     This one used to trip up randconfigs occasionally, since bots
     aren't deterred by big scary "advanced configuration" menus
  More? Probably. See the commit logs"
* tag 'for-linus-20160112' of git://git.infradead.org/linux-mtd: (168 commits)
  mtd: jz4780_nand: replace if/else blocks with switch/case
  mtd: nand: jz4780: Update ecc correction error codes
  mtd: nandsim: use nand_get_controller_data()
  mtd: jz4780_nand: remove useless mtd->priv = chip assignment
  staging: mt29f_spinand: make use of nand_set/get_controller_data() helpers
  mtd: nand: make use of nand_set/get_controller_data() helpers
  ARM: make use of nand_set/get_controller_data() helpers
  mtd: nand: add helpers to access ->priv
  mtd: nand: jz4780: driver for NAND devices on JZ4780 SoCs
  mtd: nand: jz4740: remove custom 'erased check' implementation
  mtd: nand: diskonchip: remove custom 'erased check' implementation
  mtd: nand: davinci: remove custom 'erased check' implementation
  mtd: nand: use nand_check_erased_ecc_chunk in default ECC read functions
  mtd: nand: return consistent error codes in ecc.correct() implementations
  doc: dt: mtd: new binding for jz4780-{nand,bch}
  mtd: cfi_cmdset_0001: fixing memory leak and handling failed kmalloc
  mtd: spi-nor: wait until lock/unlock operations are ready
  mtd: tests: consolidate kmalloc/memset 0 call to kzalloc
  jffs2: use to_delayed_work
  mtd: nand: assign reasonable default name for NAND drivers
  ...
Diffstat (limited to 'drivers/mtd/nand/gpio.c')
| -rw-r--r-- | drivers/mtd/nand/gpio.c | 26 | 
1 files changed, 13 insertions, 13 deletions
| diff --git a/drivers/mtd/nand/gpio.c b/drivers/mtd/nand/gpio.c index 9ab97f934c37..ded658fc7d73 100644 --- a/drivers/mtd/nand/gpio.c +++ b/drivers/mtd/nand/gpio.c @@ -35,12 +35,14 @@  struct gpiomtd {  	void __iomem		*io_sync; -	struct mtd_info		mtd_info;  	struct nand_chip	nand_chip;  	struct gpio_nand_platdata plat;  }; -#define gpio_nand_getpriv(x) container_of(x, struct gpiomtd, mtd_info) +static inline struct gpiomtd *gpio_nand_getpriv(struct mtd_info *mtd) +{ +	return container_of(mtd_to_nand(mtd), struct gpiomtd, nand_chip); +}  #ifdef CONFIG_ARM @@ -195,7 +197,7 @@ static int gpio_nand_remove(struct platform_device *pdev)  {  	struct gpiomtd *gpiomtd = platform_get_drvdata(pdev); -	nand_release(&gpiomtd->mtd_info); +	nand_release(nand_to_mtd(&gpiomtd->nand_chip));  	if (gpio_is_valid(gpiomtd->plat.gpio_nwp))  		gpio_set_value(gpiomtd->plat.gpio_nwp, 0); @@ -208,8 +210,8 @@ static int gpio_nand_probe(struct platform_device *pdev)  {  	struct gpiomtd *gpiomtd;  	struct nand_chip *chip; +	struct mtd_info *mtd;  	struct resource *res; -	struct mtd_part_parser_data ppdata = {};  	int ret = 0;  	if (!pdev->dev.of_node && !dev_get_platdata(&pdev->dev)) @@ -268,33 +270,31 @@ static int gpio_nand_probe(struct platform_device *pdev)  		chip->dev_ready = gpio_nand_devready;  	} +	nand_set_flash_node(chip, pdev->dev.of_node);  	chip->IO_ADDR_W		= chip->IO_ADDR_R;  	chip->ecc.mode		= NAND_ECC_SOFT;  	chip->options		= gpiomtd->plat.options;  	chip->chip_delay	= gpiomtd->plat.chip_delay;  	chip->cmd_ctrl		= gpio_nand_cmd_ctrl; -	gpiomtd->mtd_info.priv	= chip; -	gpiomtd->mtd_info.dev.parent = &pdev->dev; +	mtd			= nand_to_mtd(chip); +	mtd->dev.parent		= &pdev->dev;  	platform_set_drvdata(pdev, gpiomtd);  	if (gpio_is_valid(gpiomtd->plat.gpio_nwp))  		gpio_direction_output(gpiomtd->plat.gpio_nwp, 1); -	if (nand_scan(&gpiomtd->mtd_info, 1)) { +	if (nand_scan(mtd, 1)) {  		ret = -ENXIO;  		goto err_wp;  	}  	if (gpiomtd->plat.adjust_parts) -		gpiomtd->plat.adjust_parts(&gpiomtd->plat, -					   gpiomtd->mtd_info.size); +		gpiomtd->plat.adjust_parts(&gpiomtd->plat, mtd->size); -	ppdata.of_node = pdev->dev.of_node; -	ret = mtd_device_parse_register(&gpiomtd->mtd_info, NULL, &ppdata, -					gpiomtd->plat.parts, -					gpiomtd->plat.num_parts); +	ret = mtd_device_register(mtd, gpiomtd->plat.parts, +				  gpiomtd->plat.num_parts);  	if (!ret)  		return 0; | 
