Lines Matching refs:mtd
79 struct mtd_info *mtd; member
242 static void docg4_read_buf(struct mtd_info *mtd, uint8_t *buf, int len) in docg4_read_buf() argument
245 struct nand_chip *nand = mtd->priv; in docg4_read_buf()
253 static void docg4_write_buf16(struct mtd_info *mtd, const uint8_t *buf, int len) in docg4_write_buf16() argument
256 struct nand_chip *nand = mtd->priv; in docg4_write_buf16()
297 static int docg4_wait(struct mtd_info *mtd, struct nand_chip *nand) in docg4_wait() argument
315 static void docg4_select_chip(struct mtd_info *mtd, int chip) in docg4_select_chip() argument
321 struct nand_chip *nand = mtd->priv; in docg4_select_chip()
336 static void reset(struct mtd_info *mtd) in reset() argument
340 struct nand_chip *nand = mtd->priv; in reset()
371 static int correct_data(struct mtd_info *mtd, uint8_t *buf, int page) in correct_data() argument
378 struct nand_chip *nand = mtd->priv; in correct_data()
465 static uint8_t docg4_read_byte(struct mtd_info *mtd) in docg4_read_byte() argument
467 struct nand_chip *nand = mtd->priv; in docg4_read_byte()
541 static int pageprog(struct mtd_info *mtd) in pageprog() argument
548 struct nand_chip *nand = mtd->priv; in pageprog()
581 static void sequence_reset(struct mtd_info *mtd) in sequence_reset() argument
585 struct nand_chip *nand = mtd->priv; in sequence_reset()
598 static void read_page_prologue(struct mtd_info *mtd, uint32_t docg4_addr) in read_page_prologue() argument
602 struct nand_chip *nand = mtd->priv; in read_page_prologue()
609 sequence_reset(mtd); in read_page_prologue()
625 static void write_page_prologue(struct mtd_info *mtd, uint32_t docg4_addr) in write_page_prologue() argument
629 struct nand_chip *nand = mtd->priv; in write_page_prologue()
635 sequence_reset(mtd); in write_page_prologue()
689 static void docg4_command(struct mtd_info *mtd, unsigned command, int column, in docg4_command() argument
694 struct nand_chip *nand = mtd->priv; in docg4_command()
712 reset(mtd); in docg4_command()
716 read_page_prologue(mtd, g4_addr); in docg4_command()
733 write_page_prologue(mtd, g4_addr); in docg4_command()
741 pageprog(mtd); in docg4_command()
756 static int read_page(struct mtd_info *mtd, struct nand_chip *nand, in read_page() argument
788 docg4_read_buf(mtd, buf, DOCG4_PAGE_SIZE); /* read the page data */ in read_page()
792 docg4_read_buf(mtd, nand->oob_poi, 14); in read_page()
809 bits_corrected = correct_data(mtd, buf, page); in read_page()
811 mtd->ecc_stats.failed++; in read_page()
813 mtd->ecc_stats.corrected += bits_corrected; in read_page()
824 static int docg4_read_page_raw(struct mtd_info *mtd, struct nand_chip *nand, in docg4_read_page_raw() argument
827 return read_page(mtd, nand, buf, page, false); in docg4_read_page_raw()
830 static int docg4_read_page(struct mtd_info *mtd, struct nand_chip *nand, in docg4_read_page() argument
833 return read_page(mtd, nand, buf, page, true); in docg4_read_page()
836 static int docg4_read_oob(struct mtd_info *mtd, struct nand_chip *nand, in docg4_read_oob() argument
845 docg4_command(mtd, NAND_CMD_READ0, nand->ecc.size, page); in docg4_read_oob()
864 docg4_read_buf(mtd, nand->oob_poi, 16); in docg4_read_oob()
875 static int docg4_erase_block(struct mtd_info *mtd, int page) in docg4_erase_block() argument
877 struct nand_chip *nand = mtd->priv; in docg4_erase_block()
884 sequence_reset(mtd); in docg4_erase_block()
920 return nand->waitfunc(mtd, nand); in docg4_erase_block()
923 static int write_page(struct mtd_info *mtd, struct nand_chip *nand, in write_page() argument
939 docg4_write_buf16(mtd, buf, DOCG4_PAGE_SIZE); in write_page()
942 docg4_write_buf16(mtd, nand->oob_poi, 6); in write_page()
970 docg4_write_buf16(mtd, ecc_buf, 8); in write_page()
979 static int docg4_write_page_raw(struct mtd_info *mtd, struct nand_chip *nand, in docg4_write_page_raw() argument
982 return write_page(mtd, nand, buf, false); in docg4_write_page_raw()
985 static int docg4_write_page(struct mtd_info *mtd, struct nand_chip *nand, in docg4_write_page() argument
988 return write_page(mtd, nand, buf, true); in docg4_write_page()
991 static int docg4_write_oob(struct mtd_info *mtd, struct nand_chip *nand, in docg4_write_oob() argument
1012 static int __init read_factory_bbt(struct mtd_info *mtd) in read_factory_bbt() argument
1019 struct nand_chip *nand = mtd->priv; in read_factory_bbt()
1024 __u32 eccfailed_stats = mtd->ecc_stats.failed; in read_factory_bbt()
1030 read_page_prologue(mtd, g4_addr); in read_factory_bbt()
1031 docg4_read_page(mtd, nand, buf, 0, DOCG4_FACTORY_BBT_PAGE); in read_factory_bbt()
1043 if (mtd->ecc_stats.failed > eccfailed_stats) { in read_factory_bbt()
1048 eccfailed_stats = mtd->ecc_stats.failed; in read_factory_bbt()
1049 docg4_read_page(mtd, nand, buf, 0, DOCG4_REDUNDANT_BBT_PAGE); in read_factory_bbt()
1050 if (mtd->ecc_stats.failed > eccfailed_stats) { in read_factory_bbt()
1069 mtd->ecc_stats.badblocks++; in read_factory_bbt()
1079 static int docg4_block_markbad(struct mtd_info *mtd, loff_t ofs) in docg4_block_markbad() argument
1092 struct nand_chip *nand = mtd->priv; in docg4_block_markbad()
1110 memset(nand->oob_poi, 0xff, mtd->oobsize); in docg4_block_markbad()
1115 write_page_prologue(mtd, g4_addr); in docg4_block_markbad()
1116 docg4_write_page(mtd, nand, buf, 1, page); in docg4_block_markbad()
1117 ret = pageprog(mtd); in docg4_block_markbad()
1124 static int docg4_block_neverbad(struct mtd_info *mtd, loff_t ofs, int getchip) in docg4_block_neverbad() argument
1190 static void __init init_mtd_structs(struct mtd_info *mtd) in init_mtd_structs() argument
1205 struct nand_chip *nand = mtd->priv; in init_mtd_structs()
1208 mtd->size = DOCG4_CHIP_SIZE; in init_mtd_structs()
1209 mtd->name = "Msys_Diskonchip_G4"; in init_mtd_structs()
1210 mtd->writesize = DOCG4_PAGE_SIZE; in init_mtd_structs()
1211 mtd->erasesize = DOCG4_BLOCK_SIZE; in init_mtd_structs()
1212 mtd->oobsize = DOCG4_OOB_SIZE; in init_mtd_structs()
1262 static int __init read_id_reg(struct mtd_info *mtd) in read_id_reg() argument
1264 struct nand_chip *nand = mtd->priv; in read_id_reg()
1288 struct mtd_info *mtd; in probe_docg4() local
1310 mtd = kzalloc(len, GFP_KERNEL); in probe_docg4()
1311 if (mtd == NULL) { in probe_docg4()
1315 nand = (struct nand_chip *) (mtd + 1); in probe_docg4()
1317 mtd->priv = nand; in probe_docg4()
1319 mtd->dev.parent = &pdev->dev; in probe_docg4()
1323 init_mtd_structs(mtd); in probe_docg4()
1334 reset(mtd); in probe_docg4()
1335 retval = read_id_reg(mtd); in probe_docg4()
1341 retval = nand_scan_tail(mtd); in probe_docg4()
1345 retval = read_factory_bbt(mtd); in probe_docg4()
1349 retval = mtd_device_parse_register(mtd, part_probes, NULL, NULL, 0); in probe_docg4()
1353 doc->mtd = mtd; in probe_docg4()
1358 if (mtd) { in probe_docg4()
1360 struct nand_chip *nand = mtd->priv; in probe_docg4()
1362 nand_release(mtd); /* deletes partitions and mtd devices */ in probe_docg4()
1364 kfree(mtd); in probe_docg4()
1373 nand_release(doc->mtd); in cleanup_docg4()
1375 kfree(doc->mtd); in cleanup_docg4()