sspi 300 drivers/spi/spi-sirf.c void (*hwinit)(struct sirfsoc_spi *sspi); sspi 303 drivers/spi/spi-sirf.c static void sirfsoc_usp_hwinit(struct sirfsoc_spi *sspi) sspi 306 drivers/spi/spi-sirf.c writel(readl(sspi->base + sspi->regs->usp_mode1) & sspi 307 drivers/spi/spi-sirf.c ~SIRFSOC_USP_EN, sspi->base + sspi->regs->usp_mode1); sspi 308 drivers/spi/spi-sirf.c writel(readl(sspi->base + sspi->regs->usp_mode1) | sspi 309 drivers/spi/spi-sirf.c SIRFSOC_USP_EN, sspi->base + sspi->regs->usp_mode1); sspi 312 drivers/spi/spi-sirf.c static void spi_sirfsoc_rx_word_u8(struct sirfsoc_spi *sspi) sspi 315 drivers/spi/spi-sirf.c u8 *rx = sspi->rx; sspi 317 drivers/spi/spi-sirf.c data = readl(sspi->base + sspi->regs->rxfifo_data); sspi 321 drivers/spi/spi-sirf.c sspi->rx = rx; sspi 324 drivers/spi/spi-sirf.c sspi->left_rx_word--; sspi 327 drivers/spi/spi-sirf.c static void spi_sirfsoc_tx_word_u8(struct sirfsoc_spi *sspi) sspi 330 drivers/spi/spi-sirf.c const u8 *tx = sspi->tx; sspi 334 drivers/spi/spi-sirf.c sspi->tx = tx; sspi 336 drivers/spi/spi-sirf.c writel(data, sspi->base + sspi->regs->txfifo_data); sspi 337 drivers/spi/spi-sirf.c sspi->left_tx_word--; sspi 340 drivers/spi/spi-sirf.c static void spi_sirfsoc_rx_word_u16(struct sirfsoc_spi *sspi) sspi 343 drivers/spi/spi-sirf.c u16 *rx = sspi->rx; sspi 345 drivers/spi/spi-sirf.c data = readl(sspi->base + sspi->regs->rxfifo_data); sspi 349 drivers/spi/spi-sirf.c sspi->rx = rx; sspi 352 drivers/spi/spi-sirf.c sspi->left_rx_word--; sspi 355 drivers/spi/spi-sirf.c static void spi_sirfsoc_tx_word_u16(struct sirfsoc_spi *sspi) sspi 358 drivers/spi/spi-sirf.c const u16 *tx = sspi->tx; sspi 362 drivers/spi/spi-sirf.c sspi->tx = tx; sspi 365 drivers/spi/spi-sirf.c writel(data, sspi->base + sspi->regs->txfifo_data); sspi 366 drivers/spi/spi-sirf.c sspi->left_tx_word--; sspi 369 drivers/spi/spi-sirf.c static void spi_sirfsoc_rx_word_u32(struct sirfsoc_spi *sspi) sspi 372 drivers/spi/spi-sirf.c u32 *rx = sspi->rx; sspi 374 drivers/spi/spi-sirf.c data = readl(sspi->base + sspi->regs->rxfifo_data); sspi 378 drivers/spi/spi-sirf.c sspi->rx = rx; sspi 381 drivers/spi/spi-sirf.c sspi->left_rx_word--; sspi 385 drivers/spi/spi-sirf.c static void spi_sirfsoc_tx_word_u32(struct sirfsoc_spi *sspi) sspi 388 drivers/spi/spi-sirf.c const u32 *tx = sspi->tx; sspi 392 drivers/spi/spi-sirf.c sspi->tx = tx; sspi 395 drivers/spi/spi-sirf.c writel(data, sspi->base + sspi->regs->txfifo_data); sspi 396 drivers/spi/spi-sirf.c sspi->left_tx_word--; sspi 401 drivers/spi/spi-sirf.c struct sirfsoc_spi *sspi = dev_id; sspi 404 drivers/spi/spi-sirf.c spi_stat = readl(sspi->base + sspi->regs->int_st); sspi 405 drivers/spi/spi-sirf.c if (sspi->tx_by_cmd && sspi->type == SIRF_REAL_SPI sspi 407 drivers/spi/spi-sirf.c complete(&sspi->tx_done); sspi 408 drivers/spi/spi-sirf.c writel(0x0, sspi->base + sspi->regs->int_en); sspi 409 drivers/spi/spi-sirf.c writel(readl(sspi->base + sspi->regs->int_st), sspi 410 drivers/spi/spi-sirf.c sspi->base + sspi->regs->int_st); sspi 416 drivers/spi/spi-sirf.c complete(&sspi->tx_done); sspi 417 drivers/spi/spi-sirf.c complete(&sspi->rx_done); sspi 418 drivers/spi/spi-sirf.c switch (sspi->type) { sspi 421 drivers/spi/spi-sirf.c writel(0x0, sspi->base + sspi->regs->int_en); sspi 424 drivers/spi/spi-sirf.c writel(~0UL, sspi->base + sspi->regs->usp_int_en_clr); sspi 427 drivers/spi/spi-sirf.c writel(readl(sspi->base + sspi->regs->int_st), sspi 428 drivers/spi/spi-sirf.c sspi->base + sspi->regs->int_st); sspi 432 drivers/spi/spi-sirf.c complete(&sspi->tx_done); sspi 433 drivers/spi/spi-sirf.c while (!(readl(sspi->base + sspi->regs->int_st) & sspi 436 drivers/spi/spi-sirf.c complete(&sspi->rx_done); sspi 437 drivers/spi/spi-sirf.c switch (sspi->type) { sspi 440 drivers/spi/spi-sirf.c writel(0x0, sspi->base + sspi->regs->int_en); sspi 443 drivers/spi/spi-sirf.c writel(~0UL, sspi->base + sspi->regs->usp_int_en_clr); sspi 446 drivers/spi/spi-sirf.c writel(readl(sspi->base + sspi->regs->int_st), sspi 447 drivers/spi/spi-sirf.c sspi->base + sspi->regs->int_st); sspi 462 drivers/spi/spi-sirf.c struct sirfsoc_spi *sspi; sspi 466 drivers/spi/spi-sirf.c sspi = spi_master_get_devdata(spi->master); sspi 467 drivers/spi/spi-sirf.c writel(SIRFSOC_SPI_FIFO_RESET, sspi->base + sspi->regs->txfifo_op); sspi 468 drivers/spi/spi-sirf.c writel(SIRFSOC_SPI_FIFO_START, sspi->base + sspi->regs->txfifo_op); sspi 469 drivers/spi/spi-sirf.c memcpy(&cmd, sspi->tx, t->len); sspi 470 drivers/spi/spi-sirf.c if (sspi->word_width == 1 && !(spi->mode & SPI_LSB_FIRST)) sspi 473 drivers/spi/spi-sirf.c if (sspi->word_width == 2 && t->len == 4 && sspi 476 drivers/spi/spi-sirf.c writel(cmd, sspi->base + sspi->regs->spi_cmd); sspi 478 drivers/spi/spi-sirf.c sspi->base + sspi->regs->int_en); sspi 480 drivers/spi/spi-sirf.c sspi->base + sspi->regs->tx_rx_en); sspi 481 drivers/spi/spi-sirf.c if (wait_for_completion_timeout(&sspi->tx_done, timeout) == 0) { sspi 485 drivers/spi/spi-sirf.c sspi->left_rx_word -= t->len; sspi 491 drivers/spi/spi-sirf.c struct sirfsoc_spi *sspi; sspi 495 drivers/spi/spi-sirf.c sspi = spi_master_get_devdata(spi->master); sspi 496 drivers/spi/spi-sirf.c writel(SIRFSOC_SPI_FIFO_RESET, sspi->base + sspi->regs->rxfifo_op); sspi 497 drivers/spi/spi-sirf.c writel(SIRFSOC_SPI_FIFO_RESET, sspi->base + sspi->regs->txfifo_op); sspi 498 drivers/spi/spi-sirf.c switch (sspi->type) { sspi 501 drivers/spi/spi-sirf.c sspi->base + sspi->regs->rxfifo_op); sspi 503 drivers/spi/spi-sirf.c sspi->base + sspi->regs->txfifo_op); sspi 504 drivers/spi/spi-sirf.c writel(0, sspi->base + sspi->regs->int_en); sspi 507 drivers/spi/spi-sirf.c writel(0x0, sspi->base + sspi->regs->rxfifo_op); sspi 508 drivers/spi/spi-sirf.c writel(0x0, sspi->base + sspi->regs->txfifo_op); sspi 509 drivers/spi/spi-sirf.c writel(0, sspi->base + sspi->regs->int_en); sspi 512 drivers/spi/spi-sirf.c writel(0x0, sspi->base + sspi->regs->rxfifo_op); sspi 513 drivers/spi/spi-sirf.c writel(0x0, sspi->base + sspi->regs->txfifo_op); sspi 514 drivers/spi/spi-sirf.c writel(~0UL, sspi->base + sspi->regs->usp_int_en_clr); sspi 517 drivers/spi/spi-sirf.c writel(readl(sspi->base + sspi->regs->int_st), sspi 518 drivers/spi/spi-sirf.c sspi->base + sspi->regs->int_st); sspi 519 drivers/spi/spi-sirf.c if (sspi->left_tx_word < sspi->dat_max_frm_len) { sspi 520 drivers/spi/spi-sirf.c switch (sspi->type) { sspi 522 drivers/spi/spi-sirf.c writel(readl(sspi->base + sspi->regs->spi_ctrl) | sspi 525 drivers/spi/spi-sirf.c sspi->base + sspi->regs->spi_ctrl); sspi 526 drivers/spi/spi-sirf.c writel(sspi->left_tx_word - 1, sspi 527 drivers/spi/spi-sirf.c sspi->base + sspi->regs->tx_dma_io_len); sspi 528 drivers/spi/spi-sirf.c writel(sspi->left_tx_word - 1, sspi 529 drivers/spi/spi-sirf.c sspi->base + sspi->regs->rx_dma_io_len); sspi 534 drivers/spi/spi-sirf.c writel(sspi->left_tx_word * sspi->word_width, sspi 535 drivers/spi/spi-sirf.c sspi->base + sspi->regs->tx_dma_io_len); sspi 536 drivers/spi/spi-sirf.c writel(sspi->left_tx_word * sspi->word_width, sspi 537 drivers/spi/spi-sirf.c sspi->base + sspi->regs->rx_dma_io_len); sspi 541 drivers/spi/spi-sirf.c if (sspi->type == SIRF_REAL_SPI) sspi 542 drivers/spi/spi-sirf.c writel(readl(sspi->base + sspi->regs->spi_ctrl), sspi 543 drivers/spi/spi-sirf.c sspi->base + sspi->regs->spi_ctrl); sspi 544 drivers/spi/spi-sirf.c writel(0, sspi->base + sspi->regs->tx_dma_io_len); sspi 545 drivers/spi/spi-sirf.c writel(0, sspi->base + sspi->regs->rx_dma_io_len); sspi 547 drivers/spi/spi-sirf.c sspi->dst_start = dma_map_single(&spi->dev, sspi->rx, t->len, sspi 550 drivers/spi/spi-sirf.c rx_desc = dmaengine_prep_slave_single(sspi->rx_chan, sspi 551 drivers/spi/spi-sirf.c sspi->dst_start, t->len, DMA_DEV_TO_MEM, sspi 554 drivers/spi/spi-sirf.c rx_desc->callback_param = &sspi->rx_done; sspi 556 drivers/spi/spi-sirf.c sspi->src_start = dma_map_single(&spi->dev, (void *)sspi->tx, t->len, sspi 559 drivers/spi/spi-sirf.c tx_desc = dmaengine_prep_slave_single(sspi->tx_chan, sspi 560 drivers/spi/spi-sirf.c sspi->src_start, t->len, DMA_MEM_TO_DEV, sspi 563 drivers/spi/spi-sirf.c tx_desc->callback_param = &sspi->tx_done; sspi 567 drivers/spi/spi-sirf.c dma_async_issue_pending(sspi->tx_chan); sspi 568 drivers/spi/spi-sirf.c dma_async_issue_pending(sspi->rx_chan); sspi 570 drivers/spi/spi-sirf.c sspi->base + sspi->regs->tx_rx_en); sspi 571 drivers/spi/spi-sirf.c if (sspi->type == SIRF_USP_SPI_P2 || sspi 572 drivers/spi/spi-sirf.c sspi->type == SIRF_USP_SPI_A7) { sspi 574 drivers/spi/spi-sirf.c sspi->base + sspi->regs->rxfifo_op); sspi 576 drivers/spi/spi-sirf.c sspi->base + sspi->regs->txfifo_op); sspi 578 drivers/spi/spi-sirf.c if (wait_for_completion_timeout(&sspi->rx_done, timeout) == 0) { sspi 580 drivers/spi/spi-sirf.c dmaengine_terminate_all(sspi->rx_chan); sspi 582 drivers/spi/spi-sirf.c sspi->left_rx_word = 0; sspi 588 drivers/spi/spi-sirf.c if (wait_for_completion_timeout(&sspi->tx_done, timeout) == 0) { sspi 590 drivers/spi/spi-sirf.c if (sspi->type == SIRF_USP_SPI_P2 || sspi 591 drivers/spi/spi-sirf.c sspi->type == SIRF_USP_SPI_A7) sspi 592 drivers/spi/spi-sirf.c writel(0, sspi->base + sspi->regs->tx_rx_en); sspi 593 drivers/spi/spi-sirf.c dmaengine_terminate_all(sspi->tx_chan); sspi 595 drivers/spi/spi-sirf.c dma_unmap_single(&spi->dev, sspi->src_start, t->len, DMA_TO_DEVICE); sspi 596 drivers/spi/spi-sirf.c dma_unmap_single(&spi->dev, sspi->dst_start, t->len, DMA_FROM_DEVICE); sspi 598 drivers/spi/spi-sirf.c writel(0, sspi->base + sspi->regs->rxfifo_op); sspi 599 drivers/spi/spi-sirf.c writel(0, sspi->base + sspi->regs->txfifo_op); sspi 600 drivers/spi/spi-sirf.c if (sspi->left_tx_word >= sspi->dat_max_frm_len) sspi 601 drivers/spi/spi-sirf.c writel(0, sspi->base + sspi->regs->tx_rx_en); sspi 602 drivers/spi/spi-sirf.c if (sspi->type == SIRF_USP_SPI_P2 || sspi 603 drivers/spi/spi-sirf.c sspi->type == SIRF_USP_SPI_A7) sspi 604 drivers/spi/spi-sirf.c writel(0, sspi->base + sspi->regs->tx_rx_en); sspi 610 drivers/spi/spi-sirf.c struct sirfsoc_spi *sspi; sspi 614 drivers/spi/spi-sirf.c sspi = spi_master_get_devdata(spi->master); sspi 617 drivers/spi/spi-sirf.c sspi->base + sspi->regs->rxfifo_op); sspi 619 drivers/spi/spi-sirf.c sspi->base + sspi->regs->txfifo_op); sspi 620 drivers/spi/spi-sirf.c switch (sspi->type) { sspi 622 drivers/spi/spi-sirf.c writel(0x0, sspi->base + sspi->regs->rxfifo_op); sspi 623 drivers/spi/spi-sirf.c writel(0x0, sspi->base + sspi->regs->txfifo_op); sspi 624 drivers/spi/spi-sirf.c writel(0, sspi->base + sspi->regs->int_en); sspi 625 drivers/spi/spi-sirf.c writel(readl(sspi->base + sspi->regs->int_st), sspi 626 drivers/spi/spi-sirf.c sspi->base + sspi->regs->int_st); sspi 627 drivers/spi/spi-sirf.c writel(min((sspi->left_tx_word * sspi->word_width), sspi 628 drivers/spi/spi-sirf.c sspi->fifo_size), sspi 629 drivers/spi/spi-sirf.c sspi->base + sspi->regs->tx_dma_io_len); sspi 630 drivers/spi/spi-sirf.c writel(min((sspi->left_rx_word * sspi->word_width), sspi 631 drivers/spi/spi-sirf.c sspi->fifo_size), sspi 632 drivers/spi/spi-sirf.c sspi->base + sspi->regs->rx_dma_io_len); sspi 635 drivers/spi/spi-sirf.c writel(0x0, sspi->base + sspi->regs->rxfifo_op); sspi 636 drivers/spi/spi-sirf.c writel(0x0, sspi->base + sspi->regs->txfifo_op); sspi 637 drivers/spi/spi-sirf.c writel(~0UL, sspi->base + sspi->regs->usp_int_en_clr); sspi 638 drivers/spi/spi-sirf.c writel(readl(sspi->base + sspi->regs->int_st), sspi 639 drivers/spi/spi-sirf.c sspi->base + sspi->regs->int_st); sspi 640 drivers/spi/spi-sirf.c writel(min((sspi->left_tx_word * sspi->word_width), sspi 641 drivers/spi/spi-sirf.c sspi->fifo_size), sspi 642 drivers/spi/spi-sirf.c sspi->base + sspi->regs->tx_dma_io_len); sspi 643 drivers/spi/spi-sirf.c writel(min((sspi->left_rx_word * sspi->word_width), sspi 644 drivers/spi/spi-sirf.c sspi->fifo_size), sspi 645 drivers/spi/spi-sirf.c sspi->base + sspi->regs->rx_dma_io_len); sspi 649 drivers/spi/spi-sirf.c sspi->base + sspi->regs->rxfifo_op); sspi 651 drivers/spi/spi-sirf.c sspi->base + sspi->regs->txfifo_op); sspi 652 drivers/spi/spi-sirf.c writel(0, sspi->base + sspi->regs->int_en); sspi 653 drivers/spi/spi-sirf.c writel(readl(sspi->base + sspi->regs->int_st), sspi 654 drivers/spi/spi-sirf.c sspi->base + sspi->regs->int_st); sspi 655 drivers/spi/spi-sirf.c writel(readl(sspi->base + sspi->regs->spi_ctrl) | sspi 658 drivers/spi/spi-sirf.c sspi->base + sspi->regs->spi_ctrl); sspi 659 drivers/spi/spi-sirf.c data_units = sspi->fifo_size / sspi->word_width; sspi 660 drivers/spi/spi-sirf.c writel(min(sspi->left_tx_word, data_units) - 1, sspi 661 drivers/spi/spi-sirf.c sspi->base + sspi->regs->tx_dma_io_len); sspi 662 drivers/spi/spi-sirf.c writel(min(sspi->left_rx_word, data_units) - 1, sspi 663 drivers/spi/spi-sirf.c sspi->base + sspi->regs->rx_dma_io_len); sspi 666 drivers/spi/spi-sirf.c while (!((readl(sspi->base + sspi->regs->txfifo_st) sspi 667 drivers/spi/spi-sirf.c & SIRFSOC_SPI_FIFO_FULL_MASK(sspi))) && sspi 668 drivers/spi/spi-sirf.c sspi->left_tx_word) sspi 669 drivers/spi/spi-sirf.c sspi->tx_word(sspi); sspi 674 drivers/spi/spi-sirf.c sspi->base + sspi->regs->int_en); sspi 676 drivers/spi/spi-sirf.c sspi->base + sspi->regs->tx_rx_en); sspi 677 drivers/spi/spi-sirf.c if (sspi->type == SIRF_USP_SPI_P2 || sspi 678 drivers/spi/spi-sirf.c sspi->type == SIRF_USP_SPI_A7) { sspi 680 drivers/spi/spi-sirf.c sspi->base + sspi->regs->rxfifo_op); sspi 682 drivers/spi/spi-sirf.c sspi->base + sspi->regs->txfifo_op); sspi 684 drivers/spi/spi-sirf.c if (!wait_for_completion_timeout(&sspi->tx_done, timeout) || sspi 685 drivers/spi/spi-sirf.c !wait_for_completion_timeout(&sspi->rx_done, timeout)) { sspi 687 drivers/spi/spi-sirf.c if (sspi->type == SIRF_USP_SPI_P2 || sspi 688 drivers/spi/spi-sirf.c sspi->type == SIRF_USP_SPI_A7) sspi 689 drivers/spi/spi-sirf.c writel(0, sspi->base + sspi->regs->tx_rx_en); sspi 692 drivers/spi/spi-sirf.c while (!((readl(sspi->base + sspi->regs->rxfifo_st) sspi 693 drivers/spi/spi-sirf.c & SIRFSOC_SPI_FIFO_EMPTY_MASK(sspi))) && sspi 694 drivers/spi/spi-sirf.c sspi->left_rx_word) sspi 695 drivers/spi/spi-sirf.c sspi->rx_word(sspi); sspi 696 drivers/spi/spi-sirf.c if (sspi->type == SIRF_USP_SPI_P2 || sspi 697 drivers/spi/spi-sirf.c sspi->type == SIRF_USP_SPI_A7) sspi 698 drivers/spi/spi-sirf.c writel(0, sspi->base + sspi->regs->tx_rx_en); sspi 699 drivers/spi/spi-sirf.c writel(0, sspi->base + sspi->regs->rxfifo_op); sspi 700 drivers/spi/spi-sirf.c writel(0, sspi->base + sspi->regs->txfifo_op); sspi 701 drivers/spi/spi-sirf.c } while (sspi->left_tx_word != 0 || sspi->left_rx_word != 0); sspi 706 drivers/spi/spi-sirf.c struct sirfsoc_spi *sspi; sspi 708 drivers/spi/spi-sirf.c sspi = spi_master_get_devdata(spi->master); sspi 709 drivers/spi/spi-sirf.c sspi->tx = t->tx_buf; sspi 710 drivers/spi/spi-sirf.c sspi->rx = t->rx_buf; sspi 711 drivers/spi/spi-sirf.c sspi->left_tx_word = sspi->left_rx_word = t->len / sspi->word_width; sspi 712 drivers/spi/spi-sirf.c reinit_completion(&sspi->rx_done); sspi 713 drivers/spi/spi-sirf.c reinit_completion(&sspi->tx_done); sspi 719 drivers/spi/spi-sirf.c if (sspi->type == SIRF_REAL_SPI && sspi->tx_by_cmd) sspi 726 drivers/spi/spi-sirf.c return t->len - sspi->left_rx_word * sspi->word_width; sspi 731 drivers/spi/spi-sirf.c struct sirfsoc_spi *sspi = spi_master_get_devdata(spi->master); sspi 733 drivers/spi/spi-sirf.c if (sspi->hw_cs) { sspi 736 drivers/spi/spi-sirf.c switch (sspi->type) { sspi 738 drivers/spi/spi-sirf.c regval = readl(sspi->base + sspi->regs->spi_ctrl); sspi 753 drivers/spi/spi-sirf.c writel(regval, sspi->base + sspi->regs->spi_ctrl); sspi 757 drivers/spi/spi-sirf.c regval = readl(sspi->base + sspi 758 drivers/spi/spi-sirf.c sspi->regs->usp_pin_io_data); sspi 774 drivers/spi/spi-sirf.c sspi->base + sspi->regs->usp_pin_io_data); sspi 793 drivers/spi/spi-sirf.c struct sirfsoc_spi *sspi; sspi 796 drivers/spi/spi-sirf.c sspi = spi_master_get_devdata(spi->master); sspi 797 drivers/spi/spi-sirf.c regval = readl(sspi->base + sspi->regs->spi_ctrl); sspi 798 drivers/spi/spi-sirf.c usp_mode1 = readl(sspi->base + sspi->regs->usp_mode1); sspi 834 drivers/spi/spi-sirf.c writel((SIRFSOC_SPI_FIFO_LEVEL_CHK_MASK(sspi, sspi->fifo_size - 2) << sspi 836 drivers/spi/spi-sirf.c (SIRFSOC_SPI_FIFO_LEVEL_CHK_MASK(sspi, sspi->fifo_size / 2) << sspi 838 drivers/spi/spi-sirf.c (SIRFSOC_SPI_FIFO_LEVEL_CHK_MASK(sspi, 2) << sspi 840 drivers/spi/spi-sirf.c sspi->base + sspi->regs->txfifo_level_chk); sspi 841 drivers/spi/spi-sirf.c writel((SIRFSOC_SPI_FIFO_LEVEL_CHK_MASK(sspi, 2) << sspi 843 drivers/spi/spi-sirf.c (SIRFSOC_SPI_FIFO_LEVEL_CHK_MASK(sspi, sspi->fifo_size / 2) << sspi 845 drivers/spi/spi-sirf.c (SIRFSOC_SPI_FIFO_LEVEL_CHK_MASK(sspi, sspi->fifo_size - 2) << sspi 847 drivers/spi/spi-sirf.c sspi->base + sspi->regs->rxfifo_level_chk); sspi 852 drivers/spi/spi-sirf.c switch (sspi->type) { sspi 855 drivers/spi/spi-sirf.c writel(regval, sspi->base + sspi->regs->spi_ctrl); sspi 862 drivers/spi/spi-sirf.c writel(usp_mode1, sspi->base + sspi->regs->usp_mode1); sspi 872 drivers/spi/spi-sirf.c struct sirfsoc_spi *sspi; sspi 877 drivers/spi/spi-sirf.c sspi = spi_master_get_devdata(spi->master); sspi 882 drivers/spi/spi-sirf.c usp_mode2 = regval = (sspi->ctrl_freq / (2 * hz)) - 1; sspi 890 drivers/spi/spi-sirf.c sspi->rx_word = spi_sirfsoc_rx_word_u8; sspi 891 drivers/spi/spi-sirf.c sspi->tx_word = spi_sirfsoc_tx_word_u8; sspi 898 drivers/spi/spi-sirf.c sspi->rx_word = spi_sirfsoc_rx_word_u16; sspi 899 drivers/spi/spi-sirf.c sspi->tx_word = spi_sirfsoc_tx_word_u16; sspi 903 drivers/spi/spi-sirf.c sspi->rx_word = spi_sirfsoc_rx_word_u32; sspi 904 drivers/spi/spi-sirf.c sspi->tx_word = spi_sirfsoc_tx_word_u32; sspi 910 drivers/spi/spi-sirf.c sspi->word_width = DIV_ROUND_UP(bits_per_word, 8); sspi 911 drivers/spi/spi-sirf.c txfifo_ctrl = (((sspi->fifo_size / 2) & sspi 912 drivers/spi/spi-sirf.c SIRFSOC_SPI_FIFO_THD_MASK(sspi)) sspi 914 drivers/spi/spi-sirf.c (sspi->word_width >> 1); sspi 915 drivers/spi/spi-sirf.c rxfifo_ctrl = (((sspi->fifo_size / 2) & sspi 916 drivers/spi/spi-sirf.c SIRFSOC_SPI_FIFO_THD_MASK(sspi)) sspi 918 drivers/spi/spi-sirf.c (sspi->word_width >> 1); sspi 919 drivers/spi/spi-sirf.c writel(txfifo_ctrl, sspi->base + sspi->regs->txfifo_ctrl); sspi 920 drivers/spi/spi-sirf.c writel(rxfifo_ctrl, sspi->base + sspi->regs->rxfifo_ctrl); sspi 921 drivers/spi/spi-sirf.c if (sspi->type == SIRF_USP_SPI_P2 || sspi 922 drivers/spi/spi-sirf.c sspi->type == SIRF_USP_SPI_A7) { sspi 947 drivers/spi/spi-sirf.c sspi->base + sspi->regs->usp_tx_frame_ctrl); sspi 951 drivers/spi/spi-sirf.c sspi->base + sspi->regs->usp_rx_frame_ctrl); sspi 952 drivers/spi/spi-sirf.c writel(readl(sspi->base + sspi->regs->usp_mode2) | sspi 959 drivers/spi/spi-sirf.c sspi->base + sspi->regs->usp_mode2); sspi 961 drivers/spi/spi-sirf.c if (sspi->type == SIRF_REAL_SPI) sspi 962 drivers/spi/spi-sirf.c writel(regval, sspi->base + sspi->regs->spi_ctrl); sspi 964 drivers/spi/spi-sirf.c if (sspi->type == SIRF_REAL_SPI) { sspi 967 drivers/spi/spi-sirf.c sspi->tx_by_cmd = true; sspi 968 drivers/spi/spi-sirf.c writel(readl(sspi->base + sspi->regs->spi_ctrl) | sspi 971 drivers/spi/spi-sirf.c sspi->base + sspi->regs->spi_ctrl); sspi 973 drivers/spi/spi-sirf.c sspi->tx_by_cmd = false; sspi 974 drivers/spi/spi-sirf.c writel(readl(sspi->base + sspi->regs->spi_ctrl) & sspi 976 drivers/spi/spi-sirf.c sspi->base + sspi->regs->spi_ctrl); sspi 981 drivers/spi/spi-sirf.c writel(0, sspi->base + sspi->regs->tx_dma_io_ctrl); sspi 983 drivers/spi/spi-sirf.c sspi->base + sspi->regs->rx_dma_io_ctrl); sspi 987 drivers/spi/spi-sirf.c sspi->base + sspi->regs->tx_dma_io_ctrl); sspi 989 drivers/spi/spi-sirf.c sspi->base + sspi->regs->rx_dma_io_ctrl); sspi 996 drivers/spi/spi-sirf.c struct sirfsoc_spi *sspi; sspi 999 drivers/spi/spi-sirf.c sspi = spi_master_get_devdata(spi->master); sspi 1001 drivers/spi/spi-sirf.c sspi->hw_cs = true; sspi 1003 drivers/spi/spi-sirf.c sspi->hw_cs = false; sspi 1071 drivers/spi/spi-sirf.c struct sirfsoc_spi *sspi; sspi 1084 drivers/spi/spi-sirf.c master = spi_alloc_master(&pdev->dev, sizeof(*sspi)); sspi 1091 drivers/spi/spi-sirf.c sspi = spi_master_get_devdata(master); sspi 1092 drivers/spi/spi-sirf.c sspi->fifo_full_offset = ilog2(sspi->fifo_size); sspi 1094 drivers/spi/spi-sirf.c sspi->regs = spi_comp_data->regs; sspi 1095 drivers/spi/spi-sirf.c sspi->type = spi_comp_data->type; sspi 1096 drivers/spi/spi-sirf.c sspi->fifo_level_chk_mask = (sspi->fifo_size / 4) - 1; sspi 1097 drivers/spi/spi-sirf.c sspi->dat_max_frm_len = spi_comp_data->dat_max_frm_len; sspi 1098 drivers/spi/spi-sirf.c sspi->fifo_size = spi_comp_data->fifo_size; sspi 1099 drivers/spi/spi-sirf.c sspi->base = devm_platform_ioremap_resource(pdev, 0); sspi 1100 drivers/spi/spi-sirf.c if (IS_ERR(sspi->base)) { sspi 1101 drivers/spi/spi-sirf.c ret = PTR_ERR(sspi->base); sspi 1110 drivers/spi/spi-sirf.c DRIVER_NAME, sspi); sspi 1114 drivers/spi/spi-sirf.c sspi->bitbang.master = master; sspi 1115 drivers/spi/spi-sirf.c sspi->bitbang.chipselect = spi_sirfsoc_chipselect; sspi 1116 drivers/spi/spi-sirf.c sspi->bitbang.setup_transfer = spi_sirfsoc_setup_transfer; sspi 1117 drivers/spi/spi-sirf.c sspi->bitbang.txrx_bufs = spi_sirfsoc_transfer; sspi 1118 drivers/spi/spi-sirf.c sspi->bitbang.master->setup = spi_sirfsoc_setup; sspi 1119 drivers/spi/spi-sirf.c sspi->bitbang.master->cleanup = spi_sirfsoc_cleanup; sspi 1126 drivers/spi/spi-sirf.c sspi->bitbang.master->dev.of_node = pdev->dev.of_node; sspi 1129 drivers/spi/spi-sirf.c sspi->rx_chan = dma_request_slave_channel(&pdev->dev, "rx"); sspi 1130 drivers/spi/spi-sirf.c if (!sspi->rx_chan) { sspi 1135 drivers/spi/spi-sirf.c sspi->tx_chan = dma_request_slave_channel(&pdev->dev, "tx"); sspi 1136 drivers/spi/spi-sirf.c if (!sspi->tx_chan) { sspi 1142 drivers/spi/spi-sirf.c sspi->clk = clk_get(&pdev->dev, NULL); sspi 1143 drivers/spi/spi-sirf.c if (IS_ERR(sspi->clk)) { sspi 1144 drivers/spi/spi-sirf.c ret = PTR_ERR(sspi->clk); sspi 1147 drivers/spi/spi-sirf.c clk_prepare_enable(sspi->clk); sspi 1149 drivers/spi/spi-sirf.c spi_comp_data->hwinit(sspi); sspi 1150 drivers/spi/spi-sirf.c sspi->ctrl_freq = clk_get_rate(sspi->clk); sspi 1152 drivers/spi/spi-sirf.c init_completion(&sspi->rx_done); sspi 1153 drivers/spi/spi-sirf.c init_completion(&sspi->tx_done); sspi 1155 drivers/spi/spi-sirf.c ret = spi_bitbang_start(&sspi->bitbang); sspi 1162 drivers/spi/spi-sirf.c clk_disable_unprepare(sspi->clk); sspi 1163 drivers/spi/spi-sirf.c clk_put(sspi->clk); sspi 1165 drivers/spi/spi-sirf.c dma_release_channel(sspi->tx_chan); sspi 1167 drivers/spi/spi-sirf.c dma_release_channel(sspi->rx_chan); sspi 1177 drivers/spi/spi-sirf.c struct sirfsoc_spi *sspi; sspi 1180 drivers/spi/spi-sirf.c sspi = spi_master_get_devdata(master); sspi 1181 drivers/spi/spi-sirf.c spi_bitbang_stop(&sspi->bitbang); sspi 1182 drivers/spi/spi-sirf.c clk_disable_unprepare(sspi->clk); sspi 1183 drivers/spi/spi-sirf.c clk_put(sspi->clk); sspi 1184 drivers/spi/spi-sirf.c dma_release_channel(sspi->rx_chan); sspi 1185 drivers/spi/spi-sirf.c dma_release_channel(sspi->tx_chan); sspi 1194 drivers/spi/spi-sirf.c struct sirfsoc_spi *sspi = spi_master_get_devdata(master); sspi 1201 drivers/spi/spi-sirf.c clk_disable(sspi->clk); sspi 1208 drivers/spi/spi-sirf.c struct sirfsoc_spi *sspi = spi_master_get_devdata(master); sspi 1210 drivers/spi/spi-sirf.c clk_enable(sspi->clk); sspi 1211 drivers/spi/spi-sirf.c writel(SIRFSOC_SPI_FIFO_RESET, sspi->base + sspi->regs->txfifo_op); sspi 1212 drivers/spi/spi-sirf.c writel(SIRFSOC_SPI_FIFO_RESET, sspi->base + sspi->regs->rxfifo_op); sspi 1213 drivers/spi/spi-sirf.c writel(SIRFSOC_SPI_FIFO_START, sspi->base + sspi->regs->txfifo_op); sspi 1214 drivers/spi/spi-sirf.c writel(SIRFSOC_SPI_FIFO_START, sspi->base + sspi->regs->rxfifo_op); sspi 90 drivers/spi/spi-sun4i.c static inline u32 sun4i_spi_read(struct sun4i_spi *sspi, u32 reg) sspi 92 drivers/spi/spi-sun4i.c return readl(sspi->base_addr + reg); sspi 95 drivers/spi/spi-sun4i.c static inline void sun4i_spi_write(struct sun4i_spi *sspi, u32 reg, u32 value) sspi 97 drivers/spi/spi-sun4i.c writel(value, sspi->base_addr + reg); sspi 100 drivers/spi/spi-sun4i.c static inline u32 sun4i_spi_get_tx_fifo_count(struct sun4i_spi *sspi) sspi 102 drivers/spi/spi-sun4i.c u32 reg = sun4i_spi_read(sspi, SUN4I_FIFO_STA_REG); sspi 109 drivers/spi/spi-sun4i.c static inline void sun4i_spi_enable_interrupt(struct sun4i_spi *sspi, u32 mask) sspi 111 drivers/spi/spi-sun4i.c u32 reg = sun4i_spi_read(sspi, SUN4I_INT_CTL_REG); sspi 114 drivers/spi/spi-sun4i.c sun4i_spi_write(sspi, SUN4I_INT_CTL_REG, reg); sspi 117 drivers/spi/spi-sun4i.c static inline void sun4i_spi_disable_interrupt(struct sun4i_spi *sspi, u32 mask) sspi 119 drivers/spi/spi-sun4i.c u32 reg = sun4i_spi_read(sspi, SUN4I_INT_CTL_REG); sspi 122 drivers/spi/spi-sun4i.c sun4i_spi_write(sspi, SUN4I_INT_CTL_REG, reg); sspi 125 drivers/spi/spi-sun4i.c static inline void sun4i_spi_drain_fifo(struct sun4i_spi *sspi, int len) sspi 131 drivers/spi/spi-sun4i.c reg = sun4i_spi_read(sspi, SUN4I_FIFO_STA_REG); sspi 139 drivers/spi/spi-sun4i.c byte = readb(sspi->base_addr + SUN4I_RXDATA_REG); sspi 140 drivers/spi/spi-sun4i.c if (sspi->rx_buf) sspi 141 drivers/spi/spi-sun4i.c *sspi->rx_buf++ = byte; sspi 145 drivers/spi/spi-sun4i.c static inline void sun4i_spi_fill_fifo(struct sun4i_spi *sspi, int len) sspi 151 drivers/spi/spi-sun4i.c cnt = SUN4I_FIFO_DEPTH - sun4i_spi_get_tx_fifo_count(sspi); sspi 153 drivers/spi/spi-sun4i.c len = min3(len, (int)cnt, sspi->len); sspi 156 drivers/spi/spi-sun4i.c byte = sspi->tx_buf ? *sspi->tx_buf++ : 0; sspi 157 drivers/spi/spi-sun4i.c writeb(byte, sspi->base_addr + SUN4I_TXDATA_REG); sspi 158 drivers/spi/spi-sun4i.c sspi->len--; sspi 164 drivers/spi/spi-sun4i.c struct sun4i_spi *sspi = spi_master_get_devdata(spi->master); sspi 167 drivers/spi/spi-sun4i.c reg = sun4i_spi_read(sspi, SUN4I_CTL_REG); sspi 196 drivers/spi/spi-sun4i.c sun4i_spi_write(sspi, SUN4I_CTL_REG, reg); sspi 208 drivers/spi/spi-sun4i.c struct sun4i_spi *sspi = spi_master_get_devdata(master); sspi 222 drivers/spi/spi-sun4i.c reinit_completion(&sspi->done); sspi 223 drivers/spi/spi-sun4i.c sspi->tx_buf = tfr->tx_buf; sspi 224 drivers/spi/spi-sun4i.c sspi->rx_buf = tfr->rx_buf; sspi 225 drivers/spi/spi-sun4i.c sspi->len = tfr->len; sspi 228 drivers/spi/spi-sun4i.c sun4i_spi_write(sspi, SUN4I_INT_STA_REG, ~0); sspi 231 drivers/spi/spi-sun4i.c reg = sun4i_spi_read(sspi, SUN4I_CTL_REG); sspi 234 drivers/spi/spi-sun4i.c sun4i_spi_write(sspi, SUN4I_CTL_REG, sspi 261 drivers/spi/spi-sun4i.c if (sspi->rx_buf) sspi 266 drivers/spi/spi-sun4i.c sun4i_spi_write(sspi, SUN4I_CTL_REG, reg); sspi 269 drivers/spi/spi-sun4i.c mclk_rate = clk_get_rate(sspi->mclk); sspi 271 drivers/spi/spi-sun4i.c clk_set_rate(sspi->mclk, 2 * tfr->speed_hz); sspi 272 drivers/spi/spi-sun4i.c mclk_rate = clk_get_rate(sspi->mclk); sspi 300 drivers/spi/spi-sun4i.c sun4i_spi_write(sspi, SUN4I_CLK_CTL_REG, reg); sspi 303 drivers/spi/spi-sun4i.c if (sspi->tx_buf) sspi 307 drivers/spi/spi-sun4i.c sun4i_spi_write(sspi, SUN4I_BURST_CNT_REG, SUN4I_BURST_CNT(tfr->len)); sspi 308 drivers/spi/spi-sun4i.c sun4i_spi_write(sspi, SUN4I_XMIT_CNT_REG, SUN4I_XMIT_CNT(tx_len)); sspi 315 drivers/spi/spi-sun4i.c sun4i_spi_fill_fifo(sspi, SUN4I_FIFO_DEPTH - 1); sspi 318 drivers/spi/spi-sun4i.c sun4i_spi_enable_interrupt(sspi, SUN4I_INT_CTL_TC | sspi 322 drivers/spi/spi-sun4i.c sun4i_spi_enable_interrupt(sspi, SUN4I_INT_CTL_TF_E34); sspi 325 drivers/spi/spi-sun4i.c reg = sun4i_spi_read(sspi, SUN4I_CTL_REG); sspi 326 drivers/spi/spi-sun4i.c sun4i_spi_write(sspi, SUN4I_CTL_REG, reg | SUN4I_CTL_XCH); sspi 330 drivers/spi/spi-sun4i.c timeout = wait_for_completion_timeout(&sspi->done, sspi 344 drivers/spi/spi-sun4i.c sun4i_spi_write(sspi, SUN4I_INT_CTL_REG, 0); sspi 351 drivers/spi/spi-sun4i.c struct sun4i_spi *sspi = dev_id; sspi 352 drivers/spi/spi-sun4i.c u32 status = sun4i_spi_read(sspi, SUN4I_INT_STA_REG); sspi 356 drivers/spi/spi-sun4i.c sun4i_spi_write(sspi, SUN4I_INT_STA_REG, SUN4I_INT_CTL_TC); sspi 357 drivers/spi/spi-sun4i.c sun4i_spi_drain_fifo(sspi, SUN4I_FIFO_DEPTH); sspi 358 drivers/spi/spi-sun4i.c complete(&sspi->done); sspi 364 drivers/spi/spi-sun4i.c sun4i_spi_drain_fifo(sspi, SUN4I_FIFO_DEPTH); sspi 366 drivers/spi/spi-sun4i.c sun4i_spi_write(sspi, SUN4I_INT_STA_REG, SUN4I_INT_CTL_RF_F34); sspi 372 drivers/spi/spi-sun4i.c sun4i_spi_fill_fifo(sspi, SUN4I_FIFO_DEPTH); sspi 374 drivers/spi/spi-sun4i.c if (!sspi->len) sspi 376 drivers/spi/spi-sun4i.c sun4i_spi_disable_interrupt(sspi, SUN4I_INT_CTL_TF_E34); sspi 379 drivers/spi/spi-sun4i.c sun4i_spi_write(sspi, SUN4I_INT_STA_REG, SUN4I_INT_CTL_TF_E34); sspi 390 drivers/spi/spi-sun4i.c struct sun4i_spi *sspi = spi_master_get_devdata(master); sspi 393 drivers/spi/spi-sun4i.c ret = clk_prepare_enable(sspi->hclk); sspi 399 drivers/spi/spi-sun4i.c ret = clk_prepare_enable(sspi->mclk); sspi 405 drivers/spi/spi-sun4i.c sun4i_spi_write(sspi, SUN4I_CTL_REG, sspi 411 drivers/spi/spi-sun4i.c clk_disable_unprepare(sspi->hclk); sspi 419 drivers/spi/spi-sun4i.c struct sun4i_spi *sspi = spi_master_get_devdata(master); sspi 421 drivers/spi/spi-sun4i.c clk_disable_unprepare(sspi->mclk); sspi 422 drivers/spi/spi-sun4i.c clk_disable_unprepare(sspi->hclk); sspi 430 drivers/spi/spi-sun4i.c struct sun4i_spi *sspi; sspi 440 drivers/spi/spi-sun4i.c sspi = spi_master_get_devdata(master); sspi 442 drivers/spi/spi-sun4i.c sspi->base_addr = devm_platform_ioremap_resource(pdev, 0); sspi 443 drivers/spi/spi-sun4i.c if (IS_ERR(sspi->base_addr)) { sspi 444 drivers/spi/spi-sun4i.c ret = PTR_ERR(sspi->base_addr); sspi 455 drivers/spi/spi-sun4i.c 0, "sun4i-spi", sspi); sspi 461 drivers/spi/spi-sun4i.c sspi->master = master; sspi 473 drivers/spi/spi-sun4i.c sspi->hclk = devm_clk_get(&pdev->dev, "ahb"); sspi 474 drivers/spi/spi-sun4i.c if (IS_ERR(sspi->hclk)) { sspi 476 drivers/spi/spi-sun4i.c ret = PTR_ERR(sspi->hclk); sspi 480 drivers/spi/spi-sun4i.c sspi->mclk = devm_clk_get(&pdev->dev, "mod"); sspi 481 drivers/spi/spi-sun4i.c if (IS_ERR(sspi->mclk)) { sspi 483 drivers/spi/spi-sun4i.c ret = PTR_ERR(sspi->mclk); sspi 487 drivers/spi/spi-sun4i.c init_completion(&sspi->done); sspi 102 drivers/spi/spi-sun6i.c static inline u32 sun6i_spi_read(struct sun6i_spi *sspi, u32 reg) sspi 104 drivers/spi/spi-sun6i.c return readl(sspi->base_addr + reg); sspi 107 drivers/spi/spi-sun6i.c static inline void sun6i_spi_write(struct sun6i_spi *sspi, u32 reg, u32 value) sspi 109 drivers/spi/spi-sun6i.c writel(value, sspi->base_addr + reg); sspi 112 drivers/spi/spi-sun6i.c static inline u32 sun6i_spi_get_tx_fifo_count(struct sun6i_spi *sspi) sspi 114 drivers/spi/spi-sun6i.c u32 reg = sun6i_spi_read(sspi, SUN6I_FIFO_STA_REG); sspi 121 drivers/spi/spi-sun6i.c static inline void sun6i_spi_enable_interrupt(struct sun6i_spi *sspi, u32 mask) sspi 123 drivers/spi/spi-sun6i.c u32 reg = sun6i_spi_read(sspi, SUN6I_INT_CTL_REG); sspi 126 drivers/spi/spi-sun6i.c sun6i_spi_write(sspi, SUN6I_INT_CTL_REG, reg); sspi 129 drivers/spi/spi-sun6i.c static inline void sun6i_spi_disable_interrupt(struct sun6i_spi *sspi, u32 mask) sspi 131 drivers/spi/spi-sun6i.c u32 reg = sun6i_spi_read(sspi, SUN6I_INT_CTL_REG); sspi 134 drivers/spi/spi-sun6i.c sun6i_spi_write(sspi, SUN6I_INT_CTL_REG, reg); sspi 137 drivers/spi/spi-sun6i.c static inline void sun6i_spi_drain_fifo(struct sun6i_spi *sspi, int len) sspi 143 drivers/spi/spi-sun6i.c reg = sun6i_spi_read(sspi, SUN6I_FIFO_STA_REG); sspi 151 drivers/spi/spi-sun6i.c byte = readb(sspi->base_addr + SUN6I_RXDATA_REG); sspi 152 drivers/spi/spi-sun6i.c if (sspi->rx_buf) sspi 153 drivers/spi/spi-sun6i.c *sspi->rx_buf++ = byte; sspi 157 drivers/spi/spi-sun6i.c static inline void sun6i_spi_fill_fifo(struct sun6i_spi *sspi, int len) sspi 163 drivers/spi/spi-sun6i.c cnt = sspi->fifo_depth - sun6i_spi_get_tx_fifo_count(sspi); sspi 165 drivers/spi/spi-sun6i.c len = min3(len, (int)cnt, sspi->len); sspi 168 drivers/spi/spi-sun6i.c byte = sspi->tx_buf ? *sspi->tx_buf++ : 0; sspi 169 drivers/spi/spi-sun6i.c writeb(byte, sspi->base_addr + SUN6I_TXDATA_REG); sspi 170 drivers/spi/spi-sun6i.c sspi->len--; sspi 176 drivers/spi/spi-sun6i.c struct sun6i_spi *sspi = spi_master_get_devdata(spi->master); sspi 179 drivers/spi/spi-sun6i.c reg = sun6i_spi_read(sspi, SUN6I_TFR_CTL_REG); sspi 188 drivers/spi/spi-sun6i.c sun6i_spi_write(sspi, SUN6I_TFR_CTL_REG, reg); sspi 200 drivers/spi/spi-sun6i.c struct sun6i_spi *sspi = spi_master_get_devdata(master); sspi 211 drivers/spi/spi-sun6i.c reinit_completion(&sspi->done); sspi 212 drivers/spi/spi-sun6i.c sspi->tx_buf = tfr->tx_buf; sspi 213 drivers/spi/spi-sun6i.c sspi->rx_buf = tfr->rx_buf; sspi 214 drivers/spi/spi-sun6i.c sspi->len = tfr->len; sspi 217 drivers/spi/spi-sun6i.c sun6i_spi_write(sspi, SUN6I_INT_STA_REG, ~0); sspi 220 drivers/spi/spi-sun6i.c sun6i_spi_write(sspi, SUN6I_FIFO_CTL_REG, sspi 229 drivers/spi/spi-sun6i.c trig_level = sspi->fifo_depth / 4 * 3; sspi 230 drivers/spi/spi-sun6i.c sun6i_spi_write(sspi, SUN6I_FIFO_CTL_REG, sspi 238 drivers/spi/spi-sun6i.c reg = sun6i_spi_read(sspi, SUN6I_TFR_CTL_REG); sspi 259 drivers/spi/spi-sun6i.c if (sspi->rx_buf) sspi 267 drivers/spi/spi-sun6i.c sun6i_spi_write(sspi, SUN6I_TFR_CTL_REG, reg); sspi 270 drivers/spi/spi-sun6i.c mclk_rate = clk_get_rate(sspi->mclk); sspi 272 drivers/spi/spi-sun6i.c clk_set_rate(sspi->mclk, 2 * tfr->speed_hz); sspi 273 drivers/spi/spi-sun6i.c mclk_rate = clk_get_rate(sspi->mclk); sspi 301 drivers/spi/spi-sun6i.c sun6i_spi_write(sspi, SUN6I_CLK_CTL_REG, reg); sspi 304 drivers/spi/spi-sun6i.c if (sspi->tx_buf) sspi 308 drivers/spi/spi-sun6i.c sun6i_spi_write(sspi, SUN6I_BURST_CNT_REG, SUN6I_BURST_CNT(tfr->len)); sspi 309 drivers/spi/spi-sun6i.c sun6i_spi_write(sspi, SUN6I_XMIT_CNT_REG, SUN6I_XMIT_CNT(tx_len)); sspi 310 drivers/spi/spi-sun6i.c sun6i_spi_write(sspi, SUN6I_BURST_CTL_CNT_REG, sspi 314 drivers/spi/spi-sun6i.c sun6i_spi_fill_fifo(sspi, sspi->fifo_depth); sspi 317 drivers/spi/spi-sun6i.c sun6i_spi_write(sspi, SUN6I_INT_CTL_REG, SUN6I_INT_CTL_TC); sspi 318 drivers/spi/spi-sun6i.c sun6i_spi_enable_interrupt(sspi, SUN6I_INT_CTL_TC | sspi 320 drivers/spi/spi-sun6i.c if (tx_len > sspi->fifo_depth) sspi 321 drivers/spi/spi-sun6i.c sun6i_spi_enable_interrupt(sspi, SUN6I_INT_CTL_TF_ERQ); sspi 324 drivers/spi/spi-sun6i.c reg = sun6i_spi_read(sspi, SUN6I_TFR_CTL_REG); sspi 325 drivers/spi/spi-sun6i.c sun6i_spi_write(sspi, SUN6I_TFR_CTL_REG, reg | SUN6I_TFR_CTL_XCH); sspi 329 drivers/spi/spi-sun6i.c timeout = wait_for_completion_timeout(&sspi->done, sspi 342 drivers/spi/spi-sun6i.c sun6i_spi_write(sspi, SUN6I_INT_CTL_REG, 0); sspi 349 drivers/spi/spi-sun6i.c struct sun6i_spi *sspi = dev_id; sspi 350 drivers/spi/spi-sun6i.c u32 status = sun6i_spi_read(sspi, SUN6I_INT_STA_REG); sspi 354 drivers/spi/spi-sun6i.c sun6i_spi_write(sspi, SUN6I_INT_STA_REG, SUN6I_INT_CTL_TC); sspi 355 drivers/spi/spi-sun6i.c sun6i_spi_drain_fifo(sspi, sspi->fifo_depth); sspi 356 drivers/spi/spi-sun6i.c complete(&sspi->done); sspi 362 drivers/spi/spi-sun6i.c sun6i_spi_drain_fifo(sspi, SUN6I_FIFO_DEPTH); sspi 364 drivers/spi/spi-sun6i.c sun6i_spi_write(sspi, SUN6I_INT_STA_REG, SUN6I_INT_CTL_RF_RDY); sspi 370 drivers/spi/spi-sun6i.c sun6i_spi_fill_fifo(sspi, SUN6I_FIFO_DEPTH); sspi 372 drivers/spi/spi-sun6i.c if (!sspi->len) sspi 374 drivers/spi/spi-sun6i.c sun6i_spi_disable_interrupt(sspi, SUN6I_INT_CTL_TF_ERQ); sspi 377 drivers/spi/spi-sun6i.c sun6i_spi_write(sspi, SUN6I_INT_STA_REG, SUN6I_INT_CTL_TF_ERQ); sspi 388 drivers/spi/spi-sun6i.c struct sun6i_spi *sspi = spi_master_get_devdata(master); sspi 391 drivers/spi/spi-sun6i.c ret = clk_prepare_enable(sspi->hclk); sspi 397 drivers/spi/spi-sun6i.c ret = clk_prepare_enable(sspi->mclk); sspi 403 drivers/spi/spi-sun6i.c ret = reset_control_deassert(sspi->rstc); sspi 409 drivers/spi/spi-sun6i.c sun6i_spi_write(sspi, SUN6I_GBL_CTL_REG, sspi 415 drivers/spi/spi-sun6i.c clk_disable_unprepare(sspi->mclk); sspi 417 drivers/spi/spi-sun6i.c clk_disable_unprepare(sspi->hclk); sspi 425 drivers/spi/spi-sun6i.c struct sun6i_spi *sspi = spi_master_get_devdata(master); sspi 427 drivers/spi/spi-sun6i.c reset_control_assert(sspi->rstc); sspi 428 drivers/spi/spi-sun6i.c clk_disable_unprepare(sspi->mclk); sspi 429 drivers/spi/spi-sun6i.c clk_disable_unprepare(sspi->hclk); sspi 437 drivers/spi/spi-sun6i.c struct sun6i_spi *sspi; sspi 447 drivers/spi/spi-sun6i.c sspi = spi_master_get_devdata(master); sspi 449 drivers/spi/spi-sun6i.c sspi->base_addr = devm_platform_ioremap_resource(pdev, 0); sspi 450 drivers/spi/spi-sun6i.c if (IS_ERR(sspi->base_addr)) { sspi 451 drivers/spi/spi-sun6i.c ret = PTR_ERR(sspi->base_addr); sspi 462 drivers/spi/spi-sun6i.c 0, "sun6i-spi", sspi); sspi 468 drivers/spi/spi-sun6i.c sspi->master = master; sspi 469 drivers/spi/spi-sun6i.c sspi->fifo_depth = (unsigned long)of_device_get_match_data(&pdev->dev); sspi 482 drivers/spi/spi-sun6i.c sspi->hclk = devm_clk_get(&pdev->dev, "ahb"); sspi 483 drivers/spi/spi-sun6i.c if (IS_ERR(sspi->hclk)) { sspi 485 drivers/spi/spi-sun6i.c ret = PTR_ERR(sspi->hclk); sspi 489 drivers/spi/spi-sun6i.c sspi->mclk = devm_clk_get(&pdev->dev, "mod"); sspi 490 drivers/spi/spi-sun6i.c if (IS_ERR(sspi->mclk)) { sspi 492 drivers/spi/spi-sun6i.c ret = PTR_ERR(sspi->mclk); sspi 496 drivers/spi/spi-sun6i.c init_completion(&sspi->done); sspi 498 drivers/spi/spi-sun6i.c sspi->rstc = devm_reset_control_get_exclusive(&pdev->dev, NULL); sspi 499 drivers/spi/spi-sun6i.c if (IS_ERR(sspi->rstc)) { sspi 501 drivers/spi/spi-sun6i.c ret = PTR_ERR(sspi->rstc); sspi 141 drivers/spi/spi-synquacer.c static int read_fifo(struct synquacer_spi *sspi) sspi 143 drivers/spi/spi-synquacer.c u32 len = readl(sspi->regs + SYNQUACER_HSSPI_REG_DMSTATUS); sspi 147 drivers/spi/spi-synquacer.c len = min(len, sspi->rx_words); sspi 149 drivers/spi/spi-synquacer.c switch (sspi->bpw) { sspi 151 drivers/spi/spi-synquacer.c u8 *buf = sspi->rx_buf; sspi 153 drivers/spi/spi-synquacer.c ioread8_rep(sspi->regs + SYNQUACER_HSSPI_REG_RX_FIFO, sspi 155 drivers/spi/spi-synquacer.c sspi->rx_buf = buf + len; sspi 159 drivers/spi/spi-synquacer.c u16 *buf = sspi->rx_buf; sspi 161 drivers/spi/spi-synquacer.c ioread16_rep(sspi->regs + SYNQUACER_HSSPI_REG_RX_FIFO, sspi 163 drivers/spi/spi-synquacer.c sspi->rx_buf = buf + len; sspi 169 drivers/spi/spi-synquacer.c u32 *buf = sspi->rx_buf; sspi 171 drivers/spi/spi-synquacer.c ioread32_rep(sspi->regs + SYNQUACER_HSSPI_REG_RX_FIFO, sspi 173 drivers/spi/spi-synquacer.c sspi->rx_buf = buf + len; sspi 180 drivers/spi/spi-synquacer.c sspi->rx_words -= len; sspi 184 drivers/spi/spi-synquacer.c static int write_fifo(struct synquacer_spi *sspi) sspi 186 drivers/spi/spi-synquacer.c u32 len = readl(sspi->regs + SYNQUACER_HSSPI_REG_DMSTATUS); sspi 191 drivers/spi/spi-synquacer.c sspi->tx_words); sspi 193 drivers/spi/spi-synquacer.c switch (sspi->bpw) { sspi 195 drivers/spi/spi-synquacer.c const u8 *buf = sspi->tx_buf; sspi 197 drivers/spi/spi-synquacer.c iowrite8_rep(sspi->regs + SYNQUACER_HSSPI_REG_TX_FIFO, sspi 199 drivers/spi/spi-synquacer.c sspi->tx_buf = buf + len; sspi 203 drivers/spi/spi-synquacer.c const u16 *buf = sspi->tx_buf; sspi 205 drivers/spi/spi-synquacer.c iowrite16_rep(sspi->regs + SYNQUACER_HSSPI_REG_TX_FIFO, sspi 207 drivers/spi/spi-synquacer.c sspi->tx_buf = buf + len; sspi 213 drivers/spi/spi-synquacer.c const u32 *buf = sspi->tx_buf; sspi 215 drivers/spi/spi-synquacer.c iowrite32_rep(sspi->regs + SYNQUACER_HSSPI_REG_TX_FIFO, sspi 217 drivers/spi/spi-synquacer.c sspi->tx_buf = buf + len; sspi 224 drivers/spi/spi-synquacer.c sspi->tx_words -= len; sspi 232 drivers/spi/spi-synquacer.c struct synquacer_spi *sspi = spi_master_get_devdata(master); sspi 239 drivers/spi/spi-synquacer.c dev_err(sspi->dev, sspi 258 drivers/spi/spi-synquacer.c if (speed == sspi->speed && sspi 259 drivers/spi/spi-synquacer.c bus_width == sspi->bus_width && bpw == sspi->bpw && sspi 260 drivers/spi/spi-synquacer.c mode == sspi->mode && cs == sspi->cs && sspi 261 drivers/spi/spi-synquacer.c transfer_mode == sspi->transfer_mode) { sspi 265 drivers/spi/spi-synquacer.c sspi->transfer_mode = transfer_mode; sspi 270 drivers/spi/spi-synquacer.c dev_err(sspi->dev, "Requested rate too low (%u)\n", sspi 271 drivers/spi/spi-synquacer.c sspi->speed); sspi 275 drivers/spi/spi-synquacer.c val = readl(sspi->regs + SYNQUACER_HSSPI_REG_PCC(cs)); sspi 304 drivers/spi/spi-synquacer.c if (sspi->aces) sspi 309 drivers/spi/spi-synquacer.c if (sspi->rtm) sspi 321 drivers/spi/spi-synquacer.c writel(val, sspi->regs + SYNQUACER_HSSPI_REG_PCC(cs)); sspi 323 drivers/spi/spi-synquacer.c val = readl(sspi->regs + SYNQUACER_HSSPI_REG_FIFOCFG); sspi 327 drivers/spi/spi-synquacer.c writel(val, sspi->regs + SYNQUACER_HSSPI_REG_FIFOCFG); sspi 329 drivers/spi/spi-synquacer.c val = readl(sspi->regs + SYNQUACER_HSSPI_REG_DMSTART); sspi 342 drivers/spi/spi-synquacer.c writel(val, sspi->regs + SYNQUACER_HSSPI_REG_DMSTART); sspi 344 drivers/spi/spi-synquacer.c sspi->bpw = bpw; sspi 345 drivers/spi/spi-synquacer.c sspi->mode = mode; sspi 346 drivers/spi/spi-synquacer.c sspi->speed = speed; sspi 347 drivers/spi/spi-synquacer.c sspi->cs = spi->chip_select; sspi 348 drivers/spi/spi-synquacer.c sspi->bus_width = bus_width; sspi 357 drivers/spi/spi-synquacer.c struct synquacer_spi *sspi = spi_master_get_devdata(master); sspi 364 drivers/spi/spi-synquacer.c val = readl(sspi->regs + SYNQUACER_HSSPI_REG_DMSTART); sspi 366 drivers/spi/spi-synquacer.c writel(val, sspi->regs + SYNQUACER_HSSPI_REG_DMSTART); sspi 368 drivers/spi/spi-synquacer.c val = readl(sspi->regs + SYNQUACER_HSSPI_REG_FIFOCFG); sspi 371 drivers/spi/spi-synquacer.c writel(val, sspi->regs + SYNQUACER_HSSPI_REG_FIFOCFG); sspi 389 drivers/spi/spi-synquacer.c reinit_completion(&sspi->transfer_done); sspi 391 drivers/spi/spi-synquacer.c sspi->tx_buf = xfer->tx_buf; sspi 392 drivers/spi/spi-synquacer.c sspi->rx_buf = xfer->rx_buf; sspi 394 drivers/spi/spi-synquacer.c switch (sspi->bpw) { sspi 407 drivers/spi/spi-synquacer.c dev_err(sspi->dev, "unsupported bpw: %d\n", sspi->bpw); sspi 412 drivers/spi/spi-synquacer.c sspi->tx_words = words; sspi 414 drivers/spi/spi-synquacer.c sspi->tx_words = 0; sspi 417 drivers/spi/spi-synquacer.c sspi->rx_words = words; sspi 419 drivers/spi/spi-synquacer.c sspi->rx_words = 0; sspi 422 drivers/spi/spi-synquacer.c status = write_fifo(sspi); sspi 424 drivers/spi/spi-synquacer.c dev_err(sspi->dev, "failed write_fifo. status: 0x%x\n", sspi 431 drivers/spi/spi-synquacer.c val = readl(sspi->regs + SYNQUACER_HSSPI_REG_FIFOCFG); sspi 434 drivers/spi/spi-synquacer.c val |= ((sspi->rx_words > SYNQUACER_HSSPI_FIFO_DEPTH ? sspi 435 drivers/spi/spi-synquacer.c SYNQUACER_HSSPI_FIFO_RX_THRESHOLD : sspi->rx_words) << sspi 437 drivers/spi/spi-synquacer.c writel(val, sspi->regs + SYNQUACER_HSSPI_REG_FIFOCFG); sspi 440 drivers/spi/spi-synquacer.c writel(~0, sspi->regs + SYNQUACER_HSSPI_REG_TXC); sspi 441 drivers/spi/spi-synquacer.c writel(~0, sspi->regs + SYNQUACER_HSSPI_REG_RXC); sspi 444 drivers/spi/spi-synquacer.c val = readl(sspi->regs + SYNQUACER_HSSPI_REG_DMSTART); sspi 446 drivers/spi/spi-synquacer.c writel(val, sspi->regs + SYNQUACER_HSSPI_REG_DMSTART); sspi 450 drivers/spi/spi-synquacer.c writel(val, sspi->regs + SYNQUACER_HSSPI_REG_TXE); sspi 451 drivers/spi/spi-synquacer.c status = wait_for_completion_timeout(&sspi->transfer_done, sspi 453 drivers/spi/spi-synquacer.c writel(0, sspi->regs + SYNQUACER_HSSPI_REG_TXE); sspi 461 drivers/spi/spi-synquacer.c writel(val, sspi->regs + SYNQUACER_HSSPI_REG_RXE); sspi 462 drivers/spi/spi-synquacer.c status = wait_for_completion_timeout(&sspi->transfer_done, sspi 464 drivers/spi/spi-synquacer.c writel(0, sspi->regs + SYNQUACER_HSSPI_REG_RXE); sspi 467 drivers/spi/spi-synquacer.c val = readl(sspi->regs + SYNQUACER_HSSPI_REG_DMSTART); sspi 469 drivers/spi/spi-synquacer.c writel(val, sspi->regs + SYNQUACER_HSSPI_REG_DMSTART); sspi 470 drivers/spi/spi-synquacer.c sspi->rx_buf = buf; sspi 471 drivers/spi/spi-synquacer.c sspi->rx_words = SYNQUACER_HSSPI_FIFO_DEPTH; sspi 472 drivers/spi/spi-synquacer.c read_fifo(sspi); sspi 476 drivers/spi/spi-synquacer.c dev_err(sspi->dev, "failed to transfer. status: 0x%x\n", sspi 486 drivers/spi/spi-synquacer.c struct synquacer_spi *sspi = spi_master_get_devdata(spi->master); sspi 489 drivers/spi/spi-synquacer.c val = readl(sspi->regs + SYNQUACER_HSSPI_REG_DMSTART); sspi 493 drivers/spi/spi-synquacer.c writel(val, sspi->regs + SYNQUACER_HSSPI_REG_DMSTART); sspi 496 drivers/spi/spi-synquacer.c static int synquacer_spi_wait_status_update(struct synquacer_spi *sspi, sspi 505 drivers/spi/spi-synquacer.c val = readl(sspi->regs + SYNQUACER_HSSPI_REG_MCTRL) & sspi 513 drivers/spi/spi-synquacer.c dev_err(sspi->dev, "timeout occurs in updating Module Enable Status\n"); sspi 521 drivers/spi/spi-synquacer.c struct synquacer_spi *sspi = spi_master_get_devdata(master); sspi 524 drivers/spi/spi-synquacer.c writel(0, sspi->regs + SYNQUACER_HSSPI_REG_MCTRL); sspi 525 drivers/spi/spi-synquacer.c status = synquacer_spi_wait_status_update(sspi, false); sspi 529 drivers/spi/spi-synquacer.c writel(0, sspi->regs + SYNQUACER_HSSPI_REG_TXE); sspi 530 drivers/spi/spi-synquacer.c writel(0, sspi->regs + SYNQUACER_HSSPI_REG_RXE); sspi 531 drivers/spi/spi-synquacer.c writel(~0, sspi->regs + SYNQUACER_HSSPI_REG_TXC); sspi 532 drivers/spi/spi-synquacer.c writel(~0, sspi->regs + SYNQUACER_HSSPI_REG_RXC); sspi 533 drivers/spi/spi-synquacer.c writel(~0, sspi->regs + SYNQUACER_HSSPI_REG_FAULTC); sspi 535 drivers/spi/spi-synquacer.c val = readl(sspi->regs + SYNQUACER_HSSPI_REG_DMCFG); sspi 538 drivers/spi/spi-synquacer.c writel(val, sspi->regs + SYNQUACER_HSSPI_REG_DMCFG); sspi 540 drivers/spi/spi-synquacer.c val = readl(sspi->regs + SYNQUACER_HSSPI_REG_MCTRL); sspi 541 drivers/spi/spi-synquacer.c if (sspi->clk_src_type == SYNQUACER_HSSPI_CLOCK_SRC_IPCLK) sspi 551 drivers/spi/spi-synquacer.c writel(val, sspi->regs + SYNQUACER_HSSPI_REG_MCTRL); sspi 552 drivers/spi/spi-synquacer.c status = synquacer_spi_wait_status_update(sspi, true); sspi 562 drivers/spi/spi-synquacer.c struct synquacer_spi *sspi = priv; sspi 564 drivers/spi/spi-synquacer.c val = readl(sspi->regs + SYNQUACER_HSSPI_REG_RXF); sspi 567 drivers/spi/spi-synquacer.c read_fifo(sspi); sspi 569 drivers/spi/spi-synquacer.c if (sspi->rx_words == 0) { sspi 570 drivers/spi/spi-synquacer.c writel(0, sspi->regs + SYNQUACER_HSSPI_REG_RXE); sspi 571 drivers/spi/spi-synquacer.c complete(&sspi->transfer_done); sspi 582 drivers/spi/spi-synquacer.c struct synquacer_spi *sspi = priv; sspi 584 drivers/spi/spi-synquacer.c val = readl(sspi->regs + SYNQUACER_HSSPI_REG_TXF); sspi 586 drivers/spi/spi-synquacer.c if (sspi->tx_words == 0) { sspi 587 drivers/spi/spi-synquacer.c writel(0, sspi->regs + SYNQUACER_HSSPI_REG_TXE); sspi 588 drivers/spi/spi-synquacer.c complete(&sspi->transfer_done); sspi 590 drivers/spi/spi-synquacer.c write_fifo(sspi); sspi 602 drivers/spi/spi-synquacer.c struct synquacer_spi *sspi; sspi 606 drivers/spi/spi-synquacer.c master = spi_alloc_master(&pdev->dev, sizeof(*sspi)); sspi 612 drivers/spi/spi-synquacer.c sspi = spi_master_get_devdata(master); sspi 613 drivers/spi/spi-synquacer.c sspi->dev = &pdev->dev; sspi 615 drivers/spi/spi-synquacer.c init_completion(&sspi->transfer_done); sspi 617 drivers/spi/spi-synquacer.c sspi->regs = devm_platform_ioremap_resource(pdev, 0); sspi 618 drivers/spi/spi-synquacer.c if (IS_ERR(sspi->regs)) { sspi 619 drivers/spi/spi-synquacer.c ret = PTR_ERR(sspi->regs); sspi 623 drivers/spi/spi-synquacer.c sspi->clk_src_type = SYNQUACER_HSSPI_CLOCK_SRC_IHCLK; /* Default */ sspi 630 drivers/spi/spi-synquacer.c sspi->clk_src_type = SYNQUACER_HSSPI_CLOCK_SRC_IHCLK; sspi 631 drivers/spi/spi-synquacer.c sspi->clk = devm_clk_get(sspi->dev, "iHCLK"); sspi 634 drivers/spi/spi-synquacer.c sspi->clk_src_type = SYNQUACER_HSSPI_CLOCK_SRC_IPCLK; sspi 635 drivers/spi/spi-synquacer.c sspi->clk = devm_clk_get(sspi->dev, "iPCLK"); sspi 642 drivers/spi/spi-synquacer.c if (IS_ERR(sspi->clk)) { sspi 643 drivers/spi/spi-synquacer.c if (!(PTR_ERR(sspi->clk) == -EPROBE_DEFER)) sspi 645 drivers/spi/spi-synquacer.c ret = PTR_ERR(sspi->clk); sspi 649 drivers/spi/spi-synquacer.c ret = clk_prepare_enable(sspi->clk); sspi 656 drivers/spi/spi-synquacer.c master->max_speed_hz = clk_get_rate(sspi->clk); sspi 665 drivers/spi/spi-synquacer.c sspi->aces = device_property_read_bool(&pdev->dev, sspi 667 drivers/spi/spi-synquacer.c sspi->rtm = device_property_read_bool(&pdev->dev, "socionext,use-rtm"); sspi 676 drivers/spi/spi-synquacer.c snprintf(sspi->rx_irq_name, SYNQUACER_HSSPI_IRQ_NAME_MAX, "%s-rx", sspi 679 drivers/spi/spi-synquacer.c 0, sspi->rx_irq_name, sspi); sspi 690 drivers/spi/spi-synquacer.c snprintf(sspi->tx_irq_name, SYNQUACER_HSSPI_IRQ_NAME_MAX, "%s-tx", sspi 693 drivers/spi/spi-synquacer.c 0, sspi->tx_irq_name, sspi); sspi 716 drivers/spi/spi-synquacer.c pm_runtime_set_active(sspi->dev); sspi 717 drivers/spi/spi-synquacer.c pm_runtime_enable(sspi->dev); sspi 719 drivers/spi/spi-synquacer.c ret = devm_spi_register_master(sspi->dev, master); sspi 726 drivers/spi/spi-synquacer.c pm_runtime_disable(sspi->dev); sspi 728 drivers/spi/spi-synquacer.c clk_disable_unprepare(sspi->clk); sspi 738 drivers/spi/spi-synquacer.c struct synquacer_spi *sspi = spi_master_get_devdata(master); sspi 740 drivers/spi/spi-synquacer.c pm_runtime_disable(sspi->dev); sspi 742 drivers/spi/spi-synquacer.c clk_disable_unprepare(sspi->clk); sspi 750 drivers/spi/spi-synquacer.c struct synquacer_spi *sspi = spi_master_get_devdata(master); sspi 758 drivers/spi/spi-synquacer.c clk_disable_unprepare(sspi->clk); sspi 766 drivers/spi/spi-synquacer.c struct synquacer_spi *sspi = spi_master_get_devdata(master); sspi 771 drivers/spi/spi-synquacer.c sspi->speed = 0; sspi 773 drivers/spi/spi-synquacer.c ret = clk_prepare_enable(sspi->clk); sspi 789 drivers/spi/spi-synquacer.c clk_disable_unprepare(sspi->clk);