diff options
author | Mark Brown <broonie@linaro.org> | 2013-09-01 08:49:06 -0400 |
---|---|---|
committer | Mark Brown <broonie@linaro.org> | 2013-09-01 08:49:06 -0400 |
commit | 85cac431329bd09f7d30d489591d7af0d658b008 (patch) | |
tree | 8e81e687c9104c297b9d985e2c5f37f05a6e4b83 /include/linux/spi | |
parent | 793b3cb6acc081e557dabcf11ce781d64dafb4d4 (diff) | |
parent | b6460366fbadc160604f50047d0394c7fc39ceab (diff) |
Merge remote-tracking branch 'spi/topic/qspi' into spi-next
Diffstat (limited to 'include/linux/spi')
-rw-r--r-- | include/linux/spi/spi.h | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h index e1b3e69aeddc..887116dbce2c 100644 --- a/include/linux/spi/spi.h +++ b/include/linux/spi/spi.h | |||
@@ -74,7 +74,7 @@ struct spi_device { | |||
74 | struct spi_master *master; | 74 | struct spi_master *master; |
75 | u32 max_speed_hz; | 75 | u32 max_speed_hz; |
76 | u8 chip_select; | 76 | u8 chip_select; |
77 | u8 mode; | 77 | u16 mode; |
78 | #define SPI_CPHA 0x01 /* clock phase */ | 78 | #define SPI_CPHA 0x01 /* clock phase */ |
79 | #define SPI_CPOL 0x02 /* clock polarity */ | 79 | #define SPI_CPOL 0x02 /* clock polarity */ |
80 | #define SPI_MODE_0 (0|0) /* (original MicroWire) */ | 80 | #define SPI_MODE_0 (0|0) /* (original MicroWire) */ |
@@ -87,6 +87,10 @@ struct spi_device { | |||
87 | #define SPI_LOOP 0x20 /* loopback mode */ | 87 | #define SPI_LOOP 0x20 /* loopback mode */ |
88 | #define SPI_NO_CS 0x40 /* 1 dev/bus, no chipselect */ | 88 | #define SPI_NO_CS 0x40 /* 1 dev/bus, no chipselect */ |
89 | #define SPI_READY 0x80 /* slave pulls low to pause */ | 89 | #define SPI_READY 0x80 /* slave pulls low to pause */ |
90 | #define SPI_TX_DUAL 0x100 /* transmit with 2 wires */ | ||
91 | #define SPI_TX_QUAD 0x200 /* transmit with 4 wires */ | ||
92 | #define SPI_RX_DUAL 0x400 /* receive with 2 wires */ | ||
93 | #define SPI_RX_QUAD 0x800 /* receive with 4 wires */ | ||
90 | u8 bits_per_word; | 94 | u8 bits_per_word; |
91 | int irq; | 95 | int irq; |
92 | void *controller_state; | 96 | void *controller_state; |
@@ -256,6 +260,9 @@ static inline void spi_unregister_driver(struct spi_driver *sdrv) | |||
256 | * @busy: message pump is busy | 260 | * @busy: message pump is busy |
257 | * @running: message pump is running | 261 | * @running: message pump is running |
258 | * @rt: whether this queue is set to run as a realtime task | 262 | * @rt: whether this queue is set to run as a realtime task |
263 | * @auto_runtime_pm: the core should ensure a runtime PM reference is held | ||
264 | * while the hardware is prepared, using the parent | ||
265 | * device for the spidev | ||
259 | * @prepare_transfer_hardware: a message will soon arrive from the queue | 266 | * @prepare_transfer_hardware: a message will soon arrive from the queue |
260 | * so the subsystem requests the driver to prepare the transfer hardware | 267 | * so the subsystem requests the driver to prepare the transfer hardware |
261 | * by issuing this call | 268 | * by issuing this call |
@@ -380,11 +387,13 @@ struct spi_master { | |||
380 | bool busy; | 387 | bool busy; |
381 | bool running; | 388 | bool running; |
382 | bool rt; | 389 | bool rt; |
390 | bool auto_runtime_pm; | ||
383 | 391 | ||
384 | int (*prepare_transfer_hardware)(struct spi_master *master); | 392 | int (*prepare_transfer_hardware)(struct spi_master *master); |
385 | int (*transfer_one_message)(struct spi_master *master, | 393 | int (*transfer_one_message)(struct spi_master *master, |
386 | struct spi_message *mesg); | 394 | struct spi_message *mesg); |
387 | int (*unprepare_transfer_hardware)(struct spi_master *master); | 395 | int (*unprepare_transfer_hardware)(struct spi_master *master); |
396 | |||
388 | /* gpio chip select */ | 397 | /* gpio chip select */ |
389 | int *cs_gpios; | 398 | int *cs_gpios; |
390 | }; | 399 | }; |
@@ -454,6 +463,10 @@ extern struct spi_master *spi_busnum_to_master(u16 busnum); | |||
454 | * @rx_buf: data to be read (dma-safe memory), or NULL | 463 | * @rx_buf: data to be read (dma-safe memory), or NULL |
455 | * @tx_dma: DMA address of tx_buf, if @spi_message.is_dma_mapped | 464 | * @tx_dma: DMA address of tx_buf, if @spi_message.is_dma_mapped |
456 | * @rx_dma: DMA address of rx_buf, if @spi_message.is_dma_mapped | 465 | * @rx_dma: DMA address of rx_buf, if @spi_message.is_dma_mapped |
466 | * @tx_nbits: number of bits used for writting. If 0 the default | ||
467 | * (SPI_NBITS_SINGLE) is used. | ||
468 | * @rx_nbits: number of bits used for reading. If 0 the default | ||
469 | * (SPI_NBITS_SINGLE) is used. | ||
457 | * @len: size of rx and tx buffers (in bytes) | 470 | * @len: size of rx and tx buffers (in bytes) |
458 | * @speed_hz: Select a speed other than the device default for this | 471 | * @speed_hz: Select a speed other than the device default for this |
459 | * transfer. If 0 the default (from @spi_device) is used. | 472 | * transfer. If 0 the default (from @spi_device) is used. |
@@ -508,6 +521,11 @@ extern struct spi_master *spi_busnum_to_master(u16 busnum); | |||
508 | * by the results of previous messages and where the whole transaction | 521 | * by the results of previous messages and where the whole transaction |
509 | * ends when the chipselect goes intactive. | 522 | * ends when the chipselect goes intactive. |
510 | * | 523 | * |
524 | * When SPI can transfer in 1x,2x or 4x. It can get this tranfer information | ||
525 | * from device through @tx_nbits and @rx_nbits. In Bi-direction, these | ||
526 | * two should both be set. User can set transfer mode with SPI_NBITS_SINGLE(1x) | ||
527 | * SPI_NBITS_DUAL(2x) and SPI_NBITS_QUAD(4x) to support these three transfer. | ||
528 | * | ||
511 | * The code that submits an spi_message (and its spi_transfers) | 529 | * The code that submits an spi_message (and its spi_transfers) |
512 | * to the lower layers is responsible for managing its memory. | 530 | * to the lower layers is responsible for managing its memory. |
513 | * Zero-initialize every field you don't set up explicitly, to | 531 | * Zero-initialize every field you don't set up explicitly, to |
@@ -528,6 +546,11 @@ struct spi_transfer { | |||
528 | dma_addr_t rx_dma; | 546 | dma_addr_t rx_dma; |
529 | 547 | ||
530 | unsigned cs_change:1; | 548 | unsigned cs_change:1; |
549 | u8 tx_nbits; | ||
550 | u8 rx_nbits; | ||
551 | #define SPI_NBITS_SINGLE 0x01 /* 1bit transfer */ | ||
552 | #define SPI_NBITS_DUAL 0x02 /* 2bits transfer */ | ||
553 | #define SPI_NBITS_QUAD 0x04 /* 4bits transfer */ | ||
531 | u8 bits_per_word; | 554 | u8 bits_per_word; |
532 | u16 delay_usecs; | 555 | u16 delay_usecs; |
533 | u32 speed_hz; | 556 | u32 speed_hz; |
@@ -876,7 +899,7 @@ struct spi_board_info { | |||
876 | /* mode becomes spi_device.mode, and is essential for chips | 899 | /* mode becomes spi_device.mode, and is essential for chips |
877 | * where the default of SPI_CS_HIGH = 0 is wrong. | 900 | * where the default of SPI_CS_HIGH = 0 is wrong. |
878 | */ | 901 | */ |
879 | u8 mode; | 902 | u16 mode; |
880 | 903 | ||
881 | /* ... may need additional spi_device chip config data here. | 904 | /* ... may need additional spi_device chip config data here. |
882 | * avoid stuff protocol drivers can set; but include stuff | 905 | * avoid stuff protocol drivers can set; but include stuff |