• Home
  • Raw
  • Download

Lines Matching refs:bitbang

185 	struct spi_bitbang	*bitbang;  in spi_bitbang_setup()  local
189 bitbang = spi_master_get_devdata(spi->master); in spi_bitbang_setup()
194 if ((spi->mode & ~(SPI_CPOL|SPI_CPHA|bitbang->flags)) != 0) in spi_bitbang_setup()
208 cs->txrx_word = bitbang->txrx_word[spi->mode & (SPI_CPOL|SPI_CPHA)]; in spi_bitbang_setup()
212 retval = bitbang->setup_transfer(spi, NULL); in spi_bitbang_setup()
226 spin_lock_irqsave(&bitbang->lock, flags); in spi_bitbang_setup()
227 if (!bitbang->busy) { in spi_bitbang_setup()
228 bitbang->chipselect(spi, BITBANG_CS_INACTIVE); in spi_bitbang_setup()
231 spin_unlock_irqrestore(&bitbang->lock, flags); in spi_bitbang_setup()
269 struct spi_bitbang *bitbang = in bitbang_work() local
273 spin_lock_irqsave(&bitbang->lock, flags); in bitbang_work()
274 bitbang->busy = 1; in bitbang_work()
275 while (!list_empty(&bitbang->queue)) { in bitbang_work()
286 m = container_of(bitbang->queue.next, struct spi_message, in bitbang_work()
289 spin_unlock_irqrestore(&bitbang->lock, flags); in bitbang_work()
307 setup_transfer = bitbang->setup_transfer; in bitbang_work()
326 bitbang->chipselect(spi, BITBANG_CS_ACTIVE); in bitbang_work()
345 status = bitbang->txrx_bufs(spi, t); in bitbang_work()
370 bitbang->chipselect(spi, BITBANG_CS_INACTIVE); in bitbang_work()
387 bitbang->chipselect(spi, BITBANG_CS_INACTIVE); in bitbang_work()
391 spin_lock_irqsave(&bitbang->lock, flags); in bitbang_work()
393 bitbang->busy = 0; in bitbang_work()
394 spin_unlock_irqrestore(&bitbang->lock, flags); in bitbang_work()
402 struct spi_bitbang *bitbang; in spi_bitbang_transfer() local
409 bitbang = spi_master_get_devdata(spi->master); in spi_bitbang_transfer()
411 spin_lock_irqsave(&bitbang->lock, flags); in spi_bitbang_transfer()
415 list_add_tail(&m->queue, &bitbang->queue); in spi_bitbang_transfer()
416 queue_work(bitbang->workqueue, &bitbang->work); in spi_bitbang_transfer()
418 spin_unlock_irqrestore(&bitbang->lock, flags); in spi_bitbang_transfer()
449 int spi_bitbang_start(struct spi_bitbang *bitbang) in spi_bitbang_start() argument
453 if (!bitbang->master || !bitbang->chipselect) in spi_bitbang_start()
456 INIT_WORK(&bitbang->work, bitbang_work); in spi_bitbang_start()
457 spin_lock_init(&bitbang->lock); in spi_bitbang_start()
458 INIT_LIST_HEAD(&bitbang->queue); in spi_bitbang_start()
460 if (!bitbang->master->transfer) in spi_bitbang_start()
461 bitbang->master->transfer = spi_bitbang_transfer; in spi_bitbang_start()
462 if (!bitbang->txrx_bufs) { in spi_bitbang_start()
463 bitbang->use_dma = 0; in spi_bitbang_start()
464 bitbang->txrx_bufs = spi_bitbang_bufs; in spi_bitbang_start()
465 if (!bitbang->master->setup) { in spi_bitbang_start()
466 if (!bitbang->setup_transfer) in spi_bitbang_start()
467 bitbang->setup_transfer = in spi_bitbang_start()
469 bitbang->master->setup = spi_bitbang_setup; in spi_bitbang_start()
470 bitbang->master->cleanup = spi_bitbang_cleanup; in spi_bitbang_start()
472 } else if (!bitbang->master->setup) in spi_bitbang_start()
476 bitbang->busy = 0; in spi_bitbang_start()
477 bitbang->workqueue = create_singlethread_workqueue( in spi_bitbang_start()
478 dev_name(bitbang->master->dev.parent)); in spi_bitbang_start()
479 if (bitbang->workqueue == NULL) { in spi_bitbang_start()
487 status = spi_register_master(bitbang->master); in spi_bitbang_start()
494 destroy_workqueue(bitbang->workqueue); in spi_bitbang_start()
503 int spi_bitbang_stop(struct spi_bitbang *bitbang) in spi_bitbang_stop() argument
505 spi_unregister_master(bitbang->master); in spi_bitbang_stop()
507 WARN_ON(!list_empty(&bitbang->queue)); in spi_bitbang_stop()
509 destroy_workqueue(bitbang->workqueue); in spi_bitbang_stop()