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
376 if (aq->mr != QSPI_MR_SMM) { in atmel_qspi_set_cfg()
377 atmel_qspi_write(QSPI_MR_SMM, aq, QSPI_MR); in atmel_qspi_set_cfg()
378 aq->mr = QSPI_MR_SMM; in atmel_qspi_set_cfg()
382 (void)atmel_qspi_read(aq, QSPI_SR); in atmel_qspi_set_cfg()
384 if (aq->caps->has_ricr) { in atmel_qspi_set_cfg()
389 atmel_qspi_write(iar, aq, QSPI_IAR); in atmel_qspi_set_cfg()
391 atmel_qspi_write(icr, aq, QSPI_RICR); in atmel_qspi_set_cfg()
393 atmel_qspi_write(icr, aq, QSPI_WICR); in atmel_qspi_set_cfg()
394 atmel_qspi_write(ifr, aq, QSPI_IFR); in atmel_qspi_set_cfg()
400 atmel_qspi_write(iar, aq, QSPI_IAR); in atmel_qspi_set_cfg()
401 atmel_qspi_write(icr, aq, QSPI_ICR); in atmel_qspi_set_cfg()
402 atmel_qspi_write(ifr, aq, QSPI_IFR); in atmel_qspi_set_cfg()
410 struct atmel_qspi *aq = spi_controller_get_devdata(mem->spi->master); in atmel_qspi_exec_op() local
419 if (op->addr.val + op->data.nbytes > aq->mmap_size) in atmel_qspi_exec_op()
422 err = atmel_qspi_set_cfg(aq, op, &offset); in atmel_qspi_exec_op()
429 (void)atmel_qspi_read(aq, QSPI_IFR); in atmel_qspi_exec_op()
433 memcpy_fromio(op->data.buf.in, aq->mem + offset, in atmel_qspi_exec_op()
436 memcpy_toio(aq->mem + offset, op->data.buf.out, in atmel_qspi_exec_op()
440 atmel_qspi_write(QSPI_CR_LASTXFER, aq, QSPI_CR); in atmel_qspi_exec_op()
444 sr = atmel_qspi_read(aq, QSPI_SR); in atmel_qspi_exec_op()
449 reinit_completion(&aq->cmd_completion); in atmel_qspi_exec_op()
450 aq->pending = sr & QSPI_SR_CMD_COMPLETED; in atmel_qspi_exec_op()
451 atmel_qspi_write(QSPI_SR_CMD_COMPLETED, aq, QSPI_IER); in atmel_qspi_exec_op()
452 if (!wait_for_completion_timeout(&aq->cmd_completion, in atmel_qspi_exec_op()
455 atmel_qspi_write(QSPI_SR_CMD_COMPLETED, aq, QSPI_IDR); in atmel_qspi_exec_op()
474 struct atmel_qspi *aq = spi_controller_get_devdata(ctrl); in atmel_qspi_setup() local
484 src_rate = clk_get_rate(aq->pclk); in atmel_qspi_setup()
493 aq->scr = QSPI_SCR_SCBR(scbr); in atmel_qspi_setup()
494 atmel_qspi_write(aq->scr, aq, QSPI_SCR); in atmel_qspi_setup()
499 static void atmel_qspi_init(struct atmel_qspi *aq) in atmel_qspi_init() argument
502 atmel_qspi_write(QSPI_CR_SWRST, aq, QSPI_CR); in atmel_qspi_init()
505 atmel_qspi_write(QSPI_MR_SMM, aq, QSPI_MR); in atmel_qspi_init()
506 aq->mr = QSPI_MR_SMM; in atmel_qspi_init()
509 atmel_qspi_write(QSPI_CR_QSPIEN, aq, QSPI_CR); in atmel_qspi_init()
514 struct atmel_qspi *aq = dev_id; in atmel_qspi_interrupt() local
517 status = atmel_qspi_read(aq, QSPI_SR); in atmel_qspi_interrupt()
518 mask = atmel_qspi_read(aq, QSPI_IMR); in atmel_qspi_interrupt()
524 aq->pending |= pending; in atmel_qspi_interrupt()
525 if ((aq->pending & QSPI_SR_CMD_COMPLETED) == QSPI_SR_CMD_COMPLETED) in atmel_qspi_interrupt()
526 complete(&aq->cmd_completion); in atmel_qspi_interrupt()
534 struct atmel_qspi *aq; in atmel_qspi_probe() local
538 ctrl = spi_alloc_master(&pdev->dev, sizeof(*aq)); in atmel_qspi_probe()
550 aq = spi_controller_get_devdata(ctrl); in atmel_qspi_probe()
552 init_completion(&aq->cmd_completion); in atmel_qspi_probe()
553 aq->pdev = pdev; in atmel_qspi_probe()
557 aq->regs = devm_ioremap_resource(&pdev->dev, res); in atmel_qspi_probe()
558 if (IS_ERR(aq->regs)) { in atmel_qspi_probe()
560 err = 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 err = PTR_ERR(aq->mem); in atmel_qspi_probe()
573 aq->mmap_size = resource_size(res); in atmel_qspi_probe()
576 aq->pclk = devm_clk_get(&pdev->dev, "pclk"); in atmel_qspi_probe()
577 if (IS_ERR(aq->pclk)) in atmel_qspi_probe()
578 aq->pclk = devm_clk_get(&pdev->dev, NULL); in atmel_qspi_probe()
580 if (IS_ERR(aq->pclk)) { in atmel_qspi_probe()
582 err = PTR_ERR(aq->pclk); in atmel_qspi_probe()
587 err = clk_prepare_enable(aq->pclk); in atmel_qspi_probe()
593 aq->caps = of_device_get_match_data(&pdev->dev); in atmel_qspi_probe()
594 if (!aq->caps) { in atmel_qspi_probe()
600 if (aq->caps->has_qspick) { in atmel_qspi_probe()
602 aq->qspick = devm_clk_get(&pdev->dev, "qspick"); in atmel_qspi_probe()
603 if (IS_ERR(aq->qspick)) { in atmel_qspi_probe()
605 err = PTR_ERR(aq->qspick); in atmel_qspi_probe()
610 err = clk_prepare_enable(aq->qspick); in atmel_qspi_probe()
625 0, dev_name(&pdev->dev), aq); in atmel_qspi_probe()
629 atmel_qspi_init(aq); in atmel_qspi_probe()
638 clk_disable_unprepare(aq->qspick); in atmel_qspi_probe()
640 clk_disable_unprepare(aq->pclk); in atmel_qspi_probe()
650 struct atmel_qspi *aq = spi_controller_get_devdata(ctrl); in atmel_qspi_remove() local
653 atmel_qspi_write(QSPI_CR_QSPIDIS, aq, QSPI_CR); in atmel_qspi_remove()
654 clk_disable_unprepare(aq->qspick); in atmel_qspi_remove()
655 clk_disable_unprepare(aq->pclk); in atmel_qspi_remove()
662 struct atmel_qspi *aq = spi_controller_get_devdata(ctrl); in atmel_qspi_suspend() local
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()