Lines Matching full:nfc

152 	struct ingenic_nfc *nfc = to_ingenic_nfc(nand->chip.controller);  in ingenic_nand_ecc_calculate()  local
166 return ingenic_ecc_calculate(nfc->ecc, &params, dat, ecc_code); in ingenic_nand_ecc_calculate()
173 struct ingenic_nfc *nfc = to_ingenic_nfc(nand->chip.controller); in ingenic_nand_ecc_correct() local
180 return ingenic_ecc_correct(nfc->ecc, &params, dat, read_ecc); in ingenic_nand_ecc_correct()
186 struct ingenic_nfc *nfc = to_ingenic_nfc(chip->controller); in ingenic_nand_attach_chip() local
199 if (!nfc->ecc) { in ingenic_nand_attach_chip()
200 dev_err(nfc->dev, "HW ECC selected, but ECC controller not found\n"); in ingenic_nand_attach_chip()
209 dev_info(nfc->dev, "using %s (strength %d, size %d, bytes %d)\n", in ingenic_nand_attach_chip()
210 (nfc->ecc) ? "hardware ECC" : "software ECC", in ingenic_nand_attach_chip()
214 dev_info(nfc->dev, "not using ECC\n"); in ingenic_nand_attach_chip()
217 dev_err(nfc->dev, "ECC mode %d not supported\n", in ingenic_nand_attach_chip()
230 dev_err(nfc->dev, in ingenic_nand_attach_chip()
243 if (nfc->soc_info->oob_first) in ingenic_nand_attach_chip()
249 else if (nfc->soc_info->oob_layout) in ingenic_nand_attach_chip()
250 mtd_set_ooblayout(mtd, nfc->soc_info->oob_layout); in ingenic_nand_attach_chip()
262 struct ingenic_nfc *nfc = to_ingenic_nfc(chip->controller); in ingenic_nand_exec_instr() local
268 cs->base + nfc->soc_info->cmd_offset); in ingenic_nand_exec_instr()
273 cs->base + nfc->soc_info->addr_offset); in ingenic_nand_exec_instr()
278 ioread8_rep(cs->base + nfc->soc_info->data_offset, in ingenic_nand_exec_instr()
282 ioread16_rep(cs->base + nfc->soc_info->data_offset, in ingenic_nand_exec_instr()
289 iowrite8_rep(cs->base + nfc->soc_info->data_offset, in ingenic_nand_exec_instr()
293 iowrite16_rep(cs->base + nfc->soc_info->data_offset, in ingenic_nand_exec_instr()
316 struct ingenic_nfc *nfc = to_ingenic_nfc(nand->chip.controller); in ingenic_nand_exec_op() local
324 cs = &nfc->cs[op->cs]; in ingenic_nand_exec_op()
325 jz4780_nemc_assert(nfc->dev, cs->bank, true); in ingenic_nand_exec_op()
334 jz4780_nemc_assert(nfc->dev, cs->bank, false); in ingenic_nand_exec_op()
345 struct ingenic_nfc *nfc, in ingenic_nand_init_chip() argument
357 cs = &nfc->cs[chipnr]; in ingenic_nand_init_chip()
365 jz4780_nemc_set_type(nfc->dev, cs->bank, JZ4780_NEMC_BANK_NAND); in ingenic_nand_init_chip()
413 chip->controller = &nfc->controller; in ingenic_nand_init_chip()
427 list_add_tail(&nand->chip_list, &nfc->chips); in ingenic_nand_init_chip()
432 static void ingenic_nand_cleanup_chips(struct ingenic_nfc *nfc) in ingenic_nand_cleanup_chips() argument
438 while (!list_empty(&nfc->chips)) { in ingenic_nand_cleanup_chips()
439 ingenic_chip = list_first_entry(&nfc->chips, in ingenic_nand_cleanup_chips()
449 static int ingenic_nand_init_chips(struct ingenic_nfc *nfc, in ingenic_nand_init_chips() argument
458 if (num_chips > nfc->num_banks) { in ingenic_nand_init_chips()
460 num_chips, nfc->num_banks); in ingenic_nand_init_chips()
465 ret = ingenic_nand_init_chip(pdev, nfc, np, i); in ingenic_nand_init_chips()
467 ingenic_nand_cleanup_chips(nfc); in ingenic_nand_init_chips()
482 struct ingenic_nfc *nfc; in ingenic_nand_probe() local
491 nfc = devm_kzalloc(dev, struct_size(nfc, cs, num_banks), GFP_KERNEL); in ingenic_nand_probe()
492 if (!nfc) in ingenic_nand_probe()
495 nfc->soc_info = device_get_match_data(dev); in ingenic_nand_probe()
496 if (!nfc->soc_info) in ingenic_nand_probe()
503 nfc->ecc = of_ingenic_ecc_get(dev->of_node); in ingenic_nand_probe()
504 if (IS_ERR(nfc->ecc)) in ingenic_nand_probe()
505 return PTR_ERR(nfc->ecc); in ingenic_nand_probe()
507 nfc->dev = dev; in ingenic_nand_probe()
508 nfc->num_banks = num_banks; in ingenic_nand_probe()
510 nand_controller_init(&nfc->controller); in ingenic_nand_probe()
511 INIT_LIST_HEAD(&nfc->chips); in ingenic_nand_probe()
513 ret = ingenic_nand_init_chips(nfc, pdev); in ingenic_nand_probe()
515 if (nfc->ecc) in ingenic_nand_probe()
516 ingenic_ecc_release(nfc->ecc); in ingenic_nand_probe()
520 platform_set_drvdata(pdev, nfc); in ingenic_nand_probe()
526 struct ingenic_nfc *nfc = platform_get_drvdata(pdev); in ingenic_nand_remove() local
528 if (nfc->ecc) in ingenic_nand_remove()
529 ingenic_ecc_release(nfc->ecc); in ingenic_nand_remove()
531 ingenic_nand_cleanup_chips(nfc); in ingenic_nand_remove()