mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-01-16 14:38:49 +00:00
mtd: nand: pxa3xx: use the mtd instance embedded in struct nand_chip
struct nand_chip now embeds an mtd device. Make use of this mtd instance. Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com> Signed-off-by: Brian Norris <computersforpeace@gmail.com>
This commit is contained in:
parent
a0260d21ac
commit
063294a36e
@ -167,7 +167,6 @@ enum pxa3xx_nand_variant {
|
|||||||
|
|
||||||
struct pxa3xx_nand_host {
|
struct pxa3xx_nand_host {
|
||||||
struct nand_chip chip;
|
struct nand_chip chip;
|
||||||
struct mtd_info *mtd;
|
|
||||||
void *info_data;
|
void *info_data;
|
||||||
|
|
||||||
/* page size of attached chip */
|
/* page size of attached chip */
|
||||||
@ -450,14 +449,15 @@ static int pxa3xx_nand_init_timings_compat(struct pxa3xx_nand_host *host,
|
|||||||
struct nand_chip *chip = &host->chip;
|
struct nand_chip *chip = &host->chip;
|
||||||
struct pxa3xx_nand_info *info = host->info_data;
|
struct pxa3xx_nand_info *info = host->info_data;
|
||||||
const struct pxa3xx_nand_flash *f = NULL;
|
const struct pxa3xx_nand_flash *f = NULL;
|
||||||
|
struct mtd_info *mtd = nand_to_mtd(&host->chip);
|
||||||
int i, id, ntypes;
|
int i, id, ntypes;
|
||||||
|
|
||||||
ntypes = ARRAY_SIZE(builtin_flash_types);
|
ntypes = ARRAY_SIZE(builtin_flash_types);
|
||||||
|
|
||||||
chip->cmdfunc(host->mtd, NAND_CMD_READID, 0x00, -1);
|
chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
|
||||||
|
|
||||||
id = chip->read_byte(host->mtd);
|
id = chip->read_byte(mtd);
|
||||||
id |= chip->read_byte(host->mtd) << 0x8;
|
id |= chip->read_byte(mtd) << 0x8;
|
||||||
|
|
||||||
for (i = 0; i < ntypes; i++) {
|
for (i = 0; i < ntypes; i++) {
|
||||||
f = &builtin_flash_types[i];
|
f = &builtin_flash_types[i];
|
||||||
@ -890,7 +890,7 @@ static void set_command_address(struct pxa3xx_nand_info *info,
|
|||||||
static void prepare_start_command(struct pxa3xx_nand_info *info, int command)
|
static void prepare_start_command(struct pxa3xx_nand_info *info, int command)
|
||||||
{
|
{
|
||||||
struct pxa3xx_nand_host *host = info->host[info->cs];
|
struct pxa3xx_nand_host *host = info->host[info->cs];
|
||||||
struct mtd_info *mtd = host->mtd;
|
struct mtd_info *mtd = nand_to_mtd(&host->chip);
|
||||||
|
|
||||||
/* reset data and oob column point to handle data */
|
/* reset data and oob column point to handle data */
|
||||||
info->buf_start = 0;
|
info->buf_start = 0;
|
||||||
@ -943,7 +943,7 @@ static int prepare_set_command(struct pxa3xx_nand_info *info, int command,
|
|||||||
struct mtd_info *mtd;
|
struct mtd_info *mtd;
|
||||||
|
|
||||||
host = info->host[info->cs];
|
host = info->host[info->cs];
|
||||||
mtd = host->mtd;
|
mtd = nand_to_mtd(&host->chip);
|
||||||
addr_cycle = 0;
|
addr_cycle = 0;
|
||||||
exec_cmd = 1;
|
exec_cmd = 1;
|
||||||
|
|
||||||
@ -1415,8 +1415,8 @@ static int pxa3xx_nand_config_ident(struct pxa3xx_nand_info *info)
|
|||||||
static void pxa3xx_nand_config_tail(struct pxa3xx_nand_info *info)
|
static void pxa3xx_nand_config_tail(struct pxa3xx_nand_info *info)
|
||||||
{
|
{
|
||||||
struct pxa3xx_nand_host *host = info->host[info->cs];
|
struct pxa3xx_nand_host *host = info->host[info->cs];
|
||||||
struct mtd_info *mtd = host->mtd;
|
struct nand_chip *chip = &host->chip;
|
||||||
struct nand_chip *chip = mtd_to_nand(mtd);
|
struct mtd_info *mtd = nand_to_mtd(chip);
|
||||||
|
|
||||||
info->reg_ndcr |= (host->col_addr_cycles == 2) ? NDCR_RA_START : 0;
|
info->reg_ndcr |= (host->col_addr_cycles == 2) ? NDCR_RA_START : 0;
|
||||||
info->reg_ndcr |= (chip->page_shift == 6) ? NDCR_PG_PER_BLK : 0;
|
info->reg_ndcr |= (chip->page_shift == 6) ? NDCR_PG_PER_BLK : 0;
|
||||||
@ -1693,19 +1693,20 @@ static int alloc_nand_resource(struct platform_device *pdev)
|
|||||||
pdata = dev_get_platdata(&pdev->dev);
|
pdata = dev_get_platdata(&pdev->dev);
|
||||||
if (pdata->num_cs <= 0)
|
if (pdata->num_cs <= 0)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
info = devm_kzalloc(&pdev->dev, sizeof(*info) + (sizeof(*mtd) +
|
info = devm_kzalloc(&pdev->dev,
|
||||||
sizeof(*host)) * pdata->num_cs, GFP_KERNEL);
|
sizeof(*info) + sizeof(*host) * pdata->num_cs,
|
||||||
|
GFP_KERNEL);
|
||||||
if (!info)
|
if (!info)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
info->pdev = pdev;
|
info->pdev = pdev;
|
||||||
info->variant = pxa3xx_nand_get_variant(pdev);
|
info->variant = pxa3xx_nand_get_variant(pdev);
|
||||||
for (cs = 0; cs < pdata->num_cs; cs++) {
|
for (cs = 0; cs < pdata->num_cs; cs++) {
|
||||||
mtd = (void *)&info[1] + (sizeof(*mtd) + sizeof(*host)) * cs;
|
host = (void *)&info[1] + sizeof(*host) * cs;
|
||||||
chip = (struct nand_chip *)(&mtd[1]);
|
chip = &host->chip;
|
||||||
host = (struct pxa3xx_nand_host *)chip;
|
chip->priv = host;
|
||||||
|
mtd = nand_to_mtd(chip);
|
||||||
info->host[cs] = host;
|
info->host[cs] = host;
|
||||||
host->mtd = mtd;
|
|
||||||
host->cs = cs;
|
host->cs = cs;
|
||||||
host->info_data = info;
|
host->info_data = info;
|
||||||
mtd->priv = chip;
|
mtd->priv = chip;
|
||||||
@ -1833,7 +1834,7 @@ static int pxa3xx_nand_remove(struct platform_device *pdev)
|
|||||||
clk_disable_unprepare(info->clk);
|
clk_disable_unprepare(info->clk);
|
||||||
|
|
||||||
for (cs = 0; cs < pdata->num_cs; cs++)
|
for (cs = 0; cs < pdata->num_cs; cs++)
|
||||||
nand_release(info->host[cs]->mtd);
|
nand_release(nand_to_mtd(&info->host[cs]->chip));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1904,7 +1905,7 @@ static int pxa3xx_nand_probe(struct platform_device *pdev)
|
|||||||
info = platform_get_drvdata(pdev);
|
info = platform_get_drvdata(pdev);
|
||||||
probe_success = 0;
|
probe_success = 0;
|
||||||
for (cs = 0; cs < pdata->num_cs; cs++) {
|
for (cs = 0; cs < pdata->num_cs; cs++) {
|
||||||
struct mtd_info *mtd = info->host[cs]->mtd;
|
struct mtd_info *mtd = nand_to_mtd(&info->host[cs]->chip);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The mtd name matches the one used in 'mtdparts' kernel
|
* The mtd name matches the one used in 'mtdparts' kernel
|
||||||
|
Loading…
x
Reference in New Issue
Block a user