]> Pileus Git - ~andy/linux/blobdiff - drivers/pinctrl/sh-pfc/pfc-r8a7778.c
Merge tag 'clk-for-linus-3.14-part1' of git://git.linaro.org/people/mike.turquette...
[~andy/linux] / drivers / pinctrl / sh-pfc / pfc-r8a7778.c
index 428d2a6857efd4123258dde53819c61ce914bdc8..c7d610d1f3efb8054a3358a2f6c087795d5705f7 100644 (file)
@@ -1260,7 +1260,7 @@ static const u16 pinmux_data[] = {
  */
 #define PIN_NUMBER(row, col)           (1000+((row)-1)*25+(col)-1)
 
-static struct sh_pfc_pin pinmux_pins[] = {
+static const struct sh_pfc_pin pinmux_pins[] = {
        PINMUX_GPIO_GP_ALL(),
 
        /* Pins not associated with a GPIO port */
@@ -1288,6 +1288,49 @@ static struct sh_pfc_pin pinmux_pins[] = {
                                                     arg5##_MARK, arg6##_MARK, \
                                                     arg7##_MARK, arg8##_MARK, }
 
+/* - AUDIO macro -------------------------------------------------------------*/
+#define AUDIO_PFC_PIN(name, pin)       SH_PFC_PINS(name, pin)
+#define AUDIO_PFC_DAT(name, pin)       SH_PFC_MUX1(name, pin)
+
+/* - AUDIO clock -------------------------------------------------------------*/
+AUDIO_PFC_PIN(audio_clk_a,     RCAR_GP_PIN(2, 22));
+AUDIO_PFC_DAT(audio_clk_a,     AUDIO_CLKA);
+AUDIO_PFC_PIN(audio_clk_b,     RCAR_GP_PIN(2, 23));
+AUDIO_PFC_DAT(audio_clk_b,     AUDIO_CLKB);
+AUDIO_PFC_PIN(audio_clk_c,     RCAR_GP_PIN(2, 7));
+AUDIO_PFC_DAT(audio_clk_c,     AUDIO_CLKC);
+AUDIO_PFC_PIN(audio_clkout_a,  RCAR_GP_PIN(2, 16));
+AUDIO_PFC_DAT(audio_clkout_a,  AUDIO_CLKOUT_A);
+AUDIO_PFC_PIN(audio_clkout_b,  RCAR_GP_PIN(1, 16));
+AUDIO_PFC_DAT(audio_clkout_b,  AUDIO_CLKOUT_B);
+
+/* - CAN macro --------_----------------------------------------------------- */
+#define CAN_PFC_PINS(name, args...)            SH_PFC_PINS(name, args)
+#define CAN_PFC_DATA(name, tx, rx)             SH_PFC_MUX2(name, tx, rx)
+#define CAN_PFC_CLK(name, clk)                 SH_PFC_MUX1(name, clk)
+
+/* - CAN0 ------------------------------------------------------------------- */
+CAN_PFC_PINS(can0_data_a,      RCAR_GP_PIN(1, 30),     RCAR_GP_PIN(1, 31));
+CAN_PFC_DATA(can0_data_a,      CAN0_TX_A,              CAN0_RX_A);
+CAN_PFC_PINS(can0_data_b,      RCAR_GP_PIN(2, 26),     RCAR_GP_PIN(2, 27));
+CAN_PFC_DATA(can0_data_b,      CAN0_TX_B,              CAN0_RX_B);
+
+/* - CAN1 ------------------------------------------------------------------- */
+CAN_PFC_PINS(can1_data_a,      RCAR_GP_PIN(4, 20),     RCAR_GP_PIN(4, 19));
+CAN_PFC_DATA(can1_data_a,      CAN1_TX_A,              CAN1_RX_A);
+CAN_PFC_PINS(can1_data_b,      RCAR_GP_PIN(2, 28),     RCAR_GP_PIN(2, 29));
+CAN_PFC_DATA(can1_data_b,      CAN1_TX_B,              CAN1_RX_B);
+
+/* - CAN_CLK  --------------------------------------------------------------- */
+CAN_PFC_PINS(can_clk_a,                RCAR_GP_PIN(3, 24));
+CAN_PFC_CLK(can_clk_a,         CAN_CLK_A);
+CAN_PFC_PINS(can_clk_b,                RCAR_GP_PIN(1, 16));
+CAN_PFC_CLK(can_clk_b,         CAN_CLK_B);
+CAN_PFC_PINS(can_clk_c,                RCAR_GP_PIN(4, 24));
+CAN_PFC_CLK(can_clk_c,         CAN_CLK_C);
+CAN_PFC_PINS(can_clk_d,                RCAR_GP_PIN(2, 25));
+CAN_PFC_CLK(can_clk_d,         CAN_CLK_D);
+
 /* - Ether ------------------------------------------------------------------ */
 SH_PFC_PINS(ether_rmii,                RCAR_GP_PIN(4, 10),     RCAR_GP_PIN(4, 11),
                                RCAR_GP_PIN(4, 13),     RCAR_GP_PIN(4, 9),
@@ -1577,6 +1620,59 @@ SDHI_PFC_WPPN(sdhi2_wp_a,        SD2_WP_A);
 SDHI_PFC_PINS(sdhi2_wp_b,      RCAR_GP_PIN(3, 28));
 SDHI_PFC_WPPN(sdhi2_wp_b,      SD2_WP_B);
 
+/* - SSI macro -------------------------------------------------------------- */
+#define SSI_PFC_PINS(name, args...)            SH_PFC_PINS(name, args)
+#define SSI_PFC_CTRL(name, sck, ws)            SH_PFC_MUX2(name, sck, ws)
+#define SSI_PFC_DATA(name, d)                  SH_PFC_MUX1(name, d)
+
+/* - SSI 0/1/2 -------------------------------------------------------------- */
+SSI_PFC_PINS(ssi012_ctrl,      RCAR_GP_PIN(3, 6),      RCAR_GP_PIN(3, 7));
+SSI_PFC_CTRL(ssi012_ctrl,      SSI_SCK012,             SSI_WS012);
+SSI_PFC_PINS(ssi0_data,                RCAR_GP_PIN(3, 10));
+SSI_PFC_DATA(ssi0_data,                SSI_SDATA0);
+SSI_PFC_PINS(ssi1_a_ctrl,      RCAR_GP_PIN(2, 20),     RCAR_GP_PIN(2, 21));
+SSI_PFC_CTRL(ssi1_a_ctrl,      SSI_SCK1_A,             SSI_WS1_A);
+SSI_PFC_PINS(ssi1_b_ctrl,      PIN_NUMBER(3, 20),      RCAR_GP_PIN(1, 3));
+SSI_PFC_CTRL(ssi1_b_ctrl,      SSI_SCK1_B,             SSI_WS1_B);
+SSI_PFC_PINS(ssi1_data,                RCAR_GP_PIN(3, 9));
+SSI_PFC_DATA(ssi1_data,                SSI_SDATA1);
+SSI_PFC_PINS(ssi2_a_ctrl,      RCAR_GP_PIN(2, 26),     RCAR_GP_PIN(3, 4));
+SSI_PFC_CTRL(ssi2_a_ctrl,      SSI_SCK2_A,             SSI_WS2_A);
+SSI_PFC_PINS(ssi2_b_ctrl,      RCAR_GP_PIN(2, 6),      RCAR_GP_PIN(2, 17));
+SSI_PFC_CTRL(ssi2_b_ctrl,      SSI_SCK2_B,             SSI_WS2_B);
+SSI_PFC_PINS(ssi2_data,                RCAR_GP_PIN(3, 8));
+SSI_PFC_DATA(ssi2_data,                SSI_SDATA2);
+
+/* - SSI 3/4 ---------------------------------------------------------------- */
+SSI_PFC_PINS(ssi34_ctrl,       RCAR_GP_PIN(3, 2),      RCAR_GP_PIN(3, 3));
+SSI_PFC_CTRL(ssi34_ctrl,       SSI_SCK34,              SSI_WS34);
+SSI_PFC_PINS(ssi3_data,                RCAR_GP_PIN(3, 5));
+SSI_PFC_DATA(ssi3_data,                SSI_SDATA3);
+SSI_PFC_PINS(ssi4_ctrl,                RCAR_GP_PIN(1, 22),     RCAR_GP_PIN(1, 23));
+SSI_PFC_CTRL(ssi4_ctrl,                SSI_SCK4,               SSI_WS4);
+SSI_PFC_PINS(ssi4_data,                RCAR_GP_PIN(3, 4));
+SSI_PFC_DATA(ssi4_data,                SSI_SDATA4);
+
+/* - SSI 5 ------------------------------------------------------------------ */
+SSI_PFC_PINS(ssi5_ctrl,                RCAR_GP_PIN(2, 31),     RCAR_GP_PIN(3, 0));
+SSI_PFC_CTRL(ssi5_ctrl,                SSI_SCK5,               SSI_WS5);
+SSI_PFC_PINS(ssi5_data,                RCAR_GP_PIN(3, 1));
+SSI_PFC_DATA(ssi5_data,                SSI_SDATA5);
+
+/* - SSI 6 ------------------------------------------------------------------ */
+SSI_PFC_PINS(ssi6_ctrl,                RCAR_GP_PIN(2, 28),     RCAR_GP_PIN(2, 29));
+SSI_PFC_CTRL(ssi6_ctrl,                SSI_SCK6,               SSI_WS6);
+SSI_PFC_PINS(ssi6_data,                RCAR_GP_PIN(2, 30));
+SSI_PFC_DATA(ssi6_data,                SSI_SDATA6);
+
+/* - SSI 7/8  --------------------------------------------------------------- */
+SSI_PFC_PINS(ssi78_ctrl,       RCAR_GP_PIN(2, 24),     RCAR_GP_PIN(2, 25));
+SSI_PFC_CTRL(ssi78_ctrl,       SSI_SCK78,              SSI_WS78);
+SSI_PFC_PINS(ssi7_data,                RCAR_GP_PIN(2, 27));
+SSI_PFC_DATA(ssi7_data,                SSI_SDATA7);
+SSI_PFC_PINS(ssi8_data,                RCAR_GP_PIN(2, 26));
+SSI_PFC_DATA(ssi8_data,                SSI_SDATA8);
+
 /* - USB0 ------------------------------------------------------------------- */
 SH_PFC_PINS(usb0,              RCAR_GP_PIN(0, 1));
 SH_PFC_MUX1(usb0,              PENC0);
@@ -1624,6 +1720,19 @@ VIN_PFC_PINS(vin1_sync,          RCAR_GP_PIN(3, 21),     RCAR_GP_PIN(3, 22));
 VIN_PFC_SYNC(vin1_sync,                VI1_HSYNC,              VI1_VSYNC);
 
 static const struct sh_pfc_pin_group pinmux_groups[] = {
+       SH_PFC_PIN_GROUP(audio_clk_a),
+       SH_PFC_PIN_GROUP(audio_clk_b),
+       SH_PFC_PIN_GROUP(audio_clk_c),
+       SH_PFC_PIN_GROUP(audio_clkout_a),
+       SH_PFC_PIN_GROUP(audio_clkout_b),
+       SH_PFC_PIN_GROUP(can0_data_a),
+       SH_PFC_PIN_GROUP(can0_data_b),
+       SH_PFC_PIN_GROUP(can1_data_a),
+       SH_PFC_PIN_GROUP(can1_data_b),
+       SH_PFC_PIN_GROUP(can_clk_a),
+       SH_PFC_PIN_GROUP(can_clk_b),
+       SH_PFC_PIN_GROUP(can_clk_c),
+       SH_PFC_PIN_GROUP(can_clk_d),
        SH_PFC_PIN_GROUP(ether_rmii),
        SH_PFC_PIN_GROUP(ether_link),
        SH_PFC_PIN_GROUP(ether_magic),
@@ -1713,6 +1822,25 @@ static const struct sh_pfc_pin_group pinmux_groups[] = {
        SH_PFC_PIN_GROUP(sdhi2_data4_b),
        SH_PFC_PIN_GROUP(sdhi2_wp_a),
        SH_PFC_PIN_GROUP(sdhi2_wp_b),
+       SH_PFC_PIN_GROUP(ssi012_ctrl),
+       SH_PFC_PIN_GROUP(ssi0_data),
+       SH_PFC_PIN_GROUP(ssi1_a_ctrl),
+       SH_PFC_PIN_GROUP(ssi1_b_ctrl),
+       SH_PFC_PIN_GROUP(ssi1_data),
+       SH_PFC_PIN_GROUP(ssi2_a_ctrl),
+       SH_PFC_PIN_GROUP(ssi2_b_ctrl),
+       SH_PFC_PIN_GROUP(ssi2_data),
+       SH_PFC_PIN_GROUP(ssi34_ctrl),
+       SH_PFC_PIN_GROUP(ssi3_data),
+       SH_PFC_PIN_GROUP(ssi4_ctrl),
+       SH_PFC_PIN_GROUP(ssi4_data),
+       SH_PFC_PIN_GROUP(ssi5_ctrl),
+       SH_PFC_PIN_GROUP(ssi5_data),
+       SH_PFC_PIN_GROUP(ssi6_ctrl),
+       SH_PFC_PIN_GROUP(ssi6_data),
+       SH_PFC_PIN_GROUP(ssi78_ctrl),
+       SH_PFC_PIN_GROUP(ssi7_data),
+       SH_PFC_PIN_GROUP(ssi8_data),
        SH_PFC_PIN_GROUP(usb0),
        SH_PFC_PIN_GROUP(usb0_ovc),
        SH_PFC_PIN_GROUP(usb1),
@@ -1725,6 +1853,32 @@ static const struct sh_pfc_pin_group pinmux_groups[] = {
        SH_PFC_PIN_GROUP(vin1_sync),
 };
 
+static const char * const audio_clk_groups[] = {
+       "audio_clk_a",
+       "audio_clk_b",
+       "audio_clk_c",
+       "audio_clkout_a",
+       "audio_clkout_b",
+};
+
+static const char * const can0_groups[] = {
+       "can0_data_a",
+       "can0_data_b",
+       "can_clk_a",
+       "can_clk_b",
+       "can_clk_c",
+       "can_clk_d",
+};
+
+static const char * const can1_groups[] = {
+       "can1_data_a",
+       "can1_data_b",
+       "can_clk_a",
+       "can_clk_b",
+       "can_clk_c",
+       "can_clk_d",
+};
+
 static const char * const ether_groups[] = {
        "ether_rmii",
        "ether_link",
@@ -1875,6 +2029,28 @@ static const char * const sdhi2_groups[] = {
        "sdhi2_wp_b",
 };
 
+static const char * const ssi_groups[] = {
+       "ssi012_ctrl",
+       "ssi0_data",
+       "ssi1_a_ctrl",
+       "ssi1_b_ctrl",
+       "ssi1_data",
+       "ssi2_a_ctrl",
+       "ssi2_b_ctrl",
+       "ssi2_data",
+       "ssi34_ctrl",
+       "ssi3_data",
+       "ssi4_ctrl",
+       "ssi4_data",
+       "ssi5_ctrl",
+       "ssi5_data",
+       "ssi6_ctrl",
+       "ssi6_data",
+       "ssi78_ctrl",
+       "ssi7_data",
+       "ssi8_data",
+};
+
 static const char * const usb0_groups[] = {
        "usb0",
        "usb0_ovc",
@@ -1898,6 +2074,9 @@ static const char * const vin1_groups[] = {
 };
 
 static const struct sh_pfc_function pinmux_functions[] = {
+       SH_PFC_FUNCTION(audio_clk),
+       SH_PFC_FUNCTION(can0),
+       SH_PFC_FUNCTION(can1),
        SH_PFC_FUNCTION(ether),
        SH_PFC_FUNCTION(hscif0),
        SH_PFC_FUNCTION(hscif1),
@@ -1918,13 +2097,14 @@ static const struct sh_pfc_function pinmux_functions[] = {
        SH_PFC_FUNCTION(sdhi0),
        SH_PFC_FUNCTION(sdhi1),
        SH_PFC_FUNCTION(sdhi2),
+       SH_PFC_FUNCTION(ssi),
        SH_PFC_FUNCTION(usb0),
        SH_PFC_FUNCTION(usb1),
        SH_PFC_FUNCTION(vin0),
        SH_PFC_FUNCTION(vin1),
 };
 
-static struct pinmux_cfg_reg pinmux_config_regs[] = {
+static const struct pinmux_cfg_reg pinmux_config_regs[] = {
        { PINMUX_CFG_REG("GPSR0", 0xfffc0004, 32, 1) {
                GP_0_31_FN,     FN_IP1_14_11,
                GP_0_30_FN,     FN_IP1_10_8,