From: Boris Brezillon <boris.brezillon@collabora.com> To: Arnd Bergmann <arnd@arndb.de> Cc: soc@kernel.org, Vignesh Raghavendra <vigneshr@ti.com>, Richard Weinberger <richard@nod.at>, linux-kernel@vger.kernel.org, Marek Vasut <marek.vasut@gmail.com>, linux-mtd@lists.infradead.org, Miquel Raynal <miquel.raynal@bootlin.com>, Brian Norris <computersforpeace@gmail.com>, David Woodhouse <dwmw2@infradead.org> Subject: Re: [PATCH 12/16] mtd: rawnand: remove w90x900 driver Date: Sat, 10 Aug 2019 10:21:21 +0200 [thread overview] Message-ID: <20190810102121.07bf8c37@collabora.com> (raw) In-Reply-To: <20190809202749.742267-13-arnd@arndb.de> On Fri, 9 Aug 2019 22:27:40 +0200 Arnd Bergmann <arnd@arndb.de> wrote: > The ARM w90x900 platform is getting removed, so this driver is obsolete. > > Signed-off-by: Arnd Bergmann <arnd@arndb.de> One less driver to convert to ->exec_op(), Yay! Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> > --- > drivers/mtd/nand/raw/Kconfig | 8 - > drivers/mtd/nand/raw/Makefile | 1 - > drivers/mtd/nand/raw/nuc900_nand.c | 304 ----------------------------- > 3 files changed, 313 deletions(-) > delete mode 100644 drivers/mtd/nand/raw/nuc900_nand.c > > diff --git a/drivers/mtd/nand/raw/Kconfig b/drivers/mtd/nand/raw/Kconfig > index 5a711d8beaca..0e5c5e02ee6f 100644 > --- a/drivers/mtd/nand/raw/Kconfig > +++ b/drivers/mtd/nand/raw/Kconfig > @@ -351,14 +351,6 @@ config MTD_NAND_SOCRATES > help > Enables support for NAND Flash chips wired onto Socrates board. > > -config MTD_NAND_NUC900 > - tristate "Nuvoton NUC9xx/w90p910 NAND controller" > - depends on ARCH_W90X900 || COMPILE_TEST > - depends on HAS_IOMEM > - help > - This enables the driver for the NAND Flash on evaluation board based > - on w90p910 / NUC9xx. > - > source "drivers/mtd/nand/raw/ingenic/Kconfig" > > config MTD_NAND_FSMC > diff --git a/drivers/mtd/nand/raw/Makefile b/drivers/mtd/nand/raw/Makefile > index efaf5cd25edc..d7f6c237e37c 100644 > --- a/drivers/mtd/nand/raw/Makefile > +++ b/drivers/mtd/nand/raw/Makefile > @@ -41,7 +41,6 @@ obj-$(CONFIG_MTD_NAND_SH_FLCTL) += sh_flctl.o > obj-$(CONFIG_MTD_NAND_MXC) += mxc_nand.o > obj-$(CONFIG_MTD_NAND_SOCRATES) += socrates_nand.o > obj-$(CONFIG_MTD_NAND_TXX9NDFMC) += txx9ndfmc.o > -obj-$(CONFIG_MTD_NAND_NUC900) += nuc900_nand.o > obj-$(CONFIG_MTD_NAND_MPC5121_NFC) += mpc5121_nfc.o > obj-$(CONFIG_MTD_NAND_VF610_NFC) += vf610_nfc.o > obj-$(CONFIG_MTD_NAND_RICOH) += r852.o > diff --git a/drivers/mtd/nand/raw/nuc900_nand.c b/drivers/mtd/nand/raw/nuc900_nand.c > deleted file mode 100644 > index 13bf7b2894d3..000000000000 > --- a/drivers/mtd/nand/raw/nuc900_nand.c > +++ /dev/null > @@ -1,304 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0-only > -/* > - * Copyright © 2009 Nuvoton technology corporation. > - * > - * Wan ZongShun <mcuos.com@gmail.com> > - */ > - > -#include <linux/slab.h> > -#include <linux/module.h> > -#include <linux/interrupt.h> > -#include <linux/io.h> > -#include <linux/platform_device.h> > -#include <linux/delay.h> > -#include <linux/clk.h> > -#include <linux/err.h> > - > -#include <linux/mtd/mtd.h> > -#include <linux/mtd/rawnand.h> > -#include <linux/mtd/partitions.h> > - > -#define REG_FMICSR 0x00 > -#define REG_SMCSR 0xa0 > -#define REG_SMISR 0xac > -#define REG_SMCMD 0xb0 > -#define REG_SMADDR 0xb4 > -#define REG_SMDATA 0xb8 > - > -#define RESET_FMI 0x01 > -#define NAND_EN 0x08 > -#define READYBUSY (0x01 << 18) > - > -#define SWRST 0x01 > -#define PSIZE (0x01 << 3) > -#define DMARWEN (0x03 << 1) > -#define BUSWID (0x01 << 4) > -#define ECC4EN (0x01 << 5) > -#define WP (0x01 << 24) > -#define NANDCS (0x01 << 25) > -#define ENDADDR (0x01 << 31) > - > -#define read_data_reg(dev) \ > - __raw_readl((dev)->reg + REG_SMDATA) > - > -#define write_data_reg(dev, val) \ > - __raw_writel((val), (dev)->reg + REG_SMDATA) > - > -#define write_cmd_reg(dev, val) \ > - __raw_writel((val), (dev)->reg + REG_SMCMD) > - > -#define write_addr_reg(dev, val) \ > - __raw_writel((val), (dev)->reg + REG_SMADDR) > - > -struct nuc900_nand { > - struct nand_chip chip; > - void __iomem *reg; > - struct clk *clk; > - spinlock_t lock; > -}; > - > -static inline struct nuc900_nand *mtd_to_nuc900(struct mtd_info *mtd) > -{ > - return container_of(mtd_to_nand(mtd), struct nuc900_nand, chip); > -} > - > -static const struct mtd_partition partitions[] = { > - { > - .name = "NAND FS 0", > - .offset = 0, > - .size = 8 * 1024 * 1024 > - }, > - { > - .name = "NAND FS 1", > - .offset = MTDPART_OFS_APPEND, > - .size = MTDPART_SIZ_FULL > - } > -}; > - > -static unsigned char nuc900_nand_read_byte(struct nand_chip *chip) > -{ > - unsigned char ret; > - struct nuc900_nand *nand = mtd_to_nuc900(nand_to_mtd(chip)); > - > - ret = (unsigned char)read_data_reg(nand); > - > - return ret; > -} > - > -static void nuc900_nand_read_buf(struct nand_chip *chip, > - unsigned char *buf, int len) > -{ > - int i; > - struct nuc900_nand *nand = mtd_to_nuc900(nand_to_mtd(chip)); > - > - for (i = 0; i < len; i++) > - buf[i] = (unsigned char)read_data_reg(nand); > -} > - > -static void nuc900_nand_write_buf(struct nand_chip *chip, > - const unsigned char *buf, int len) > -{ > - int i; > - struct nuc900_nand *nand = mtd_to_nuc900(nand_to_mtd(chip)); > - > - for (i = 0; i < len; i++) > - write_data_reg(nand, buf[i]); > -} > - > -static int nuc900_check_rb(struct nuc900_nand *nand) > -{ > - unsigned int val; > - spin_lock(&nand->lock); > - val = __raw_readl(nand->reg + REG_SMISR); > - val &= READYBUSY; > - spin_unlock(&nand->lock); > - > - return val; > -} > - > -static int nuc900_nand_devready(struct nand_chip *chip) > -{ > - struct nuc900_nand *nand = mtd_to_nuc900(nand_to_mtd(chip)); > - int ready; > - > - ready = (nuc900_check_rb(nand)) ? 1 : 0; > - return ready; > -} > - > -static void nuc900_nand_command_lp(struct nand_chip *chip, > - unsigned int command, > - int column, int page_addr) > -{ > - struct mtd_info *mtd = nand_to_mtd(chip); > - struct nuc900_nand *nand = mtd_to_nuc900(mtd); > - > - if (command == NAND_CMD_READOOB) { > - column += mtd->writesize; > - command = NAND_CMD_READ0; > - } > - > - write_cmd_reg(nand, command & 0xff); > - > - if (column != -1 || page_addr != -1) { > - > - if (column != -1) { > - if (chip->options & NAND_BUSWIDTH_16 && > - !nand_opcode_8bits(command)) > - column >>= 1; > - write_addr_reg(nand, column); > - write_addr_reg(nand, column >> 8 | ENDADDR); > - } > - if (page_addr != -1) { > - write_addr_reg(nand, page_addr); > - > - if (chip->options & NAND_ROW_ADDR_3) { > - write_addr_reg(nand, page_addr >> 8); > - write_addr_reg(nand, page_addr >> 16 | ENDADDR); > - } else { > - write_addr_reg(nand, page_addr >> 8 | ENDADDR); > - } > - } > - } > - > - switch (command) { > - case NAND_CMD_CACHEDPROG: > - case NAND_CMD_PAGEPROG: > - case NAND_CMD_ERASE1: > - case NAND_CMD_ERASE2: > - case NAND_CMD_SEQIN: > - case NAND_CMD_RNDIN: > - case NAND_CMD_STATUS: > - return; > - > - case NAND_CMD_RESET: > - if (chip->legacy.dev_ready) > - break; > - udelay(chip->legacy.chip_delay); > - > - write_cmd_reg(nand, NAND_CMD_STATUS); > - write_cmd_reg(nand, command); > - > - while (!nuc900_check_rb(nand)) > - ; > - > - return; > - > - case NAND_CMD_RNDOUT: > - write_cmd_reg(nand, NAND_CMD_RNDOUTSTART); > - return; > - > - case NAND_CMD_READ0: > - write_cmd_reg(nand, NAND_CMD_READSTART); > - /* fall through */ > - > - default: > - > - if (!chip->legacy.dev_ready) { > - udelay(chip->legacy.chip_delay); > - return; > - } > - } > - > - /* Apply this short delay always to ensure that we do wait tWB in > - * any case on any machine. */ > - ndelay(100); > - > - while (!chip->legacy.dev_ready(chip)) > - ; > -} > - > - > -static void nuc900_nand_enable(struct nuc900_nand *nand) > -{ > - unsigned int val; > - spin_lock(&nand->lock); > - __raw_writel(RESET_FMI, (nand->reg + REG_FMICSR)); > - > - val = __raw_readl(nand->reg + REG_FMICSR); > - > - if (!(val & NAND_EN)) > - __raw_writel(val | NAND_EN, nand->reg + REG_FMICSR); > - > - val = __raw_readl(nand->reg + REG_SMCSR); > - > - val &= ~(SWRST|PSIZE|DMARWEN|BUSWID|ECC4EN|NANDCS); > - val |= WP; > - > - __raw_writel(val, nand->reg + REG_SMCSR); > - > - spin_unlock(&nand->lock); > -} > - > -static int nuc900_nand_probe(struct platform_device *pdev) > -{ > - struct nuc900_nand *nuc900_nand; > - struct nand_chip *chip; > - struct mtd_info *mtd; > - struct resource *res; > - > - nuc900_nand = devm_kzalloc(&pdev->dev, sizeof(struct nuc900_nand), > - GFP_KERNEL); > - if (!nuc900_nand) > - return -ENOMEM; > - chip = &(nuc900_nand->chip); > - mtd = nand_to_mtd(chip); > - > - mtd->dev.parent = &pdev->dev; > - spin_lock_init(&nuc900_nand->lock); > - > - nuc900_nand->clk = devm_clk_get(&pdev->dev, NULL); > - if (IS_ERR(nuc900_nand->clk)) > - return -ENOENT; > - clk_enable(nuc900_nand->clk); > - > - chip->legacy.cmdfunc = nuc900_nand_command_lp; > - chip->legacy.dev_ready = nuc900_nand_devready; > - chip->legacy.read_byte = nuc900_nand_read_byte; > - chip->legacy.write_buf = nuc900_nand_write_buf; > - chip->legacy.read_buf = nuc900_nand_read_buf; > - chip->legacy.chip_delay = 50; > - chip->options = 0; > - chip->ecc.mode = NAND_ECC_SOFT; > - chip->ecc.algo = NAND_ECC_HAMMING; > - > - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); > - nuc900_nand->reg = devm_ioremap_resource(&pdev->dev, res); > - if (IS_ERR(nuc900_nand->reg)) > - return PTR_ERR(nuc900_nand->reg); > - > - nuc900_nand_enable(nuc900_nand); > - > - if (nand_scan(chip, 1)) > - return -ENXIO; > - > - mtd_device_register(mtd, partitions, ARRAY_SIZE(partitions)); > - > - platform_set_drvdata(pdev, nuc900_nand); > - > - return 0; > -} > - > -static int nuc900_nand_remove(struct platform_device *pdev) > -{ > - struct nuc900_nand *nuc900_nand = platform_get_drvdata(pdev); > - > - nand_release(&nuc900_nand->chip); > - clk_disable(nuc900_nand->clk); > - > - return 0; > -} > - > -static struct platform_driver nuc900_nand_driver = { > - .probe = nuc900_nand_probe, > - .remove = nuc900_nand_remove, > - .driver = { > - .name = "nuc900-fmi", > - }, > -}; > - > -module_platform_driver(nuc900_nand_driver); > - > -MODULE_AUTHOR("Wan ZongShun <mcuos.com@gmail.com>"); > -MODULE_DESCRIPTION("w90p910/NUC9xx nand driver!"); > -MODULE_LICENSE("GPL"); > -MODULE_ALIAS("platform:nuc900-fmi");
WARNING: multiple messages have this Message-ID (diff)
From: Boris Brezillon <boris.brezillon@collabora.com> To: Arnd Bergmann <arnd@arndb.de> Cc: Vignesh Raghavendra <vigneshr@ti.com>, Richard Weinberger <richard@nod.at>, linux-kernel@vger.kernel.org, Marek Vasut <marek.vasut@gmail.com>, soc@kernel.org, linux-mtd@lists.infradead.org, Miquel Raynal <miquel.raynal@bootlin.com>, Brian Norris <computersforpeace@gmail.com>, David Woodhouse <dwmw2@infradead.org> Subject: Re: [PATCH 12/16] mtd: rawnand: remove w90x900 driver Date: Sat, 10 Aug 2019 10:21:21 +0200 [thread overview] Message-ID: <20190810102121.07bf8c37@collabora.com> (raw) In-Reply-To: <20190809202749.742267-13-arnd@arndb.de> On Fri, 9 Aug 2019 22:27:40 +0200 Arnd Bergmann <arnd@arndb.de> wrote: > The ARM w90x900 platform is getting removed, so this driver is obsolete. > > Signed-off-by: Arnd Bergmann <arnd@arndb.de> One less driver to convert to ->exec_op(), Yay! Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> > --- > drivers/mtd/nand/raw/Kconfig | 8 - > drivers/mtd/nand/raw/Makefile | 1 - > drivers/mtd/nand/raw/nuc900_nand.c | 304 ----------------------------- > 3 files changed, 313 deletions(-) > delete mode 100644 drivers/mtd/nand/raw/nuc900_nand.c > > diff --git a/drivers/mtd/nand/raw/Kconfig b/drivers/mtd/nand/raw/Kconfig > index 5a711d8beaca..0e5c5e02ee6f 100644 > --- a/drivers/mtd/nand/raw/Kconfig > +++ b/drivers/mtd/nand/raw/Kconfig > @@ -351,14 +351,6 @@ config MTD_NAND_SOCRATES > help > Enables support for NAND Flash chips wired onto Socrates board. > > -config MTD_NAND_NUC900 > - tristate "Nuvoton NUC9xx/w90p910 NAND controller" > - depends on ARCH_W90X900 || COMPILE_TEST > - depends on HAS_IOMEM > - help > - This enables the driver for the NAND Flash on evaluation board based > - on w90p910 / NUC9xx. > - > source "drivers/mtd/nand/raw/ingenic/Kconfig" > > config MTD_NAND_FSMC > diff --git a/drivers/mtd/nand/raw/Makefile b/drivers/mtd/nand/raw/Makefile > index efaf5cd25edc..d7f6c237e37c 100644 > --- a/drivers/mtd/nand/raw/Makefile > +++ b/drivers/mtd/nand/raw/Makefile > @@ -41,7 +41,6 @@ obj-$(CONFIG_MTD_NAND_SH_FLCTL) += sh_flctl.o > obj-$(CONFIG_MTD_NAND_MXC) += mxc_nand.o > obj-$(CONFIG_MTD_NAND_SOCRATES) += socrates_nand.o > obj-$(CONFIG_MTD_NAND_TXX9NDFMC) += txx9ndfmc.o > -obj-$(CONFIG_MTD_NAND_NUC900) += nuc900_nand.o > obj-$(CONFIG_MTD_NAND_MPC5121_NFC) += mpc5121_nfc.o > obj-$(CONFIG_MTD_NAND_VF610_NFC) += vf610_nfc.o > obj-$(CONFIG_MTD_NAND_RICOH) += r852.o > diff --git a/drivers/mtd/nand/raw/nuc900_nand.c b/drivers/mtd/nand/raw/nuc900_nand.c > deleted file mode 100644 > index 13bf7b2894d3..000000000000 > --- a/drivers/mtd/nand/raw/nuc900_nand.c > +++ /dev/null > @@ -1,304 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0-only > -/* > - * Copyright © 2009 Nuvoton technology corporation. > - * > - * Wan ZongShun <mcuos.com@gmail.com> > - */ > - > -#include <linux/slab.h> > -#include <linux/module.h> > -#include <linux/interrupt.h> > -#include <linux/io.h> > -#include <linux/platform_device.h> > -#include <linux/delay.h> > -#include <linux/clk.h> > -#include <linux/err.h> > - > -#include <linux/mtd/mtd.h> > -#include <linux/mtd/rawnand.h> > -#include <linux/mtd/partitions.h> > - > -#define REG_FMICSR 0x00 > -#define REG_SMCSR 0xa0 > -#define REG_SMISR 0xac > -#define REG_SMCMD 0xb0 > -#define REG_SMADDR 0xb4 > -#define REG_SMDATA 0xb8 > - > -#define RESET_FMI 0x01 > -#define NAND_EN 0x08 > -#define READYBUSY (0x01 << 18) > - > -#define SWRST 0x01 > -#define PSIZE (0x01 << 3) > -#define DMARWEN (0x03 << 1) > -#define BUSWID (0x01 << 4) > -#define ECC4EN (0x01 << 5) > -#define WP (0x01 << 24) > -#define NANDCS (0x01 << 25) > -#define ENDADDR (0x01 << 31) > - > -#define read_data_reg(dev) \ > - __raw_readl((dev)->reg + REG_SMDATA) > - > -#define write_data_reg(dev, val) \ > - __raw_writel((val), (dev)->reg + REG_SMDATA) > - > -#define write_cmd_reg(dev, val) \ > - __raw_writel((val), (dev)->reg + REG_SMCMD) > - > -#define write_addr_reg(dev, val) \ > - __raw_writel((val), (dev)->reg + REG_SMADDR) > - > -struct nuc900_nand { > - struct nand_chip chip; > - void __iomem *reg; > - struct clk *clk; > - spinlock_t lock; > -}; > - > -static inline struct nuc900_nand *mtd_to_nuc900(struct mtd_info *mtd) > -{ > - return container_of(mtd_to_nand(mtd), struct nuc900_nand, chip); > -} > - > -static const struct mtd_partition partitions[] = { > - { > - .name = "NAND FS 0", > - .offset = 0, > - .size = 8 * 1024 * 1024 > - }, > - { > - .name = "NAND FS 1", > - .offset = MTDPART_OFS_APPEND, > - .size = MTDPART_SIZ_FULL > - } > -}; > - > -static unsigned char nuc900_nand_read_byte(struct nand_chip *chip) > -{ > - unsigned char ret; > - struct nuc900_nand *nand = mtd_to_nuc900(nand_to_mtd(chip)); > - > - ret = (unsigned char)read_data_reg(nand); > - > - return ret; > -} > - > -static void nuc900_nand_read_buf(struct nand_chip *chip, > - unsigned char *buf, int len) > -{ > - int i; > - struct nuc900_nand *nand = mtd_to_nuc900(nand_to_mtd(chip)); > - > - for (i = 0; i < len; i++) > - buf[i] = (unsigned char)read_data_reg(nand); > -} > - > -static void nuc900_nand_write_buf(struct nand_chip *chip, > - const unsigned char *buf, int len) > -{ > - int i; > - struct nuc900_nand *nand = mtd_to_nuc900(nand_to_mtd(chip)); > - > - for (i = 0; i < len; i++) > - write_data_reg(nand, buf[i]); > -} > - > -static int nuc900_check_rb(struct nuc900_nand *nand) > -{ > - unsigned int val; > - spin_lock(&nand->lock); > - val = __raw_readl(nand->reg + REG_SMISR); > - val &= READYBUSY; > - spin_unlock(&nand->lock); > - > - return val; > -} > - > -static int nuc900_nand_devready(struct nand_chip *chip) > -{ > - struct nuc900_nand *nand = mtd_to_nuc900(nand_to_mtd(chip)); > - int ready; > - > - ready = (nuc900_check_rb(nand)) ? 1 : 0; > - return ready; > -} > - > -static void nuc900_nand_command_lp(struct nand_chip *chip, > - unsigned int command, > - int column, int page_addr) > -{ > - struct mtd_info *mtd = nand_to_mtd(chip); > - struct nuc900_nand *nand = mtd_to_nuc900(mtd); > - > - if (command == NAND_CMD_READOOB) { > - column += mtd->writesize; > - command = NAND_CMD_READ0; > - } > - > - write_cmd_reg(nand, command & 0xff); > - > - if (column != -1 || page_addr != -1) { > - > - if (column != -1) { > - if (chip->options & NAND_BUSWIDTH_16 && > - !nand_opcode_8bits(command)) > - column >>= 1; > - write_addr_reg(nand, column); > - write_addr_reg(nand, column >> 8 | ENDADDR); > - } > - if (page_addr != -1) { > - write_addr_reg(nand, page_addr); > - > - if (chip->options & NAND_ROW_ADDR_3) { > - write_addr_reg(nand, page_addr >> 8); > - write_addr_reg(nand, page_addr >> 16 | ENDADDR); > - } else { > - write_addr_reg(nand, page_addr >> 8 | ENDADDR); > - } > - } > - } > - > - switch (command) { > - case NAND_CMD_CACHEDPROG: > - case NAND_CMD_PAGEPROG: > - case NAND_CMD_ERASE1: > - case NAND_CMD_ERASE2: > - case NAND_CMD_SEQIN: > - case NAND_CMD_RNDIN: > - case NAND_CMD_STATUS: > - return; > - > - case NAND_CMD_RESET: > - if (chip->legacy.dev_ready) > - break; > - udelay(chip->legacy.chip_delay); > - > - write_cmd_reg(nand, NAND_CMD_STATUS); > - write_cmd_reg(nand, command); > - > - while (!nuc900_check_rb(nand)) > - ; > - > - return; > - > - case NAND_CMD_RNDOUT: > - write_cmd_reg(nand, NAND_CMD_RNDOUTSTART); > - return; > - > - case NAND_CMD_READ0: > - write_cmd_reg(nand, NAND_CMD_READSTART); > - /* fall through */ > - > - default: > - > - if (!chip->legacy.dev_ready) { > - udelay(chip->legacy.chip_delay); > - return; > - } > - } > - > - /* Apply this short delay always to ensure that we do wait tWB in > - * any case on any machine. */ > - ndelay(100); > - > - while (!chip->legacy.dev_ready(chip)) > - ; > -} > - > - > -static void nuc900_nand_enable(struct nuc900_nand *nand) > -{ > - unsigned int val; > - spin_lock(&nand->lock); > - __raw_writel(RESET_FMI, (nand->reg + REG_FMICSR)); > - > - val = __raw_readl(nand->reg + REG_FMICSR); > - > - if (!(val & NAND_EN)) > - __raw_writel(val | NAND_EN, nand->reg + REG_FMICSR); > - > - val = __raw_readl(nand->reg + REG_SMCSR); > - > - val &= ~(SWRST|PSIZE|DMARWEN|BUSWID|ECC4EN|NANDCS); > - val |= WP; > - > - __raw_writel(val, nand->reg + REG_SMCSR); > - > - spin_unlock(&nand->lock); > -} > - > -static int nuc900_nand_probe(struct platform_device *pdev) > -{ > - struct nuc900_nand *nuc900_nand; > - struct nand_chip *chip; > - struct mtd_info *mtd; > - struct resource *res; > - > - nuc900_nand = devm_kzalloc(&pdev->dev, sizeof(struct nuc900_nand), > - GFP_KERNEL); > - if (!nuc900_nand) > - return -ENOMEM; > - chip = &(nuc900_nand->chip); > - mtd = nand_to_mtd(chip); > - > - mtd->dev.parent = &pdev->dev; > - spin_lock_init(&nuc900_nand->lock); > - > - nuc900_nand->clk = devm_clk_get(&pdev->dev, NULL); > - if (IS_ERR(nuc900_nand->clk)) > - return -ENOENT; > - clk_enable(nuc900_nand->clk); > - > - chip->legacy.cmdfunc = nuc900_nand_command_lp; > - chip->legacy.dev_ready = nuc900_nand_devready; > - chip->legacy.read_byte = nuc900_nand_read_byte; > - chip->legacy.write_buf = nuc900_nand_write_buf; > - chip->legacy.read_buf = nuc900_nand_read_buf; > - chip->legacy.chip_delay = 50; > - chip->options = 0; > - chip->ecc.mode = NAND_ECC_SOFT; > - chip->ecc.algo = NAND_ECC_HAMMING; > - > - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); > - nuc900_nand->reg = devm_ioremap_resource(&pdev->dev, res); > - if (IS_ERR(nuc900_nand->reg)) > - return PTR_ERR(nuc900_nand->reg); > - > - nuc900_nand_enable(nuc900_nand); > - > - if (nand_scan(chip, 1)) > - return -ENXIO; > - > - mtd_device_register(mtd, partitions, ARRAY_SIZE(partitions)); > - > - platform_set_drvdata(pdev, nuc900_nand); > - > - return 0; > -} > - > -static int nuc900_nand_remove(struct platform_device *pdev) > -{ > - struct nuc900_nand *nuc900_nand = platform_get_drvdata(pdev); > - > - nand_release(&nuc900_nand->chip); > - clk_disable(nuc900_nand->clk); > - > - return 0; > -} > - > -static struct platform_driver nuc900_nand_driver = { > - .probe = nuc900_nand_probe, > - .remove = nuc900_nand_remove, > - .driver = { > - .name = "nuc900-fmi", > - }, > -}; > - > -module_platform_driver(nuc900_nand_driver); > - > -MODULE_AUTHOR("Wan ZongShun <mcuos.com@gmail.com>"); > -MODULE_DESCRIPTION("w90p910/NUC9xx nand driver!"); > -MODULE_LICENSE("GPL"); > -MODULE_ALIAS("platform:nuc900-fmi"); ______________________________________________________ Linux MTD discussion mailing list http://lists.infradead.org/mailman/listinfo/linux-mtd/
next prev parent reply other threads:[~2019-08-10 8:21 UTC|newest] Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-08-09 20:27 [PATCH 00/16] ARM: remove ks8695 and w90x900 platforms Arnd Bergmann 2019-08-09 20:27 ` Arnd Bergmann 2019-08-09 20:27 ` Arnd Bergmann 2019-08-09 20:27 ` Arnd Bergmann 2019-08-09 20:27 ` [PATCH 01/16] ARM: remove ks8695 platform Arnd Bergmann 2019-08-09 20:27 ` Arnd Bergmann 2019-08-11 9:18 ` Ben Dooks 2019-08-12 3:59 ` Greg Ungerer 2019-08-13 15:27 ` Ben Dooks 2019-08-13 15:27 ` Ben Dooks 2019-08-09 20:27 ` [PATCH 02/16] serial: remove ks8695 driver Arnd Bergmann 2019-08-09 20:27 ` [PATCH 03/16] gpio: " Arnd Bergmann 2019-08-10 9:03 ` Linus Walleij 2019-08-09 20:27 ` [PATCH 04/16] watchdog: " Arnd Bergmann 2019-08-09 20:42 ` Guenter Roeck 2019-08-10 8:37 ` Arnd Bergmann 2019-08-10 12:56 ` Guenter Roeck 2019-08-09 20:27 ` [PATCH 05/16] net: " Arnd Bergmann 2019-08-09 20:27 ` [PATCH 06/16] watchdog: remove w90x900 driver Arnd Bergmann 2019-08-09 20:42 ` Guenter Roeck 2019-08-09 20:27 ` [PATCH 07/16] spi: " Arnd Bergmann 2019-08-12 10:36 ` Mark Brown 2019-08-12 13:06 ` Mark Brown 2019-08-09 20:27 ` [PATCH 08/16] ASoC: remove w90x900/nuc900 platform drivers Arnd Bergmann 2019-08-12 10:36 ` Mark Brown 2019-08-12 13:09 ` Applied "ASoC: remove w90x900/nuc900 platform drivers" to the asoc tree Mark Brown 2019-08-12 13:09 ` Mark Brown 2019-08-09 20:27 ` [PATCH 09/16] fbdev: remove w90x900/nuc900 platform drivers Arnd Bergmann 2019-08-09 20:27 ` Arnd Bergmann 2019-08-09 20:27 ` Arnd Bergmann 2019-08-13 13:30 ` Bartlomiej Zolnierkiewicz 2019-08-13 13:30 ` Bartlomiej Zolnierkiewicz 2019-08-13 13:40 ` Arnd Bergmann 2019-08-13 13:40 ` Arnd Bergmann 2019-08-13 13:40 ` Arnd Bergmann 2019-08-09 20:27 ` [PATCH 10/16] Input: remove w90x900 keyboard driver Arnd Bergmann 2019-08-09 21:56 ` Dmitry Torokhov 2019-08-09 20:27 ` [PATCH 11/16] Input: remove w90x900 touchscreen driver Arnd Bergmann 2019-08-09 21:56 ` Dmitry Torokhov 2019-08-09 20:27 ` [PATCH 12/16] mtd: rawnand: remove w90x900 driver Arnd Bergmann 2019-08-09 20:27 ` Arnd Bergmann 2019-08-10 8:21 ` Boris Brezillon [this message] 2019-08-10 8:21 ` Boris Brezillon 2019-08-26 12:58 ` Miquel Raynal 2019-08-26 12:58 ` Miquel Raynal 2019-08-09 20:27 ` [PATCH 13/16] net: remove w90p910-ether driver Arnd Bergmann 2019-08-09 20:27 ` [PATCH 14/16] rtc: remove w90x900/nuc900 driver Arnd Bergmann 2019-08-12 20:57 ` Alexandre Belloni 2019-08-09 20:27 ` [PATCH 15/16] usb: remove ehci-w90x900 driver Arnd Bergmann 2019-08-09 20:27 ` [PATCH 16/16] ARM: remove w90x900 platform Arnd Bergmann 2019-08-09 20:27 ` Arnd Bergmann 2019-08-10 7:29 ` [PATCH 00/16] ARM: remove ks8695 and w90x900 platforms Greg Kroah-Hartman 2019-08-10 7:29 ` Greg Kroah-Hartman 2019-08-10 7:29 ` Greg Kroah-Hartman 2019-08-10 7:29 ` Greg Kroah-Hartman
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20190810102121.07bf8c37@collabora.com \ --to=boris.brezillon@collabora.com \ --cc=arnd@arndb.de \ --cc=computersforpeace@gmail.com \ --cc=dwmw2@infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mtd@lists.infradead.org \ --cc=marek.vasut@gmail.com \ --cc=miquel.raynal@bootlin.com \ --cc=richard@nod.at \ --cc=soc@kernel.org \ --cc=vigneshr@ti.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.