Lines Matching refs:spi
86 static void fsl_spi_change_mode(struct spi_device *spi) in fsl_spi_change_mode() argument
88 struct mpc8xxx_spi *mspi = spi_master_get_devdata(spi->master); in fsl_spi_change_mode()
89 struct spi_mpc8xxx_cs *cs = spi->controller_state; in fsl_spi_change_mode()
111 static void fsl_spi_chipselect(struct spi_device *spi, int value) in fsl_spi_chipselect() argument
113 struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(spi->master); in fsl_spi_chipselect()
115 bool pol = spi->mode & SPI_CS_HIGH; in fsl_spi_chipselect()
116 struct spi_mpc8xxx_cs *cs = spi->controller_state; in fsl_spi_chipselect()
118 pdata = spi->dev.parent->parent->platform_data; in fsl_spi_chipselect()
122 pdata->cs_control(spi, !pol); in fsl_spi_chipselect()
131 fsl_spi_change_mode(spi); in fsl_spi_chipselect()
134 pdata->cs_control(spi, pol); in fsl_spi_chipselect()
173 struct spi_device *spi, in mspi_apply_cpu_mode_quirks() argument
194 !(spi->mode & SPI_LSB_FIRST)); in mspi_apply_cpu_mode_quirks()
205 struct spi_device *spi, in mspi_apply_qe_mode_quirks() argument
214 if (spi->mode & SPI_LSB_FIRST && in mspi_apply_qe_mode_quirks()
222 static int fsl_spi_setup_transfer(struct spi_device *spi, in fsl_spi_setup_transfer() argument
229 struct spi_mpc8xxx_cs *cs = spi->controller_state; in fsl_spi_setup_transfer()
231 mpc8xxx_spi = spi_master_get_devdata(spi->master); in fsl_spi_setup_transfer()
240 bits_per_word = spi->bits_per_word; in fsl_spi_setup_transfer()
243 hz = spi->max_speed_hz; in fsl_spi_setup_transfer()
246 bits_per_word = mspi_apply_cpu_mode_quirks(cs, spi, in fsl_spi_setup_transfer()
250 bits_per_word = mspi_apply_qe_mode_quirks(cs, spi, in fsl_spi_setup_transfer()
272 "Will use %d Hz instead.\n", dev_name(&spi->dev), in fsl_spi_setup_transfer()
284 fsl_spi_change_mode(spi); in fsl_spi_setup_transfer()
306 static int fsl_spi_bufs(struct spi_device *spi, struct spi_transfer *t, in fsl_spi_bufs() argument
309 struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(spi->master); in fsl_spi_bufs()
316 bits_per_word = spi->bits_per_word; in fsl_spi_bufs()
359 struct spi_device *spi = m->spi; in fsl_spi_do_one_msg() local
371 dev_err(&spi->dev, in fsl_spi_do_one_msg()
382 status = fsl_spi_setup_transfer(spi, t); in fsl_spi_do_one_msg()
388 fsl_spi_chipselect(spi, BITBANG_CS_ACTIVE); in fsl_spi_do_one_msg()
393 status = fsl_spi_bufs(spi, t, m->is_dma_mapped); in fsl_spi_do_one_msg()
405 fsl_spi_chipselect(spi, BITBANG_CS_INACTIVE); in fsl_spi_do_one_msg()
415 fsl_spi_chipselect(spi, BITBANG_CS_INACTIVE); in fsl_spi_do_one_msg()
418 fsl_spi_setup_transfer(spi, NULL); in fsl_spi_do_one_msg()
422 static int fsl_spi_setup(struct spi_device *spi) in fsl_spi_setup() argument
428 struct spi_mpc8xxx_cs *cs = spi_get_ctldata(spi); in fsl_spi_setup()
430 if (!spi->max_speed_hz) in fsl_spi_setup()
437 spi_set_ctldata(spi, cs); in fsl_spi_setup()
439 mpc8xxx_spi = spi_master_get_devdata(spi->master); in fsl_spi_setup()
449 if (spi->mode & SPI_CPHA) in fsl_spi_setup()
451 if (spi->mode & SPI_CPOL) in fsl_spi_setup()
453 if (!(spi->mode & SPI_LSB_FIRST)) in fsl_spi_setup()
455 if (spi->mode & SPI_LOOP) in fsl_spi_setup()
458 retval = fsl_spi_setup_transfer(spi, NULL); in fsl_spi_setup()
465 if (gpio_is_valid(spi->cs_gpio)) { in fsl_spi_setup()
468 retval = gpio_request(spi->cs_gpio, in fsl_spi_setup()
469 dev_name(&spi->dev)); in fsl_spi_setup()
473 desel = !(spi->mode & SPI_CS_HIGH); in fsl_spi_setup()
474 retval = gpio_direction_output(spi->cs_gpio, desel); in fsl_spi_setup()
476 gpio_free(spi->cs_gpio); in fsl_spi_setup()
479 } else if (spi->cs_gpio != -ENOENT) { in fsl_spi_setup()
480 if (spi->cs_gpio < 0) in fsl_spi_setup()
481 return spi->cs_gpio; in fsl_spi_setup()
491 fsl_spi_chipselect(spi, BITBANG_CS_INACTIVE); in fsl_spi_setup()
496 static void fsl_spi_cleanup(struct spi_device *spi) in fsl_spi_cleanup() argument
498 struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(spi->master); in fsl_spi_cleanup()
499 struct spi_mpc8xxx_cs *cs = spi_get_ctldata(spi); in fsl_spi_cleanup()
501 if (mpc8xxx_spi->type == TYPE_GRLIB && gpio_is_valid(spi->cs_gpio)) in fsl_spi_cleanup()
502 gpio_free(spi->cs_gpio); in fsl_spi_cleanup()
505 spi_set_ctldata(spi, NULL); in fsl_spi_cleanup()
562 static void fsl_spi_grlib_cs_control(struct spi_device *spi, bool on) in fsl_spi_grlib_cs_control() argument
564 struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(spi->master); in fsl_spi_grlib_cs_control()
567 u16 cs = spi->chip_select; in fsl_spi_grlib_cs_control()
569 if (gpio_is_valid(spi->cs_gpio)) { in fsl_spi_grlib_cs_control()
570 gpio_set_value(spi->cs_gpio, on); in fsl_spi_grlib_cs_control()
699 static void fsl_spi_cs_control(struct spi_device *spi, bool on) in fsl_spi_cs_control() argument
701 struct device *dev = spi->dev.parent->parent; in fsl_spi_cs_control()
704 u16 cs = spi->chip_select; in fsl_spi_cs_control()