Lines Matching refs:spi
460 static void spi_sirfsoc_cmd_transfer(struct spi_device *spi, in spi_sirfsoc_cmd_transfer() argument
467 sspi = spi_master_get_devdata(spi->master); in spi_sirfsoc_cmd_transfer()
471 if (sspi->word_width == 1 && !(spi->mode & SPI_LSB_FIRST)) in spi_sirfsoc_cmd_transfer()
475 (!(spi->mode & SPI_LSB_FIRST))) in spi_sirfsoc_cmd_transfer()
483 dev_err(&spi->dev, "cmd transfer timeout\n"); in spi_sirfsoc_cmd_transfer()
489 static void spi_sirfsoc_dma_transfer(struct spi_device *spi, in spi_sirfsoc_dma_transfer() argument
496 sspi = spi_master_get_devdata(spi->master); in spi_sirfsoc_dma_transfer()
548 sspi->dst_start = dma_map_single(&spi->dev, sspi->rx, t->len, in spi_sirfsoc_dma_transfer()
557 sspi->src_start = dma_map_single(&spi->dev, (void *)sspi->tx, t->len, in spi_sirfsoc_dma_transfer()
580 dev_err(&spi->dev, "transfer timeout\n"); in spi_sirfsoc_dma_transfer()
590 dev_err(&spi->dev, "transfer timeout\n"); in spi_sirfsoc_dma_transfer()
596 dma_unmap_single(&spi->dev, sspi->src_start, t->len, DMA_TO_DEVICE); in spi_sirfsoc_dma_transfer()
597 dma_unmap_single(&spi->dev, sspi->dst_start, t->len, DMA_FROM_DEVICE); in spi_sirfsoc_dma_transfer()
608 static void spi_sirfsoc_pio_transfer(struct spi_device *spi, in spi_sirfsoc_pio_transfer() argument
615 sspi = spi_master_get_devdata(spi->master); in spi_sirfsoc_pio_transfer()
687 dev_err(&spi->dev, "transfer timeout\n"); in spi_sirfsoc_pio_transfer()
705 static int spi_sirfsoc_transfer(struct spi_device *spi, struct spi_transfer *t) in spi_sirfsoc_transfer() argument
709 sspi = spi_master_get_devdata(spi->master); in spi_sirfsoc_transfer()
721 spi_sirfsoc_cmd_transfer(spi, t); in spi_sirfsoc_transfer()
723 spi_sirfsoc_dma_transfer(spi, t); in spi_sirfsoc_transfer()
725 spi_sirfsoc_pio_transfer(spi, t); in spi_sirfsoc_transfer()
730 static void spi_sirfsoc_chipselect(struct spi_device *spi, int value) in spi_sirfsoc_chipselect() argument
732 struct sirfsoc_spi *sspi = spi_master_get_devdata(spi->master); in spi_sirfsoc_chipselect()
742 if (spi->mode & SPI_CS_HIGH) in spi_sirfsoc_chipselect()
748 if (spi->mode & SPI_CS_HIGH) in spi_sirfsoc_chipselect()
762 if (spi->mode & SPI_CS_HIGH) in spi_sirfsoc_chipselect()
768 if (spi->mode & SPI_CS_HIGH) in spi_sirfsoc_chipselect()
781 gpio_direction_output(spi->cs_gpio, in spi_sirfsoc_chipselect()
782 spi->mode & SPI_CS_HIGH ? 1 : 0); in spi_sirfsoc_chipselect()
785 gpio_direction_output(spi->cs_gpio, in spi_sirfsoc_chipselect()
786 spi->mode & SPI_CS_HIGH ? 0 : 1); in spi_sirfsoc_chipselect()
792 static int spi_sirfsoc_config_mode(struct spi_device *spi) in spi_sirfsoc_config_mode() argument
797 sspi = spi_master_get_devdata(spi->master); in spi_sirfsoc_config_mode()
800 if (!(spi->mode & SPI_CS_HIGH)) { in spi_sirfsoc_config_mode()
807 if (!(spi->mode & SPI_LSB_FIRST)) { in spi_sirfsoc_config_mode()
814 if (spi->mode & SPI_CPOL) { in spi_sirfsoc_config_mode()
825 if (((spi->mode & SPI_CPOL) && (spi->mode & SPI_CPHA)) || in spi_sirfsoc_config_mode()
826 (!(spi->mode & SPI_CPOL) && !(spi->mode & SPI_CPHA))) { in spi_sirfsoc_config_mode()
871 spi_sirfsoc_setup_transfer(struct spi_device *spi, struct spi_transfer *t) in spi_sirfsoc_setup_transfer() argument
878 sspi = spi_master_get_devdata(spi->master); in spi_sirfsoc_setup_transfer()
880 bits_per_word = (t) ? t->bits_per_word : spi->bits_per_word; in spi_sirfsoc_setup_transfer()
881 hz = t && t->speed_hz ? t->speed_hz : spi->max_speed_hz; in spi_sirfsoc_setup_transfer()
885 dev_err(&spi->dev, "Speed %d not supported\n", hz); in spi_sirfsoc_setup_transfer()
908 dev_err(&spi->dev, "bpw %d not supported\n", bits_per_word); in spi_sirfsoc_setup_transfer()
964 spi_sirfsoc_config_mode(spi); in spi_sirfsoc_setup_transfer()
995 static int spi_sirfsoc_setup(struct spi_device *spi) in spi_sirfsoc_setup() argument
1000 sspi = spi_master_get_devdata(spi->master); in spi_sirfsoc_setup()
1001 if (spi->cs_gpio == -ENOENT) in spi_sirfsoc_setup()
1005 if (!spi_get_ctldata(spi)) { in spi_sirfsoc_setup()
1011 ret = gpio_is_valid(spi->cs_gpio); in spi_sirfsoc_setup()
1013 dev_err(&spi->dev, "no valid gpio\n"); in spi_sirfsoc_setup()
1017 ret = gpio_request(spi->cs_gpio, DRIVER_NAME); in spi_sirfsoc_setup()
1019 dev_err(&spi->dev, "failed to request gpio\n"); in spi_sirfsoc_setup()
1022 spi_set_ctldata(spi, cs); in spi_sirfsoc_setup()
1025 spi_sirfsoc_config_mode(spi); in spi_sirfsoc_setup()
1026 spi_sirfsoc_chipselect(spi, BITBANG_CS_INACTIVE); in spi_sirfsoc_setup()
1031 static void spi_sirfsoc_cleanup(struct spi_device *spi) in spi_sirfsoc_cleanup() argument
1033 if (spi_get_ctldata(spi)) { in spi_sirfsoc_cleanup()
1034 gpio_free(spi->cs_gpio); in spi_sirfsoc_cleanup()
1035 kfree(spi_get_ctldata(spi)); in spi_sirfsoc_cleanup()