Symbol: a3700_spi
drivers/spi/spi-armada-3700.c
116
static u32 spireg_read(struct a3700_spi *a3700_spi, u32 offset)
drivers/spi/spi-armada-3700.c
118
return readl(a3700_spi->base + offset);
drivers/spi/spi-armada-3700.c
121
static void spireg_write(struct a3700_spi *a3700_spi, u32 offset, u32 data)
drivers/spi/spi-armada-3700.c
123
writel(data, a3700_spi->base + offset);
drivers/spi/spi-armada-3700.c
126
static void a3700_spi_auto_cs_unset(struct a3700_spi *a3700_spi)
drivers/spi/spi-armada-3700.c
130
val = spireg_read(a3700_spi, A3700_SPI_IF_CFG_REG);
drivers/spi/spi-armada-3700.c
132
spireg_write(a3700_spi, A3700_SPI_IF_CFG_REG, val);
drivers/spi/spi-armada-3700.c
135
static void a3700_spi_activate_cs(struct a3700_spi *a3700_spi, unsigned int cs)
drivers/spi/spi-armada-3700.c
139
val = spireg_read(a3700_spi, A3700_SPI_IF_CTRL_REG);
drivers/spi/spi-armada-3700.c
141
spireg_write(a3700_spi, A3700_SPI_IF_CTRL_REG, val);
drivers/spi/spi-armada-3700.c
144
static void a3700_spi_deactivate_cs(struct a3700_spi *a3700_spi,
drivers/spi/spi-armada-3700.c
149
val = spireg_read(a3700_spi, A3700_SPI_IF_CTRL_REG);
drivers/spi/spi-armada-3700.c
151
spireg_write(a3700_spi, A3700_SPI_IF_CTRL_REG, val);
drivers/spi/spi-armada-3700.c
154
static int a3700_spi_pin_mode_set(struct a3700_spi *a3700_spi,
drivers/spi/spi-armada-3700.c
159
val = spireg_read(a3700_spi, A3700_SPI_IF_CFG_REG);
drivers/spi/spi-armada-3700.c
176
dev_err(&a3700_spi->host->dev, "wrong pin mode %u", pin_mode);
drivers/spi/spi-armada-3700.c
180
spireg_write(a3700_spi, A3700_SPI_IF_CFG_REG, val);
drivers/spi/spi-armada-3700.c
185
static void a3700_spi_fifo_mode_set(struct a3700_spi *a3700_spi, bool enable)
drivers/spi/spi-armada-3700.c
189
val = spireg_read(a3700_spi, A3700_SPI_IF_CFG_REG);
drivers/spi/spi-armada-3700.c
194
spireg_write(a3700_spi, A3700_SPI_IF_CFG_REG, val);
drivers/spi/spi-armada-3700.c
197
static void a3700_spi_mode_set(struct a3700_spi *a3700_spi,
drivers/spi/spi-armada-3700.c
202
val = spireg_read(a3700_spi, A3700_SPI_IF_CFG_REG);
drivers/spi/spi-armada-3700.c
214
spireg_write(a3700_spi, A3700_SPI_IF_CFG_REG, val);
drivers/spi/spi-armada-3700.c
217
static void a3700_spi_clock_set(struct a3700_spi *a3700_spi,
drivers/spi/spi-armada-3700.c
223
prescale = DIV_ROUND_UP(clk_get_rate(a3700_spi->clk), speed_hz);
drivers/spi/spi-armada-3700.c
232
val = spireg_read(a3700_spi, A3700_SPI_IF_CFG_REG);
drivers/spi/spi-armada-3700.c
236
spireg_write(a3700_spi, A3700_SPI_IF_CFG_REG, val);
drivers/spi/spi-armada-3700.c
239
val = spireg_read(a3700_spi, A3700_SPI_IF_TIME_REG);
drivers/spi/spi-armada-3700.c
241
spireg_write(a3700_spi, A3700_SPI_IF_TIME_REG, val);
drivers/spi/spi-armada-3700.c
245
static void a3700_spi_bytelen_set(struct a3700_spi *a3700_spi, unsigned int len)
drivers/spi/spi-armada-3700.c
249
val = spireg_read(a3700_spi, A3700_SPI_IF_CFG_REG);
drivers/spi/spi-armada-3700.c
254
spireg_write(a3700_spi, A3700_SPI_IF_CFG_REG, val);
drivers/spi/spi-armada-3700.c
256
a3700_spi->byte_len = len;
drivers/spi/spi-armada-3700.c
259
static int a3700_spi_fifo_flush(struct a3700_spi *a3700_spi)
drivers/spi/spi-armada-3700.c
264
val = spireg_read(a3700_spi, A3700_SPI_IF_CFG_REG);
drivers/spi/spi-armada-3700.c
266
spireg_write(a3700_spi, A3700_SPI_IF_CFG_REG, val);
drivers/spi/spi-armada-3700.c
269
val = spireg_read(a3700_spi, A3700_SPI_IF_CFG_REG);
drivers/spi/spi-armada-3700.c
278
static void a3700_spi_init(struct a3700_spi *a3700_spi)
drivers/spi/spi-armada-3700.c
280
struct spi_controller *host = a3700_spi->host;
drivers/spi/spi-armada-3700.c
285
val = spireg_read(a3700_spi, A3700_SPI_IF_CFG_REG);
drivers/spi/spi-armada-3700.c
287
spireg_write(a3700_spi, A3700_SPI_IF_CFG_REG, val);
drivers/spi/spi-armada-3700.c
291
val = spireg_read(a3700_spi, A3700_SPI_IF_CFG_REG);
drivers/spi/spi-armada-3700.c
293
spireg_write(a3700_spi, A3700_SPI_IF_CFG_REG, val);
drivers/spi/spi-armada-3700.c
296
a3700_spi_auto_cs_unset(a3700_spi);
drivers/spi/spi-armada-3700.c
298
a3700_spi_deactivate_cs(a3700_spi, i);
drivers/spi/spi-armada-3700.c
301
a3700_spi_fifo_mode_set(a3700_spi, true);
drivers/spi/spi-armada-3700.c
304
a3700_spi_mode_set(a3700_spi, host->mode_bits);
drivers/spi/spi-armada-3700.c
307
spireg_write(a3700_spi, A3700_SPI_IF_HDR_CNT_REG, 0);
drivers/spi/spi-armada-3700.c
308
spireg_write(a3700_spi, A3700_SPI_IF_DIN_CNT_REG, 0);
drivers/spi/spi-armada-3700.c
311
spireg_write(a3700_spi, A3700_SPI_INT_MASK_REG, 0);
drivers/spi/spi-armada-3700.c
312
spireg_write(a3700_spi, A3700_SPI_INT_STAT_REG, ~0U);
drivers/spi/spi-armada-3700.c
318
struct a3700_spi *a3700_spi;
drivers/spi/spi-armada-3700.c
321
a3700_spi = spi_controller_get_devdata(host);
drivers/spi/spi-armada-3700.c
324
cause = spireg_read(a3700_spi, A3700_SPI_INT_STAT_REG);
drivers/spi/spi-armada-3700.c
326
if (!cause || !(a3700_spi->wait_mask & cause))
drivers/spi/spi-armada-3700.c
330
spireg_write(a3700_spi, A3700_SPI_INT_MASK_REG, 0);
drivers/spi/spi-armada-3700.c
331
spireg_write(a3700_spi, A3700_SPI_INT_STAT_REG, cause);
drivers/spi/spi-armada-3700.c
334
complete(&a3700_spi->done);
drivers/spi/spi-armada-3700.c
341
struct a3700_spi *a3700_spi;
drivers/spi/spi-armada-3700.c
346
a3700_spi = spi_controller_get_devdata(spi->controller);
drivers/spi/spi-armada-3700.c
354
ctrl_reg = spireg_read(a3700_spi, A3700_SPI_IF_CTRL_REG);
drivers/spi/spi-armada-3700.c
355
if (a3700_spi->wait_mask & ctrl_reg)
drivers/spi/spi-armada-3700.c
358
reinit_completion(&a3700_spi->done);
drivers/spi/spi-armada-3700.c
360
spireg_write(a3700_spi, A3700_SPI_INT_MASK_REG,
drivers/spi/spi-armada-3700.c
361
a3700_spi->wait_mask);
drivers/spi/spi-armada-3700.c
364
time_left = wait_for_completion_timeout(&a3700_spi->done,
drivers/spi/spi-armada-3700.c
367
a3700_spi->wait_mask = 0;
drivers/spi/spi-armada-3700.c
380
ctrl_reg = spireg_read(a3700_spi, A3700_SPI_IF_CTRL_REG);
drivers/spi/spi-armada-3700.c
381
if (a3700_spi->wait_mask & ctrl_reg)
drivers/spi/spi-armada-3700.c
384
spireg_write(a3700_spi, A3700_SPI_INT_MASK_REG, 0);
drivers/spi/spi-armada-3700.c
393
struct a3700_spi *a3700_spi;
drivers/spi/spi-armada-3700.c
395
a3700_spi = spi_controller_get_devdata(spi->controller);
drivers/spi/spi-armada-3700.c
396
a3700_spi->wait_mask = bit_mask;
drivers/spi/spi-armada-3700.c
401
static void a3700_spi_fifo_thres_set(struct a3700_spi *a3700_spi,
drivers/spi/spi-armada-3700.c
406
val = spireg_read(a3700_spi, A3700_SPI_IF_CFG_REG);
drivers/spi/spi-armada-3700.c
411
spireg_write(a3700_spi, A3700_SPI_IF_CFG_REG, val);
drivers/spi/spi-armada-3700.c
417
struct a3700_spi *a3700_spi;
drivers/spi/spi-armada-3700.c
419
a3700_spi = spi_controller_get_devdata(spi->controller);
drivers/spi/spi-armada-3700.c
421
a3700_spi_clock_set(a3700_spi, xfer->speed_hz);
drivers/spi/spi-armada-3700.c
426
a3700_spi_bytelen_set(a3700_spi, 4);
drivers/spi/spi-armada-3700.c
429
a3700_spi->tx_buf = xfer->tx_buf;
drivers/spi/spi-armada-3700.c
430
a3700_spi->rx_buf = xfer->rx_buf;
drivers/spi/spi-armada-3700.c
431
a3700_spi->buf_len = xfer->len;
drivers/spi/spi-armada-3700.c
436
struct a3700_spi *a3700_spi = spi_controller_get_devdata(spi->controller);
drivers/spi/spi-armada-3700.c
439
a3700_spi_activate_cs(a3700_spi, spi_get_chipselect(spi, 0));
drivers/spi/spi-armada-3700.c
441
a3700_spi_deactivate_cs(a3700_spi, spi_get_chipselect(spi, 0));
drivers/spi/spi-armada-3700.c
444
static void a3700_spi_header_set(struct a3700_spi *a3700_spi)
drivers/spi/spi-armada-3700.c
450
spireg_write(a3700_spi, A3700_SPI_IF_INST_REG, 0);
drivers/spi/spi-armada-3700.c
451
spireg_write(a3700_spi, A3700_SPI_IF_ADDR_REG, 0);
drivers/spi/spi-armada-3700.c
452
spireg_write(a3700_spi, A3700_SPI_IF_RMODE_REG, 0);
drivers/spi/spi-armada-3700.c
453
spireg_write(a3700_spi, A3700_SPI_IF_HDR_CNT_REG, 0);
drivers/spi/spi-armada-3700.c
456
if (a3700_spi->tx_buf) {
drivers/spi/spi-armada-3700.c
465
addr_cnt = a3700_spi->buf_len % 4;
drivers/spi/spi-armada-3700.c
469
spireg_write(a3700_spi, A3700_SPI_IF_HDR_CNT_REG, val);
drivers/spi/spi-armada-3700.c
472
a3700_spi->buf_len -= addr_cnt;
drivers/spi/spi-armada-3700.c
477
val = (val << 8) | a3700_spi->tx_buf[0];
drivers/spi/spi-armada-3700.c
478
a3700_spi->tx_buf++;
drivers/spi/spi-armada-3700.c
480
spireg_write(a3700_spi, A3700_SPI_IF_ADDR_REG, val);
drivers/spi/spi-armada-3700.c
485
static int a3700_is_wfifo_full(struct a3700_spi *a3700_spi)
drivers/spi/spi-armada-3700.c
489
val = spireg_read(a3700_spi, A3700_SPI_IF_CTRL_REG);
drivers/spi/spi-armada-3700.c
493
static int a3700_spi_fifo_write(struct a3700_spi *a3700_spi)
drivers/spi/spi-armada-3700.c
497
while (!a3700_is_wfifo_full(a3700_spi) && a3700_spi->buf_len) {
drivers/spi/spi-armada-3700.c
498
val = *(u32 *)a3700_spi->tx_buf;
drivers/spi/spi-armada-3700.c
499
spireg_write(a3700_spi, A3700_SPI_DATA_OUT_REG, cpu_to_le32(val));
drivers/spi/spi-armada-3700.c
500
a3700_spi->buf_len -= 4;
drivers/spi/spi-armada-3700.c
501
a3700_spi->tx_buf += 4;
drivers/spi/spi-armada-3700.c
507
static int a3700_is_rfifo_empty(struct a3700_spi *a3700_spi)
drivers/spi/spi-armada-3700.c
509
u32 val = spireg_read(a3700_spi, A3700_SPI_IF_CTRL_REG);
drivers/spi/spi-armada-3700.c
514
static int a3700_spi_fifo_read(struct a3700_spi *a3700_spi)
drivers/spi/spi-armada-3700.c
518
while (!a3700_is_rfifo_empty(a3700_spi) && a3700_spi->buf_len) {
drivers/spi/spi-armada-3700.c
519
val = spireg_read(a3700_spi, A3700_SPI_DATA_IN_REG);
drivers/spi/spi-armada-3700.c
520
if (a3700_spi->buf_len >= 4) {
drivers/spi/spi-armada-3700.c
522
memcpy(a3700_spi->rx_buf, &val, 4);
drivers/spi/spi-armada-3700.c
524
a3700_spi->buf_len -= 4;
drivers/spi/spi-armada-3700.c
525
a3700_spi->rx_buf += 4;
drivers/spi/spi-armada-3700.c
532
while (a3700_spi->buf_len) {
drivers/spi/spi-armada-3700.c
533
*a3700_spi->rx_buf = val & 0xff;
drivers/spi/spi-armada-3700.c
536
a3700_spi->buf_len--;
drivers/spi/spi-armada-3700.c
537
a3700_spi->rx_buf++;
drivers/spi/spi-armada-3700.c
545
static void a3700_spi_transfer_abort_fifo(struct a3700_spi *a3700_spi)
drivers/spi/spi-armada-3700.c
550
val = spireg_read(a3700_spi, A3700_SPI_IF_CFG_REG);
drivers/spi/spi-armada-3700.c
552
spireg_write(a3700_spi, A3700_SPI_IF_CFG_REG, val);
drivers/spi/spi-armada-3700.c
555
val = spireg_read(a3700_spi, A3700_SPI_IF_CFG_REG);
drivers/spi/spi-armada-3700.c
561
a3700_spi_fifo_flush(a3700_spi);
drivers/spi/spi-armada-3700.c
564
spireg_write(a3700_spi, A3700_SPI_IF_CFG_REG, val);
drivers/spi/spi-armada-3700.c
570
struct a3700_spi *a3700_spi = spi_controller_get_devdata(host);
drivers/spi/spi-armada-3700.c
574
ret = clk_enable(a3700_spi->clk);
drivers/spi/spi-armada-3700.c
581
ret = a3700_spi_fifo_flush(a3700_spi);
drivers/spi/spi-armada-3700.c
585
a3700_spi_mode_set(a3700_spi, spi->mode);
drivers/spi/spi-armada-3700.c
594
struct a3700_spi *a3700_spi = spi_controller_get_devdata(host);
drivers/spi/spi-armada-3700.c
600
a3700_spi_fifo_mode_set(a3700_spi, true);
drivers/spi/spi-armada-3700.c
604
a3700_spi_fifo_thres_set(a3700_spi, byte_len);
drivers/spi/spi-armada-3700.c
611
a3700_spi_pin_mode_set(a3700_spi, nbits, xfer->rx_buf ? true : false);
drivers/spi/spi-armada-3700.c
614
a3700_spi_fifo_flush(a3700_spi);
drivers/spi/spi-armada-3700.c
617
a3700_spi_header_set(a3700_spi);
drivers/spi/spi-armada-3700.c
623
spireg_write(a3700_spi, A3700_SPI_DATA_OUT_REG, 0);
drivers/spi/spi-armada-3700.c
626
spireg_write(a3700_spi, A3700_SPI_IF_DIN_CNT_REG,
drivers/spi/spi-armada-3700.c
627
a3700_spi->buf_len);
drivers/spi/spi-armada-3700.c
629
val = spireg_read(a3700_spi, A3700_SPI_IF_CFG_REG);
drivers/spi/spi-armada-3700.c
632
spireg_write(a3700_spi, A3700_SPI_IF_CFG_REG, val);
drivers/spi/spi-armada-3700.c
635
val = spireg_read(a3700_spi, A3700_SPI_IF_CFG_REG);
drivers/spi/spi-armada-3700.c
637
spireg_write(a3700_spi, A3700_SPI_IF_CFG_REG, val);
drivers/spi/spi-armada-3700.c
645
a3700_spi->xmit_data = (a3700_spi->buf_len != 0);
drivers/spi/spi-armada-3700.c
648
while (a3700_spi->buf_len) {
drivers/spi/spi-armada-3700.c
649
if (a3700_spi->tx_buf) {
drivers/spi/spi-armada-3700.c
659
ret = a3700_spi_fifo_write(a3700_spi);
drivers/spi/spi-armada-3700.c
662
} else if (a3700_spi->rx_buf) {
drivers/spi/spi-armada-3700.c
672
ret = a3700_spi_fifo_read(a3700_spi);
drivers/spi/spi-armada-3700.c
690
if (a3700_spi->tx_buf) {
drivers/spi/spi-armada-3700.c
691
if (a3700_spi->xmit_data) {
drivers/spi/spi-armada-3700.c
709
val = spireg_read(a3700_spi, A3700_SPI_IF_CFG_REG);
drivers/spi/spi-armada-3700.c
711
spireg_write(a3700_spi, A3700_SPI_IF_CFG_REG, val);
drivers/spi/spi-armada-3700.c
715
val = spireg_read(a3700_spi, A3700_SPI_IF_CFG_REG);
drivers/spi/spi-armada-3700.c
728
spireg_write(a3700_spi, A3700_SPI_IF_CFG_REG, val);
drivers/spi/spi-armada-3700.c
732
a3700_spi_transfer_abort_fifo(a3700_spi);
drivers/spi/spi-armada-3700.c
743
struct a3700_spi *a3700_spi = spi_controller_get_devdata(host);
drivers/spi/spi-armada-3700.c
747
a3700_spi_fifo_mode_set(a3700_spi, false);
drivers/spi/spi-armada-3700.c
749
while (a3700_spi->buf_len) {
drivers/spi/spi-armada-3700.c
754
if (a3700_spi->buf_len < 4)
drivers/spi/spi-armada-3700.c
755
a3700_spi_bytelen_set(a3700_spi, 1);
drivers/spi/spi-armada-3700.c
757
if (a3700_spi->byte_len == 1)
drivers/spi/spi-armada-3700.c
758
val = *a3700_spi->tx_buf;
drivers/spi/spi-armada-3700.c
760
val = *(u32 *)a3700_spi->tx_buf;
drivers/spi/spi-armada-3700.c
762
spireg_write(a3700_spi, A3700_SPI_DATA_OUT_REG, val);
drivers/spi/spi-armada-3700.c
765
while (!(spireg_read(a3700_spi, A3700_SPI_IF_CTRL_REG) &
drivers/spi/spi-armada-3700.c
769
val = spireg_read(a3700_spi, A3700_SPI_DATA_IN_REG);
drivers/spi/spi-armada-3700.c
771
memcpy(a3700_spi->rx_buf, &val, a3700_spi->byte_len);
drivers/spi/spi-armada-3700.c
773
a3700_spi->buf_len -= a3700_spi->byte_len;
drivers/spi/spi-armada-3700.c
774
a3700_spi->tx_buf += a3700_spi->byte_len;
drivers/spi/spi-armada-3700.c
775
a3700_spi->rx_buf += a3700_spi->byte_len;
drivers/spi/spi-armada-3700.c
799
struct a3700_spi *a3700_spi = spi_controller_get_devdata(host);
drivers/spi/spi-armada-3700.c
801
clk_disable(a3700_spi->clk);
drivers/spi/spi-armada-3700.c
817
struct a3700_spi *spi;