• Home
  • Raw
  • Download

Lines Matching +full:sck +full:- +full:gpios

35  * platform_device->driver_data ... points to spi_gpio
37 * spi->controller_state ... reserved for bitbang framework code
38 * spi->controller_data ... holds chipselect GPIO
40 * spi->master->dev.driver_data ... points to spi_gpio->bitbang
47 struct gpio_desc *sck; member
54 /*----------------------------------------------------------------------*/
61 * - The slow generic way: set up platform_data to hold the GPIO
62 * numbers used for MISO/MOSI/SCK, and issue procedure calls for
65 * - The quicker inlined way: only helps with platform GPIO code
66 * that inlines operations for constant GPIOs. This can give
76 * #include "spi-gpio.c"
86 /*----------------------------------------------------------------------*/
94 bang = spi_master_get_devdata(spi->master); in spi_to_spi_gpio()
102 return &spi_to_spi_gpio(spi)->pdata; in spi_to_pdata()
110 gpiod_set_value_cansleep(spi_gpio->sck, is_on); in setsck()
117 gpiod_set_value_cansleep(spi_gpio->mosi, is_on); in setmosi()
124 if (spi->mode & SPI_3WIRE) in getmiso()
125 return !!gpiod_get_value_cansleep(spi_gpio->mosi); in getmiso()
127 return !!gpiod_get_value_cansleep(spi_gpio->miso); in getmiso()
134 * we'll just assume we never need additional per-bit slowdowns.
138 #include "spi-bitbang-txrx.h"
144 * even with default 8-bit words.
191 flags = spi->master->flags; in spi_gpio_spec_txrx_word_mode0()
198 flags = spi->master->flags; in spi_gpio_spec_txrx_word_mode1()
205 flags = spi->master->flags; in spi_gpio_spec_txrx_word_mode2()
212 flags = spi->master->flags; in spi_gpio_spec_txrx_word_mode3()
216 /*----------------------------------------------------------------------*/
224 gpiod_set_value_cansleep(spi_gpio->sck, spi->mode & SPI_CPOL); in spi_gpio_chipselect()
227 if (spi_gpio->has_cs) { in spi_gpio_chipselect()
228 struct gpio_desc *cs = spi_gpio->cs_gpios[spi->chip_select]; in spi_gpio_chipselect()
230 /* SPI chip selects are normally active-low */ in spi_gpio_chipselect()
231 gpiod_set_value_cansleep(cs, (spi->mode & SPI_CS_HIGH) ? is_active : !is_active); in spi_gpio_chipselect()
242 * The CS GPIOs have already been in spi_gpio_setup()
245 cs = spi_gpio->cs_gpios[spi->chip_select]; in spi_gpio_setup()
246 if (!spi->controller_state && cs) in spi_gpio_setup()
248 !(spi->mode & SPI_CS_HIGH)); in spi_gpio_setup()
261 return gpiod_direction_output(spi_gpio->mosi, 1); in spi_gpio_set_direction()
263 return gpiod_direction_input(spi_gpio->mosi); in spi_gpio_set_direction()
279 * drivers expect to see all-ones data as the no slave "response".)
288 spi_gpio->mosi = devm_gpiod_get_optional(dev, "mosi", GPIOD_OUT_LOW); in spi_gpio_request()
289 if (IS_ERR(spi_gpio->mosi)) in spi_gpio_request()
290 return PTR_ERR(spi_gpio->mosi); in spi_gpio_request()
291 if (!spi_gpio->mosi) in spi_gpio_request()
295 spi_gpio->miso = devm_gpiod_get_optional(dev, "miso", GPIOD_IN); in spi_gpio_request()
296 if (IS_ERR(spi_gpio->miso)) in spi_gpio_request()
297 return PTR_ERR(spi_gpio->miso); in spi_gpio_request()
299 * No setting SPI_MASTER_NO_RX here - if there is only a MOSI in spi_gpio_request()
304 spi_gpio->sck = devm_gpiod_get(dev, "sck", GPIOD_OUT_LOW); in spi_gpio_request()
305 if (IS_ERR(spi_gpio->sck)) in spi_gpio_request()
306 return PTR_ERR(spi_gpio->sck); in spi_gpio_request()
309 spi_gpio->cs_gpios[i] = devm_gpiod_get_index(dev, "cs", in spi_gpio_request()
311 if (IS_ERR(spi_gpio->cs_gpios[i])) in spi_gpio_request()
312 return PTR_ERR(spi_gpio->cs_gpios[i]); in spi_gpio_request()
320 { .compatible = "spi-gpio" },
330 struct device_node *np = pdev->dev.of_node; in spi_gpio_probe_dt()
332 of_match_device(spi_gpio_dt_ids, &pdev->dev); in spi_gpio_probe_dt()
337 pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); in spi_gpio_probe_dt()
339 return -ENOMEM; in spi_gpio_probe_dt()
342 ret = of_property_read_u32(np, "num-chipselects", &tmp); in spi_gpio_probe_dt()
344 dev_err(&pdev->dev, "num-chipselects property not found\n"); in spi_gpio_probe_dt()
348 pdata->num_chipselect = tmp; in spi_gpio_probe_dt()
349 pdev->dev.platform_data = pdata; in spi_gpio_probe_dt()
354 devm_kfree(&pdev->dev, pdata); in spi_gpio_probe_dt()
384 pdata = dev_get_platdata(&pdev->dev); in spi_gpio_probe()
386 if (!pdata || (!use_of && !pdata->num_chipselect)) in spi_gpio_probe()
387 return -ENODEV; in spi_gpio_probe()
390 master = spi_alloc_master(&pdev->dev, sizeof(*spi_gpio)); in spi_gpio_probe()
392 return -ENOMEM; in spi_gpio_probe()
394 status = devm_add_action_or_reset(&pdev->dev, spi_gpio_put, master); in spi_gpio_probe()
402 spi_gpio->cs_gpios = devm_kcalloc(&pdev->dev, in spi_gpio_probe()
403 pdata->num_chipselect, in spi_gpio_probe()
404 sizeof(*spi_gpio->cs_gpios), in spi_gpio_probe()
406 if (!spi_gpio->cs_gpios) in spi_gpio_probe()
407 return -ENOMEM; in spi_gpio_probe()
412 spi_gpio->has_cs = !!pdata->num_chipselect; in spi_gpio_probe()
414 spi_gpio->pdev = pdev; in spi_gpio_probe()
416 spi_gpio->pdata = *pdata; in spi_gpio_probe()
418 status = spi_gpio_request(&pdev->dev, spi_gpio, in spi_gpio_probe()
419 pdata->num_chipselect, &master_flags); in spi_gpio_probe()
423 master->bits_per_word_mask = SPI_BPW_RANGE_MASK(1, 32); in spi_gpio_probe()
424 master->mode_bits = SPI_3WIRE | SPI_CPHA | SPI_CPOL | SPI_CS_HIGH; in spi_gpio_probe()
425 master->flags = master_flags; in spi_gpio_probe()
426 master->bus_num = pdev->id; in spi_gpio_probe()
428 master->num_chipselect = spi_gpio->has_cs ? pdata->num_chipselect : 1; in spi_gpio_probe()
429 master->setup = spi_gpio_setup; in spi_gpio_probe()
430 master->cleanup = spi_gpio_cleanup; in spi_gpio_probe()
432 master->dev.of_node = pdev->dev.of_node; in spi_gpio_probe()
435 spi_gpio->bitbang.master = master; in spi_gpio_probe()
436 spi_gpio->bitbang.chipselect = spi_gpio_chipselect; in spi_gpio_probe()
437 spi_gpio->bitbang.set_line_direction = spi_gpio_set_direction; in spi_gpio_probe()
440 spi_gpio->bitbang.txrx_word[SPI_MODE_0] = spi_gpio_txrx_word_mode0; in spi_gpio_probe()
441 spi_gpio->bitbang.txrx_word[SPI_MODE_1] = spi_gpio_txrx_word_mode1; in spi_gpio_probe()
442 spi_gpio->bitbang.txrx_word[SPI_MODE_2] = spi_gpio_txrx_word_mode2; in spi_gpio_probe()
443 spi_gpio->bitbang.txrx_word[SPI_MODE_3] = spi_gpio_txrx_word_mode3; in spi_gpio_probe()
445 spi_gpio->bitbang.txrx_word[SPI_MODE_0] = spi_gpio_spec_txrx_word_mode0; in spi_gpio_probe()
446 spi_gpio->bitbang.txrx_word[SPI_MODE_1] = spi_gpio_spec_txrx_word_mode1; in spi_gpio_probe()
447 spi_gpio->bitbang.txrx_word[SPI_MODE_2] = spi_gpio_spec_txrx_word_mode2; in spi_gpio_probe()
448 spi_gpio->bitbang.txrx_word[SPI_MODE_3] = spi_gpio_spec_txrx_word_mode3; in spi_gpio_probe()
450 spi_gpio->bitbang.setup_transfer = spi_bitbang_setup_transfer; in spi_gpio_probe()
452 return spi_bitbang_start(&spi_gpio->bitbang); in spi_gpio_probe()
461 pdata = dev_get_platdata(&pdev->dev); in spi_gpio_remove()
464 spi_bitbang_stop(&spi_gpio->bitbang); in spi_gpio_remove()