summaryrefslogtreecommitdiff
path: root/drivers/spi/sunxi_spi.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/spi/sunxi_spi.h')
-rw-r--r--drivers/spi/sunxi_spi.h143
1 files changed, 143 insertions, 0 deletions
diff --git a/drivers/spi/sunxi_spi.h b/drivers/spi/sunxi_spi.h
new file mode 100644
index 0000000000..7a25bbe2d6
--- /dev/null
+++ b/drivers/spi/sunxi_spi.h
@@ -0,0 +1,143 @@
+/*
+ * SPI driver for Allwinner sunxi SoCs
+ *
+ * Supported chips
+ * - Allwinner A31 (sun6i)
+ *
+ * Copyright (C) 2015 Theobroma Systems Design und Consulting GmbH
+ * Octav Zlatior <octav.zlatior@theobroma-systems.com>
+ * Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ */
+
+#ifndef __SUNXI_SPI_H__
+#define __SUNXI_SPI_H__
+
+#define MAX_SPI_BYTES 64
+
+#define CCM_AHB_GATE_SPI0 (1 << 20)
+#define CCM_AHB_GATE_SPI1 (1 << 21)
+#define CCM_AHB_GATE_SPI2 (1 << 22)
+#define CCM_AHB_GATE_SPI3 (1 << 23)
+
+#define CCM_AHB_RESET_SPI0 (1 << 20)
+#define CCM_AHB_RESET_SPI1 (1 << 21)
+#define CCM_AHB_RESET_SPI2 (1 << 22)
+#define CCM_AHB_RESET_SPI3 (1 << 23)
+
+#define SUNXI_MAX_SPI_SEQ 3
+
+#define SUNXI_SPI0_MOSI_PIN SUNXI_GPC(0)
+#define SUNXI_SPI0_MISO_PIN SUNXI_GPC(1)
+#define SUNXI_SPI0_CLK_PIN SUNXI_GPC(2)
+#define SUNXI_SPI0_CS0_PIN SUNXI_GPC(27)
+#define SUNXI_SPI0_CS1_PIN -1
+#define SUNXI_SPI0_MOSI_VAL 3
+#define SUNXI_SPI0_MISO_VAL 3
+#define SUNXI_SPI0_CLK_VAL 3
+#define SUNXI_SPI0_CS0_VAL 3
+#define SUNXI_SPI0_CS1_VAL -1
+
+#define SUNXI_SPI1_MOSI_PIN SUNXI_GPG(15)
+#define SUNXI_SPI1_MISO_PIN SUNXI_GPG(16)
+#define SUNXI_SPI1_CLK_PIN SUNXI_GPG(14)
+#define SUNXI_SPI1_CS0_PIN SUNXI_GPG(13)
+#define SUNXI_SPI1_CS1_PIN SUNXI_GPG(12)
+#define SUNXI_SPI1_MOSI_VAL 2
+#define SUNXI_SPI1_MISO_VAL 2
+#define SUNXI_SPI1_CLK_VAL 2
+#define SUNXI_SPI1_CS0_VAL 2
+#define SUNXI_SPI1_CS1_VAL 2
+
+#define SUNXI_SPI2_MOSI_PIN SUNXI_GPH(11)
+#define SUNXI_SPI2_MISO_PIN SUNXI_GPH(12)
+#define SUNXI_SPI2_CLK_PIN SUNXI_GPH(10)
+#define SUNXI_SPI2_CS0_PIN SUNXI_GPH(9)
+#define SUNXI_SPI2_CS1_PIN -1
+#define SUNXI_SPI2_MOSI_VAL 2
+#define SUNXI_SPI2_MISO_VAL 2
+#define SUNXI_SPI2_CLK_VAL 2
+#define SUNXI_SPI2_CS0_VAL 2
+#define SUNXI_SPI2_CS1_VAL -1
+
+#define SUNXI_SPI3_MOSI_PIN SUNXI_GPA(23)
+#define SUNXI_SPI3_MISO_PIN SUNXI_GPA(24)
+#define SUNXI_SPI3_CLK_PIN SUNXI_GPA(22)
+#define SUNXI_SPI3_CS0_PIN SUNXI_GPA(21)
+#define SUNXI_SPI3_CS1_PIN SUNXI_GPA(25)
+#define SUNXI_SPI3_MOSI_VAL 4
+#define SUNXI_SPI3_MISO_VAL 4
+#define SUNXI_SPI3_CLK_VAL 4
+#define SUNXI_SPI3_CS0_VAL 4
+#define SUNXI_SPI3_CS1_VAL 4
+
+#define SUNXI_PIN_INPUT_DISABLE 7
+
+#define SUNXI_SPI_GCR_MASTER (1 << 1)
+#define SUNXI_SPI_GCR_EN (1 << 0)
+
+#define SUNXI_SPI_CPOL_LOW (1 << 1)
+#define SUNXI_SPI_CPHA_LOW (1 << 0)
+
+#define SUNXI_SPI_CPOL_HIGH (1 << 1)
+#define SUNXI_SPI_CPHA_HIGH (1 << 0)
+
+#define SUNXI_SPI_MOSI_PIN(n) SUNXI_SPI##n##_MOSI_PIN
+#define SUNXI_SPI_MOSI_VAL(n) SUNXI_SPI##n##_MOSI_VAL
+#define SUNXI_SPI_MISO_PIN(n) SUNXI_SPI##n##_MISO_PIN
+#define SUNXI_SPI_MISO_VAL(n) SUNXI_SPI##n##_MISO_VAL
+#define SUNXI_SPI_CLK_PIN(n) SUNXI_SPI##n##_CLK_PIN
+#define SUNXI_SPI_CLK_VAL(n) SUNXI_SPI##n##_CLK_VAL
+#define SUNXI_SPI_CS0_PIN(n) SUNXI_SPI##n##_CS0_PIN
+#define SUNXI_SPI_CS0_VAL(n) SUNXI_SPI##n##_CS0_VAL
+#define SUNXI_SPI_CS1_PIN(n) SUNXI_SPI##n##_CS1_PIN
+#define SUNXI_SPI_CS1_VAL(n) SUNXI_SPI##n##_CS1_VAL
+
+struct sunxi_spi_platdata {
+ unsigned int max_hz;
+ unsigned int base;
+};
+
+struct sunxi_spi_privdata {
+ u8 spi_is_init;
+ u8 clk_pol;
+ u8 clk_pha;
+ u8 clk_div_n;
+ u8 clk_div_m;
+};
+
+struct sunxi_spi_reg {
+ u32 VER; /* SPI Version Number register */
+ u32 GCR; /* SPI Global Control register */
+ u32 TCR; /* SPI Transfer Control register */
+ u32 _reserved1;
+ u32 IER; /* SPI Interrupt Control register */
+ u32 ISR; /* SPI Interrupt Status register */
+ u32 FCR; /* SPI FIFO Control register */
+ u32 FSR; /* SPI FIFO Status register */
+ u32 WCR; /* SPI Wait Clock Counter register */
+ u32 CCR; /* SPI Clock Rate Control register */
+ u32 _reserved2;
+ u32 _reserved3;
+ u32 MBC; /* SPI Burst Counter register */
+ u32 MTC; /* SPI Transmit Counter register */
+ u32 BCC; /* SPI Burst Control register */
+ u32 _reserved4[113];
+ u32 TXD; /* SPI TX Data register */
+ u32 _reserved5[63];
+ u32 RXD; /* SPI RX Data register */
+};
+
+struct sunxi_spi_slave {
+ struct spi_slave slave;
+ struct sunxi_spi_reg* base;
+ int polarity;
+ unsigned int max_hz;
+ unsigned int mode;
+};
+
+#endif // __SUNXI_SPI_H__