25 #include <linux/kernel.h>
28 #include <linux/module.h>
29 #include <linux/device.h>
36 #include <linux/slab.h>
40 #define OMAP1_SPI100K_MAX_FREQ 48000000
42 #define ICR_SPITAS (OMAP7XX_ICR_BASE + 0x12)
44 #define SPI_SETUP1 0x00
45 #define SPI_SETUP2 0x02
47 #define SPI_STATUS 0x06
48 #define SPI_TX_LSB 0x08
49 #define SPI_TX_MSB 0x0a
50 #define SPI_RX_LSB 0x0c
51 #define SPI_RX_MSB 0x0e
53 #define SPI_SETUP1_INT_READ_ENABLE (1UL << 5)
54 #define SPI_SETUP1_INT_WRITE_ENABLE (1UL << 4)
55 #define SPI_SETUP1_CLOCK_DIVISOR(x) ((x) << 1)
56 #define SPI_SETUP1_CLOCK_ENABLE (1UL << 0)
58 #define SPI_SETUP2_ACTIVE_EDGE_FALLING (0UL << 0)
59 #define SPI_SETUP2_ACTIVE_EDGE_RISING (1UL << 0)
60 #define SPI_SETUP2_NEGATIVE_LEVEL (0UL << 5)
61 #define SPI_SETUP2_POSITIVE_LEVEL (1UL << 5)
62 #define SPI_SETUP2_LEVEL_TRIGGER (0UL << 10)
63 #define SPI_SETUP2_EDGE_TRIGGER (1UL << 10)
65 #define SPI_CTRL_SEN(x) ((x) << 7)
66 #define SPI_CTRL_WORD_SIZE(x) (((x) - 1) << 2)
67 #define SPI_CTRL_WR (1UL << 1)
68 #define SPI_CTRL_RD (1UL << 0)
70 #define SPI_STATUS_WE (1UL << 1)
71 #define SPI_STATUS_RD (1UL << 0)
80 #define DMA_MIN_BYTES 8
83 #define SPI_SHUTDOWN 1
109 #define MOD_REG_BIT(val, mask, set) do { \
116 static void spi100k_enable_clock(
struct spi_master *master)
119 struct omap1_spi100k *spi100k = spi_master_get_devdata(master);
130 struct omap1_spi100k *spi100k = spi_master_get_devdata(master);
140 struct omap1_spi100k *spi100k = spi_master_get_devdata(master);
148 spi100k_enable_clock(master);
160 spi100k_disable_clock(master);
163 static int spi100k_read_data(
struct spi_master *master,
int len)
166 struct omap1_spi100k *spi100k = spi_master_get_devdata(master);
172 spi100k_enable_clock(master);
183 spi100k_disable_clock(master);
188 static void spi100k_open(
struct spi_master *master)
191 struct omap1_spi100k *spi100k = spi_master_get_devdata(master);
219 spi100k = spi_master_get_devdata(spi->
master);
233 spi100k_write_data(spi->
master, word_len, *tx++);
235 *rx++ = spi100k_read_data(spi->
master, word_len);
237 }
else if (word_len <= 16) {
246 spi100k_write_data(spi->
master,word_len, *tx++);
248 *rx++ = spi100k_read_data(spi->
master,word_len);
250 }
else if (word_len <= 32) {
259 spi100k_write_data(spi->
master,word_len, *tx);
261 *rx = spi100k_read_data(spi->
master,word_len);
268 static int omap1_spi100k_setup_transfer(
struct spi_device *spi,
293 #define MODEBITS (SPI_CPOL | SPI_CPHA | SPI_CS_HIGH)
295 static int omap1_spi100k_setup(
struct spi_device *spi)
302 dev_dbg(&spi->
dev,
"setup: unsupported %d bit words\n",
307 spi100k = spi_master_get_devdata(spi->
master);
317 spi100k_open(spi->
master);
322 ret = omap1_spi100k_setup_transfer(spi,
NULL);
336 spin_lock_irq(&spi100k->
lock);
347 while (!list_empty(&spi100k->
msg_queue)) {
353 int par_override = 0;
358 list_del_init(&m->
queue);
359 spin_unlock_irq(&spi100k->
lock);
371 status = omap1_spi100k_setup_transfer(spi, t);
379 omap1_spi100k_force_cs(spi100k, 1);
386 count = omap1_spi100k_txrx_pio(spi, t);
389 if (count != t->
len) {
401 omap1_spi100k_force_cs(spi100k, 0);
409 status = omap1_spi100k_setup_transfer(spi,
NULL);
413 omap1_spi100k_force_cs(spi100k, 0);
418 spin_lock_irq(&spi100k->
lock);
423 spin_unlock_irq(&spi100k->
lock);
438 spi100k = spi_master_get_devdata(spi->
master);
451 unsigned len = t->
len;
454 || (len && !(rx_buf || tx_buf))
458 dev_dbg(&spi->
dev,
"transfer: %d Hz, %d %s%s, %d bpw\n",
479 spin_unlock_irqrestore(&spi100k->
lock, flags);
499 if (master ==
NULL) {
500 dev_dbg(&pdev->
dev,
"master allocation failed\n");
507 master->
setup = omap1_spi100k_setup;
508 master->
transfer = omap1_spi100k_transfer;
515 spi100k = spi_master_get_devdata(master);
530 if (IS_ERR(spi100k->
ick)) {
531 dev_dbg(&pdev->
dev,
"can't get spi100k_ick\n");
532 status = PTR_ERR(spi100k->
ick);
537 if (IS_ERR(spi100k->
fck)) {
538 dev_dbg(&pdev->
dev,
"can't get spi100k_fck\n");
539 status = PTR_ERR(spi100k->
fck);
543 if (omap1_spi100k_reset(spi100k) < 0)
559 spi_master_put(master);
568 unsigned limit = 500;
573 spi100k = spi_master_get_devdata(master);
578 while (!list_empty(&spi100k->
msg_queue) && limit--) {
579 spin_unlock_irqrestore(&spi100k->
lock, flags);
587 spin_unlock_irqrestore(&spi100k->
lock, flags);
604 .name =
"omap1_spi100k",
607 .remove =
__exit_p(omap1_spi100k_remove),
611 static int __init omap1_spi100k_init(
void)
614 omap1_spi100k_driver.
driver.name);
616 if (omap1_spi100k_wq ==
NULL)
622 static void __exit omap1_spi100k_exit(
void)