|
@@ -105,3 +105,195 @@ enum iomux_gp_func {
|
|
MUX_PGP_USB_HS2_LOOPBACK = 1 << 30,
|
|
MUX_PGP_USB_HS2_LOOPBACK = 1 << 30,
|
|
MUX_CLKO_DDR_MODE = 1 << 31,
|
|
MUX_CLKO_DDR_MODE = 1 << 31,
|
|
};
|
|
};
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ * setups a single pin:
|
|
|
|
+ * - reserves the pin so that it is not claimed by another driver
|
|
|
|
+ * - setups the iomux according to the configuration
|
|
|
|
+ * - if the pin is configured as a GPIO, we claim it through kernel gpiolib
|
|
|
|
+ */
|
|
|
|
+int mxc_iomux_alloc_pin(unsigned int pin, const char *label);
|
|
|
|
+/*
|
|
|
|
+ * setups mutliple pins
|
|
|
|
+ * convenient way to call the above function with tables
|
|
|
|
+ */
|
|
|
|
+int mxc_iomux_setup_multiple_pins(const unsigned int *pin_list, unsigned count,
|
|
|
|
+ const char *label);
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ * releases a single pin:
|
|
|
|
+ * - make it available for a future use by another driver
|
|
|
|
+ * - frees the GPIO if the pin was configured as GPIO
|
|
|
|
+ * - DOES NOT reconfigure the IOMUX in its reset state
|
|
|
|
+ */
|
|
|
|
+void mxc_iomux_release_pin(unsigned int pin);
|
|
|
|
+/*
|
|
|
|
+ * releases multiple pins
|
|
|
|
+ * convenvient way to call the above function with tables
|
|
|
|
+ */
|
|
|
|
+void mxc_iomux_release_multiple_pins(const unsigned int *pin_list, int count);
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ * This function enables/disables the general purpose function for a particular
|
|
|
|
+ * signal.
|
|
|
|
+ */
|
|
|
|
+void mxc_iomux_set_gpr(enum iomux_gp_func, bool en);
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ * This function only configures the iomux hardware.
|
|
|
|
+ * It is called by the setup functions and should not be called directly anymore.
|
|
|
|
+ * It is here visible for backward compatibility
|
|
|
|
+ */
|
|
|
|
+int mxc_iomux_mode(unsigned int pin_mode);
|
|
|
|
+
|
|
|
|
+#define IOMUX_PADNUM_MASK 0x1ff
|
|
|
|
+#define IOMUX_GPIONUM_SHIFT 9
|
|
|
|
+#define IOMUX_GPIONUM_MASK (0xff << IOMUX_GPIONUM_SHIFT)
|
|
|
|
+#define IOMUX_MODE_SHIFT 17
|
|
|
|
+#define IOMUX_MODE_MASK (0xff << IOMUX_MODE_SHIFT)
|
|
|
|
+
|
|
|
|
+#define IOMUX_PIN(gpionum, padnum) \
|
|
|
|
+ (((gpionum << IOMUX_GPIONUM_SHIFT) & IOMUX_GPIONUM_MASK) | \
|
|
|
|
+ (padnum & IOMUX_PADNUM_MASK))
|
|
|
|
+
|
|
|
|
+#define IOMUX_MODE(pin, mode) (pin | mode << IOMUX_MODE_SHIFT)
|
|
|
|
+
|
|
|
|
+#define IOMUX_TO_GPIO(iomux_pin) \
|
|
|
|
+ ((iomux_pin & IOMUX_GPIONUM_MASK) >> IOMUX_GPIONUM_SHIFT)
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ * This enumeration is constructed based on the Section
|
|
|
|
+ * "sw_pad_ctl & sw_mux_ctl details" of the MX31 IC Spec. Each enumerated
|
|
|
|
+ * value is constructed based on the rules described above.
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+enum iomux_pins {
|
|
|
|
+ MX31_PIN_TTM_PAD = IOMUX_PIN(0xff, 0),
|
|
|
|
+ MX31_PIN_CSPI3_SPI_RDY = IOMUX_PIN(0xff, 1),
|
|
|
|
+ MX31_PIN_CSPI3_SCLK = IOMUX_PIN(0xff, 2),
|
|
|
|
+ MX31_PIN_CSPI3_MISO = IOMUX_PIN(0xff, 3),
|
|
|
|
+ MX31_PIN_CSPI3_MOSI = IOMUX_PIN(0xff, 4),
|
|
|
|
+ MX31_PIN_CLKSS = IOMUX_PIN(0xff, 5),
|
|
|
|
+ MX31_PIN_CE_CONTROL = IOMUX_PIN(0xff, 6),
|
|
|
|
+ MX31_PIN_ATA_RESET_B = IOMUX_PIN(95, 7),
|
|
|
|
+ MX31_PIN_ATA_DMACK = IOMUX_PIN(94, 8),
|
|
|
|
+ MX31_PIN_ATA_DIOW = IOMUX_PIN(93, 9),
|
|
|
|
+ MX31_PIN_ATA_DIOR = IOMUX_PIN(92, 10),
|
|
|
|
+ MX31_PIN_ATA_CS1 = IOMUX_PIN(91, 11),
|
|
|
|
+ MX31_PIN_ATA_CS0 = IOMUX_PIN(90, 12),
|
|
|
|
+ MX31_PIN_SD1_DATA3 = IOMUX_PIN(63, 13),
|
|
|
|
+ MX31_PIN_SD1_DATA2 = IOMUX_PIN(62, 14),
|
|
|
|
+ MX31_PIN_SD1_DATA1 = IOMUX_PIN(61, 15),
|
|
|
|
+ MX31_PIN_SD1_DATA0 = IOMUX_PIN(60, 16),
|
|
|
|
+ MX31_PIN_SD1_CLK = IOMUX_PIN(59, 17),
|
|
|
|
+ MX31_PIN_SD1_CMD = IOMUX_PIN(58, 18),
|
|
|
|
+ MX31_PIN_D3_SPL = IOMUX_PIN(0xff, 19),
|
|
|
|
+ MX31_PIN_D3_CLS = IOMUX_PIN(0xff, 20),
|
|
|
|
+ MX31_PIN_D3_REV = IOMUX_PIN(0xff, 21),
|
|
|
|
+ MX31_PIN_CONTRAST = IOMUX_PIN(0xff, 22),
|
|
|
|
+ MX31_PIN_VSYNC3 = IOMUX_PIN(0xff, 23),
|
|
|
|
+ MX31_PIN_READ = IOMUX_PIN(0xff, 24),
|
|
|
|
+ MX31_PIN_WRITE = IOMUX_PIN(0xff, 25),
|
|
|
|
+ MX31_PIN_PAR_RS = IOMUX_PIN(0xff, 26),
|
|
|
|
+ MX31_PIN_SER_RS = IOMUX_PIN(89, 27),
|
|
|
|
+ MX31_PIN_LCS1 = IOMUX_PIN(88, 28),
|
|
|
|
+ MX31_PIN_LCS0 = IOMUX_PIN(87, 29),
|
|
|
|
+ MX31_PIN_SD_D_CLK = IOMUX_PIN(86, 30),
|
|
|
|
+ MX31_PIN_SD_D_IO = IOMUX_PIN(85, 31),
|
|
|
|
+ MX31_PIN_SD_D_I = IOMUX_PIN(84, 32),
|
|
|
|
+ MX31_PIN_DRDY0 = IOMUX_PIN(0xff, 33),
|
|
|
|
+ MX31_PIN_FPSHIFT = IOMUX_PIN(0xff, 34),
|
|
|
|
+ MX31_PIN_HSYNC = IOMUX_PIN(0xff, 35),
|
|
|
|
+ MX31_PIN_VSYNC0 = IOMUX_PIN(0xff, 36),
|
|
|
|
+ MX31_PIN_LD17 = IOMUX_PIN(0xff, 37),
|
|
|
|
+ MX31_PIN_LD16 = IOMUX_PIN(0xff, 38),
|
|
|
|
+ MX31_PIN_LD15 = IOMUX_PIN(0xff, 39),
|
|
|
|
+ MX31_PIN_LD14 = IOMUX_PIN(0xff, 40),
|
|
|
|
+ MX31_PIN_LD13 = IOMUX_PIN(0xff, 41),
|
|
|
|
+ MX31_PIN_LD12 = IOMUX_PIN(0xff, 42),
|
|
|
|
+ MX31_PIN_LD11 = IOMUX_PIN(0xff, 43),
|
|
|
|
+ MX31_PIN_LD10 = IOMUX_PIN(0xff, 44),
|
|
|
|
+ MX31_PIN_LD9 = IOMUX_PIN(0xff, 45),
|
|
|
|
+ MX31_PIN_LD8 = IOMUX_PIN(0xff, 46),
|
|
|
|
+ MX31_PIN_LD7 = IOMUX_PIN(0xff, 47),
|
|
|
|
+ MX31_PIN_LD6 = IOMUX_PIN(0xff, 48),
|
|
|
|
+ MX31_PIN_LD5 = IOMUX_PIN(0xff, 49),
|
|
|
|
+ MX31_PIN_LD4 = IOMUX_PIN(0xff, 50),
|
|
|
|
+ MX31_PIN_LD3 = IOMUX_PIN(0xff, 51),
|
|
|
|
+ MX31_PIN_LD2 = IOMUX_PIN(0xff, 52),
|
|
|
|
+ MX31_PIN_LD1 = IOMUX_PIN(0xff, 53),
|
|
|
|
+ MX31_PIN_LD0 = IOMUX_PIN(0xff, 54),
|
|
|
|
+ MX31_PIN_USBH2_DATA1 = IOMUX_PIN(0xff, 55),
|
|
|
|
+ MX31_PIN_USBH2_DATA0 = IOMUX_PIN(0xff, 56),
|
|
|
|
+ MX31_PIN_USBH2_NXT = IOMUX_PIN(0xff, 57),
|
|
|
|
+ MX31_PIN_USBH2_STP = IOMUX_PIN(0xff, 58),
|
|
|
|
+ MX31_PIN_USBH2_DIR = IOMUX_PIN(0xff, 59),
|
|
|
|
+ MX31_PIN_USBH2_CLK = IOMUX_PIN(0xff, 60),
|
|
|
|
+ MX31_PIN_USBOTG_DATA7 = IOMUX_PIN(0xff, 61),
|
|
|
|
+ MX31_PIN_USBOTG_DATA6 = IOMUX_PIN(0xff, 62),
|
|
|
|
+ MX31_PIN_USBOTG_DATA5 = IOMUX_PIN(0xff, 63),
|
|
|
|
+ MX31_PIN_USBOTG_DATA4 = IOMUX_PIN(0xff, 64),
|
|
|
|
+ MX31_PIN_USBOTG_DATA3 = IOMUX_PIN(0xff, 65),
|
|
|
|
+ MX31_PIN_USBOTG_DATA2 = IOMUX_PIN(0xff, 66),
|
|
|
|
+ MX31_PIN_USBOTG_DATA1 = IOMUX_PIN(0xff, 67),
|
|
|
|
+ MX31_PIN_USBOTG_DATA0 = IOMUX_PIN(0xff, 68),
|
|
|
|
+ MX31_PIN_USBOTG_NXT = IOMUX_PIN(0xff, 69),
|
|
|
|
+ MX31_PIN_USBOTG_STP = IOMUX_PIN(0xff, 70),
|
|
|
|
+ MX31_PIN_USBOTG_DIR = IOMUX_PIN(0xff, 71),
|
|
|
|
+ MX31_PIN_USBOTG_CLK = IOMUX_PIN(0xff, 72),
|
|
|
|
+ MX31_PIN_USB_BYP = IOMUX_PIN(31, 73),
|
|
|
|
+ MX31_PIN_USB_OC = IOMUX_PIN(30, 74),
|
|
|
|
+ MX31_PIN_USB_PWR = IOMUX_PIN(29, 75),
|
|
|
|
+ MX31_PIN_SJC_MOD = IOMUX_PIN(0xff, 76),
|
|
|
|
+ MX31_PIN_DE_B = IOMUX_PIN(0xff, 77),
|
|
|
|
+ MX31_PIN_TRSTB = IOMUX_PIN(0xff, 78),
|
|
|
|
+ MX31_PIN_TDO = IOMUX_PIN(0xff, 79),
|
|
|
|
+ MX31_PIN_TDI = IOMUX_PIN(0xff, 80),
|
|
|
|
+ MX31_PIN_TMS = IOMUX_PIN(0xff, 81),
|
|
|
|
+ MX31_PIN_TCK = IOMUX_PIN(0xff, 82),
|
|
|
|
+ MX31_PIN_RTCK = IOMUX_PIN(0xff, 83),
|
|
|
|
+ MX31_PIN_KEY_COL7 = IOMUX_PIN(57, 84),
|
|
|
|
+ MX31_PIN_KEY_COL6 = IOMUX_PIN(56, 85),
|
|
|
|
+ MX31_PIN_KEY_COL5 = IOMUX_PIN(55, 86),
|
|
|
|
+ MX31_PIN_KEY_COL4 = IOMUX_PIN(54, 87),
|
|
|
|
+ MX31_PIN_KEY_COL3 = IOMUX_PIN(0xff, 88),
|
|
|
|
+ MX31_PIN_KEY_COL2 = IOMUX_PIN(0xff, 89),
|
|
|
|
+ MX31_PIN_KEY_COL1 = IOMUX_PIN(0xff, 90),
|
|
|
|
+ MX31_PIN_KEY_COL0 = IOMUX_PIN(0xff, 91),
|
|
|
|
+ MX31_PIN_KEY_ROW7 = IOMUX_PIN(53, 92),
|
|
|
|
+ MX31_PIN_KEY_ROW6 = IOMUX_PIN(52, 93),
|
|
|
|
+ MX31_PIN_KEY_ROW5 = IOMUX_PIN(51, 94),
|
|
|
|
+ MX31_PIN_KEY_ROW4 = IOMUX_PIN(50, 95),
|
|
|
|
+ MX31_PIN_KEY_ROW3 = IOMUX_PIN(0xff, 96),
|
|
|
|
+ MX31_PIN_KEY_ROW2 = IOMUX_PIN(0xff, 97),
|
|
|
|
+ MX31_PIN_KEY_ROW1 = IOMUX_PIN(0xff, 98),
|
|
|
|
+ MX31_PIN_KEY_ROW0 = IOMUX_PIN(0xff, 99),
|
|
|
|
+ MX31_PIN_BATT_LINE = IOMUX_PIN(49, 100),
|
|
|
|
+ MX31_PIN_CTS2 = IOMUX_PIN(0xff, 101),
|
|
|
|
+ MX31_PIN_RTS2 = IOMUX_PIN(0xff, 102),
|
|
|
|
+ MX31_PIN_TXD2 = IOMUX_PIN(28, 103),
|
|
|
|
+ MX31_PIN_RXD2 = IOMUX_PIN(27, 104),
|
|
|
|
+ MX31_PIN_DTR_DCE2 = IOMUX_PIN(48, 105),
|
|
|
|
+ MX31_PIN_DCD_DTE1 = IOMUX_PIN(47, 106),
|
|
|
|
+ MX31_PIN_RI_DTE1 = IOMUX_PIN(46, 107),
|
|
|
|
+ MX31_PIN_DSR_DTE1 = IOMUX_PIN(45, 108),
|
|
|
|
+ MX31_PIN_DTR_DTE1 = IOMUX_PIN(44, 109),
|
|
|
|
+ MX31_PIN_DCD_DCE1 = IOMUX_PIN(43, 110),
|
|
|
|
+ MX31_PIN_RI_DCE1 = IOMUX_PIN(42, 111),
|
|
|
|
+ MX31_PIN_DSR_DCE1 = IOMUX_PIN(41, 112),
|
|
|
|
+ MX31_PIN_DTR_DCE1 = IOMUX_PIN(40, 113),
|
|
|
|
+ MX31_PIN_CTS1 = IOMUX_PIN(39, 114),
|
|
|
|
+ MX31_PIN_RTS1 = IOMUX_PIN(38, 115),
|
|
|
|
+ MX31_PIN_TXD1 = IOMUX_PIN(37, 116),
|
|
|
|
+ MX31_PIN_RXD1 = IOMUX_PIN(36, 117),
|
|
|
|
+ MX31_PIN_CSPI2_SPI_RDY = IOMUX_PIN(0xff, 118),
|
|
|
|
+ MX31_PIN_CSPI2_SCLK = IOMUX_PIN(0xff, 119),
|
|
|
|
+ MX31_PIN_CSPI2_SS2 = IOMUX_PIN(0xff, 120),
|
|
|
|
+ MX31_PIN_CSPI2_SS1 = IOMUX_PIN(0xff, 121),
|
|
|
|
+ MX31_PIN_CSPI2_SS0 = IOMUX_PIN(0xff, 122),
|
|
|
|
+ MX31_PIN_CSPI2_MISO = IOMUX_PIN(0xff, 123),
|
|
|
|
+ MX31_PIN_CSPI2_MOSI = IOMUX_PIN(0xff, 124),
|
|
|
|
+ MX31_PIN_CSPI1_SPI_RDY = IOMUX_PIN(0xff, 125),
|
|
|
|
+ MX31_PIN_CSPI1_SCLK = IOMUX_PIN(0xff, 126),
|
|
|
|
+ MX31_PIN_CSPI1_SS2 = IOMUX_PIN(0xff, 127),
|
|
|
|
+ MX31_PIN_CSPI1_SS1 = IOMUX_PIN(0xff, 128),
|