]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - include/spi.h
vf610twr: Set default environment to use zImage
[karo-tx-uboot.git] / include / spi.h
index 5164d437b9fd75819f0aca4a9394fd1532c50bdd..aba792244a86249e7373932fdd2f233d011eafcf 100644 (file)
@@ -1,4 +1,6 @@
 /*
+ * Common SPI Interface: Controller-specific definitions
+ *
  * (C) Copyright 2001
  * Gerald Van Baren, Custom IDEAS, vanbaren@cideas.com.
  *
@@ -8,8 +10,6 @@
 #ifndef _SPI_H_
 #define _SPI_H_
 
-/* Controller-specific definitions: */
-
 /* SPI mode flags */
 #define        SPI_CPHA        0x01                    /* clock phase */
 #define        SPI_CPOL        0x02                    /* clock polarity */
 #define SPI_XFER_END           0x02    /* Deassert CS after transfer */
 #define SPI_XFER_MMAP          0x08    /* Memory Mapped start */
 #define SPI_XFER_MMAP_END      0x10    /* Memory Mapped End */
+#define SPI_XFER_ONCE          (SPI_XFER_BEGIN | SPI_XFER_END)
 
 /* Header byte that marks the start of the message */
 #define SPI_PREAMBLE_END_BYTE  0xec
 
+#define SPI_DEFAULT_WORDLEN 8
+
 /**
  * struct spi_slave - Representation of a SPI slave
  *
@@ -40,6 +43,7 @@
  *
  * @bus:               ID of the bus that the slave is attached to.
  * @cs:                        ID of the chip select connected to the slave.
+ * @wordlen:           Size of SPI word in number of bits
  * @max_write_size:    If non-zero, the maximum number of bytes which can
  *                     be written at once, excluding command bytes.
  * @memory_map:                Address of read-only SPI flash access.
@@ -47,6 +51,7 @@
 struct spi_slave {
        unsigned int bus;
        unsigned int cs;
+       unsigned int wordlen;
        unsigned int max_write_size;
        void *memory_map;
 };
@@ -152,6 +157,18 @@ int spi_claim_bus(struct spi_slave *slave);
  */
 void spi_release_bus(struct spi_slave *slave);
 
+/**
+ * Set the word length for SPI transactions
+ *
+ * Set the word length (number of bits per word) for SPI transactions.
+ *
+ * @slave:     The SPI slave
+ * @wordlen:   The number of bits in a word
+ *
+ * Returns: 0 on success, -1 on failure.
+ */
+int spi_set_wordlen(struct spi_slave *slave, unsigned int wordlen);
+
 /**
  * SPI transfer
  *
@@ -241,14 +258,25 @@ static inline int spi_w8r8(struct spi_slave *slave, unsigned char byte)
  * This calls spi_setup_slave() with the correct bus number. Call
  * spi_free_slave() to free it later.
  *
- * @param blob         Device tree blob
- * @param node         SPI peripheral node to use
- * @param cs           Chip select to use
- * @param max_hz       Maximum SCK rate in Hz (0 for default)
- * @param mode         Clock polarity, clock phase and other parameters
+ * @param blob:                Device tree blob
+ * @param slave_node:  Slave node to use
+ * @param spi_node:    SPI peripheral node to use
  * @return pointer to new spi_slave structure
  */
-struct spi_slave *spi_setup_slave_fdt(const void *blob, int node,
-               unsigned int cs, unsigned int max_hz, unsigned int mode);
+struct spi_slave *spi_setup_slave_fdt(const void *blob, int slave_node,
+                                     int spi_node);
+
+/**
+ * spi_base_setup_slave_fdt() - helper function to set up a SPI slace
+ *
+ * This decodes SPI properties from the slave node to determine the
+ * chip select and SPI parameters.
+ *
+ * @blob:      Device tree blob
+ * @busnum:    Bus number to use
+ * @node:      Device tree node for the SPI bus
+ */
+struct spi_slave *spi_base_setup_slave_fdt(const void *blob, int busnum,
+                                          int node);
 
 #endif /* _SPI_H_ */