Lines Matching refs:spi

313 static int s3c64xx_spi_prepare_transfer(struct spi_master *spi)  in s3c64xx_spi_prepare_transfer()  argument
315 struct s3c64xx_spi_driver_data *sdd = spi_master_get_devdata(spi); in s3c64xx_spi_prepare_transfer()
333 spi->dma_rx = sdd->rx_dma.ch; in s3c64xx_spi_prepare_transfer()
342 spi->dma_tx = sdd->tx_dma.ch; in s3c64xx_spi_prepare_transfer()
353 static int s3c64xx_spi_unprepare_transfer(struct spi_master *spi) in s3c64xx_spi_unprepare_transfer() argument
355 struct s3c64xx_spi_driver_data *sdd = spi_master_get_devdata(spi); in s3c64xx_spi_unprepare_transfer()
367 struct spi_device *spi, in s3c64xx_spi_can_dma() argument
376 struct spi_device *spi, in enable_datapath() argument
651 struct spi_device *spi = msg->spi; in s3c64xx_spi_prepare_message() local
652 struct s3c64xx_spi_csinfo *cs = spi->controller_data; in s3c64xx_spi_prepare_message()
655 if (sdd->cur_speed != spi->max_speed_hz in s3c64xx_spi_prepare_message()
656 || sdd->cur_mode != spi->mode in s3c64xx_spi_prepare_message()
657 || sdd->cur_bpw != spi->bits_per_word) { in s3c64xx_spi_prepare_message()
658 sdd->cur_bpw = spi->bits_per_word; in s3c64xx_spi_prepare_message()
659 sdd->cur_speed = spi->max_speed_hz; in s3c64xx_spi_prepare_message()
660 sdd->cur_mode = spi->mode; in s3c64xx_spi_prepare_message()
671 struct spi_device *spi, in s3c64xx_spi_transfer_one() argument
685 speed = xfer->speed_hz ? : spi->max_speed_hz; in s3c64xx_spi_transfer_one()
706 enable_datapath(sdd, spi, xfer, use_dma); in s3c64xx_spi_transfer_one()
724 dev_err(&spi->dev, "I/O Error: rx-%d tx-%d res:rx-%c tx-%c len-%d\n", in s3c64xx_spi_transfer_one()
746 struct spi_device *spi) in s3c64xx_get_slave_ctrldata() argument
752 slave_np = spi->dev.of_node; in s3c64xx_get_slave_ctrldata()
754 dev_err(&spi->dev, "device node not found\n"); in s3c64xx_get_slave_ctrldata()
760 dev_err(&spi->dev, "child node 'controller-data' not found\n"); in s3c64xx_get_slave_ctrldata()
782 static int s3c64xx_spi_setup(struct spi_device *spi) in s3c64xx_spi_setup() argument
784 struct s3c64xx_spi_csinfo *cs = spi->controller_data; in s3c64xx_spi_setup()
789 sdd = spi_master_get_devdata(spi->master); in s3c64xx_spi_setup()
790 if (spi->dev.of_node) { in s3c64xx_spi_setup()
791 cs = s3c64xx_get_slave_ctrldata(spi); in s3c64xx_spi_setup()
792 spi->controller_data = cs; in s3c64xx_spi_setup()
799 spi->cs_gpio = cs->line; in s3c64xx_spi_setup()
803 dev_err(&spi->dev, "No CS for SPI(%d)\n", spi->chip_select); in s3c64xx_spi_setup()
807 if (!spi_get_ctldata(spi)) { in s3c64xx_spi_setup()
808 if (gpio_is_valid(spi->cs_gpio)) { in s3c64xx_spi_setup()
809 err = gpio_request_one(spi->cs_gpio, GPIOF_OUT_INIT_HIGH, in s3c64xx_spi_setup()
810 dev_name(&spi->dev)); in s3c64xx_spi_setup()
812 dev_err(&spi->dev, in s3c64xx_spi_setup()
814 spi->cs_gpio, err); in s3c64xx_spi_setup()
819 spi_set_ctldata(spi, cs); in s3c64xx_spi_setup()
833 if (spi->max_speed_hz > speed) in s3c64xx_spi_setup()
834 spi->max_speed_hz = speed; in s3c64xx_spi_setup()
836 psr = clk_get_rate(sdd->src_clk) / 2 / spi->max_speed_hz - 1; in s3c64xx_spi_setup()
842 if (spi->max_speed_hz < speed) { in s3c64xx_spi_setup()
852 if (spi->max_speed_hz >= speed) { in s3c64xx_spi_setup()
853 spi->max_speed_hz = speed; in s3c64xx_spi_setup()
855 dev_err(&spi->dev, "Can't set %dHz transfer speed\n", in s3c64xx_spi_setup()
856 spi->max_speed_hz); in s3c64xx_spi_setup()
873 if (gpio_is_valid(spi->cs_gpio)) in s3c64xx_spi_setup()
874 gpio_free(spi->cs_gpio); in s3c64xx_spi_setup()
875 spi_set_ctldata(spi, NULL); in s3c64xx_spi_setup()
878 if (spi->dev.of_node) in s3c64xx_spi_setup()
884 static void s3c64xx_spi_cleanup(struct spi_device *spi) in s3c64xx_spi_cleanup() argument
886 struct s3c64xx_spi_csinfo *cs = spi_get_ctldata(spi); in s3c64xx_spi_cleanup()
888 if (gpio_is_valid(spi->cs_gpio)) { in s3c64xx_spi_cleanup()
889 gpio_free(spi->cs_gpio); in s3c64xx_spi_cleanup()
890 if (spi->dev.of_node) in s3c64xx_spi_cleanup()
898 spi->cs_gpio = -ENOENT; in s3c64xx_spi_cleanup()
902 spi_set_ctldata(spi, NULL); in s3c64xx_spi_cleanup()
908 struct spi_master *spi = sdd->master; in s3c64xx_spi_irq() local
915 dev_err(&spi->dev, "RX overrun\n"); in s3c64xx_spi_irq()
919 dev_err(&spi->dev, "RX underrun\n"); in s3c64xx_spi_irq()
923 dev_err(&spi->dev, "TX overrun\n"); in s3c64xx_spi_irq()
927 dev_err(&spi->dev, "TX underrun\n"); in s3c64xx_spi_irq()