1
0
Fork 0

mtd: rawnand: plat_nand: Pass a nand_chip object to all platform_nand_ctrl hooks

Let's make the raw NAND API consistent by patching all helpers and
hooks to take a nand_chip object instead of an mtd_info one or
remove the mtd_info object when both are passed.

In order to do that, we first need to update the platform_nand_ctrl
hooks to take a nand_chip object instead of an mtd_info.

We add temporary plat_nand_xxx() wrappers to the do the mtd -> chip
conversion, but those will be dropped when patching nand_chip hooks to
take a nand_chip object.

Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com>
Reviewed-by: Alexander Sverdlin <alexander.sverdlin@gmail.com>
Acked-by: Alexander Sverdlin <alexander.sverdlin@gmail.com>
Acked-by: Robert Jarzmik <robert.jarzmik@free.fr>
Acked-by: Krzysztof Halasa <khalasa@piap.pl>
Acked-by: Paul Burton <paul.burton@mips.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
hifive-unleashed-5.1
Boris Brezillon 2018-09-06 14:05:13 +02:00 committed by Miquel Raynal
parent 2f91eb6951
commit 47bd59e538
23 changed files with 102 additions and 77 deletions

View File

@ -45,10 +45,9 @@
#define NAND_CTRL_ADDR(chip) (chip->IO_ADDR_W + 0x40) #define NAND_CTRL_ADDR(chip) (chip->IO_ADDR_W + 0x40)
static void snappercl15_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, static void snappercl15_nand_cmd_ctrl(struct nand_chip *chip, int cmd,
unsigned int ctrl) unsigned int ctrl)
{ {
struct nand_chip *chip = mtd_to_nand(mtd);
static u16 nand_state = SNAPPERCL15_NAND_WPN; static u16 nand_state = SNAPPERCL15_NAND_WPN;
u16 set; u16 set;
@ -73,10 +72,8 @@ static void snappercl15_nand_cmd_ctrl(struct mtd_info *mtd, int cmd,
__raw_writew((cmd & 0xff) | nand_state, chip->IO_ADDR_W); __raw_writew((cmd & 0xff) | nand_state, chip->IO_ADDR_W);
} }
static int snappercl15_nand_dev_ready(struct mtd_info *mtd) static int snappercl15_nand_dev_ready(struct nand_chip *chip)
{ {
struct nand_chip *chip = mtd_to_nand(mtd);
return !!(__raw_readw(NAND_CTRL_ADDR(chip)) & SNAPPERCL15_NAND_RDY); return !!(__raw_readw(NAND_CTRL_ADDR(chip)) & SNAPPERCL15_NAND_RDY);
} }

View File

@ -76,11 +76,9 @@ static void __init ts72xx_map_io(void)
#define TS72XX_NAND_CONTROL_ADDR_LINE 22 /* 0xN0400000 */ #define TS72XX_NAND_CONTROL_ADDR_LINE 22 /* 0xN0400000 */
#define TS72XX_NAND_BUSY_ADDR_LINE 23 /* 0xN0800000 */ #define TS72XX_NAND_BUSY_ADDR_LINE 23 /* 0xN0800000 */
static void ts72xx_nand_hwcontrol(struct mtd_info *mtd, static void ts72xx_nand_hwcontrol(struct nand_chip *chip,
int cmd, unsigned int ctrl) int cmd, unsigned int ctrl)
{ {
struct nand_chip *chip = mtd_to_nand(mtd);
if (ctrl & NAND_CTRL_CHANGE) { if (ctrl & NAND_CTRL_CHANGE) {
void __iomem *addr = chip->IO_ADDR_R; void __iomem *addr = chip->IO_ADDR_R;
unsigned char bits; unsigned char bits;
@ -99,9 +97,8 @@ static void ts72xx_nand_hwcontrol(struct mtd_info *mtd,
__raw_writeb(cmd, chip->IO_ADDR_W); __raw_writeb(cmd, chip->IO_ADDR_W);
} }
static int ts72xx_nand_device_ready(struct mtd_info *mtd) static int ts72xx_nand_device_ready(struct nand_chip *chip)
{ {
struct nand_chip *chip = mtd_to_nand(mtd);
void __iomem *addr = chip->IO_ADDR_R; void __iomem *addr = chip->IO_ADDR_R;
addr += (1 << TS72XX_NAND_BUSY_ADDR_LINE); addr += (1 << TS72XX_NAND_BUSY_ADDR_LINE);

View File

@ -129,10 +129,9 @@ static void qong_init_nor_mtd(void)
/* /*
* Hardware specific access to control-lines * Hardware specific access to control-lines
*/ */
static void qong_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl) static void qong_nand_cmd_ctrl(struct nand_chip *nand_chip, int cmd,
unsigned int ctrl)
{ {
struct nand_chip *nand_chip = mtd_to_nand(mtd);
if (cmd == NAND_CMD_NONE) if (cmd == NAND_CMD_NONE)
return; return;
@ -145,14 +144,14 @@ static void qong_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl)
/* /*
* Read the Device Ready pin. * Read the Device Ready pin.
*/ */
static int qong_nand_device_ready(struct mtd_info *mtd) static int qong_nand_device_ready(struct nand_chip *chip)
{ {
return gpio_get_value(IOMUX_TO_GPIO(MX31_PIN_NFRB)); return gpio_get_value(IOMUX_TO_GPIO(MX31_PIN_NFRB));
} }
static void qong_nand_select_chip(struct mtd_info *mtd, int chip) static void qong_nand_select_chip(struct nand_chip *chip, int cs)
{ {
if (chip >= 0) if (cs >= 0)
gpio_set_value(IOMUX_TO_GPIO(MX31_PIN_NFCE_B), 0); gpio_set_value(IOMUX_TO_GPIO(MX31_PIN_NFCE_B), 0);
else else
gpio_set_value(IOMUX_TO_GPIO(MX31_PIN_NFCE_B), 1); gpio_set_value(IOMUX_TO_GPIO(MX31_PIN_NFCE_B), 1);

View File

@ -75,9 +75,8 @@ static struct mtd_partition ixdp425_partitions[] = {
}; };
static void static void
ixdp425_flash_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl) ixdp425_flash_nand_cmd_ctrl(struct nand_chip *this, int cmd, unsigned int ctrl)
{ {
struct nand_chip *this = mtd_to_nand(mtd);
int offset = (int)nand_get_controller_data(this); int offset = (int)nand_get_controller_data(this);
if (ctrl & NAND_CTRL_CHANGE) { if (ctrl & NAND_CTRL_CHANGE) {

View File

@ -186,7 +186,7 @@ static struct platform_device nor_device = {
#define FSAMPLE_NAND_RB_GPIO_PIN 62 #define FSAMPLE_NAND_RB_GPIO_PIN 62
static int nand_dev_ready(struct mtd_info *mtd) static int nand_dev_ready(struct nand_chip *chip)
{ {
return gpio_get_value(FSAMPLE_NAND_RB_GPIO_PIN); return gpio_get_value(FSAMPLE_NAND_RB_GPIO_PIN);
} }

View File

@ -182,7 +182,7 @@ static struct mtd_partition h2_nand_partitions[] = {
#define H2_NAND_RB_GPIO_PIN 62 #define H2_NAND_RB_GPIO_PIN 62
static int h2_nand_dev_ready(struct mtd_info *mtd) static int h2_nand_dev_ready(struct nand_chip *chip)
{ {
return gpio_get_value(H2_NAND_RB_GPIO_PIN); return gpio_get_value(H2_NAND_RB_GPIO_PIN);
} }

View File

@ -185,7 +185,7 @@ static struct mtd_partition nand_partitions[] = {
#define H3_NAND_RB_GPIO_PIN 10 #define H3_NAND_RB_GPIO_PIN 10
static int nand_dev_ready(struct mtd_info *mtd) static int nand_dev_ready(struct nand_chip *chip)
{ {
return gpio_get_value(H3_NAND_RB_GPIO_PIN); return gpio_get_value(H3_NAND_RB_GPIO_PIN);
} }

View File

@ -20,9 +20,8 @@
#include "common.h" #include "common.h"
void omap1_nand_cmd_ctl(struct mtd_info *mtd, int cmd, unsigned int ctrl) void omap1_nand_cmd_ctl(struct nand_chip *this, int cmd, unsigned int ctrl)
{ {
struct nand_chip *this = mtd_to_nand(mtd);
unsigned long mask; unsigned long mask;
if (cmd == NAND_CMD_NONE) if (cmd == NAND_CMD_NONE)

View File

@ -144,7 +144,7 @@ static struct platform_device nor_device = {
#define P2_NAND_RB_GPIO_PIN 62 #define P2_NAND_RB_GPIO_PIN 62
static int nand_dev_ready(struct mtd_info *mtd) static int nand_dev_ready(struct nand_chip *chip)
{ {
return gpio_get_value(P2_NAND_RB_GPIO_PIN); return gpio_get_value(P2_NAND_RB_GPIO_PIN);
} }

View File

@ -26,7 +26,6 @@
#ifndef __ARCH_ARM_MACH_OMAP1_COMMON_H #ifndef __ARCH_ARM_MACH_OMAP1_COMMON_H
#define __ARCH_ARM_MACH_OMAP1_COMMON_H #define __ARCH_ARM_MACH_OMAP1_COMMON_H
#include <linux/mtd/mtd.h>
#include <linux/platform_data/i2c-omap.h> #include <linux/platform_data/i2c-omap.h>
#include <linux/reboot.h> #include <linux/reboot.h>
@ -82,7 +81,8 @@ void omap1_restart(enum reboot_mode, const char *);
extern void __init omap_check_revision(void); extern void __init omap_check_revision(void);
extern void omap1_nand_cmd_ctl(struct mtd_info *mtd, int cmd, struct nand_chip;
extern void omap1_nand_cmd_ctl(struct nand_chip *this, int cmd,
unsigned int ctrl); unsigned int ctrl);
extern void omap1_timer_init(void); extern void omap1_timer_init(void);

View File

@ -131,11 +131,9 @@ static void ts78xx_ts_rtc_unload(void)
* NAND_CLE: bit 1 -> bit 1 * NAND_CLE: bit 1 -> bit 1
* NAND_ALE: bit 2 -> bit 0 * NAND_ALE: bit 2 -> bit 0
*/ */
static void ts78xx_ts_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, static void ts78xx_ts_nand_cmd_ctrl(struct nand_chip *this, int cmd,
unsigned int ctrl) unsigned int ctrl)
{ {
struct nand_chip *this = mtd_to_nand(mtd);
if (ctrl & NAND_CTRL_CHANGE) { if (ctrl & NAND_CTRL_CHANGE) {
unsigned char bits; unsigned char bits;
@ -150,15 +148,14 @@ static void ts78xx_ts_nand_cmd_ctrl(struct mtd_info *mtd, int cmd,
writeb(cmd, this->IO_ADDR_W); writeb(cmd, this->IO_ADDR_W);
} }
static int ts78xx_ts_nand_dev_ready(struct mtd_info *mtd) static int ts78xx_ts_nand_dev_ready(struct nand_chip *chip)
{ {
return readb(TS_NAND_CTRL) & 0x20; return readb(TS_NAND_CTRL) & 0x20;
} }
static void ts78xx_ts_nand_write_buf(struct mtd_info *mtd, static void ts78xx_ts_nand_write_buf(struct nand_chip *chip,
const uint8_t *buf, int len) const uint8_t *buf, int len)
{ {
struct nand_chip *chip = mtd_to_nand(mtd);
void __iomem *io_base = chip->IO_ADDR_W; void __iomem *io_base = chip->IO_ADDR_W;
unsigned long off = ((unsigned long)buf & 3); unsigned long off = ((unsigned long)buf & 3);
int sz; int sz;
@ -182,10 +179,9 @@ static void ts78xx_ts_nand_write_buf(struct mtd_info *mtd,
writesb(io_base, buf, len); writesb(io_base, buf, len);
} }
static void ts78xx_ts_nand_read_buf(struct mtd_info *mtd, static void ts78xx_ts_nand_read_buf(struct nand_chip *chip,
uint8_t *buf, int len) uint8_t *buf, int len)
{ {
struct nand_chip *chip = mtd_to_nand(mtd);
void __iomem *io_base = chip->IO_ADDR_R; void __iomem *io_base = chip->IO_ADDR_R;
unsigned long off = ((unsigned long)buf & 3); unsigned long off = ((unsigned long)buf & 3);
int sz; int sz;

View File

@ -571,9 +571,9 @@ static inline void balloon3_i2c_init(void) {}
* NAND * NAND
******************************************************************************/ ******************************************************************************/
#if defined(CONFIG_MTD_NAND_PLATFORM)||defined(CONFIG_MTD_NAND_PLATFORM_MODULE) #if defined(CONFIG_MTD_NAND_PLATFORM)||defined(CONFIG_MTD_NAND_PLATFORM_MODULE)
static void balloon3_nand_cmd_ctl(struct mtd_info *mtd, int cmd, unsigned int ctrl) static void balloon3_nand_cmd_ctl(struct nand_chip *this, int cmd,
unsigned int ctrl)
{ {
struct nand_chip *this = mtd_to_nand(mtd);
uint8_t balloon3_ctl_set = 0, balloon3_ctl_clr = 0; uint8_t balloon3_ctl_set = 0, balloon3_ctl_clr = 0;
if (ctrl & NAND_CTRL_CHANGE) { if (ctrl & NAND_CTRL_CHANGE) {
@ -600,7 +600,7 @@ static void balloon3_nand_cmd_ctl(struct mtd_info *mtd, int cmd, unsigned int ct
writeb(cmd, this->IO_ADDR_W); writeb(cmd, this->IO_ADDR_W);
} }
static void balloon3_nand_select_chip(struct mtd_info *mtd, int chip) static void balloon3_nand_select_chip(struct nand_chip *this, int chip)
{ {
if (chip < 0 || chip > 3) if (chip < 0 || chip > 3)
return; return;
@ -616,7 +616,7 @@ static void balloon3_nand_select_chip(struct mtd_info *mtd, int chip)
BALLOON3_NAND_CONTROL_REG); BALLOON3_NAND_CONTROL_REG);
} }
static int balloon3_nand_dev_ready(struct mtd_info *mtd) static int balloon3_nand_dev_ready(struct nand_chip *this)
{ {
return __raw_readl(BALLOON3_NAND_STAT_REG) & BALLOON3_NAND_STAT_RNB; return __raw_readl(BALLOON3_NAND_STAT_REG) & BALLOON3_NAND_STAT_RNB;
} }

View File

@ -285,10 +285,9 @@ static void nand_cs_off(void)
} }
/* hardware specific access to control-lines */ /* hardware specific access to control-lines */
static void em_x270_nand_cmd_ctl(struct mtd_info *mtd, int dat, static void em_x270_nand_cmd_ctl(struct nand_chip *this, int dat,
unsigned int ctrl) unsigned int ctrl)
{ {
struct nand_chip *this = mtd_to_nand(mtd);
unsigned long nandaddr = (unsigned long)this->IO_ADDR_W; unsigned long nandaddr = (unsigned long)this->IO_ADDR_W;
dsb(); dsb();
@ -317,7 +316,7 @@ static void em_x270_nand_cmd_ctl(struct mtd_info *mtd, int dat,
} }
/* read device ready pin */ /* read device ready pin */
static int em_x270_nand_device_ready(struct mtd_info *mtd) static int em_x270_nand_device_ready(struct nand_chip *this)
{ {
dsb(); dsb();

View File

@ -247,10 +247,9 @@ static inline void palmtx_keys_init(void) {}
******************************************************************************/ ******************************************************************************/
#if defined(CONFIG_MTD_NAND_PLATFORM) || \ #if defined(CONFIG_MTD_NAND_PLATFORM) || \
defined(CONFIG_MTD_NAND_PLATFORM_MODULE) defined(CONFIG_MTD_NAND_PLATFORM_MODULE)
static void palmtx_nand_cmd_ctl(struct mtd_info *mtd, int cmd, static void palmtx_nand_cmd_ctl(struct nand_chip *this, int cmd,
unsigned int ctrl) unsigned int ctrl)
{ {
struct nand_chip *this = mtd_to_nand(mtd);
char __iomem *nandaddr = this->IO_ADDR_W; char __iomem *nandaddr = this->IO_ADDR_W;
if (cmd == NAND_CMD_NONE) if (cmd == NAND_CMD_NONE)

View File

@ -197,10 +197,9 @@ static struct i2c_board_info db1200_i2c_devs[] __initdata = {
/**********************************************************************/ /**********************************************************************/
static void au1200_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, static void au1200_nand_cmd_ctrl(struct nand_chip *this, int cmd,
unsigned int ctrl) unsigned int ctrl)
{ {
struct nand_chip *this = mtd_to_nand(mtd);
unsigned long ioaddr = (unsigned long)this->IO_ADDR_W; unsigned long ioaddr = (unsigned long)this->IO_ADDR_W;
ioaddr &= 0xffffff00; ioaddr &= 0xffffff00;
@ -220,7 +219,7 @@ static void au1200_nand_cmd_ctrl(struct mtd_info *mtd, int cmd,
} }
} }
static int au1200_nand_device_ready(struct mtd_info *mtd) static int au1200_nand_device_ready(struct nand_chip *this)
{ {
return alchemy_rdsmem(AU1000_MEM_STSTAT) & 1; return alchemy_rdsmem(AU1000_MEM_STSTAT) & 1;
} }

View File

@ -149,10 +149,9 @@ static void __init db1300_gpio_config(void)
/**********************************************************************/ /**********************************************************************/
static void au1300_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, static void au1300_nand_cmd_ctrl(struct nand_chip *this, int cmd,
unsigned int ctrl) unsigned int ctrl)
{ {
struct nand_chip *this = mtd_to_nand(mtd);
unsigned long ioaddr = (unsigned long)this->IO_ADDR_W; unsigned long ioaddr = (unsigned long)this->IO_ADDR_W;
ioaddr &= 0xffffff00; ioaddr &= 0xffffff00;
@ -172,7 +171,7 @@ static void au1300_nand_cmd_ctrl(struct mtd_info *mtd, int cmd,
} }
} }
static int au1300_nand_device_ready(struct mtd_info *mtd) static int au1300_nand_device_ready(struct nand_chip *this)
{ {
return alchemy_rdsmem(AU1000_MEM_STSTAT) & 1; return alchemy_rdsmem(AU1000_MEM_STSTAT) & 1;
} }

View File

@ -126,10 +126,9 @@ static struct i2c_board_info db1550_i2c_devs[] __initdata = {
/**********************************************************************/ /**********************************************************************/
static void au1550_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, static void au1550_nand_cmd_ctrl(struct nand_chip *this, int cmd,
unsigned int ctrl) unsigned int ctrl)
{ {
struct nand_chip *this = mtd_to_nand(mtd);
unsigned long ioaddr = (unsigned long)this->IO_ADDR_W; unsigned long ioaddr = (unsigned long)this->IO_ADDR_W;
ioaddr &= 0xffffff00; ioaddr &= 0xffffff00;
@ -149,7 +148,7 @@ static void au1550_nand_cmd_ctrl(struct mtd_info *mtd, int cmd,
} }
} }
static int au1550_nand_device_ready(struct mtd_info *mtd) static int au1550_nand_device_ready(struct nand_chip *this)
{ {
return alchemy_rdsmem(AU1000_MEM_STSTAT) & 1; return alchemy_rdsmem(AU1000_MEM_STSTAT) & 1;
} }

View File

@ -92,8 +92,8 @@ struct xlr_nand_flash_priv {
static struct xlr_nand_flash_priv nand_priv; static struct xlr_nand_flash_priv nand_priv;
static void xlr_nand_ctrl(struct mtd_info *mtd, int cmd, static void xlr_nand_ctrl(struct nand_chip *chip, int cmd,
unsigned int ctrl) unsigned int ctrl)
{ {
if (ctrl & NAND_CLE) if (ctrl & NAND_CLE)
nlm_write_reg(nand_priv.flash_mmio, nlm_write_reg(nand_priv.flash_mmio,

View File

@ -178,9 +178,8 @@ static struct platform_device pnx833x_sata_device = {
}; };
static void static void
pnx833x_flash_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl) pnx833x_flash_nand_cmd_ctrl(struct nand_chip *this, int cmd, unsigned int ctrl)
{ {
struct nand_chip *this = mtd_to_nand(mtd);
unsigned long nandaddr = (unsigned long)this->IO_ADDR_W; unsigned long nandaddr = (unsigned long)this->IO_ADDR_W;
if (cmd == NAND_CMD_NONE) if (cmd == NAND_CMD_NONE)

View File

@ -141,14 +141,13 @@ static struct platform_device cf_slot0 = {
}; };
/* Resources and device for NAND */ /* Resources and device for NAND */
static int rb532_dev_ready(struct mtd_info *mtd) static int rb532_dev_ready(struct nand_chip *chip)
{ {
return gpio_get_value(GPIO_RDY); return gpio_get_value(GPIO_RDY);
} }
static void rb532_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl) static void rb532_cmd_ctrl(struct nand_chip *chip, int cmd, unsigned int ctrl)
{ {
struct nand_chip *chip = mtd_to_nand(mtd);
unsigned char orbits, nandbits; unsigned char orbits, nandbits;
if (ctrl & NAND_CTRL_CHANGE) { if (ctrl & NAND_CTRL_CHANGE) {

View File

@ -165,11 +165,9 @@ static struct mtd_partition migor_nand_flash_partitions[] = {
}, },
}; };
static void migor_nand_flash_cmd_ctl(struct mtd_info *mtd, int cmd, static void migor_nand_flash_cmd_ctl(struct nand_chip *chip, int cmd,
unsigned int ctrl) unsigned int ctrl)
{ {
struct nand_chip *chip = mtd_to_nand(mtd);
if (cmd == NAND_CMD_NONE) if (cmd == NAND_CMD_NONE)
return; return;
@ -181,7 +179,7 @@ static void migor_nand_flash_cmd_ctl(struct mtd_info *mtd, int cmd,
writeb(cmd, chip->IO_ADDR_W); writeb(cmd, chip->IO_ADDR_W);
} }
static int migor_nand_flash_ready(struct mtd_info *mtd) static int migor_nand_flash_ready(struct nand_chip *chip)
{ {
return gpio_get_value(GPIO_PTA1); /* NAND_RBn */ return gpio_get_value(GPIO_PTA1); /* NAND_RBn */
} }

View File

@ -23,6 +23,42 @@ struct plat_nand_data {
void __iomem *io_base; void __iomem *io_base;
}; };
static void plat_nand_cmd_ctrl(struct mtd_info *mtd, int dat, unsigned int ctrl)
{
struct platform_nand_data *pdata = dev_get_platdata(mtd->dev.parent);
pdata->ctrl.cmd_ctrl(mtd_to_nand(mtd), dat, ctrl);
}
static int plat_nand_dev_ready(struct mtd_info *mtd)
{
struct platform_nand_data *pdata = dev_get_platdata(mtd->dev.parent);
return pdata->ctrl.dev_ready(mtd_to_nand(mtd));
}
static void plat_nand_select_chip(struct mtd_info *mtd, int cs)
{
struct platform_nand_data *pdata = dev_get_platdata(mtd->dev.parent);
pdata->ctrl.select_chip(mtd_to_nand(mtd), cs);
}
static void plat_nand_write_buf(struct mtd_info *mtd, const uint8_t *buf,
int len)
{
struct platform_nand_data *pdata = dev_get_platdata(mtd->dev.parent);
pdata->ctrl.write_buf(mtd_to_nand(mtd), buf, len);
}
static void plat_nand_read_buf(struct mtd_info *mtd, uint8_t *buf, int len)
{
struct platform_nand_data *pdata = dev_get_platdata(mtd->dev.parent);
pdata->ctrl.read_buf(mtd_to_nand(mtd), buf, len);
}
/* /*
* Probe for the NAND device. * Probe for the NAND device.
*/ */
@ -62,11 +98,22 @@ static int plat_nand_probe(struct platform_device *pdev)
data->chip.IO_ADDR_R = data->io_base; data->chip.IO_ADDR_R = data->io_base;
data->chip.IO_ADDR_W = data->io_base; data->chip.IO_ADDR_W = data->io_base;
data->chip.cmd_ctrl = pdata->ctrl.cmd_ctrl;
data->chip.dev_ready = pdata->ctrl.dev_ready; if (pdata->ctrl.cmd_ctrl)
data->chip.select_chip = pdata->ctrl.select_chip; data->chip.cmd_ctrl = plat_nand_cmd_ctrl;
data->chip.write_buf = pdata->ctrl.write_buf;
data->chip.read_buf = pdata->ctrl.read_buf; if (pdata->ctrl.dev_ready)
data->chip.dev_ready = plat_nand_dev_ready;
if (pdata->ctrl.select_chip)
data->chip.select_chip = plat_nand_select_chip;
if (pdata->ctrl.write_buf)
data->chip.write_buf = plat_nand_write_buf;
if (pdata->ctrl.read_buf)
data->chip.read_buf = plat_nand_read_buf;
data->chip.chip_delay = pdata->chip.chip_delay; data->chip.chip_delay = pdata->chip.chip_delay;
data->chip.options |= pdata->chip.options; data->chip.options |= pdata->chip.options;
data->chip.bbt_options |= pdata->chip.bbt_options; data->chip.bbt_options |= pdata->chip.bbt_options;

View File

@ -1595,11 +1595,11 @@ struct platform_device;
struct platform_nand_ctrl { struct platform_nand_ctrl {
int (*probe)(struct platform_device *pdev); int (*probe)(struct platform_device *pdev);
void (*remove)(struct platform_device *pdev); void (*remove)(struct platform_device *pdev);
int (*dev_ready)(struct mtd_info *mtd); int (*dev_ready)(struct nand_chip *chip);
void (*select_chip)(struct mtd_info *mtd, int chip); void (*select_chip)(struct nand_chip *chip, int cs);
void (*cmd_ctrl)(struct mtd_info *mtd, int dat, unsigned int ctrl); void (*cmd_ctrl)(struct nand_chip *chip, int dat, unsigned int ctrl);
void (*write_buf)(struct mtd_info *mtd, const uint8_t *buf, int len); void (*write_buf)(struct nand_chip *chip, const uint8_t *buf, int len);
void (*read_buf)(struct mtd_info *mtd, uint8_t *buf, int len); void (*read_buf)(struct nand_chip *chip, uint8_t *buf, int len);
void *priv; void *priv;
}; };