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()
297 static int atmel_qspi_set_cfg(struct atmel_qspi *aq, in atmel_qspi_set_cfg() argument
380 if (aq->mr != QSPI_MR_SMM) { in atmel_qspi_set_cfg()
381 atmel_qspi_write(QSPI_MR_SMM, aq, QSPI_MR); in atmel_qspi_set_cfg()
382 aq->mr = QSPI_MR_SMM; in atmel_qspi_set_cfg()
386 (void)atmel_qspi_read(aq, QSPI_SR); in atmel_qspi_set_cfg()
390 atmel_qspi_write(iar, aq, QSPI_IAR); in atmel_qspi_set_cfg()
392 if (aq->caps->has_ricr) { in atmel_qspi_set_cfg()
394 atmel_qspi_write(icr, aq, QSPI_RICR); in atmel_qspi_set_cfg()
396 atmel_qspi_write(icr, aq, QSPI_WICR); in atmel_qspi_set_cfg()
401 atmel_qspi_write(icr, aq, QSPI_ICR); in atmel_qspi_set_cfg()
404 atmel_qspi_write(ifr, aq, QSPI_IFR); in atmel_qspi_set_cfg()
411 struct atmel_qspi *aq = spi_controller_get_devdata(mem->spi->master); in atmel_qspi_exec_op() local
420 if (op->addr.val + op->data.nbytes > aq->mmap_size) in atmel_qspi_exec_op()
423 err = atmel_qspi_set_cfg(aq, op, &offset); in atmel_qspi_exec_op()
430 (void)atmel_qspi_read(aq, QSPI_IFR); in atmel_qspi_exec_op()
434 memcpy_fromio(op->data.buf.in, aq->mem + offset, in atmel_qspi_exec_op()
437 memcpy_toio(aq->mem + offset, op->data.buf.out, in atmel_qspi_exec_op()
441 atmel_qspi_write(QSPI_CR_LASTXFER, aq, QSPI_CR); in atmel_qspi_exec_op()
445 sr = atmel_qspi_read(aq, QSPI_SR); in atmel_qspi_exec_op()
450 reinit_completion(&aq->cmd_completion); in atmel_qspi_exec_op()
451 aq->pending = sr & QSPI_SR_CMD_COMPLETED; in atmel_qspi_exec_op()
452 atmel_qspi_write(QSPI_SR_CMD_COMPLETED, aq, QSPI_IER); in atmel_qspi_exec_op()
453 if (!wait_for_completion_timeout(&aq->cmd_completion, in atmel_qspi_exec_op()
456 atmel_qspi_write(QSPI_SR_CMD_COMPLETED, aq, QSPI_IDR); in atmel_qspi_exec_op()
475 struct atmel_qspi *aq = spi_controller_get_devdata(ctrl); in atmel_qspi_setup() local
485 src_rate = clk_get_rate(aq->pclk); in atmel_qspi_setup()
494 aq->scr = QSPI_SCR_SCBR(scbr); in atmel_qspi_setup()
495 atmel_qspi_write(aq->scr, aq, QSPI_SCR); in atmel_qspi_setup()
500 static void atmel_qspi_init(struct atmel_qspi *aq) in atmel_qspi_init() argument
503 atmel_qspi_write(QSPI_CR_SWRST, aq, QSPI_CR); in atmel_qspi_init()
506 atmel_qspi_write(QSPI_MR_SMM, aq, QSPI_MR); in atmel_qspi_init()
507 aq->mr = QSPI_MR_SMM; in atmel_qspi_init()
510 atmel_qspi_write(QSPI_CR_QSPIEN, aq, QSPI_CR); in atmel_qspi_init()
515 struct atmel_qspi *aq = dev_id; in atmel_qspi_interrupt() local
518 status = atmel_qspi_read(aq, QSPI_SR); in atmel_qspi_interrupt()
519 mask = atmel_qspi_read(aq, QSPI_IMR); in atmel_qspi_interrupt()
525 aq->pending |= pending; in atmel_qspi_interrupt()
526 if ((aq->pending & QSPI_SR_CMD_COMPLETED) == QSPI_SR_CMD_COMPLETED) in atmel_qspi_interrupt()
527 complete(&aq->cmd_completion); in atmel_qspi_interrupt()
535 struct atmel_qspi *aq; in atmel_qspi_probe() local
539 ctrl = devm_spi_alloc_master(&pdev->dev, sizeof(*aq)); in atmel_qspi_probe()
551 aq = spi_controller_get_devdata(ctrl); in atmel_qspi_probe()
553 init_completion(&aq->cmd_completion); in atmel_qspi_probe()
554 aq->pdev = pdev; in atmel_qspi_probe()
558 aq->regs = devm_ioremap_resource(&pdev->dev, res); in atmel_qspi_probe()
559 if (IS_ERR(aq->regs)) { in atmel_qspi_probe()
561 return PTR_ERR(aq->regs); in atmel_qspi_probe()
566 aq->mem = devm_ioremap_resource(&pdev->dev, res); in atmel_qspi_probe()
567 if (IS_ERR(aq->mem)) { in atmel_qspi_probe()
569 return PTR_ERR(aq->mem); in atmel_qspi_probe()
572 aq->mmap_size = resource_size(res); in atmel_qspi_probe()
575 aq->pclk = devm_clk_get(&pdev->dev, "pclk"); in atmel_qspi_probe()
576 if (IS_ERR(aq->pclk)) in atmel_qspi_probe()
577 aq->pclk = devm_clk_get(&pdev->dev, NULL); in atmel_qspi_probe()
579 if (IS_ERR(aq->pclk)) { in atmel_qspi_probe()
581 return PTR_ERR(aq->pclk); in atmel_qspi_probe()
585 err = clk_prepare_enable(aq->pclk); in atmel_qspi_probe()
591 aq->caps = of_device_get_match_data(&pdev->dev); in atmel_qspi_probe()
592 if (!aq->caps) { in atmel_qspi_probe()
598 if (aq->caps->has_qspick) { in atmel_qspi_probe()
600 aq->qspick = devm_clk_get(&pdev->dev, "qspick"); in atmel_qspi_probe()
601 if (IS_ERR(aq->qspick)) { in atmel_qspi_probe()
603 err = PTR_ERR(aq->qspick); in atmel_qspi_probe()
608 err = clk_prepare_enable(aq->qspick); in atmel_qspi_probe()
623 0, dev_name(&pdev->dev), aq); in atmel_qspi_probe()
627 atmel_qspi_init(aq); in atmel_qspi_probe()
636 clk_disable_unprepare(aq->qspick); in atmel_qspi_probe()
638 clk_disable_unprepare(aq->pclk); in atmel_qspi_probe()
646 struct atmel_qspi *aq = spi_controller_get_devdata(ctrl); in atmel_qspi_remove() local
649 atmel_qspi_write(QSPI_CR_QSPIDIS, aq, QSPI_CR); in atmel_qspi_remove()
650 clk_disable_unprepare(aq->qspick); in atmel_qspi_remove()
651 clk_disable_unprepare(aq->pclk); in atmel_qspi_remove()
658 struct atmel_qspi *aq = spi_controller_get_devdata(ctrl); in atmel_qspi_suspend() local
660 atmel_qspi_write(QSPI_CR_QSPIDIS, aq, QSPI_CR); in atmel_qspi_suspend()
661 clk_disable_unprepare(aq->qspick); in atmel_qspi_suspend()
662 clk_disable_unprepare(aq->pclk); in atmel_qspi_suspend()
670 struct atmel_qspi *aq = spi_controller_get_devdata(ctrl); in atmel_qspi_resume() local
672 clk_prepare_enable(aq->pclk); in atmel_qspi_resume()
673 clk_prepare_enable(aq->qspick); in atmel_qspi_resume()
675 atmel_qspi_init(aq); in atmel_qspi_resume()
677 atmel_qspi_write(aq->scr, aq, QSPI_SCR); in atmel_qspi_resume()