Lines Matching refs:mtd

14 #include <linux/mtd/rawnand.h>
15 #include <linux/mtd/mtd.h>
19 #include <linux/mtd/nand-ecc-mtk.h>
318 static int mtk_nfc_hw_runtime_config(struct mtd_info *mtd)
320 struct nand_chip *chip = mtd_to_nand(mtd);
325 if (!mtd->writesize)
330 switch (mtd->writesize) {
356 dev_err(nfc->dev, "invalid page len: %d\n", mtd->writesize);
658 static void mtk_nfc_bad_mark_swap(struct mtd_info *mtd, u8 *buf, int raw)
660 struct nand_chip *chip = mtd_to_nand(mtd);
672 static int mtk_nfc_format_subpage(struct mtd_info *mtd, u32 offset,
675 struct nand_chip *chip = mtd_to_nand(mtd);
685 memset(nfc->buffer, 0xff, mtd->writesize + mtd->oobsize);
694 mtk_nand->bad_mark.bm_swap(mtd, nfc->buffer, 1);
707 static void mtk_nfc_format_page(struct mtd_info *mtd, const u8 *buf)
709 struct nand_chip *chip = mtd_to_nand(mtd);
715 memset(nfc->buffer, 0xff, mtd->writesize + mtd->oobsize);
722 mtk_nand->bad_mark.bm_swap(mtd, nfc->buffer, 1);
774 static int mtk_nfc_do_write_page(struct mtd_info *mtd, struct nand_chip *chip,
825 static int mtk_nfc_write_page(struct mtd_info *mtd, struct nand_chip *chip,
855 memcpy(nfc->buffer, buf, mtd->writesize);
856 mtk_nand->bad_mark.bm_swap(mtd, nfc->buffer, raw);
865 len = mtd->writesize + (raw ? mtd->oobsize : 0);
866 ret = mtk_nfc_do_write_page(mtd, chip, bufpoi, page, len);
886 struct mtd_info *mtd = nand_to_mtd(chip);
889 mtk_nfc_format_page(mtd, buf);
890 return mtk_nfc_write_page(mtd, chip, nfc->buffer, pg, 1);
897 struct mtd_info *mtd = nand_to_mtd(chip);
901 ret = mtk_nfc_format_subpage(mtd, offset, data_len, buf);
906 return mtk_nfc_write_page(mtd, chip, nfc->buffer, page, 1);
914 static int mtk_nfc_update_ecc_stats(struct mtd_info *mtd, u8 *buf, u32 start,
917 struct nand_chip *chip = mtd_to_nand(mtd);
933 mtd->ecc_stats.corrected += stats.corrected;
934 mtd->ecc_stats.failed += stats.failed;
939 static int mtk_nfc_read_subpage(struct mtd_info *mtd, struct nand_chip *chip,
1019 mtk_nfc_update_ecc_stats(mtd, buf, start, sectors);
1031 mtk_nand->bad_mark.bm_swap(mtd, bufpoi, raw);
1048 struct mtd_info *mtd = nand_to_mtd(chip);
1050 return mtk_nfc_read_subpage(mtd, chip, 0, mtd->writesize, p, pg, 0);
1056 struct mtd_info *mtd = nand_to_mtd(chip);
1062 memset(nfc->buffer, 0xff, mtd->writesize + mtd->oobsize);
1063 ret = mtk_nfc_read_subpage(mtd, chip, 0, mtd->writesize, nfc->buffer,
1072 mtk_nand->bad_mark.bm_swap(mtd, nfc->buffer, 1);
1121 static int mtk_nfc_ooblayout_free(struct mtd_info *mtd, int section,
1124 struct nand_chip *chip = mtd_to_nand(mtd);
1129 eccsteps = mtd->writesize / chip->ecc.size;
1140 static int mtk_nfc_ooblayout_ecc(struct mtd_info *mtd, int section,
1143 struct nand_chip *chip = mtd_to_nand(mtd);
1150 eccsteps = mtd->writesize / chip->ecc.size;
1152 oob_region->length = mtd->oobsize - oob_region->offset;
1162 static void mtk_nfc_set_fdm(struct mtk_nfc_fdm *fdm, struct mtd_info *mtd)
1164 struct nand_chip *nand = mtd_to_nand(mtd);
1181 struct mtd_info *mtd)
1183 struct nand_chip *nand = mtd_to_nand(mtd);
1185 if (mtd->writesize == 512) {
1189 bm_ctl->sec = mtd->writesize / mtk_data_len(nand);
1190 bm_ctl->pos = mtd->writesize % mtk_data_len(nand);
1194 static int mtk_nfc_set_spare_per_sector(u32 *sps, struct mtd_info *mtd)
1196 struct nand_chip *nand = mtd_to_nand(mtd);
1201 eccsteps = mtd->writesize / nand->ecc.size;
1202 *sps = mtd->oobsize / eccsteps;
1226 static int mtk_nfc_ecc_init(struct device *dev, struct mtd_info *mtd)
1228 struct nand_chip *nand = mtd_to_nand(mtd);
1252 if (mtd->writesize > 512 &&
1263 ret = mtk_nfc_set_spare_per_sector(&spare, mtd);
1298 struct mtd_info *mtd = nand_to_mtd(chip);
1299 struct device *dev = mtd->dev.parent;
1314 ret = mtk_nfc_ecc_init(dev, mtd);
1318 ret = mtk_nfc_set_spare_per_sector(&mtk_nand->spare_per_sector, mtd);
1322 mtk_nfc_set_fdm(&mtk_nand->fdm, mtd);
1323 mtk_nfc_set_bad_mark_ctl(&mtk_nand->bad_mark, mtd);
1325 len = mtd->writesize + mtd->oobsize;
1344 struct mtd_info *mtd;
1408 mtd = nand_to_mtd(nand);
1409 mtd->owner = THIS_MODULE;
1410 mtd->dev.parent = dev;
1411 mtd->name = MTK_NAME;
1412 mtd_set_ooblayout(mtd, &mtk_nfc_ooblayout_ops);
1420 ret = mtd_device_register(mtd, NULL, 0);
1422 dev_err(dev, "mtd parse partition error\n");