Lines Matching full:nfc

70  * In NFC mode, the NAND Flash controller manages the communication.
71 * We use NFC mode for read and write; raw mode for everything else.
118 struct tango_nfc *nfc = to_tango_nfc(chip->controller); in tango_select_target() local
121 writel_relaxed(tchip->timing1, nfc->reg_base + NFC_TIMING1); in tango_select_target()
122 writel_relaxed(tchip->timing2, nfc->reg_base + NFC_TIMING2); in tango_select_target()
123 writel_relaxed(tchip->xfer_cfg, nfc->reg_base + NFC_XFER_CFG); in tango_select_target()
124 writel_relaxed(tchip->pkt_0_cfg, nfc->reg_base + NFC_PKT_0_CFG); in tango_select_target()
125 writel_relaxed(tchip->pkt_n_cfg, nfc->reg_base + NFC_PKT_N_CFG); in tango_select_target()
126 writel_relaxed(tchip->bb_cfg, nfc->reg_base + NFC_BB_CFG); in tango_select_target()
131 struct tango_nfc *nfc = to_tango_nfc(chip->controller); in tango_waitrdy() local
134 return readl_relaxed_poll_timeout(nfc->pbus_base + PBUS_CS_CTRL, in tango_waitrdy()
227 struct tango_nfc *nfc = to_tango_nfc(chip->controller); in decode_error_report() local
229 status = readl_relaxed(nfc->reg_base + NFC_XFER_STATUS); in decode_error_report()
233 res = readl_relaxed(nfc->mem_base + ERROR_REPORT); in decode_error_report()
250 static int do_dma(struct tango_nfc *nfc, enum dma_data_direction dir, int cmd, in do_dma() argument
253 void __iomem *addr = nfc->reg_base + NFC_STATUS; in do_dma()
254 struct dma_chan *chan = nfc->chan; in do_dma()
275 writel_relaxed(MODE_NFC, nfc->pbus_base + PBUS_PAD_MODE); in do_dma()
277 writel_relaxed(page, nfc->reg_base + NFC_ADDR_PAGE); in do_dma()
278 writel_relaxed(0, nfc->reg_base + NFC_ADDR_OFFSET); in do_dma()
279 writel_relaxed(cmd, nfc->reg_base + NFC_FLASH_CMD); in do_dma()
288 writel_relaxed(MODE_RAW, nfc->pbus_base + PBUS_PAD_MODE); in do_dma()
300 struct tango_nfc *nfc = to_tango_nfc(chip->controller); in tango_read_page() local
307 err = do_dma(nfc, DMA_FROM_DEVICE, NFC_READ, buf, len, page); in tango_read_page()
324 struct tango_nfc *nfc = to_tango_nfc(chip->controller); in tango_write_page() local
334 writel_relaxed(0xffffffff, nfc->mem_base + METADATA); in tango_write_page()
335 err = do_dma(nfc, DMA_TO_DEVICE, NFC_WRITE, buf, len, page); in tango_write_page()
521 struct tango_nfc *nfc = to_tango_nfc(chip->controller); in tango_set_timings() local
524 int kHz = nfc->freq_kHz; in tango_set_timings()
580 struct tango_nfc *nfc = dev_get_drvdata(dev); in chip_init() local
607 chip->controller = &nfc->hw; in chip_init()
608 tchip->base = nfc->pbus_base + (cs * 256); in chip_init()
629 nfc->chips[cs] = tchip; in chip_init()
636 struct tango_nfc *nfc = platform_get_drvdata(pdev); in tango_nand_remove() local
640 dma_release_channel(nfc->chan); in tango_nand_remove()
643 if (nfc->chips[cs]) { in tango_nand_remove()
644 chip = &nfc->chips[cs]->nand_chip; in tango_nand_remove()
659 struct tango_nfc *nfc; in tango_nand_probe() local
662 nfc = devm_kzalloc(&pdev->dev, sizeof(*nfc), GFP_KERNEL); in tango_nand_probe()
663 if (!nfc) in tango_nand_probe()
667 nfc->reg_base = devm_ioremap_resource(&pdev->dev, res); in tango_nand_probe()
668 if (IS_ERR(nfc->reg_base)) in tango_nand_probe()
669 return PTR_ERR(nfc->reg_base); in tango_nand_probe()
672 nfc->mem_base = devm_ioremap_resource(&pdev->dev, res); in tango_nand_probe()
673 if (IS_ERR(nfc->mem_base)) in tango_nand_probe()
674 return PTR_ERR(nfc->mem_base); in tango_nand_probe()
677 nfc->pbus_base = devm_ioremap_resource(&pdev->dev, res); in tango_nand_probe()
678 if (IS_ERR(nfc->pbus_base)) in tango_nand_probe()
679 return PTR_ERR(nfc->pbus_base); in tango_nand_probe()
681 writel_relaxed(MODE_RAW, nfc->pbus_base + PBUS_PAD_MODE); in tango_nand_probe()
687 nfc->chan = dma_request_chan(&pdev->dev, "rxtx"); in tango_nand_probe()
688 if (IS_ERR(nfc->chan)) in tango_nand_probe()
689 return PTR_ERR(nfc->chan); in tango_nand_probe()
691 platform_set_drvdata(pdev, nfc); in tango_nand_probe()
692 nand_controller_init(&nfc->hw); in tango_nand_probe()
693 nfc->hw.ops = &tango_controller_ops; in tango_nand_probe()
694 nfc->freq_kHz = clk_get_rate(clk) / 1000; in tango_nand_probe()