Lines Matching refs:aq
225 static u32 atmel_qspi_read(struct atmel_qspi *aq, u32 offset) in atmel_qspi_read() argument
227 u32 value = readl_relaxed(aq->regs + offset); in atmel_qspi_read()
232 dev_vdbg(&aq->pdev->dev, "read 0x%08x from %s\n", value, in atmel_qspi_read()
239 static void atmel_qspi_write(u32 value, struct atmel_qspi *aq, u32 offset) in atmel_qspi_write() argument
244 dev_vdbg(&aq->pdev->dev, "write 0x%08x into %s\n", value, in atmel_qspi_write()
248 writel_relaxed(value, aq->regs + offset); in atmel_qspi_write()
300 static int atmel_qspi_set_cfg(struct atmel_qspi *aq, in atmel_qspi_set_cfg() argument
383 if (aq->mr != QSPI_MR_SMM) { in atmel_qspi_set_cfg()
384 atmel_qspi_write(QSPI_MR_SMM, aq, QSPI_MR); in atmel_qspi_set_cfg()
385 aq->mr = QSPI_MR_SMM; in atmel_qspi_set_cfg()
389 (void)atmel_qspi_read(aq, QSPI_SR); in atmel_qspi_set_cfg()
393 atmel_qspi_write(iar, aq, QSPI_IAR); in atmel_qspi_set_cfg()
395 if (aq->caps->has_ricr) { in atmel_qspi_set_cfg()
397 atmel_qspi_write(icr, aq, QSPI_RICR); in atmel_qspi_set_cfg()
399 atmel_qspi_write(icr, aq, QSPI_WICR); in atmel_qspi_set_cfg()
404 atmel_qspi_write(icr, aq, QSPI_ICR); in atmel_qspi_set_cfg()
407 atmel_qspi_write(ifr, aq, QSPI_IFR); in atmel_qspi_set_cfg()
414 struct atmel_qspi *aq = spi_controller_get_devdata(mem->spi->master); in atmel_qspi_exec_op() local
423 if (op->addr.val + op->data.nbytes > aq->mmap_size) in atmel_qspi_exec_op()
426 err = atmel_qspi_set_cfg(aq, op, &offset); in atmel_qspi_exec_op()
433 (void)atmel_qspi_read(aq, QSPI_IFR); in atmel_qspi_exec_op()
437 memcpy_fromio(op->data.buf.in, aq->mem + offset, in atmel_qspi_exec_op()
440 memcpy_toio(aq->mem + offset, op->data.buf.out, in atmel_qspi_exec_op()
444 atmel_qspi_write(QSPI_CR_LASTXFER, aq, QSPI_CR); in atmel_qspi_exec_op()
448 sr = atmel_qspi_read(aq, QSPI_SR); in atmel_qspi_exec_op()
453 reinit_completion(&aq->cmd_completion); in atmel_qspi_exec_op()
454 aq->pending = sr & QSPI_SR_CMD_COMPLETED; in atmel_qspi_exec_op()
455 atmel_qspi_write(QSPI_SR_CMD_COMPLETED, aq, QSPI_IER); in atmel_qspi_exec_op()
456 if (!wait_for_completion_timeout(&aq->cmd_completion, in atmel_qspi_exec_op()
459 atmel_qspi_write(QSPI_SR_CMD_COMPLETED, aq, QSPI_IDR); in atmel_qspi_exec_op()
478 struct atmel_qspi *aq = spi_controller_get_devdata(ctrl); in atmel_qspi_setup() local
488 src_rate = clk_get_rate(aq->pclk); in atmel_qspi_setup()
497 aq->scr = QSPI_SCR_SCBR(scbr); in atmel_qspi_setup()
498 atmel_qspi_write(aq->scr, aq, QSPI_SCR); in atmel_qspi_setup()
503 static void atmel_qspi_init(struct atmel_qspi *aq) in atmel_qspi_init() argument
506 atmel_qspi_write(QSPI_CR_SWRST, aq, QSPI_CR); in atmel_qspi_init()
509 atmel_qspi_write(QSPI_MR_SMM, aq, QSPI_MR); in atmel_qspi_init()
510 aq->mr = QSPI_MR_SMM; in atmel_qspi_init()
513 atmel_qspi_write(QSPI_CR_QSPIEN, aq, QSPI_CR); in atmel_qspi_init()
518 struct atmel_qspi *aq = dev_id; in atmel_qspi_interrupt() local
521 status = atmel_qspi_read(aq, QSPI_SR); in atmel_qspi_interrupt()
522 mask = atmel_qspi_read(aq, QSPI_IMR); in atmel_qspi_interrupt()
528 aq->pending |= pending; in atmel_qspi_interrupt()
529 if ((aq->pending & QSPI_SR_CMD_COMPLETED) == QSPI_SR_CMD_COMPLETED) in atmel_qspi_interrupt()
530 complete(&aq->cmd_completion); in atmel_qspi_interrupt()
538 struct atmel_qspi *aq; in atmel_qspi_probe() local
542 ctrl = devm_spi_alloc_master(&pdev->dev, sizeof(*aq)); in atmel_qspi_probe()
554 aq = spi_controller_get_devdata(ctrl); in atmel_qspi_probe()
556 init_completion(&aq->cmd_completion); in atmel_qspi_probe()
557 aq->pdev = pdev; in atmel_qspi_probe()
561 aq->regs = devm_ioremap_resource(&pdev->dev, res); in atmel_qspi_probe()
562 if (IS_ERR(aq->regs)) { in atmel_qspi_probe()
564 return PTR_ERR(aq->regs); in atmel_qspi_probe()
569 aq->mem = devm_ioremap_resource(&pdev->dev, res); in atmel_qspi_probe()
570 if (IS_ERR(aq->mem)) { in atmel_qspi_probe()
572 return PTR_ERR(aq->mem); in atmel_qspi_probe()
575 aq->mmap_size = resource_size(res); in atmel_qspi_probe()
578 aq->pclk = devm_clk_get(&pdev->dev, "pclk"); in atmel_qspi_probe()
579 if (IS_ERR(aq->pclk)) in atmel_qspi_probe()
580 aq->pclk = devm_clk_get(&pdev->dev, NULL); in atmel_qspi_probe()
582 if (IS_ERR(aq->pclk)) { in atmel_qspi_probe()
584 return PTR_ERR(aq->pclk); in atmel_qspi_probe()
588 err = clk_prepare_enable(aq->pclk); in atmel_qspi_probe()
594 aq->caps = of_device_get_match_data(&pdev->dev); in atmel_qspi_probe()
595 if (!aq->caps) { in atmel_qspi_probe()
601 if (aq->caps->has_qspick) { in atmel_qspi_probe()
603 aq->qspick = devm_clk_get(&pdev->dev, "qspick"); in atmel_qspi_probe()
604 if (IS_ERR(aq->qspick)) { in atmel_qspi_probe()
606 err = PTR_ERR(aq->qspick); in atmel_qspi_probe()
611 err = clk_prepare_enable(aq->qspick); in atmel_qspi_probe()
626 0, dev_name(&pdev->dev), aq); in atmel_qspi_probe()
630 atmel_qspi_init(aq); in atmel_qspi_probe()
639 clk_disable_unprepare(aq->qspick); in atmel_qspi_probe()
641 clk_disable_unprepare(aq->pclk); in atmel_qspi_probe()
649 struct atmel_qspi *aq = spi_controller_get_devdata(ctrl); in atmel_qspi_remove() local
652 atmel_qspi_write(QSPI_CR_QSPIDIS, aq, QSPI_CR); in atmel_qspi_remove()
653 clk_disable_unprepare(aq->qspick); in atmel_qspi_remove()
654 clk_disable_unprepare(aq->pclk); in atmel_qspi_remove()
661 struct atmel_qspi *aq = spi_controller_get_devdata(ctrl); in atmel_qspi_suspend() local
663 atmel_qspi_write(QSPI_CR_QSPIDIS, aq, QSPI_CR); in atmel_qspi_suspend()
664 clk_disable_unprepare(aq->qspick); in atmel_qspi_suspend()
665 clk_disable_unprepare(aq->pclk); in atmel_qspi_suspend()
673 struct atmel_qspi *aq = spi_controller_get_devdata(ctrl); in atmel_qspi_resume() local
675 clk_prepare_enable(aq->pclk); in atmel_qspi_resume()
676 clk_prepare_enable(aq->qspick); in atmel_qspi_resume()
678 atmel_qspi_init(aq); in atmel_qspi_resume()
680 atmel_qspi_write(aq->scr, aq, QSPI_SCR); in atmel_qspi_resume()