|
@@ -17,8 +17,12 @@
|
|
|
PORT_GP_CFG_16(0, fn, sfx, SH_PFC_PIN_CFG_DRIVE_STRENGTH), \
|
|
|
PORT_GP_CFG_28(1, fn, sfx, SH_PFC_PIN_CFG_DRIVE_STRENGTH), \
|
|
|
PORT_GP_CFG_15(2, fn, sfx, SH_PFC_PIN_CFG_DRIVE_STRENGTH), \
|
|
|
- PORT_GP_CFG_16(3, fn, sfx, SH_PFC_PIN_CFG_DRIVE_STRENGTH), \
|
|
|
- PORT_GP_CFG_18(4, fn, sfx, SH_PFC_PIN_CFG_DRIVE_STRENGTH), \
|
|
|
+ PORT_GP_CFG_12(3, fn, sfx, SH_PFC_PIN_CFG_DRIVE_STRENGTH | SH_PFC_PIN_CFG_IO_VOLTAGE), \
|
|
|
+ PORT_GP_CFG_1(3, 12, fn, sfx, SH_PFC_PIN_CFG_DRIVE_STRENGTH), \
|
|
|
+ PORT_GP_CFG_1(3, 13, fn, sfx, SH_PFC_PIN_CFG_DRIVE_STRENGTH), \
|
|
|
+ PORT_GP_CFG_1(3, 14, fn, sfx, SH_PFC_PIN_CFG_DRIVE_STRENGTH), \
|
|
|
+ PORT_GP_CFG_1(3, 15, fn, sfx, SH_PFC_PIN_CFG_DRIVE_STRENGTH), \
|
|
|
+ PORT_GP_CFG_18(4, fn, sfx, SH_PFC_PIN_CFG_DRIVE_STRENGTH | SH_PFC_PIN_CFG_IO_VOLTAGE), \
|
|
|
PORT_GP_CFG_26(5, fn, sfx, SH_PFC_PIN_CFG_DRIVE_STRENGTH), \
|
|
|
PORT_GP_CFG_32(6, fn, sfx, SH_PFC_PIN_CFG_DRIVE_STRENGTH), \
|
|
|
PORT_GP_CFG_4(7, fn, sfx, SH_PFC_PIN_CFG_DRIVE_STRENGTH)
|
|
@@ -552,6 +556,9 @@ static const u16 pinmux_data[] = {
|
|
|
PINMUX_SINGLE(AVS2),
|
|
|
PINMUX_SINGLE(HDMI0_CEC),
|
|
|
PINMUX_SINGLE(HDMI1_CEC),
|
|
|
+ PINMUX_SINGLE(I2C_SEL_0_1),
|
|
|
+ PINMUX_SINGLE(I2C_SEL_3_1),
|
|
|
+ PINMUX_SINGLE(I2C_SEL_5_1),
|
|
|
PINMUX_SINGLE(MSIOF0_RXD),
|
|
|
PINMUX_SINGLE(MSIOF0_SCK),
|
|
|
PINMUX_SINGLE(MSIOF0_TXD),
|
|
@@ -1401,11 +1408,6 @@ static const u16 pinmux_data[] = {
|
|
|
PINMUX_IPSR_MSEL(IP17_7_4, STP_ISSYNC_0_E, SEL_SSP1_0_4),
|
|
|
PINMUX_IPSR_MSEL(IP17_7_4, RIF2_D1_B, SEL_DRIF2_1),
|
|
|
PINMUX_IPSR_GPSR(IP17_7_4, TPU0TO3),
|
|
|
-
|
|
|
- /* I2C */
|
|
|
- PINMUX_IPSR_NOGP(0, I2C_SEL_0_1),
|
|
|
- PINMUX_IPSR_NOGP(0, I2C_SEL_3_1),
|
|
|
- PINMUX_IPSR_NOGP(0, I2C_SEL_5_1),
|
|
|
};
|
|
|
|
|
|
static const struct sh_pfc_pin pinmux_pins[] = {
|
|
@@ -1654,6 +1656,221 @@ static const unsigned int canfd1_data_mux[] = {
|
|
|
CANFD1_TX_MARK, CANFD1_RX_MARK,
|
|
|
};
|
|
|
|
|
|
+/* - DRIF0 --------------------------------------------------------------- */
|
|
|
+static const unsigned int drif0_ctrl_a_pins[] = {
|
|
|
+ /* CLK, SYNC */
|
|
|
+ RCAR_GP_PIN(6, 8), RCAR_GP_PIN(6, 9),
|
|
|
+};
|
|
|
+static const unsigned int drif0_ctrl_a_mux[] = {
|
|
|
+ RIF0_CLK_A_MARK, RIF0_SYNC_A_MARK,
|
|
|
+};
|
|
|
+static const unsigned int drif0_data0_a_pins[] = {
|
|
|
+ /* D0 */
|
|
|
+ RCAR_GP_PIN(6, 10),
|
|
|
+};
|
|
|
+static const unsigned int drif0_data0_a_mux[] = {
|
|
|
+ RIF0_D0_A_MARK,
|
|
|
+};
|
|
|
+static const unsigned int drif0_data1_a_pins[] = {
|
|
|
+ /* D1 */
|
|
|
+ RCAR_GP_PIN(6, 7),
|
|
|
+};
|
|
|
+static const unsigned int drif0_data1_a_mux[] = {
|
|
|
+ RIF0_D1_A_MARK,
|
|
|
+};
|
|
|
+static const unsigned int drif0_ctrl_b_pins[] = {
|
|
|
+ /* CLK, SYNC */
|
|
|
+ RCAR_GP_PIN(5, 0), RCAR_GP_PIN(5, 4),
|
|
|
+};
|
|
|
+static const unsigned int drif0_ctrl_b_mux[] = {
|
|
|
+ RIF0_CLK_B_MARK, RIF0_SYNC_B_MARK,
|
|
|
+};
|
|
|
+static const unsigned int drif0_data0_b_pins[] = {
|
|
|
+ /* D0 */
|
|
|
+ RCAR_GP_PIN(5, 1),
|
|
|
+};
|
|
|
+static const unsigned int drif0_data0_b_mux[] = {
|
|
|
+ RIF0_D0_B_MARK,
|
|
|
+};
|
|
|
+static const unsigned int drif0_data1_b_pins[] = {
|
|
|
+ /* D1 */
|
|
|
+ RCAR_GP_PIN(5, 2),
|
|
|
+};
|
|
|
+static const unsigned int drif0_data1_b_mux[] = {
|
|
|
+ RIF0_D1_B_MARK,
|
|
|
+};
|
|
|
+static const unsigned int drif0_ctrl_c_pins[] = {
|
|
|
+ /* CLK, SYNC */
|
|
|
+ RCAR_GP_PIN(5, 12), RCAR_GP_PIN(5, 15),
|
|
|
+};
|
|
|
+static const unsigned int drif0_ctrl_c_mux[] = {
|
|
|
+ RIF0_CLK_C_MARK, RIF0_SYNC_C_MARK,
|
|
|
+};
|
|
|
+static const unsigned int drif0_data0_c_pins[] = {
|
|
|
+ /* D0 */
|
|
|
+ RCAR_GP_PIN(5, 13),
|
|
|
+};
|
|
|
+static const unsigned int drif0_data0_c_mux[] = {
|
|
|
+ RIF0_D0_C_MARK,
|
|
|
+};
|
|
|
+static const unsigned int drif0_data1_c_pins[] = {
|
|
|
+ /* D1 */
|
|
|
+ RCAR_GP_PIN(5, 14),
|
|
|
+};
|
|
|
+static const unsigned int drif0_data1_c_mux[] = {
|
|
|
+ RIF0_D1_C_MARK,
|
|
|
+};
|
|
|
+/* - DRIF1 --------------------------------------------------------------- */
|
|
|
+static const unsigned int drif1_ctrl_a_pins[] = {
|
|
|
+ /* CLK, SYNC */
|
|
|
+ RCAR_GP_PIN(6, 17), RCAR_GP_PIN(6, 18),
|
|
|
+};
|
|
|
+static const unsigned int drif1_ctrl_a_mux[] = {
|
|
|
+ RIF1_CLK_A_MARK, RIF1_SYNC_A_MARK,
|
|
|
+};
|
|
|
+static const unsigned int drif1_data0_a_pins[] = {
|
|
|
+ /* D0 */
|
|
|
+ RCAR_GP_PIN(6, 19),
|
|
|
+};
|
|
|
+static const unsigned int drif1_data0_a_mux[] = {
|
|
|
+ RIF1_D0_A_MARK,
|
|
|
+};
|
|
|
+static const unsigned int drif1_data1_a_pins[] = {
|
|
|
+ /* D1 */
|
|
|
+ RCAR_GP_PIN(6, 20),
|
|
|
+};
|
|
|
+static const unsigned int drif1_data1_a_mux[] = {
|
|
|
+ RIF1_D1_A_MARK,
|
|
|
+};
|
|
|
+static const unsigned int drif1_ctrl_b_pins[] = {
|
|
|
+ /* CLK, SYNC */
|
|
|
+ RCAR_GP_PIN(5, 9), RCAR_GP_PIN(5, 3),
|
|
|
+};
|
|
|
+static const unsigned int drif1_ctrl_b_mux[] = {
|
|
|
+ RIF1_CLK_B_MARK, RIF1_SYNC_B_MARK,
|
|
|
+};
|
|
|
+static const unsigned int drif1_data0_b_pins[] = {
|
|
|
+ /* D0 */
|
|
|
+ RCAR_GP_PIN(5, 7),
|
|
|
+};
|
|
|
+static const unsigned int drif1_data0_b_mux[] = {
|
|
|
+ RIF1_D0_B_MARK,
|
|
|
+};
|
|
|
+static const unsigned int drif1_data1_b_pins[] = {
|
|
|
+ /* D1 */
|
|
|
+ RCAR_GP_PIN(5, 8),
|
|
|
+};
|
|
|
+static const unsigned int drif1_data1_b_mux[] = {
|
|
|
+ RIF1_D1_B_MARK,
|
|
|
+};
|
|
|
+static const unsigned int drif1_ctrl_c_pins[] = {
|
|
|
+ /* CLK, SYNC */
|
|
|
+ RCAR_GP_PIN(5, 5), RCAR_GP_PIN(5, 11),
|
|
|
+};
|
|
|
+static const unsigned int drif1_ctrl_c_mux[] = {
|
|
|
+ RIF1_CLK_C_MARK, RIF1_SYNC_C_MARK,
|
|
|
+};
|
|
|
+static const unsigned int drif1_data0_c_pins[] = {
|
|
|
+ /* D0 */
|
|
|
+ RCAR_GP_PIN(5, 6),
|
|
|
+};
|
|
|
+static const unsigned int drif1_data0_c_mux[] = {
|
|
|
+ RIF1_D0_C_MARK,
|
|
|
+};
|
|
|
+static const unsigned int drif1_data1_c_pins[] = {
|
|
|
+ /* D1 */
|
|
|
+ RCAR_GP_PIN(5, 10),
|
|
|
+};
|
|
|
+static const unsigned int drif1_data1_c_mux[] = {
|
|
|
+ RIF1_D1_C_MARK,
|
|
|
+};
|
|
|
+/* - DRIF2 --------------------------------------------------------------- */
|
|
|
+static const unsigned int drif2_ctrl_a_pins[] = {
|
|
|
+ /* CLK, SYNC */
|
|
|
+ RCAR_GP_PIN(6, 8), RCAR_GP_PIN(6, 9),
|
|
|
+};
|
|
|
+static const unsigned int drif2_ctrl_a_mux[] = {
|
|
|
+ RIF2_CLK_A_MARK, RIF2_SYNC_A_MARK,
|
|
|
+};
|
|
|
+static const unsigned int drif2_data0_a_pins[] = {
|
|
|
+ /* D0 */
|
|
|
+ RCAR_GP_PIN(6, 7),
|
|
|
+};
|
|
|
+static const unsigned int drif2_data0_a_mux[] = {
|
|
|
+ RIF2_D0_A_MARK,
|
|
|
+};
|
|
|
+static const unsigned int drif2_data1_a_pins[] = {
|
|
|
+ /* D1 */
|
|
|
+ RCAR_GP_PIN(6, 10),
|
|
|
+};
|
|
|
+static const unsigned int drif2_data1_a_mux[] = {
|
|
|
+ RIF2_D1_A_MARK,
|
|
|
+};
|
|
|
+static const unsigned int drif2_ctrl_b_pins[] = {
|
|
|
+ /* CLK, SYNC */
|
|
|
+ RCAR_GP_PIN(6, 26), RCAR_GP_PIN(6, 27),
|
|
|
+};
|
|
|
+static const unsigned int drif2_ctrl_b_mux[] = {
|
|
|
+ RIF2_CLK_B_MARK, RIF2_SYNC_B_MARK,
|
|
|
+};
|
|
|
+static const unsigned int drif2_data0_b_pins[] = {
|
|
|
+ /* D0 */
|
|
|
+ RCAR_GP_PIN(6, 30),
|
|
|
+};
|
|
|
+static const unsigned int drif2_data0_b_mux[] = {
|
|
|
+ RIF2_D0_B_MARK,
|
|
|
+};
|
|
|
+static const unsigned int drif2_data1_b_pins[] = {
|
|
|
+ /* D1 */
|
|
|
+ RCAR_GP_PIN(6, 31),
|
|
|
+};
|
|
|
+static const unsigned int drif2_data1_b_mux[] = {
|
|
|
+ RIF2_D1_B_MARK,
|
|
|
+};
|
|
|
+/* - DRIF3 --------------------------------------------------------------- */
|
|
|
+static const unsigned int drif3_ctrl_a_pins[] = {
|
|
|
+ /* CLK, SYNC */
|
|
|
+ RCAR_GP_PIN(6, 17), RCAR_GP_PIN(6, 18),
|
|
|
+};
|
|
|
+static const unsigned int drif3_ctrl_a_mux[] = {
|
|
|
+ RIF3_CLK_A_MARK, RIF3_SYNC_A_MARK,
|
|
|
+};
|
|
|
+static const unsigned int drif3_data0_a_pins[] = {
|
|
|
+ /* D0 */
|
|
|
+ RCAR_GP_PIN(6, 19),
|
|
|
+};
|
|
|
+static const unsigned int drif3_data0_a_mux[] = {
|
|
|
+ RIF3_D0_A_MARK,
|
|
|
+};
|
|
|
+static const unsigned int drif3_data1_a_pins[] = {
|
|
|
+ /* D1 */
|
|
|
+ RCAR_GP_PIN(6, 20),
|
|
|
+};
|
|
|
+static const unsigned int drif3_data1_a_mux[] = {
|
|
|
+ RIF3_D1_A_MARK,
|
|
|
+};
|
|
|
+static const unsigned int drif3_ctrl_b_pins[] = {
|
|
|
+ /* CLK, SYNC */
|
|
|
+ RCAR_GP_PIN(6, 24), RCAR_GP_PIN(6, 25),
|
|
|
+};
|
|
|
+static const unsigned int drif3_ctrl_b_mux[] = {
|
|
|
+ RIF3_CLK_B_MARK, RIF3_SYNC_B_MARK,
|
|
|
+};
|
|
|
+static const unsigned int drif3_data0_b_pins[] = {
|
|
|
+ /* D0 */
|
|
|
+ RCAR_GP_PIN(6, 28),
|
|
|
+};
|
|
|
+static const unsigned int drif3_data0_b_mux[] = {
|
|
|
+ RIF3_D0_B_MARK,
|
|
|
+};
|
|
|
+static const unsigned int drif3_data1_b_pins[] = {
|
|
|
+ /* D1 */
|
|
|
+ RCAR_GP_PIN(6, 29),
|
|
|
+};
|
|
|
+static const unsigned int drif3_data1_b_mux[] = {
|
|
|
+ RIF3_D1_B_MARK,
|
|
|
+};
|
|
|
+
|
|
|
/* - HSCIF0 ----------------------------------------------------------------- */
|
|
|
static const unsigned int hscif0_data_pins[] = {
|
|
|
/* RX, TX */
|
|
@@ -3346,6 +3563,36 @@ static const struct sh_pfc_pin_group pinmux_groups[] = {
|
|
|
SH_PFC_PIN_GROUP(canfd0_data_a),
|
|
|
SH_PFC_PIN_GROUP(canfd0_data_b),
|
|
|
SH_PFC_PIN_GROUP(canfd1_data),
|
|
|
+ SH_PFC_PIN_GROUP(drif0_ctrl_a),
|
|
|
+ SH_PFC_PIN_GROUP(drif0_data0_a),
|
|
|
+ SH_PFC_PIN_GROUP(drif0_data1_a),
|
|
|
+ SH_PFC_PIN_GROUP(drif0_ctrl_b),
|
|
|
+ SH_PFC_PIN_GROUP(drif0_data0_b),
|
|
|
+ SH_PFC_PIN_GROUP(drif0_data1_b),
|
|
|
+ SH_PFC_PIN_GROUP(drif0_ctrl_c),
|
|
|
+ SH_PFC_PIN_GROUP(drif0_data0_c),
|
|
|
+ SH_PFC_PIN_GROUP(drif0_data1_c),
|
|
|
+ SH_PFC_PIN_GROUP(drif1_ctrl_a),
|
|
|
+ SH_PFC_PIN_GROUP(drif1_data0_a),
|
|
|
+ SH_PFC_PIN_GROUP(drif1_data1_a),
|
|
|
+ SH_PFC_PIN_GROUP(drif1_ctrl_b),
|
|
|
+ SH_PFC_PIN_GROUP(drif1_data0_b),
|
|
|
+ SH_PFC_PIN_GROUP(drif1_data1_b),
|
|
|
+ SH_PFC_PIN_GROUP(drif1_ctrl_c),
|
|
|
+ SH_PFC_PIN_GROUP(drif1_data0_c),
|
|
|
+ SH_PFC_PIN_GROUP(drif1_data1_c),
|
|
|
+ SH_PFC_PIN_GROUP(drif2_ctrl_a),
|
|
|
+ SH_PFC_PIN_GROUP(drif2_data0_a),
|
|
|
+ SH_PFC_PIN_GROUP(drif2_data1_a),
|
|
|
+ SH_PFC_PIN_GROUP(drif2_ctrl_b),
|
|
|
+ SH_PFC_PIN_GROUP(drif2_data0_b),
|
|
|
+ SH_PFC_PIN_GROUP(drif2_data1_b),
|
|
|
+ SH_PFC_PIN_GROUP(drif3_ctrl_a),
|
|
|
+ SH_PFC_PIN_GROUP(drif3_data0_a),
|
|
|
+ SH_PFC_PIN_GROUP(drif3_data1_a),
|
|
|
+ SH_PFC_PIN_GROUP(drif3_ctrl_b),
|
|
|
+ SH_PFC_PIN_GROUP(drif3_data0_b),
|
|
|
+ SH_PFC_PIN_GROUP(drif3_data1_b),
|
|
|
SH_PFC_PIN_GROUP(hscif0_data),
|
|
|
SH_PFC_PIN_GROUP(hscif0_clk),
|
|
|
SH_PFC_PIN_GROUP(hscif0_ctrl),
|
|
@@ -3629,6 +3876,48 @@ static const char * const canfd1_groups[] = {
|
|
|
"canfd1_data",
|
|
|
};
|
|
|
|
|
|
+static const char * const drif0_groups[] = {
|
|
|
+ "drif0_ctrl_a",
|
|
|
+ "drif0_data0_a",
|
|
|
+ "drif0_data1_a",
|
|
|
+ "drif0_ctrl_b",
|
|
|
+ "drif0_data0_b",
|
|
|
+ "drif0_data1_b",
|
|
|
+ "drif0_ctrl_c",
|
|
|
+ "drif0_data0_c",
|
|
|
+ "drif0_data1_c",
|
|
|
+};
|
|
|
+
|
|
|
+static const char * const drif1_groups[] = {
|
|
|
+ "drif1_ctrl_a",
|
|
|
+ "drif1_data0_a",
|
|
|
+ "drif1_data1_a",
|
|
|
+ "drif1_ctrl_b",
|
|
|
+ "drif1_data0_b",
|
|
|
+ "drif1_data1_b",
|
|
|
+ "drif1_ctrl_c",
|
|
|
+ "drif1_data0_c",
|
|
|
+ "drif1_data1_c",
|
|
|
+};
|
|
|
+
|
|
|
+static const char * const drif2_groups[] = {
|
|
|
+ "drif2_ctrl_a",
|
|
|
+ "drif2_data0_a",
|
|
|
+ "drif2_data1_a",
|
|
|
+ "drif2_ctrl_b",
|
|
|
+ "drif2_data0_b",
|
|
|
+ "drif2_data1_b",
|
|
|
+};
|
|
|
+
|
|
|
+static const char * const drif3_groups[] = {
|
|
|
+ "drif3_ctrl_a",
|
|
|
+ "drif3_data0_a",
|
|
|
+ "drif3_data1_a",
|
|
|
+ "drif3_ctrl_b",
|
|
|
+ "drif3_data0_b",
|
|
|
+ "drif3_data1_b",
|
|
|
+};
|
|
|
+
|
|
|
static const char * const hscif0_groups[] = {
|
|
|
"hscif0_data",
|
|
|
"hscif0_clk",
|
|
@@ -3972,6 +4261,10 @@ static const struct sh_pfc_function pinmux_functions[] = {
|
|
|
SH_PFC_FUNCTION(can_clk),
|
|
|
SH_PFC_FUNCTION(canfd0),
|
|
|
SH_PFC_FUNCTION(canfd1),
|
|
|
+ SH_PFC_FUNCTION(drif0),
|
|
|
+ SH_PFC_FUNCTION(drif1),
|
|
|
+ SH_PFC_FUNCTION(drif2),
|
|
|
+ SH_PFC_FUNCTION(drif3),
|
|
|
SH_PFC_FUNCTION(hscif0),
|
|
|
SH_PFC_FUNCTION(hscif1),
|
|
|
SH_PFC_FUNCTION(hscif2),
|
|
@@ -4765,8 +5058,28 @@ static const struct pinmux_drive_reg pinmux_drive_regs[] = {
|
|
|
{ },
|
|
|
};
|
|
|
|
|
|
+static int r8a7795_pin_to_pocctrl(struct sh_pfc *pfc, unsigned int pin, u32 *pocctrl)
|
|
|
+{
|
|
|
+ int bit = -EINVAL;
|
|
|
+
|
|
|
+ *pocctrl = 0xe6060380;
|
|
|
+
|
|
|
+ if (pin >= RCAR_GP_PIN(3, 0) && pin <= RCAR_GP_PIN(3, 11))
|
|
|
+ bit = pin & 0x1f;
|
|
|
+
|
|
|
+ if (pin >= RCAR_GP_PIN(4, 0) && pin <= RCAR_GP_PIN(4, 17))
|
|
|
+ bit = (pin & 0x1f) + 12;
|
|
|
+
|
|
|
+ return bit;
|
|
|
+}
|
|
|
+
|
|
|
+static const struct sh_pfc_soc_operations r8a7795_pinmux_ops = {
|
|
|
+ .pin_to_pocctrl = r8a7795_pin_to_pocctrl,
|
|
|
+};
|
|
|
+
|
|
|
const struct sh_pfc_soc_info r8a7795_pinmux_info = {
|
|
|
.name = "r8a77950_pfc",
|
|
|
+ .ops = &r8a7795_pinmux_ops,
|
|
|
.unlock_reg = 0xe6060000, /* PMMR */
|
|
|
|
|
|
.function = { PINMUX_FUNCTION_BEGIN, PINMUX_FUNCTION_END },
|