Lines Matching +full:tx +full:- +full:clk +full:- +full:1000 +full:- +full:inverted
38 #include <linux/clk.h>
48 #include <asm/mach-types.h>
93 struct clk *ck;
155 return -1; in wait_uwire_csr_flag()
176 struct uwire_state *ust = spi->controller_state; in uwire_chipselect()
185 if (value == BITBANG_CS_INACTIVE || old_cs != spi->chip_select) { in uwire_chipselect()
192 uwire_set_clk1_div(ust->div1_idx); in uwire_chipselect()
194 if (spi->mode & SPI_CPOL) in uwire_chipselect()
199 w = spi->chip_select << 10; in uwire_chipselect()
207 unsigned len = t->len; in uwire_txrx()
208 unsigned bits = t->bits_per_word; in uwire_txrx()
213 if (!t->tx_buf && !t->rx_buf) in uwire_txrx()
216 w = spi->chip_select << 10; in uwire_txrx()
219 if (t->tx_buf) { in uwire_txrx()
220 const u8 *buf = t->tx_buf; in uwire_txrx()
222 /* NOTE: DMA could be used for TX transfers */ in uwire_txrx()
226 /* tx bit 15 is first sent; we byteswap multibyte words in uwire_txrx()
227 * (msb-first) on the way out from memory. in uwire_txrx()
235 val <<= 16 - bits; in uwire_txrx()
238 pr_debug("%s: write-%d =%04x\n", in uwire_txrx()
239 dev_name(&spi->dev), bits, val); in uwire_txrx()
250 len -= bytes; in uwire_txrx()
266 } else if (t->rx_buf) { in uwire_txrx()
267 u8 *buf = t->rx_buf; in uwire_txrx()
279 len -= bytes; in uwire_txrx()
292 val &= (1 << bits) - 1; in uwire_txrx()
298 pr_debug("%s: read-%d =%04x\n", in uwire_txrx()
299 dev_name(&spi->dev), bits, val); in uwire_txrx()
306 return -EIO; in uwire_txrx()
311 struct uwire_state *ust = spi->controller_state; in uwire_setup_transfer()
321 uwire = spi_master_get_devdata(spi->master); in uwire_setup_transfer()
323 /* mode 0..3, clock inverted separately; in uwire_setup_transfer()
327 if (spi->mode & SPI_CS_HIGH) in uwire_setup_transfer()
330 if (spi->mode & SPI_CPOL) in uwire_setup_transfer()
333 switch (spi->mode & (SPI_CPOL | SPI_CPHA)) { in uwire_setup_transfer()
345 rate = clk_get_rate(uwire->ck); in uwire_setup_transfer()
348 hz = t->speed_hz; in uwire_setup_transfer()
350 hz = spi->max_speed_hz; in uwire_setup_transfer()
353 pr_debug("%s: zero speed?\n", dev_name(&spi->dev)); in uwire_setup_transfer()
354 status = -EINVAL; in uwire_setup_transfer()
375 div2 = (rate / div1 + hz - 1) / hz; in uwire_setup_transfer()
381 dev_name(&spi->dev), rate / 10 / 8, hz); in uwire_setup_transfer()
382 status = -EDOM; in uwire_setup_transfer()
389 ust->div1_idx = div1_idx; in uwire_setup_transfer()
414 omap_uwire_configure_mode(spi->chip_select, flags); in uwire_setup_transfer()
417 clk_get_rate(uwire->ck) / 1000, in uwire_setup_transfer()
418 rate / 1000); in uwire_setup_transfer()
426 struct uwire_state *ust = spi->controller_state; in uwire_setup()
433 return -ENOMEM; in uwire_setup()
434 spi->controller_state = ust; in uwire_setup()
447 kfree(spi->controller_state); in uwire_cleanup()
453 clk_disable_unprepare(uwire->ck); in uwire_off()
454 spi_master_put(uwire->bitbang.master); in uwire_off()
463 master = spi_alloc_master(&pdev->dev, sizeof *uwire); in uwire_probe()
465 return -ENODEV; in uwire_probe()
469 uwire_base = devm_ioremap(&pdev->dev, UWIRE_BASE_PHYS, UWIRE_IO_SIZE); in uwire_probe()
471 dev_dbg(&pdev->dev, "can't ioremap UWIRE\n"); in uwire_probe()
473 return -ENOMEM; in uwire_probe()
478 uwire->ck = devm_clk_get(&pdev->dev, "fck"); in uwire_probe()
479 if (IS_ERR(uwire->ck)) { in uwire_probe()
480 status = PTR_ERR(uwire->ck); in uwire_probe()
481 dev_dbg(&pdev->dev, "no functional clock?\n"); in uwire_probe()
485 clk_prepare_enable(uwire->ck); in uwire_probe()
494 /* the spi->mode bits understood by this driver: */ in uwire_probe()
495 master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH; in uwire_probe()
496 master->bits_per_word_mask = SPI_BPW_RANGE_MASK(1, 16); in uwire_probe()
497 master->flags = SPI_MASTER_HALF_DUPLEX; in uwire_probe()
499 master->bus_num = 2; /* "official" */ in uwire_probe()
500 master->num_chipselect = 4; in uwire_probe()
501 master->setup = uwire_setup; in uwire_probe()
502 master->cleanup = uwire_cleanup; in uwire_probe()
504 uwire->bitbang.master = master; in uwire_probe()
505 uwire->bitbang.chipselect = uwire_chipselect; in uwire_probe()
506 uwire->bitbang.setup_transfer = uwire_setup_transfer; in uwire_probe()
507 uwire->bitbang.txrx_bufs = uwire_txrx; in uwire_probe()
509 status = spi_bitbang_start(&uwire->bitbang); in uwire_probe()
522 spi_bitbang_stop(&uwire->bitbang); in uwire_remove()