pinctrl: tegra: dynamically calculate function list of groups
authorStephen Warren <swarren@nvidia.com>
Fri, 7 Mar 2014 19:22:16 +0000 (12:22 -0700)
committerLinus Walleij <linus.walleij@linaro.org>
Wed, 12 Mar 2014 14:23:41 +0000 (15:23 +0100)
The per-SoC data structures for Tegra pinctrl stored some information
in a redundant way. Specifically, the list of groups that each function
could be muxed onto was stored once explicitly, and also as part of the
definition of each group. Eliminate this redundancy, and calculate each
function's list of valid groups at pinctrl probe time. This removes
thousands of lines of code from the pinctrl driver and ~16K from the
vmlinux binary size, and adds only about 500uS to the boot process (on
Tegra30; newer SoCs will likely be faster still).

Signed-off-by: Stephen Warren <swarren@nvidia.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/pinctrl-tegra.c
drivers/pinctrl/pinctrl-tegra.h
drivers/pinctrl/pinctrl-tegra114.c
drivers/pinctrl/pinctrl-tegra124.c
drivers/pinctrl/pinctrl-tegra20.c
drivers/pinctrl/pinctrl-tegra30.c

index e767355..6545809 100644 (file)
@@ -39,6 +39,7 @@ struct tegra_pmx {
        struct pinctrl_dev *pctl;
 
        const struct tegra_pinctrl_soc_data *soc;
+       const char **group_pins;
 
        int nbanks;
        void __iomem **regs;
@@ -620,6 +621,8 @@ int tegra_pinctrl_probe(struct platform_device *pdev,
        struct tegra_pmx *pmx;
        struct resource *res;
        int i;
+       const char **group_pins;
+       int fn, gn, gfn;
 
        pmx = devm_kzalloc(&pdev->dev, sizeof(*pmx), GFP_KERNEL);
        if (!pmx) {
@@ -629,6 +632,41 @@ int tegra_pinctrl_probe(struct platform_device *pdev,
        pmx->dev = &pdev->dev;
        pmx->soc = soc_data;
 
+       /*
+        * Each mux group will appear in 4 functions' list of groups.
+        * This over-allocates slightly, since not all groups are mux groups.
+        */
+       pmx->group_pins = devm_kzalloc(&pdev->dev,
+               soc_data->ngroups * 4 * sizeof(*pmx->group_pins),
+               GFP_KERNEL);
+       if (!pmx->group_pins)
+               return -ENOMEM;
+
+       group_pins = pmx->group_pins;
+       for (fn = 0; fn < soc_data->nfunctions; fn++) {
+               struct tegra_function *func = &soc_data->functions[fn];
+
+               func->groups = group_pins;
+
+               for (gn = 0; gn < soc_data->ngroups; gn++) {
+                       const struct tegra_pingroup *g = &soc_data->groups[gn];
+
+                       if (g->mux_reg == -1)
+                               continue;
+
+                       for (gfn = 0; gfn < 4; gfn++)
+                               if (g->funcs[gfn] == fn)
+                                       break;
+                       if (gfn == 4)
+                               continue;
+
+                       BUG_ON(group_pins - pmx->group_pins >=
+                               soc_data->ngroups * 4);
+                       *group_pins++ = g->name;
+                       func->ngroups++;
+               }
+       }
+
        tegra_pinctrl_gpio_range.npins = pmx->soc->ngpios;
        tegra_pinctrl_desc.name = dev_name(&pdev->dev);
        tegra_pinctrl_desc.pins = pmx->soc->pins;
index 817f706..6053832 100644 (file)
@@ -72,7 +72,7 @@ enum tegra_pinconf_tristate {
  */
 struct tegra_function {
        const char *name;
-       const char * const *groups;
+       const char **groups;
        unsigned ngroups;
 };
 
@@ -193,7 +193,7 @@ struct tegra_pinctrl_soc_data {
        unsigned ngpios;
        const struct pinctrl_pin_desc *pins;
        unsigned npins;
-       const struct tegra_function *functions;
+       struct tegra_function *functions;
        unsigned nfunctions;
        const struct tegra_pingroup *groups;
        unsigned ngroups;
index 46da27f..1c9346f 100644 (file)
@@ -1420,941 +1420,12 @@ enum tegra_mux {
        TEGRA_MUX_VI_ALT3,
 };
 
-static const char * const blink_groups[] = {
-       "clk_32k_out_pa0",
-};
-
-static const char * const cec_groups[] = {
-       "hdmi_cec_pee3",
-};
-
-static const char * const cldvfs_groups[] = {
-       "gmi_ad9_ph1",
-       "gmi_ad10_ph2",
-       "kb_row7_pr7",
-       "kb_row8_ps0",
-       "dvfs_pwm_px0",
-       "dvfs_clk_px2",
-};
-
-static const char * const clk12_groups[] = {
-       "sdmmc1_wp_n_pv3",
-       "sdmmc1_clk_pz0",
-};
-
-static const char * const cpu_groups[] = {
-       "cpu_pwr_req",
-};
-
-static const char * const dap_groups[] = {
-       "clk1_req_pee2",
-       "clk2_req_pcc5",
-};
-
-static const char * const dap1_groups[] = {
-       "clk1_req_pee2",
-};
-
-static const char * const dap2_groups[] = {
-       "clk1_out_pw4",
-       "gpio_x4_aud_px4",
-};
-
-static const char * const dev3_groups[] = {
-       "clk3_req_pee1",
-};
-
-static const char * const displaya_groups[] = {
-       "dap3_fs_pp0",
-       "dap3_din_pp1",
-       "dap3_dout_pp2",
-       "dap3_sclk_pp3",
-       "uart3_rts_n_pc0",
-       "pu3",
-       "pu4",
-       "pu5",
-       "pbb3",
-       "pbb4",
-       "pbb5",
-       "pbb6",
-       "kb_row3_pr3",
-       "kb_row4_pr4",
-       "kb_row5_pr5",
-       "kb_row6_pr6",
-       "kb_col3_pq3",
-       "sdmmc3_dat2_pb5",
-};
-
-static const char * const displaya_alt_groups[] = {
-       "kb_row6_pr6",
-};
-
-static const char * const displayb_groups[] = {
-       "dap3_fs_pp0",
-       "dap3_din_pp1",
-       "dap3_dout_pp2",
-       "dap3_sclk_pp3",
-       "pu3",
-       "pu4",
-       "pu5",
-       "pu6",
-       "pbb3",
-       "pbb4",
-       "pbb5",
-       "pbb6",
-       "kb_row3_pr3",
-       "kb_row4_pr4",
-       "kb_row5_pr5",
-       "kb_row6_pr6",
-       "sdmmc3_dat3_pb4",
-};
-
-static const char * const dtv_groups[] = {
-       "uart3_cts_n_pa1",
-       "uart3_rts_n_pc0",
-       "dap4_fs_pp4",
-       "dap4_dout_pp6",
-       "gmi_wait_pi7",
-       "gmi_ad8_ph0",
-       "gmi_ad14_ph6",
-       "gmi_ad15_ph7",
-};
-
-static const char * const emc_dll_groups[] = {
-       "kb_col0_pq0",
-       "kb_col1_pq1",
-};
-
-static const char * const extperiph1_groups[] = {
-       "clk1_out_pw4",
-};
-
-static const char * const extperiph2_groups[] = {
-       "clk2_out_pw5",
-};
-
-static const char * const extperiph3_groups[] = {
-       "clk3_out_pee0",
-};
-
-static const char * const gmi_groups[] = {
-       "gmi_wp_n_pc7",
-
-       "gmi_ad0_pg0",
-       "gmi_ad1_pg1",
-       "gmi_ad2_pg2",
-       "gmi_ad3_pg3",
-       "gmi_ad4_pg4",
-       "gmi_ad5_pg5",
-       "gmi_ad6_pg6",
-       "gmi_ad7_pg7",
-       "gmi_ad8_ph0",
-       "gmi_ad9_ph1",
-       "gmi_ad10_ph2",
-       "gmi_ad11_ph3",
-       "gmi_ad12_ph4",
-       "gmi_ad13_ph5",
-       "gmi_ad14_ph6",
-       "gmi_ad15_ph7",
-       "gmi_wr_n_pi0",
-       "gmi_oe_n_pi1",
-       "gmi_cs6_n_pi3",
-       "gmi_rst_n_pi4",
-       "gmi_iordy_pi5",
-       "gmi_cs7_n_pi6",
-       "gmi_wait_pi7",
-       "gmi_cs0_n_pj0",
-       "gmi_cs1_n_pj2",
-       "gmi_dqs_p_pj3",
-       "gmi_adv_n_pk0",
-       "gmi_clk_pk1",
-       "gmi_cs4_n_pk2",
-       "gmi_cs2_n_pk3",
-       "gmi_cs3_n_pk4",
-       "gmi_a16_pj7",
-       "gmi_a17_pb0",
-       "gmi_a18_pb1",
-       "gmi_a19_pk7",
-       "gen2_i2c_scl_pt5",
-       "gen2_i2c_sda_pt6",
-       "sdmmc4_dat0_paa0",
-       "sdmmc4_dat1_paa1",
-       "sdmmc4_dat2_paa2",
-       "sdmmc4_dat3_paa3",
-       "sdmmc4_dat4_paa4",
-       "sdmmc4_dat5_paa5",
-       "sdmmc4_dat6_paa6",
-       "sdmmc4_dat7_paa7",
-       "sdmmc4_clk_pcc4",
-       "sdmmc4_cmd_pt7",
-       "dap1_fs_pn0",
-       "dap1_din_pn1",
-       "dap1_dout_pn2",
-       "dap1_sclk_pn3",
-};
-
-static const char * const gmi_alt_groups[] = {
-       "gmi_wp_n_pc7",
-       "gmi_cs3_n_pk4",
-       "gmi_a16_pj7",
-};
-
-static const char * const hda_groups[] = {
-       "dap1_fs_pn0",
-       "dap1_din_pn1",
-       "dap1_dout_pn2",
-       "dap1_sclk_pn3",
-       "dap2_fs_pa2",
-       "dap2_sclk_pa3",
-       "dap2_din_pa4",
-       "dap2_dout_pa5",
-};
-
-static const char * const hsi_groups[] = {
-       "ulpi_data0_po1",
-       "ulpi_data1_po2",
-       "ulpi_data2_po3",
-       "ulpi_data3_po4",
-       "ulpi_data4_po5",
-       "ulpi_data5_po6",
-       "ulpi_data6_po7",
-       "ulpi_data7_po0",
-};
-
-static const char * const i2c1_groups[] = {
-       "gen1_i2c_scl_pc4",
-       "gen1_i2c_sda_pc5",
-       "gpio_w2_aud_pw2",
-       "gpio_w3_aud_pw3",
-};
-
-static const char * const i2c2_groups[] = {
-       "gen2_i2c_scl_pt5",
-       "gen2_i2c_sda_pt6",
-};
-
-static const char * const i2c3_groups[] = {
-       "cam_i2c_scl_pbb1",
-       "cam_i2c_sda_pbb2",
-};
-
-static const char * const i2c4_groups[] = {
-       "ddc_scl_pv4",
-       "ddc_sda_pv5",
-};
-
-static const char * const i2cpwr_groups[] = {
-       "pwr_i2c_scl_pz6",
-       "pwr_i2c_sda_pz7",
-};
-
-static const char * const i2s0_groups[] = {
-       "dap1_fs_pn0",
-       "dap1_din_pn1",
-       "dap1_dout_pn2",
-       "dap1_sclk_pn3",
-};
-
-static const char * const i2s1_groups[] = {
-       "dap2_fs_pa2",
-       "dap2_sclk_pa3",
-       "dap2_din_pa4",
-       "dap2_dout_pa5",
-};
-
-static const char * const i2s2_groups[] = {
-       "dap3_fs_pp0",
-       "dap3_din_pp1",
-       "dap3_dout_pp2",
-       "dap3_sclk_pp3",
-};
-
-static const char * const i2s3_groups[] = {
-       "dap4_fs_pp4",
-       "dap4_din_pp5",
-       "dap4_dout_pp6",
-       "dap4_sclk_pp7",
-};
-
-static const char * const i2s4_groups[] = {
-       "pcc1",
-       "pbb0",
-       "pbb7",
-       "pcc2",
-};
-
-static const char * const irda_groups[] = {
-       "uart2_rxd_pc3",
-       "uart2_txd_pc2",
-};
-
-static const char * const kbc_groups[] = {
-       "kb_row0_pr0",
-       "kb_row1_pr1",
-       "kb_row2_pr2",
-       "kb_row3_pr3",
-       "kb_row4_pr4",
-       "kb_row5_pr5",
-       "kb_row6_pr6",
-       "kb_row7_pr7",
-       "kb_row8_ps0",
-       "kb_row9_ps1",
-       "kb_row10_ps2",
-       "kb_col0_pq0",
-       "kb_col1_pq1",
-       "kb_col2_pq2",
-       "kb_col3_pq3",
-       "kb_col4_pq4",
-       "kb_col5_pq5",
-       "kb_col6_pq6",
-       "kb_col7_pq7",
-};
-
-static const char * const nand_groups[] = {
-       "gmi_wp_n_pc7",
-       "gmi_wait_pi7",
-       "gmi_adv_n_pk0",
-       "gmi_clk_pk1",
-       "gmi_cs0_n_pj0",
-       "gmi_cs1_n_pj2",
-       "gmi_cs2_n_pk3",
-       "gmi_cs3_n_pk4",
-       "gmi_cs4_n_pk2",
-       "gmi_cs6_n_pi3",
-       "gmi_cs7_n_pi6",
-       "gmi_ad0_pg0",
-       "gmi_ad1_pg1",
-       "gmi_ad2_pg2",
-       "gmi_ad3_pg3",
-       "gmi_ad4_pg4",
-       "gmi_ad5_pg5",
-       "gmi_ad6_pg6",
-       "gmi_ad7_pg7",
-       "gmi_ad8_ph0",
-       "gmi_ad9_ph1",
-       "gmi_ad10_ph2",
-       "gmi_ad11_ph3",
-       "gmi_ad12_ph4",
-       "gmi_ad13_ph5",
-       "gmi_ad14_ph6",
-       "gmi_ad15_ph7",
-       "gmi_wr_n_pi0",
-       "gmi_oe_n_pi1",
-       "gmi_dqs_p_pj3",
-       "gmi_rst_n_pi4",
-};
-
-static const char * const nand_alt_groups[] = {
-       "gmi_cs6_n_pi3",
-       "gmi_cs7_n_pi6",
-       "gmi_rst_n_pi4",
-};
-
-static const char * const owr_groups[] = {
-       "pu0",
-       "kb_col4_pq4",
-       "owr",
-       "sdmmc3_cd_n_pv2",
-};
-
-static const char * const pmi_groups[] = {
-       "pwr_int_n",
-};
-
-static const char * const pwm0_groups[] = {
-       "sdmmc1_dat2_py5",
-       "uart3_rts_n_pc0",
-       "pu3",
-       "gmi_ad8_ph0",
-       "sdmmc3_dat3_pb4",
-};
-
-static const char * const pwm1_groups[] = {
-       "sdmmc1_dat1_py6",
-       "pu4",
-       "gmi_ad9_ph1",
-       "sdmmc3_dat2_pb5",
-};
-
-static const char * const pwm2_groups[] = {
-       "pu5",
-       "gmi_ad10_ph2",
-       "kb_col3_pq3",
-       "sdmmc3_dat1_pb6",
-};
-
-static const char * const pwm3_groups[] = {
-       "pu6",
-       "gmi_ad11_ph3",
-       "sdmmc3_cmd_pa7",
-};
-
-static const char * const pwron_groups[] = {
-       "core_pwr_req",
-};
-
-static const char * const reset_out_n_groups[] = {
-       "reset_out_n",
-};
-
-static const char * const rsvd1_groups[] = {
-       "pv1",
-       "hdmi_int_pn7",
-       "pu1",
-       "pu2",
-       "gmi_wp_n_pc7",
-       "gmi_adv_n_pk0",
-       "gmi_cs0_n_pj0",
-       "gmi_cs1_n_pj2",
-       "gmi_ad0_pg0",
-       "gmi_ad1_pg1",
-       "gmi_ad2_pg2",
-       "gmi_ad3_pg3",
-       "gmi_ad4_pg4",
-       "gmi_ad5_pg5",
-       "gmi_ad6_pg6",
-       "gmi_ad7_pg7",
-       "gmi_wr_n_pi0",
-       "gmi_oe_n_pi1",
-       "gpio_x4_aud_px4",
-       "gpio_x5_aud_px5",
-       "gpio_x7_aud_px7",
-
-       "reset_out_n",
-};
-
-static const char * const rsvd2_groups[] = {
-       "pv0",
-       "pv1",
-       "sdmmc1_dat0_py7",
-       "clk2_out_pw5",
-       "clk2_req_pcc5",
-       "hdmi_int_pn7",
-       "ddc_scl_pv4",
-       "ddc_sda_pv5",
-       "uart3_txd_pw6",
-       "uart3_rxd_pw7",
-       "gen1_i2c_scl_pc4",
-       "gen1_i2c_sda_pc5",
-       "dap4_fs_pp4",
-       "dap4_din_pp5",
-       "dap4_dout_pp6",
-       "dap4_sclk_pp7",
-       "clk3_out_pee0",
-       "clk3_req_pee1",
-       "gmi_iordy_pi5",
-       "gmi_a17_pb0",
-       "gmi_a18_pb1",
-       "gen2_i2c_scl_pt5",
-       "gen2_i2c_sda_pt6",
-       "sdmmc4_clk_pcc4",
-       "sdmmc4_cmd_pt7",
-       "sdmmc4_dat7_paa7",
-       "pcc1",
-       "pbb7",
-       "pcc2",
-       "pwr_i2c_scl_pz6",
-       "pwr_i2c_sda_pz7",
-       "kb_row0_pr0",
-       "kb_row1_pr1",
-       "kb_row2_pr2",
-       "kb_row7_pr7",
-       "kb_row8_ps0",
-       "kb_row9_ps1",
-       "kb_row10_ps2",
-       "kb_col1_pq1",
-       "kb_col2_pq2",
-       "kb_col5_pq5",
-       "kb_col6_pq6",
-       "kb_col7_pq7",
-       "sys_clk_req_pz5",
-       "core_pwr_req",
-       "cpu_pwr_req",
-       "pwr_int_n",
-       "owr",
-       "spdif_out_pk5",
-       "gpio_x1_aud_px1",
-       "sdmmc3_clk_pa6",
-       "sdmmc3_dat0_pb7",
-       "gpio_w2_aud_pw2",
-       "usb_vbus_en0_pn4",
-       "usb_vbus_en1_pn5",
-       "sdmmc3_clk_lb_out_pee4",
-       "sdmmc3_clk_lb_in_pee5",
-       "reset_out_n",
-};
-
-static const char * const rsvd3_groups[] = {
-       "pv0",
-       "pv1",
-       "sdmmc1_clk_pz0",
-       "clk2_out_pw5",
-       "clk2_req_pcc5",
-       "hdmi_int_pn7",
-       "ddc_scl_pv4",
-       "ddc_sda_pv5",
-       "uart2_rts_n_pj6",
-       "uart2_cts_n_pj5",
-       "uart3_txd_pw6",
-       "uart3_rxd_pw7",
-       "pu0",
-       "pu1",
-       "pu2",
-       "gen1_i2c_scl_pc4",
-       "gen1_i2c_sda_pc5",
-       "dap4_din_pp5",
-       "dap4_sclk_pp7",
-       "clk3_out_pee0",
-       "clk3_req_pee1",
-       "pcc1",
-       "cam_i2c_scl_pbb1",
-       "cam_i2c_sda_pbb2",
-       "pbb7",
-       "pcc2",
-       "pwr_i2c_scl_pz6",
-       "pwr_i2c_sda_pz7",
-       "kb_row0_pr0",
-       "kb_row1_pr1",
-       "kb_row2_pr2",
-       "kb_row3_pr3",
-       "kb_row9_ps1",
-       "kb_row10_ps2",
-       "clk_32k_out_pa0",
-       "sys_clk_req_pz5",
-       "core_pwr_req",
-       "cpu_pwr_req",
-       "pwr_int_n",
-       "owr",
-       "clk1_req_pee2",
-       "clk1_out_pw4",
-       "spdif_out_pk5",
-       "spdif_in_pk6",
-       "dap2_fs_pa2",
-       "dap2_sclk_pa3",
-       "dap2_din_pa4",
-       "dap2_dout_pa5",
-       "dvfs_pwm_px0",
-       "gpio_x1_aud_px1",
-       "gpio_x3_aud_px3",
-       "dvfs_clk_px2",
-       "sdmmc3_clk_pa6",
-       "sdmmc3_dat0_pb7",
-       "hdmi_cec_pee3",
-       "sdmmc3_cd_n_pv2",
-       "usb_vbus_en0_pn4",
-       "usb_vbus_en1_pn5",
-       "sdmmc3_clk_lb_out_pee4",
-       "sdmmc3_clk_lb_in_pee5",
-       "reset_out_n",
-};
-
-static const char * const rsvd4_groups[] = {
-       "pv0",
-       "pv1",
-       "sdmmc1_clk_pz0",
-       "clk2_out_pw5",
-       "clk2_req_pcc5",
-       "hdmi_int_pn7",
-       "ddc_scl_pv4",
-       "ddc_sda_pv5",
-       "pu0",
-       "pu1",
-       "pu2",
-       "gen1_i2c_scl_pc4",
-       "gen1_i2c_sda_pc5",
-       "dap4_fs_pp4",
-       "dap4_din_pp5",
-       "dap4_dout_pp6",
-       "dap4_sclk_pp7",
-       "clk3_out_pee0",
-       "clk3_req_pee1",
-       "gmi_ad0_pg0",
-       "gmi_ad1_pg1",
-       "gmi_ad2_pg2",
-       "gmi_ad3_pg3",
-       "gmi_ad4_pg4",
-       "gmi_ad12_ph4",
-       "gmi_ad13_ph5",
-       "gmi_rst_n_pi4",
-       "gen2_i2c_scl_pt5",
-       "gen2_i2c_sda_pt6",
-       "sdmmc4_clk_pcc4",
-       "sdmmc4_cmd_pt7",
-       "sdmmc4_dat0_paa0",
-       "sdmmc4_dat1_paa1",
-       "sdmmc4_dat2_paa2",
-       "sdmmc4_dat3_paa3",
-       "sdmmc4_dat4_paa4",
-       "sdmmc4_dat5_paa5",
-       "sdmmc4_dat6_paa6",
-       "sdmmc4_dat7_paa7",
-       "cam_mclk_pcc0",
-       "pcc1",
-       "cam_i2c_scl_pbb1",
-       "cam_i2c_sda_pbb2",
-       "pbb3",
-       "pbb4",
-       "pbb5",
-       "pbb6",
-       "pbb7",
-       "pcc2",
-       "pwr_i2c_scl_pz6",
-       "pwr_i2c_sda_pz7",
-       "kb_row0_pr0",
-       "kb_row1_pr1",
-       "kb_row2_pr2",
-       "kb_col2_pq2",
-       "kb_col5_pq5",
-       "kb_col6_pq6",
-       "kb_col7_pq7",
-       "clk_32k_out_pa0",
-       "sys_clk_req_pz5",
-       "core_pwr_req",
-       "cpu_pwr_req",
-       "pwr_int_n",
-       "owr",
-       "dap1_fs_pn0",
-       "dap1_din_pn1",
-       "dap1_dout_pn2",
-       "dap1_sclk_pn3",
-       "clk1_req_pee2",
-       "clk1_out_pw4",
-       "spdif_in_pk6",
-       "spdif_out_pk5",
-       "dap2_fs_pa2",
-       "dap2_sclk_pa3",
-       "dap2_din_pa4",
-       "dap2_dout_pa5",
-       "dvfs_pwm_px0",
-       "gpio_x1_aud_px1",
-       "gpio_x3_aud_px3",
-       "dvfs_clk_px2",
-       "gpio_x5_aud_px5",
-       "gpio_x6_aud_px6",
-       "gpio_x7_aud_px7",
-       "sdmmc3_cd_n_pv2",
-       "usb_vbus_en0_pn4",
-       "usb_vbus_en1_pn5",
-       "sdmmc3_clk_lb_in_pee5",
-       "sdmmc3_clk_lb_out_pee4",
-};
-
-static const char * const sdmmc1_groups[] = {
-
-       "sdmmc1_clk_pz0",
-       "sdmmc1_cmd_pz1",
-       "sdmmc1_dat3_py4",
-       "sdmmc1_dat2_py5",
-       "sdmmc1_dat1_py6",
-       "sdmmc1_dat0_py7",
-       "uart3_cts_n_pa1",
-       "kb_col5_pq5",
-       "sdmmc1_wp_n_pv3",
-};
-
-static const char * const sdmmc2_groups[] = {
-       "gmi_iordy_pi5",
-       "gmi_clk_pk1",
-       "gmi_cs2_n_pk3",
-       "gmi_cs3_n_pk4",
-       "gmi_cs7_n_pi6",
-       "gmi_ad12_ph4",
-       "gmi_ad13_ph5",
-       "gmi_ad14_ph6",
-       "gmi_ad15_ph7",
-       "gmi_dqs_p_pj3",
-};
-
-static const char * const sdmmc3_groups[] = {
-       "kb_col4_pq4",
-       "sdmmc3_clk_pa6",
-       "sdmmc3_cmd_pa7",
-       "sdmmc3_dat0_pb7",
-       "sdmmc3_dat1_pb6",
-       "sdmmc3_dat2_pb5",
-       "sdmmc3_dat3_pb4",
-       "hdmi_cec_pee3",
-       "sdmmc3_cd_n_pv2",
-       "sdmmc3_clk_lb_in_pee5",
-       "sdmmc3_clk_lb_out_pee4",
-};
-
-static const char * const sdmmc4_groups[] = {
-       "sdmmc4_clk_pcc4",
-       "sdmmc4_cmd_pt7",
-       "sdmmc4_dat0_paa0",
-       "sdmmc4_dat1_paa1",
-       "sdmmc4_dat2_paa2",
-       "sdmmc4_dat3_paa3",
-       "sdmmc4_dat4_paa4",
-       "sdmmc4_dat5_paa5",
-       "sdmmc4_dat6_paa6",
-       "sdmmc4_dat7_paa7",
-};
-
-static const char * const soc_groups[] = {
-       "gmi_cs1_n_pj2",
-       "gmi_oe_n_pi1",
-       "clk_32k_out_pa0",
-       "hdmi_cec_pee3",
-};
-
-static const char * const spdif_groups[] = {
-       "sdmmc1_cmd_pz1",
-       "sdmmc1_dat3_py4",
-       "uart2_rxd_pc3",
-       "uart2_txd_pc2",
-       "spdif_in_pk6",
-       "spdif_out_pk5",
-};
-
-static const char * const spi1_groups[] = {
-       "ulpi_clk_py0",
-       "ulpi_dir_py1",
-       "ulpi_nxt_py2",
-       "ulpi_stp_py3",
-       "gpio_x3_aud_px3",
-       "gpio_x4_aud_px4",
-       "gpio_x5_aud_px5",
-       "gpio_x6_aud_px6",
-       "gpio_x7_aud_px7",
-       "gpio_w3_aud_pw3",
-};
-
-static const char * const spi2_groups[] = {
-       "ulpi_data4_po5",
-       "ulpi_data5_po6",
-       "ulpi_data6_po7",
-       "ulpi_data7_po0",
-       "kb_row4_pr4",
-       "kb_row5_pr5",
-       "kb_col0_pq0",
-       "kb_col1_pq1",
-       "kb_col2_pq2",
-       "kb_col6_pq6",
-       "kb_col7_pq7",
-       "gpio_x4_aud_px4",
-       "gpio_x5_aud_px5",
-       "gpio_x6_aud_px6",
-       "gpio_x7_aud_px7",
-       "gpio_w2_aud_pw2",
-       "gpio_w3_aud_pw3",
-};
-
-static const char * const spi3_groups[] = {
-       "ulpi_data0_po1",
-       "ulpi_data1_po2",
-       "ulpi_data2_po3",
-       "ulpi_data3_po4",
-       "sdmmc4_dat0_paa0",
-       "sdmmc4_dat1_paa1",
-       "sdmmc4_dat2_paa2",
-       "sdmmc4_dat3_paa3",
-       "sdmmc4_dat4_paa4",
-       "sdmmc4_dat5_paa5",
-       "sdmmc4_dat6_paa6",
-       "sdmmc3_clk_pa6",
-       "sdmmc3_cmd_pa7",
-       "sdmmc3_dat0_pb7",
-       "sdmmc3_dat1_pb6",
-       "sdmmc3_dat2_pb5",
-       "sdmmc3_dat3_pb4",
-};
-
-static const char * const spi4_groups[] = {
-       "sdmmc1_cmd_pz1",
-       "sdmmc1_dat3_py4",
-       "sdmmc1_dat2_py5",
-       "sdmmc1_dat1_py6",
-       "sdmmc1_dat0_py7",
-       "uart2_rxd_pc3",
-       "uart2_txd_pc2",
-       "uart2_rts_n_pj6",
-       "uart2_cts_n_pj5",
-       "uart3_txd_pw6",
-       "uart3_rxd_pw7",
-       "uart3_cts_n_pa1",
-       "gmi_wait_pi7",
-       "gmi_cs6_n_pi3",
-       "gmi_ad5_pg5",
-       "gmi_ad6_pg6",
-       "gmi_ad7_pg7",
-       "gmi_a19_pk7",
-       "gmi_wr_n_pi0",
-       "sdmmc1_wp_n_pv3",
-};
-
-static const char * const spi5_groups[] = {
-       "ulpi_clk_py0",
-       "ulpi_dir_py1",
-       "ulpi_nxt_py2",
-       "ulpi_stp_py3",
-       "dap3_fs_pp0",
-       "dap3_din_pp1",
-       "dap3_dout_pp2",
-       "dap3_sclk_pp3",
-};
-
-static const char * const spi6_groups[] = {
-       "dvfs_pwm_px0",
-       "gpio_x1_aud_px1",
-       "gpio_x3_aud_px3",
-       "dvfs_clk_px2",
-       "gpio_x6_aud_px6",
-       "gpio_w2_aud_pw2",
-       "gpio_w3_aud_pw3",
-};
-
-static const char * const sysclk_groups[] = {
-       "sys_clk_req_pz5",
-};
-
-static const char * const trace_groups[] = {
-       "gmi_iordy_pi5",
-       "gmi_adv_n_pk0",
-       "gmi_clk_pk1",
-       "gmi_cs2_n_pk3",
-       "gmi_cs4_n_pk2",
-       "gmi_a16_pj7",
-       "gmi_a17_pb0",
-       "gmi_a18_pb1",
-       "gmi_a19_pk7",
-       "gmi_dqs_p_pj3",
-};
-
-static const char * const uarta_groups[] = {
-       "ulpi_data0_po1",
-       "ulpi_data1_po2",
-       "ulpi_data2_po3",
-       "ulpi_data3_po4",
-       "ulpi_data4_po5",
-       "ulpi_data5_po6",
-       "ulpi_data6_po7",
-       "ulpi_data7_po0",
-       "sdmmc1_cmd_pz1",
-       "sdmmc1_dat3_py4",
-       "sdmmc1_dat2_py5",
-       "sdmmc1_dat1_py6",
-       "sdmmc1_dat0_py7",
-       "uart2_rxd_pc3",
-       "uart2_txd_pc2",
-       "uart2_rts_n_pj6",
-       "uart2_cts_n_pj5",
-       "pu0",
-       "pu1",
-       "pu2",
-       "pu3",
-       "pu4",
-       "pu5",
-       "pu6",
-       "kb_row7_pr7",
-       "kb_row8_ps0",
-       "kb_row9_ps1",
-       "kb_row10_ps2",
-       "kb_col3_pq3",
-       "kb_col4_pq4",
-       "sdmmc3_cmd_pa7",
-       "sdmmc3_dat1_pb6",
-       "sdmmc1_wp_n_pv3",
-};
-
-static const char * const uartb_groups[] = {
-       "uart2_rts_n_pj6",
-       "uart2_cts_n_pj5",
-};
-
-static const char * const uartc_groups[] = {
-       "uart3_txd_pw6",
-       "uart3_rxd_pw7",
-       "uart3_cts_n_pa1",
-       "uart3_rts_n_pc0",
-};
-
-static const char * const uartd_groups[] = {
-       "ulpi_clk_py0",
-       "ulpi_dir_py1",
-       "ulpi_nxt_py2",
-       "ulpi_stp_py3",
-       "gmi_a16_pj7",
-       "gmi_a17_pb0",
-       "gmi_a18_pb1",
-       "gmi_a19_pk7",
-};
-
-static const char * const ulpi_groups[] = {
-       "ulpi_data0_po1",
-       "ulpi_data1_po2",
-       "ulpi_data2_po3",
-       "ulpi_data3_po4",
-       "ulpi_data4_po5",
-       "ulpi_data5_po6",
-       "ulpi_data6_po7",
-       "ulpi_data7_po0",
-       "ulpi_clk_py0",
-       "ulpi_dir_py1",
-       "ulpi_nxt_py2",
-       "ulpi_stp_py3",
-};
-
-static const char * const usb_groups[] = {
-       "pv0",
-       "pu6",
-       "gmi_cs0_n_pj0",
-       "gmi_cs4_n_pk2",
-       "gmi_ad11_ph3",
-       "kb_col0_pq0",
-       "spdif_in_pk6",
-       "usb_vbus_en0_pn4",
-       "usb_vbus_en1_pn5",
-};
-
-static const char * const vgp1_groups[] = {
-       "cam_i2c_scl_pbb1",
-};
-
-static const char * const vgp2_groups[] = {
-       "cam_i2c_sda_pbb2",
-};
-
-static const char * const vgp3_groups[] = {
-       "pbb3",
-};
-
-static const char * const vgp4_groups[] = {
-       "pbb4",
-};
-
-static const char * const vgp5_groups[] = {
-       "pbb5",
-};
-
-static const char * const vgp6_groups[] = {
-       "pbb6",
-};
-
-static const char * const vi_groups[] = {
-       "cam_mclk_pcc0",
-       "pbb0",
-};
-
-static const char * const vi_alt1_groups[] = {
-       "cam_mclk_pcc0",
-       "pbb0",
-};
-
-static const char * const vi_alt3_groups[] = {
-       "cam_mclk_pcc0",
-       "pbb0",
-};
-
 #define FUNCTION(fname)                                        \
        {                                               \
                .name = #fname,                         \
-               .groups = fname##_groups,               \
-               .ngroups = ARRAY_SIZE(fname##_groups),  \
        }
 
-static const struct tegra_function  tegra114_functions[] = {
+static struct tegra_function  tegra114_functions[] = {
        FUNCTION(blink),
        FUNCTION(cec),
        FUNCTION(cldvfs),
index 7c6b7b6..3b03d77 100644 (file)
@@ -1581,1112 +1581,12 @@ enum tegra_mux {
        TEGRA_MUX_TMDS,
 };
 
-static const char * const blink_groups[] = {
-       "clk_32k_out_pa0",
-};
-
-static const char * const cec_groups[] = {
-       "hdmi_cec_pee3",
-};
-
-static const char * const cldvfs_groups[] = {
-       "ph2",
-       "ph3",
-       "kb_row7_pr7",
-       "kb_row8_ps0",
-       "dvfs_pwm_px0",
-       "dvfs_clk_px2",
-};
-
-static const char * const clk12_groups[] = {
-       "sdmmc1_wp_n_pv3",
-       "sdmmc1_clk_pz0",
-};
-
-static const char * const cpu_groups[] = {
-       "cpu_pwr_req",
-};
-
-static const char * const dap_groups[] = {
-       "dap_mclk1_req_pee2",
-       "clk2_req_pcc5",
-};
-
-static const char * const dap1_groups[] = {
-       "dap_mclk1_req_pee2",
-};
-
-static const char * const dap2_groups[] = {
-       "dap_mclk1_pw4",
-       "gpio_x4_aud_px4",
-};
-
-static const char * const dev3_groups[] = {
-       "clk3_req_pee1",
-};
-
-static const char * const displaya_groups[] = {
-       "dap3_fs_pp0",
-       "dap3_din_pp1",
-       "dap3_dout_pp2",
-       "ph1",
-       "pi4",
-       "pbb3",
-       "pbb4",
-       "pbb5",
-       "kb_row3_pr3",
-       "kb_row4_pr4",
-       "kb_row5_pr5",
-       "kb_row6_pr6",
-       "kb_col3_pq3",
-       "sdmmc3_dat2_pb5",
-};
-
-static const char * const displaya_alt_groups[] = {
-       "kb_row6_pr6",
-};
-
-static const char * const displayb_groups[] = {
-       "dap3_fs_pp0",
-       "dap3_din_pp1",
-       "dap3_sclk_pp3",
-
-       "pu3",
-       "pu4",
-       "pu5",
-
-       "pbb3",
-       "pbb4",
-       "pbb6",
-
-       "kb_row3_pr3",
-       "kb_row4_pr4",
-       "kb_row5_pr5",
-       "kb_row6_pr6",
-
-       "sdmmc3_dat3_pb4",
-};
-
-static const char * const dtv_groups[] = {
-       "uart3_cts_n_pa1",
-       "uart3_rts_n_pc0",
-       "dap4_fs_pp4",
-       "dap4_dout_pp6",
-       "pi7",
-       "ph0",
-       "ph6",
-       "ph7",
-};
-
-static const char * const extperiph1_groups[] = {
-       "dap_mclk1_pw4",
-};
-
-static const char * const extperiph2_groups[] = {
-       "clk2_out_pw5",
-};
-
-static const char * const extperiph3_groups[] = {
-       "clk3_out_pee0",
-};
-
-static const char * const gmi_groups[] = {
-       "uart2_cts_n_pj5",
-       "uart2_rts_n_pj6",
-       "uart3_txd_pw6",
-       "uart3_rxd_pw7",
-       "uart3_cts_n_pa1",
-       "uart3_rts_n_pc0",
-
-       "pu0",
-       "pu1",
-       "pu2",
-       "pu3",
-       "pu4",
-       "pu5",
-       "pu6",
-
-       "dap4_fs_pp4",
-       "dap4_din_pp5",
-       "dap4_dout_pp6",
-       "dap4_sclk_pp7",
-
-       "pc7",
-
-       "pg0",
-       "pg1",
-       "pg2",
-       "pg3",
-       "pg4",
-       "pg5",
-       "pg6",
-       "pg7",
-
-       "ph0",
-       "ph1",
-       "ph2",
-       "ph3",
-       "ph4",
-       "ph5",
-       "ph6",
-       "ph7",
-
-       "pi0",
-       "pi1",
-       "pi2",
-       "pi3",
-       "pi4",
-       "pi5",
-       "pi6",
-       "pi7",
-
-       "pj0",
-       "pj2",
-
-       "pk0",
-       "pk1",
-       "pk2",
-       "pk3",
-       "pk4",
-
-       "pj7",
-       "pb0",
-       "pb1",
-       "pk7",
-
-       "gen2_i2c_scl_pt5",
-       "gen2_i2c_sda_pt6",
-
-       "sdmmc4_dat0_paa0",
-       "sdmmc4_dat1_paa1",
-       "sdmmc4_dat2_paa2",
-       "sdmmc4_dat3_paa3",
-       "sdmmc4_dat4_paa4",
-       "sdmmc4_dat6_paa6",
-       "sdmmc4_dat7_paa7",
-       "sdmmc4_clk_pcc4",
-       "sdmmc4_cmd_pt7",
-       "gmi_clk_lb",
-
-       "dap1_fs_pn0",
-       "dap1_din_pn1",
-       "dap1_dout_pn2",
-       "dap1_sclk_pn3",
-
-       "dap2_fs_pa2",
-       "dap2_din_pa4",
-       "dap2_dout_pa5",
-       "dap2_sclk_pa3",
-
-       "dvfs_pwm_px0",
-       "dvfs_clk_px2",
-       "gpio_x1_aud_px1",
-       "gpio_x3_aud_px3",
-       "gpio_x4_aud_px4",
-       "gpio_x5_aud_px5",
-       "gpio_x6_aud_px6",
-};
-
-static const char * const gmi_alt_groups[] = {
-       "pc7",
-       "pk4",
-       "pj7",
-};
-
-static const char * const hda_groups[] = {
-       "dap1_fs_pn0",
-       "dap1_din_pn1",
-       "dap1_dout_pn2",
-       "dap1_sclk_pn3",
-       "dap2_fs_pa2",
-       "dap2_sclk_pa3",
-       "dap2_din_pa4",
-       "dap2_dout_pa5",
-};
-
-static const char * const hsi_groups[] = {
-       "ulpi_data0_po1",
-       "ulpi_data1_po2",
-       "ulpi_data2_po3",
-       "ulpi_data3_po4",
-       "ulpi_data4_po5",
-       "ulpi_data5_po6",
-       "ulpi_data6_po7",
-       "ulpi_data7_po0",
-};
-
-static const char * const i2c1_groups[] = {
-       "gen1_i2c_scl_pc4",
-       "gen1_i2c_sda_pc5",
-       "gpio_w2_aud_pw2",
-       "gpio_w3_aud_pw3",
-};
-
-static const char * const i2c2_groups[] = {
-       "gen2_i2c_scl_pt5",
-       "gen2_i2c_sda_pt6",
-};
-
-static const char * const i2c3_groups[] = {
-       "spdif_in_pk6",
-       "spdif_out_pk5",
-       "cam_i2c_scl_pbb1",
-       "cam_i2c_sda_pbb2",
-};
-
-static const char * const i2c4_groups[] = {
-       "ddc_scl_pv4",
-       "ddc_sda_pv5",
-};
-
-static const char * const i2cpwr_groups[] = {
-       "pwr_i2c_scl_pz6",
-       "pwr_i2c_sda_pz7",
-};
-
-static const char * const i2s0_groups[] = {
-       "dap1_fs_pn0",
-       "dap1_din_pn1",
-       "dap1_dout_pn2",
-       "dap1_sclk_pn3",
-};
-
-static const char * const i2s1_groups[] = {
-       "dap2_fs_pa2",
-       "dap2_sclk_pa3",
-       "dap2_din_pa4",
-       "dap2_dout_pa5",
-};
-
-static const char * const i2s2_groups[] = {
-       "dap3_fs_pp0",
-       "dap3_din_pp1",
-       "dap3_dout_pp2",
-       "dap3_sclk_pp3",
-};
-
-static const char * const i2s3_groups[] = {
-       "dap4_fs_pp4",
-       "dap4_din_pp5",
-       "dap4_dout_pp6",
-       "dap4_sclk_pp7",
-};
-
-static const char * const i2s4_groups[] = {
-       "pcc1",
-       "pbb6",
-       "pbb7",
-       "pcc2",
-};
-
-static const char * const irda_groups[] = {
-       "uart2_rxd_pc3",
-       "uart2_txd_pc2",
-       "kb_row11_ps3",
-       "kb_row12_ps4",
-};
-
-static const char * const kbc_groups[] = {
-       "kb_row0_pr0",
-       "kb_row1_pr1",
-       "kb_row2_pr2",
-       "kb_row3_pr3",
-       "kb_row4_pr4",
-       "kb_row5_pr5",
-       "kb_row6_pr6",
-       "kb_row7_pr7",
-       "kb_row8_ps0",
-       "kb_row9_ps1",
-       "kb_row10_ps2",
-       "kb_row11_ps3",
-       "kb_row12_ps4",
-       "kb_row13_ps5",
-       "kb_row14_ps6",
-       "kb_row15_ps7",
-       "kb_row16_pt0",
-       "kb_row17_pt1",
-
-       "kb_col0_pq0",
-       "kb_col1_pq1",
-       "kb_col2_pq2",
-       "kb_col3_pq3",
-       "kb_col4_pq4",
-       "kb_col5_pq5",
-       "kb_col6_pq6",
-       "kb_col7_pq7",
-};
-
-static const char * const owr_groups[] = {
-       "pu0",
-       "kb_col4_pq4",
-       "owr",
-       "sdmmc3_cd_n_pv2",
-};
-
-static const char * const pmi_groups[] = {
-       "pwr_int_n",
-};
-
-static const char * const pwm0_groups[] = {
-       "sdmmc1_dat2_py5",
-       "uart3_rts_n_pc0",
-       "pu3",
-       "ph0",
-       "sdmmc3_dat3_pb4",
-};
-
-static const char * const pwm1_groups[] = {
-       "sdmmc1_dat1_py6",
-       "pu4",
-       "ph1",
-       "sdmmc3_dat2_pb5",
-};
-
-static const char * const pwm2_groups[] = {
-       "pu5",
-       "ph2",
-       "kb_col3_pq3",
-       "sdmmc3_dat1_pb6",
-};
-
-static const char * const pwm3_groups[] = {
-       "pu6",
-       "ph3",
-       "sdmmc3_cmd_pa7",
-};
-
-static const char * const pwron_groups[] = {
-       "core_pwr_req",
-};
-
-static const char * const reset_out_n_groups[] = {
-       "reset_out_n",
-};
-
-static const char * const rsvd1_groups[] = {
-       "pv0",
-       "pv1",
-
-       "hdmi_int_pn7",
-       "pu1",
-       "pu2",
-       "pc7",
-       "pi7",
-       "pk0",
-       "pj0",
-       "pj2",
-       "pk2",
-       "pi3",
-       "pi6",
-
-       "pg0",
-       "pg1",
-       "pg2",
-       "pg3",
-       "pg4",
-       "pg5",
-       "pg6",
-       "pg7",
-
-       "pi0",
-       "pi1",
-
-       "gpio_x7_aud_px7",
-
-       "reset_out_n",
-};
-
-static const char * const rsvd2_groups[] = {
-       "pv0",
-       "pv1",
-
-       "sdmmc1_dat0_py7",
-       "clk2_out_pw5",
-       "clk2_req_pcc5",
-       "hdmi_int_pn7",
-       "ddc_scl_pv4",
-       "ddc_sda_pv5",
-
-       "uart3_txd_pw6",
-       "uart3_rxd_pw7",
-
-       "gen1_i2c_scl_pc4",
-       "gen1_i2c_sda_pc5",
-
-       "clk3_out_pee0",
-       "clk3_req_pee1",
-       "pc7",
-       "pi5",
-       "pj0",
-       "pj2",
-
-       "pk4",
-       "pk2",
-       "pi3",
-       "pi6",
-       "pg0",
-       "pg1",
-       "pg5",
-       "pg6",
-       "pg7",
-
-       "ph4",
-       "ph5",
-       "pj7",
-       "pb0",
-       "pb1",
-       "pk7",
-       "pi0",
-       "pi1",
-
-       "gen2_i2c_scl_pt5",
-       "gen2_i2c_sda_pt6",
-       "sdmmc4_clk_pcc4",
-       "sdmmc4_cmd_pt7",
-       "sdmmc4_dat7_paa7",
-       "pcc1",
-       "pbb6",
-       "pbb7",
-       "pcc2",
-       "jtag_rtck",
-
-       "pwr_i2c_scl_pz6",
-       "pwr_i2c_sda_pz7",
-
-       "kb_row0_pr0",
-       "kb_row1_pr1",
-       "kb_row2_pr2",
-       "kb_row7_pr7",
-       "kb_row8_ps0",
-       "kb_row9_ps1",
-       "kb_row10_ps2",
-       "kb_row11_ps3",
-       "kb_row12_ps4",
-       "kb_row13_ps5",
-       "kb_row14_ps6",
-
-       "kb_col0_pq0",
-       "kb_col1_pq1",
-       "kb_col2_pq2",
-       "kb_col5_pq5",
-       "kb_col6_pq6",
-       "kb_col7_pq7",
-
-       "core_pwr_req",
-       "cpu_pwr_req",
-       "pwr_int_n",
-       "clk_32k_in",
-       "owr",
-
-       "spdif_in_pk6",
-       "spdif_out_pk5",
-       "gpio_x1_aud_px1",
-
-       "sdmmc3_clk_pa6",
-       "sdmmc3_dat0_pb7",
-
-       "pex_l0_rst_n_pdd1",
-       "pex_l0_clkreq_n_pdd2",
-       "pex_wake_n_pdd3",
-       "pex_l1_rst_n_pdd5",
-       "pex_l1_clkreq_n_pdd6",
-       "hdmi_cec_pee3",
-
-       "gpio_w2_aud_pw2",
-       "usb_vbus_en0_pn4",
-       "usb_vbus_en1_pn5",
-       "sdmmc3_clk_lb_out_pee4",
-       "sdmmc3_clk_lb_in_pee5",
-       "gmi_clk_lb",
-       "reset_out_n",
-       "kb_row16_pt0",
-       "kb_row17_pt1",
-       "dp_hpd_pff0",
-       "usb_vbus_en2_pff1",
-       "pff2",
-};
-
-static const char * const rsvd3_groups[] = {
-       "dap3_sclk_pp3",
-       "pv0",
-       "pv1",
-       "sdmmc1_clk_pz0",
-       "clk2_out_pw5",
-       "clk2_req_pcc5",
-       "hdmi_int_pn7",
-
-       "ddc_scl_pv4",
-       "ddc_sda_pv5",
-
-       "pu6",
-
-       "gen1_i2c_scl_pc4",
-       "gen1_i2c_sda_pc5",
-
-       "dap4_din_pp5",
-       "dap4_sclk_pp7",
-
-       "clk3_out_pee0",
-       "clk3_req_pee1",
-
-       "sdmmc4_dat5_paa5",
-       "pcc1",
-       "cam_i2c_scl_pbb1",
-       "cam_i2c_sda_pbb2",
-       "pbb5",
-       "pbb7",
-       "jtag_rtck",
-       "pwr_i2c_scl_pz6",
-       "pwr_i2c_sda_pz7",
-
-       "kb_row0_pr0",
-       "kb_row1_pr1",
-       "kb_row2_pr2",
-       "kb_row4_pr4",
-       "kb_row5_pr5",
-       "kb_row9_ps1",
-       "kb_row10_ps2",
-       "kb_row11_ps3",
-       "kb_row12_ps4",
-       "kb_row15_ps7",
-
-       "clk_32k_out_pa0",
-       "core_pwr_req",
-       "cpu_pwr_req",
-       "pwr_int_n",
-       "clk_32k_in",
-       "owr",
-
-       "dap_mclk1_pw4",
-       "spdif_in_pk6",
-       "spdif_out_pk5",
-       "sdmmc3_clk_pa6",
-       "sdmmc3_dat0_pb7",
-
-       "pex_l0_rst_n_pdd1",
-       "pex_l0_clkreq_n_pdd2",
-       "pex_wake_n_pdd3",
-       "pex_l1_rst_n_pdd5",
-       "pex_l1_clkreq_n_pdd6",
-       "hdmi_cec_pee3",
-
-       "sdmmc3_cd_n_pv2",
-       "usb_vbus_en0_pn4",
-       "usb_vbus_en1_pn5",
-       "sdmmc3_clk_lb_out_pee4",
-       "sdmmc3_clk_lb_in_pee5",
-       "reset_out_n",
-       "kb_row16_pt0",
-       "kb_row17_pt1",
-       "dp_hpd_pff0",
-       "usb_vbus_en2_pff1",
-       "pff2",
-};
-
-static const char * const rsvd4_groups[] = {
-       "dap3_dout_pp2",
-       "pv0",
-       "pv1",
-       "sdmmc1_clk_pz0",
-
-       "clk2_out_pw5",
-       "clk2_req_pcc5",
-       "hdmi_int_pn7",
-       "ddc_scl_pv4",
-       "ddc_sda_pv5",
-
-       "pu0",
-       "pu1",
-       "pu2",
-
-       "gen1_i2c_scl_pc4",
-       "gen1_i2c_sda_pc5",
-
-       "dap4_fs_pp4",
-       "dap4_dout_pp6",
-       "dap4_din_pp5",
-       "dap4_sclk_pp7",
-
-       "clk3_out_pee0",
-       "clk3_req_pee1",
-
-       "pi5",
-       "pk1",
-       "pk2",
-       "pg0",
-       "pg1",
-       "pg2",
-       "pg3",
-       "ph4",
-       "ph5",
-       "pb0",
-       "pb1",
-       "pk7",
-       "pi0",
-       "pi1",
-       "pi2",
-
-       "gen2_i2c_scl_pt5",
-       "gen2_i2c_sda_pt6",
-
-       "sdmmc4_clk_pcc4",
-       "sdmmc4_cmd_pt7",
-       "sdmmc4_dat0_paa0",
-       "sdmmc4_dat1_paa1",
-       "sdmmc4_dat2_paa2",
-       "sdmmc4_dat3_paa3",
-       "sdmmc4_dat4_paa4",
-       "sdmmc4_dat5_paa5",
-       "sdmmc4_dat6_paa6",
-       "sdmmc4_dat7_paa7",
-
-       "jtag_rtck",
-       "pwr_i2c_scl_pz6",
-       "pwr_i2c_sda_pz7",
-
-       "kb_row0_pr0",
-       "kb_row1_pr1",
-       "kb_row2_pr2",
-       "kb_row13_ps5",
-       "kb_row14_ps6",
-       "kb_row15_ps7",
-
-       "kb_col0_pq0",
-       "kb_col1_pq1",
-       "kb_col2_pq2",
-       "kb_col5_pq5",
-
-       "clk_32k_out_pa0",
-       "core_pwr_req",
-       "cpu_pwr_req",
-       "pwr_int_n",
-       "clk_32k_in",
-       "owr",
-
-       "dap1_fs_pn0",
-       "dap1_din_pn1",
-       "dap1_sclk_pn3",
-       "dap_mclk1_req_pee2",
-       "dap_mclk1_pw4",
-
-       "dap2_fs_pa2",
-       "dap2_din_pa4",
-       "dap2_dout_pa5",
-       "dap2_sclk_pa3",
-
-       "dvfs_pwm_px0",
-       "dvfs_clk_px2",
-       "gpio_x1_aud_px1",
-       "gpio_x3_aud_px3",
-
-       "gpio_x5_aud_px5",
-       "gpio_x7_aud_px7",
-
-       "pex_l0_rst_n_pdd1",
-       "pex_l0_clkreq_n_pdd2",
-       "pex_wake_n_pdd3",
-       "pex_l1_rst_n_pdd5",
-       "pex_l1_clkreq_n_pdd6",
-       "hdmi_cec_pee3",
-
-       "sdmmc3_cd_n_pv2",
-       "usb_vbus_en0_pn4",
-       "usb_vbus_en1_pn5",
-       "sdmmc3_clk_lb_out_pee4",
-       "sdmmc3_clk_lb_in_pee5",
-       "gmi_clk_lb",
-
-       "dp_hpd_pff0",
-       "usb_vbus_en2_pff1",
-       "pff2",
-};
-
-static const char * const sdmmc1_groups[] = {
-       "sdmmc1_clk_pz0",
-       "sdmmc1_cmd_pz1",
-       "sdmmc1_dat3_py4",
-       "sdmmc1_dat2_py5",
-       "sdmmc1_dat1_py6",
-       "sdmmc1_dat0_py7",
-       "uart3_cts_n_pa1",
-       "sdmmc1_wp_n_pv3",
-};
-
-static const char * const sdmmc2_groups[] = {
-       "pi5",
-       "pk1",
-       "pk3",
-       "pk4",
-       "pi6",
-       "ph4",
-       "ph5",
-       "ph6",
-       "ph7",
-       "pi2",
-       "cam_mclk_pcc0",
-       "pcc1",
-       "pbb0",
-       "cam_i2c_scl_pbb1",
-       "cam_i2c_sda_pbb2",
-       "pbb3",
-       "pbb4",
-       "pbb5",
-       "pbb6",
-       "pbb7",
-       "pcc2",
-       "gmi_clk_lb",
-};
-
-static const char * const sdmmc3_groups[] = {
-       "pk0",
-       "pcc2",
-
-       "kb_col4_pq4",
-       "kb_col5_pq5",
-
-       "sdmmc3_clk_pa6",
-       "sdmmc3_cmd_pa7",
-       "sdmmc3_dat0_pb7",
-       "sdmmc3_dat1_pb6",
-       "sdmmc3_dat2_pb5",
-       "sdmmc3_dat3_pb4",
-
-       "sdmmc3_cd_n_pv2",
-       "sdmmc3_clk_lb_in_pee5",
-       "sdmmc3_clk_lb_out_pee4",
-};
-
-static const char * const sdmmc4_groups[] = {
-       "sdmmc4_clk_pcc4",
-       "sdmmc4_cmd_pt7",
-       "sdmmc4_dat0_paa0",
-       "sdmmc4_dat1_paa1",
-       "sdmmc4_dat2_paa2",
-       "sdmmc4_dat3_paa3",
-       "sdmmc4_dat4_paa4",
-       "sdmmc4_dat5_paa5",
-       "sdmmc4_dat6_paa6",
-       "sdmmc4_dat7_paa7",
-};
-
-static const char * const soc_groups[] = {
-       "pk0",
-       "pj2",
-       "kb_row15_ps7",
-       "clk_32k_out_pa0",
-};
-
-static const char * const spdif_groups[] = {
-       "sdmmc1_cmd_pz1",
-       "sdmmc1_dat3_py4",
-       "uart2_rxd_pc3",
-       "uart2_txd_pc2",
-       "spdif_in_pk6",
-       "spdif_out_pk5",
-};
-
-static const char * const spi1_groups[] = {
-       "ulpi_clk_py0",
-       "ulpi_dir_py1",
-       "ulpi_nxt_py2",
-       "ulpi_stp_py3",
-       "gpio_x3_aud_px3",
-       "gpio_x4_aud_px4",
-       "gpio_x5_aud_px5",
-       "gpio_x6_aud_px6",
-       "gpio_x7_aud_px7",
-       "gpio_w3_aud_pw3",
-};
-
-static const char * const spi2_groups[] = {
-       "ulpi_data4_po5",
-       "ulpi_data5_po6",
-       "ulpi_data6_po7",
-       "ulpi_data7_po0",
-
-       "kb_row13_ps5",
-       "kb_row14_ps6",
-       "kb_col0_pq0",
-       "kb_col1_pq1",
-       "kb_col2_pq2",
-       "kb_col6_pq6",
-       "kb_col7_pq7",
-       "gpio_x4_aud_px4",
-       "gpio_x5_aud_px5",
-       "gpio_x6_aud_px6",
-       "gpio_x7_aud_px7",
-       "gpio_w2_aud_pw2",
-       "gpio_w3_aud_pw3",
-};
-
-static const char * const spi3_groups[] = {
-       "ulpi_data0_po1",
-       "ulpi_data1_po2",
-       "ulpi_data2_po3",
-       "ulpi_data3_po4",
-       "sdmmc4_dat0_paa0",
-       "sdmmc4_dat1_paa1",
-       "sdmmc4_dat2_paa2",
-       "sdmmc4_dat3_paa3",
-       "sdmmc4_dat4_paa4",
-       "sdmmc4_dat5_paa5",
-       "sdmmc4_dat6_paa6",
-       "sdmmc3_clk_pa6",
-       "sdmmc3_cmd_pa7",
-       "sdmmc3_dat0_pb7",
-       "sdmmc3_dat1_pb6",
-       "sdmmc3_dat2_pb5",
-       "sdmmc3_dat3_pb4",
-};
-
-static const char * const spi4_groups[] = {
-       "sdmmc1_cmd_pz1",
-       "sdmmc1_dat3_py4",
-       "sdmmc1_dat2_py5",
-       "sdmmc1_dat1_py6",
-       "sdmmc1_dat0_py7",
-
-       "uart2_rxd_pc3",
-       "uart2_txd_pc2",
-       "uart2_rts_n_pj6",
-       "uart2_cts_n_pj5",
-       "uart3_txd_pw6",
-       "uart3_rxd_pw7",
-
-       "pi3",
-       "pg4",
-       "pg5",
-       "pg6",
-       "pg7",
-       "ph3",
-       "pi4",
-       "sdmmc1_wp_n_pv3",
-};
-
-static const char * const spi5_groups[] = {
-       "ulpi_clk_py0",
-       "ulpi_dir_py1",
-       "ulpi_nxt_py2",
-       "ulpi_stp_py3",
-       "dap3_fs_pp0",
-       "dap3_din_pp1",
-       "dap3_dout_pp2",
-       "dap3_sclk_pp3",
-};
-
-static const char * const spi6_groups[] = {
-       "dvfs_pwm_px0",
-       "gpio_x1_aud_px1",
-       "gpio_x3_aud_px3",
-       "dvfs_clk_px2",
-       "gpio_x6_aud_px6",
-       "gpio_w2_aud_pw2",
-       "gpio_w3_aud_pw3",
-};
-
-static const char * const trace_groups[] = {
-       "pi2",
-       "pi4",
-       "pi7",
-       "ph0",
-       "ph6",
-       "ph7",
-       "pg2",
-       "pg3",
-       "pk1",
-       "pk3",
-};
-
-static const char * const uarta_groups[] = {
-       "ulpi_data0_po1",
-       "ulpi_data1_po2",
-       "ulpi_data2_po3",
-       "ulpi_data3_po4",
-       "ulpi_data4_po5",
-       "ulpi_data5_po6",
-       "ulpi_data6_po7",
-       "ulpi_data7_po0",
-
-       "sdmmc1_cmd_pz1",
-       "sdmmc1_dat3_py4",
-       "sdmmc1_dat2_py5",
-       "sdmmc1_dat1_py6",
-       "sdmmc1_dat0_py7",
-
-
-       "uart2_rxd_pc3",
-       "uart2_txd_pc2",
-       "uart2_rts_n_pj6",
-       "uart2_cts_n_pj5",
-
-       "pu0",
-       "pu1",
-       "pu2",
-       "pu3",
-       "pu4",
-       "pu5",
-       "pu6",
-
-       "kb_row7_pr7",
-       "kb_row8_ps0",
-       "kb_row9_ps1",
-       "kb_row10_ps2",
-       "kb_col3_pq3",
-       "kb_col4_pq4",
-
-       "sdmmc3_cmd_pa7",
-       "sdmmc3_dat1_pb6",
-       "sdmmc1_wp_n_pv3",
-
-};
-
-static const char * const uartb_groups[] = {
-       "uart2_rts_n_pj6",
-       "uart2_cts_n_pj5",
-};
-
-static const char * const uartc_groups[] = {
-       "uart3_txd_pw6",
-       "uart3_rxd_pw7",
-       "uart3_cts_n_pa1",
-       "uart3_rts_n_pc0",
-       "kb_row16_pt0",
-       "kb_row17_pt1",
-};
-
-static const char * const uartd_groups[] = {
-       "ulpi_clk_py0",
-       "ulpi_dir_py1",
-       "ulpi_nxt_py2",
-       "ulpi_stp_py3",
-       "pj7",
-       "pb0",
-       "pb1",
-       "pk7",
-       "kb_col6_pq6",
-       "kb_col7_pq7",
-};
-
-static const char * const ulpi_groups[] = {
-       "ulpi_data0_po1",
-       "ulpi_data1_po2",
-       "ulpi_data2_po3",
-       "ulpi_data3_po4",
-       "ulpi_data4_po5",
-       "ulpi_data5_po6",
-       "ulpi_data6_po7",
-       "ulpi_data7_po0",
-       "ulpi_clk_py0",
-       "ulpi_dir_py1",
-       "ulpi_nxt_py2",
-       "ulpi_stp_py3",
-};
-
-static const char * const usb_groups[] = {
-       "pj0",
-       "usb_vbus_en0_pn4",
-       "usb_vbus_en1_pn5",
-       "usb_vbus_en2_pff1",
-};
-
-static const char * const vgp1_groups[] = {
-       "cam_i2c_scl_pbb1",
-};
-
-static const char * const vgp2_groups[] = {
-       "cam_i2c_sda_pbb2",
-};
-
-static const char * const vgp3_groups[] = {
-       "pbb3",
-};
-
-static const char * const vgp4_groups[] = {
-       "pbb4",
-};
-
-static const char * const vgp5_groups[] = {
-       "pbb5",
-};
-
-static const char * const vgp6_groups[] = {
-       "pbb0",
-};
-
-static const char * const vi_groups[] = {
-       "cam_mclk_pcc0",
-};
-
-static const char * const vi_alt1_groups[] = {
-       "cam_mclk_pcc0",
-};
-
-static const char * const vi_alt3_groups[] = {
-       "cam_mclk_pcc0",
-};
-
-static const char * const vimclk2_groups[] = {
-       "pbb0",
-};
-
-static const char * const vimclk2_alt_groups[] = {
-       "pbb0",
-};
-
-static const char * const sata_groups[] = {
-       "dap_mclk1_req_pee2",
-       "dap1_dout_pn2",
-       "pff2",
-};
-
-static const char * const ccla_groups[] = {
-       "pk3",
-};
-
-static const char * const rtck_groups[] = {
-       "jtag_rtck",
-};
-
-static const char * const sys_groups[] = {
-       "kb_row3_pr3",
-};
-
-static const char * const pe0_groups[] = {
-       "pex_l0_rst_n_pdd1",
-       "pex_l0_clkreq_n_pdd2",
-};
-
-static const char * const pe_groups[] = {
-       "pex_wake_n_pdd3",
-};
-
-static const char * const pe1_groups[] = {
-       "pex_l1_rst_n_pdd5",
-       "pex_l1_clkreq_n_pdd6",
-};
-
-static const char * const dp_groups[] = {
-       "dp_hpd_pff0",
-};
-
-static const char * const clk_groups[] = {
-       "clk_32k_in",
-};
-
-static const char * const tmds_groups[] = {
-       "pg4",
-       "ph1",
-       "ph2",
-};
-
 #define FUNCTION(fname)                                        \
        {                                               \
                .name = #fname,                         \
-               .groups = fname##_groups,               \
-               .ngroups = ARRAY_SIZE(fname##_groups),  \
        }
 
-static const struct tegra_function tegra124_functions[] = {
+static struct tegra_function tegra124_functions[] = {
        FUNCTION(blink),
        FUNCTION(cec),
        FUNCTION(cldvfs),
index a8ceb08..e0b5040 100644 (file)
@@ -1894,637 +1894,12 @@ enum tegra_mux {
        TEGRA_MUX_XIO,
 };
 
-static const char * const ahb_clk_groups[] = {
-       "cdev2",
-};
-
-static const char * const apb_clk_groups[] = {
-       "cdev2",
-};
-
-static const char * const audio_sync_groups[] = {
-       "cdev1",
-};
-
-static const char * const crt_groups[] = {
-       "crtp",
-       "lm1",
-};
-
-static const char * const dap1_groups[] = {
-       "dap1",
-};
-
-static const char * const dap2_groups[] = {
-       "dap2",
-};
-
-static const char * const dap3_groups[] = {
-       "dap3",
-};
-
-static const char * const dap4_groups[] = {
-       "dap4",
-};
-
-static const char * const dap5_groups[] = {
-       "gme",
-};
-
-static const char * const displaya_groups[] = {
-       "lcsn",
-       "ld0",
-       "ld1",
-       "ld10",
-       "ld11",
-       "ld12",
-       "ld13",
-       "ld14",
-       "ld15",
-       "ld16",
-       "ld17",
-       "ld2",
-       "ld3",
-       "ld4",
-       "ld5",
-       "ld6",
-       "ld7",
-       "ld8",
-       "ld9",
-       "ldc",
-       "ldi",
-       "lhp0",
-       "lhp1",
-       "lhp2",
-       "lhs",
-       "lm0",
-       "lm1",
-       "lpp",
-       "lpw0",
-       "lpw1",
-       "lpw2",
-       "lsc0",
-       "lsc1",
-       "lsck",
-       "lsda",
-       "lsdi",
-       "lspi",
-       "lvp0",
-       "lvp1",
-       "lvs",
-};
-
-static const char * const displayb_groups[] = {
-       "lcsn",
-       "ld0",
-       "ld1",
-       "ld10",
-       "ld11",
-       "ld12",
-       "ld13",
-       "ld14",
-       "ld15",
-       "ld16",
-       "ld17",
-       "ld2",
-       "ld3",
-       "ld4",
-       "ld5",
-       "ld6",
-       "ld7",
-       "ld8",
-       "ld9",
-       "ldc",
-       "ldi",
-       "lhp0",
-       "lhp1",
-       "lhp2",
-       "lhs",
-       "lm0",
-       "lm1",
-       "lpp",
-       "lpw0",
-       "lpw1",
-       "lpw2",
-       "lsc0",
-       "lsc1",
-       "lsck",
-       "lsda",
-       "lsdi",
-       "lspi",
-       "lvp0",
-       "lvp1",
-       "lvs",
-};
-
-static const char * const emc_test0_dll_groups[] = {
-       "kbca",
-};
-
-static const char * const emc_test1_dll_groups[] = {
-       "kbcc",
-};
-
-static const char * const gmi_groups[] = {
-       "ata",
-       "atb",
-       "atc",
-       "atd",
-       "ate",
-       "dap1",
-       "dap2",
-       "dap4",
-       "gma",
-       "gmb",
-       "gmc",
-       "gmd",
-       "gme",
-       "gpu",
-       "irrx",
-       "irtx",
-       "pta",
-       "spia",
-       "spib",
-       "spic",
-       "spid",
-       "spie",
-       "uca",
-       "ucb",
-};
-
-static const char * const gmi_int_groups[] = {
-       "gmb",
-};
-
-static const char * const hdmi_groups[] = {
-       "hdint",
-       "lpw0",
-       "lpw2",
-       "lsc1",
-       "lsck",
-       "lsda",
-       "lspi",
-       "pta",
-};
-
-static const char * const i2cp_groups[] = {
-       "i2cp",
-};
-
-static const char * const i2c1_groups[] = {
-       "rm",
-       "spdi",
-       "spdo",
-       "spig",
-       "spih",
-};
-
-static const char * const i2c2_groups[] = {
-       "ddc",
-       "pta",
-};
-
-static const char * const i2c3_groups[] = {
-       "dtf",
-};
-
-static const char * const ide_groups[] = {
-       "ata",
-       "atb",
-       "atc",
-       "atd",
-       "ate",
-       "gmb",
-};
-
-static const char * const irda_groups[] = {
-       "uad",
-};
-
-static const char * const kbc_groups[] = {
-       "kbca",
-       "kbcb",
-       "kbcc",
-       "kbcd",
-       "kbce",
-       "kbcf",
-};
-
-static const char * const mio_groups[] = {
-       "kbcb",
-       "kbcd",
-       "kbcf",
-};
-
-static const char * const mipi_hs_groups[] = {
-       "uaa",
-       "uab",
-};
-
-static const char * const nand_groups[] = {
-       "ata",
-       "atb",
-       "atc",
-       "atd",
-       "ate",
-       "gmb",
-       "gmd",
-       "kbca",
-       "kbcb",
-       "kbcc",
-       "kbcd",
-       "kbce",
-       "kbcf",
-};
-
-static const char * const osc_groups[] = {
-       "cdev1",
-       "cdev2",
-};
-
-static const char * const owr_groups[] = {
-       "kbce",
-       "owc",
-       "uac",
-};
-
-static const char * const pcie_groups[] = {
-       "gpv",
-       "slxa",
-       "slxk",
-};
-
-static const char * const plla_out_groups[] = {
-       "cdev1",
-};
-
-static const char * const pllc_out1_groups[] = {
-       "csus",
-};
-
-static const char * const pllm_out1_groups[] = {
-       "cdev1",
-};
-
-static const char * const pllp_out2_groups[] = {
-       "csus",
-};
-
-static const char * const pllp_out3_groups[] = {
-       "csus",
-};
-
-static const char * const pllp_out4_groups[] = {
-       "cdev2",
-};
-
-static const char * const pwm_groups[] = {
-       "gpu",
-       "sdb",
-       "sdc",
-       "sdd",
-       "ucb",
-};
-
-static const char * const pwr_intr_groups[] = {
-       "pmc",
-};
-
-static const char * const pwr_on_groups[] = {
-       "pmc",
-};
-
-static const char * const rsvd1_groups[] = {
-       "dta",
-       "dtb",
-       "dtc",
-       "dtd",
-       "dte",
-       "gmd",
-       "gme",
-};
-
-static const char * const rsvd2_groups[] = {
-       "crtp",
-       "dap1",
-       "dap3",
-       "dap4",
-       "ddc",
-       "dtb",
-       "dtc",
-       "dte",
-       "dtf",
-       "gpu7",
-       "gpv",
-       "hdint",
-       "i2cp",
-       "owc",
-       "rm",
-       "sdio1",
-       "spdi",
-       "spdo",
-       "uac",
-       "uca",
-       "uda",
-};
-
-static const char * const rsvd3_groups[] = {
-       "crtp",
-       "dap2",
-       "dap3",
-       "ddc",
-       "gpu7",
-       "gpv",
-       "hdint",
-       "i2cp",
-       "ld17",
-       "ldc",
-       "ldi",
-       "lhp0",
-       "lhp1",
-       "lhp2",
-       "lm1",
-       "lpp",
-       "lpw1",
-       "lvp0",
-       "lvp1",
-       "owc",
-       "pmc",
-       "rm",
-       "uac",
-};
-
-static const char * const rsvd4_groups[] = {
-       "ata",
-       "ate",
-       "crtp",
-       "dap3",
-       "dap4",
-       "ddc",
-       "dta",
-       "dtc",
-       "dtd",
-       "dtf",
-       "gpu",
-       "gpu7",
-       "gpv",
-       "hdint",
-       "i2cp",
-       "kbce",
-       "lcsn",
-       "ld0",
-       "ld1",
-       "ld2",
-       "ld3",
-       "ld4",
-       "ld5",
-       "ld6",
-       "ld7",
-       "ld8",
-       "ld9",
-       "ld10",
-       "ld11",
-       "ld12",
-       "ld13",
-       "ld14",
-       "ld15",
-       "ld16",
-       "ld17",
-       "ldc",
-       "ldi",
-       "lhp0",
-       "lhp1",
-       "lhp2",
-       "lhs",
-       "lm0",
-       "lpp",
-       "lpw1",
-       "lsc0",
-       "lsdi",
-       "lvp0",
-       "lvp1",
-       "lvs",
-       "owc",
-       "pmc",
-       "pta",
-       "rm",
-       "spif",
-       "uac",
-       "uca",
-       "ucb",
-};
-
-static const char * const rtck_groups[] = {
-       "gpu7",
-};
-
-static const char * const sdio1_groups[] = {
-       "sdio1",
-};
-
-static const char * const sdio2_groups[] = {
-       "dap1",
-       "dta",
-       "dtd",
-       "kbca",
-       "kbcb",
-       "kbcd",
-       "spdi",
-       "spdo",
-};
-
-static const char * const sdio3_groups[] = {
-       "sdb",
-       "sdc",
-       "sdd",
-       "slxa",
-       "slxc",
-       "slxd",
-       "slxk",
-};
-
-static const char * const sdio4_groups[] = {
-       "atb",
-       "atc",
-       "atd",
-       "gma",
-       "gme",
-};
-
-static const char * const sflash_groups[] = {
-       "gmc",
-       "gmd",
-};
-
-static const char * const spdif_groups[] = {
-       "slxc",
-       "slxd",
-       "spdi",
-       "spdo",
-       "uad",
-};
-
-static const char * const spi1_groups[] = {
-       "dtb",
-       "dte",
-       "spia",
-       "spib",
-       "spic",
-       "spid",
-       "spie",
-       "spif",
-       "uda",
-};
-
-static const char * const spi2_groups[] = {
-       "sdb",
-       "slxa",
-       "slxc",
-       "slxd",
-       "slxk",
-       "spia",
-       "spib",
-       "spic",
-       "spid",
-       "spie",
-       "spif",
-       "spig",
-       "spih",
-       "uab",
-};
-
-static const char * const spi2_alt_groups[] = {
-       "spid",
-       "spie",
-       "spig",
-       "spih",
-};
-
-static const char * const spi3_groups[] = {
-       "gma",
-       "lcsn",
-       "lm0",
-       "lpw0",
-       "lpw2",
-       "lsc1",
-       "lsck",
-       "lsda",
-       "lsdi",
-       "sdc",
-       "sdd",
-       "spia",
-       "spib",
-       "spic",
-       "spif",
-       "spig",
-       "spih",
-       "uaa",
-};
-
-static const char * const spi4_groups[] = {
-       "gmc",
-       "irrx",
-       "irtx",
-       "slxa",
-       "slxc",
-       "slxd",
-       "slxk",
-       "uad",
-};
-
-static const char * const trace_groups[] = {
-       "kbcc",
-       "kbcf",
-};
-
-static const char * const twc_groups[] = {
-       "dap2",
-       "sdc",
-};
-
-static const char * const uarta_groups[] = {
-       "gpu",
-       "irrx",
-       "irtx",
-       "sdb",
-       "sdd",
-       "sdio1",
-       "uaa",
-       "uab",
-       "uad",
-};
-
-static const char * const uartb_groups[] = {
-       "irrx",
-       "irtx",
-};
-
-static const char * const uartc_groups[] = {
-       "uca",
-       "ucb",
-};
-
-static const char * const uartd_groups[] = {
-       "gmc",
-       "uda",
-};
-
-static const char * const uarte_groups[] = {
-       "gma",
-       "sdio1",
-};
-
-static const char * const ulpi_groups[] = {
-       "uaa",
-       "uab",
-       "uda",
-};
-
-static const char * const vi_groups[] = {
-       "dta",
-       "dtb",
-       "dtc",
-       "dtd",
-       "dte",
-       "dtf",
-};
-
-static const char * const vi_sensor_clk_groups[] = {
-       "csus",
-};
-
-static const char * const xio_groups[] = {
-       "ld0",
-       "ld1",
-       "ld10",
-       "ld11",
-       "ld12",
-       "ld13",
-       "ld14",
-       "ld15",
-       "ld16",
-       "ld2",
-       "ld3",
-       "ld4",
-       "ld5",
-       "ld6",
-       "ld7",
-       "ld8",
-       "ld9",
-       "lhs",
-       "lsc0",
-       "lspi",
-       "lvs",
-};
-
 #define FUNCTION(fname)                                        \
        {                                               \
                .name = #fname,                         \
-               .groups = fname##_groups,               \
-               .ngroups = ARRAY_SIZE(fname##_groups),  \
        }
 
-static const struct tegra_function tegra20_functions[] = {
+static struct tegra_function tegra20_functions[] = {
        FUNCTION(ahb_clk),
        FUNCTION(apb_clk),
        FUNCTION(audio_sync),
index 4e591f6..4bc9580 100644 (file)
@@ -2015,1253 +2015,13 @@ enum tegra_mux {
        TEGRA_MUX_VI_ALT2,
        TEGRA_MUX_VI_ALT3,
 };
-static const char * const blink_groups[] = {
-       "clk_32k_out_pa0",
-};
-
-static const char * const cec_groups[] = {
-       "hdmi_cec_pee3",
-       "owr",
-};
-
-static const char * const clk_12m_out_groups[] = {
-       "pv3",
-};
-
-static const char * const clk_32k_in_groups[] = {
-       "clk_32k_in",
-};
-
-static const char * const core_pwr_req_groups[] = {
-       "core_pwr_req",
-};
-
-static const char * const cpu_pwr_req_groups[] = {
-       "cpu_pwr_req",
-};
-
-static const char * const crt_groups[] = {
-       "crt_hsync_pv6",
-       "crt_vsync_pv7",
-};
-
-static const char * const dap_groups[] = {
-       "clk1_req_pee2",
-       "clk2_req_pcc5",
-};
-
-static const char * const ddr_groups[] = {
-       "vi_d0_pt4",
-       "vi_d1_pd5",
-       "vi_d10_pt2",
-       "vi_d11_pt3",
-       "vi_d2_pl0",
-       "vi_d3_pl1",
-       "vi_d4_pl2",
-       "vi_d5_pl3",
-       "vi_d6_pl4",
-       "vi_d7_pl5",
-       "vi_d8_pl6",
-       "vi_d9_pl7",
-       "vi_hsync_pd7",
-       "vi_vsync_pd6",
-};
-
-static const char * const dev3_groups[] = {
-       "clk3_req_pee1",
-};
-
-static const char * const displaya_groups[] = {
-       "dap3_din_pp1",
-       "dap3_dout_pp2",
-       "dap3_fs_pp0",
-       "dap3_sclk_pp3",
-       "pbb3",
-       "pbb4",
-       "pbb5",
-       "pbb6",
-       "lcd_cs0_n_pn4",
-       "lcd_cs1_n_pw0",
-       "lcd_d0_pe0",
-       "lcd_d1_pe1",
-       "lcd_d10_pf2",
-       "lcd_d11_pf3",
-       "lcd_d12_pf4",
-       "lcd_d13_pf5",
-       "lcd_d14_pf6",
-       "lcd_d15_pf7",
-       "lcd_d16_pm0",
-       "lcd_d17_pm1",
-       "lcd_d18_pm2",
-       "lcd_d19_pm3",
-       "lcd_d2_pe2",
-       "lcd_d20_pm4",
-       "lcd_d21_pm5",
-       "lcd_d22_pm6",
-       "lcd_d23_pm7",
-       "lcd_d3_pe3",
-       "lcd_d4_pe4",
-       "lcd_d5_pe5",
-       "lcd_d6_pe6",
-       "lcd_d7_pe7",
-       "lcd_d8_pf0",
-       "lcd_d9_pf1",
-       "lcd_dc0_pn6",
-       "lcd_dc1_pd2",
-       "lcd_de_pj1",
-       "lcd_hsync_pj3",
-       "lcd_m1_pw1",
-       "lcd_pclk_pb3",
-       "lcd_pwr0_pb2",
-       "lcd_pwr1_pc1",
-       "lcd_pwr2_pc6",
-       "lcd_sck_pz4",
-       "lcd_sdin_pz2",
-       "lcd_sdout_pn5",
-       "lcd_vsync_pj4",
-       "lcd_wr_n_pz3",
-};
-
-static const char * const displayb_groups[] = {
-       "dap3_din_pp1",
-       "dap3_dout_pp2",
-       "dap3_fs_pp0",
-       "dap3_sclk_pp3",
-       "pbb3",
-       "pbb4",
-       "pbb5",
-       "pbb6",
-       "lcd_cs0_n_pn4",
-       "lcd_cs1_n_pw0",
-       "lcd_d0_pe0",
-       "lcd_d1_pe1",
-       "lcd_d10_pf2",
-       "lcd_d11_pf3",
-       "lcd_d12_pf4",
-       "lcd_d13_pf5",
-       "lcd_d14_pf6",
-       "lcd_d15_pf7",
-       "lcd_d16_pm0",
-       "lcd_d17_pm1",
-       "lcd_d18_pm2",
-       "lcd_d19_pm3",
-       "lcd_d2_pe2",
-       "lcd_d20_pm4",
-       "lcd_d21_pm5",
-       "lcd_d22_pm6",
-       "lcd_d23_pm7",
-       "lcd_d3_pe3",
-       "lcd_d4_pe4",
-       "lcd_d5_pe5",
-       "lcd_d6_pe6",
-       "lcd_d7_pe7",
-       "lcd_d8_pf0",
-       "lcd_d9_pf1",
-       "lcd_dc0_pn6",
-       "lcd_dc1_pd2",
-       "lcd_de_pj1",
-       "lcd_hsync_pj3",
-       "lcd_m1_pw1",
-       "lcd_pclk_pb3",
-       "lcd_pwr0_pb2",
-       "lcd_pwr1_pc1",
-       "lcd_pwr2_pc6",
-       "lcd_sck_pz4",
-       "lcd_sdin_pz2",
-       "lcd_sdout_pn5",
-       "lcd_vsync_pj4",
-       "lcd_wr_n_pz3",
-};
-
-static const char * const dtv_groups[] = {
-       "gmi_a17_pb0",
-       "gmi_a18_pb1",
-       "gmi_cs0_n_pj0",
-       "gmi_cs1_n_pj2",
-};
-
-static const char * const extperiph1_groups[] = {
-       "clk1_out_pw4",
-};
-
-static const char * const extperiph2_groups[] = {
-       "clk2_out_pw5",
-};
-
-static const char * const extperiph3_groups[] = {
-       "clk3_out_pee0",
-};
-
-static const char * const gmi_groups[] = {
-       "dap1_din_pn1",
-       "dap1_dout_pn2",
-       "dap1_fs_pn0",
-       "dap1_sclk_pn3",
-       "dap2_din_pa4",
-       "dap2_dout_pa5",
-       "dap2_fs_pa2",
-       "dap2_sclk_pa3",
-       "dap4_din_pp5",
-       "dap4_dout_pp6",
-       "dap4_fs_pp4",
-       "dap4_sclk_pp7",
-       "gen2_i2c_scl_pt5",
-       "gen2_i2c_sda_pt6",
-       "gmi_a16_pj7",
-       "gmi_a17_pb0",
-       "gmi_a18_pb1",
-       "gmi_a19_pk7",
-       "gmi_ad0_pg0",
-       "gmi_ad1_pg1",
-       "gmi_ad10_ph2",
-       "gmi_ad11_ph3",
-       "gmi_ad12_ph4",
-       "gmi_ad13_ph5",
-       "gmi_ad14_ph6",
-       "gmi_ad15_ph7",
-       "gmi_ad2_pg2",
-       "gmi_ad3_pg3",
-       "gmi_ad4_pg4",
-       "gmi_ad5_pg5",
-       "gmi_ad6_pg6",
-       "gmi_ad7_pg7",
-       "gmi_ad8_ph0",
-       "gmi_ad9_ph1",
-       "gmi_adv_n_pk0",
-       "gmi_clk_pk1",
-       "gmi_cs0_n_pj0",
-       "gmi_cs1_n_pj2",
-       "gmi_cs2_n_pk3",
-       "gmi_cs3_n_pk4",
-       "gmi_cs4_n_pk2",
-       "gmi_cs6_n_pi3",
-       "gmi_cs7_n_pi6",
-       "gmi_dqs_pi2",
-       "gmi_iordy_pi5",
-       "gmi_oe_n_pi1",
-       "gmi_rst_n_pi4",
-       "gmi_wait_pi7",
-       "gmi_wp_n_pc7",
-       "gmi_wr_n_pi0",
-       "pu0",
-       "pu1",
-       "pu2",
-       "pu3",
-       "pu4",
-       "pu5",
-       "pu6",
-       "sdmmc4_clk_pcc4",
-       "sdmmc4_cmd_pt7",
-       "sdmmc4_dat0_paa0",
-       "sdmmc4_dat1_paa1",
-       "sdmmc4_dat2_paa2",
-       "sdmmc4_dat3_paa3",
-       "sdmmc4_dat4_paa4",
-       "sdmmc4_dat5_paa5",
-       "sdmmc4_dat6_paa6",
-       "sdmmc4_dat7_paa7",
-       "spi1_cs0_n_px6",
-       "spi1_mosi_px4",
-       "spi1_sck_px5",
-       "spi2_cs0_n_px3",
-       "spi2_miso_px1",
-       "spi2_mosi_px0",
-       "spi2_sck_px2",
-       "uart2_cts_n_pj5",
-       "uart2_rts_n_pj6",
-       "uart3_cts_n_pa1",
-       "uart3_rts_n_pc0",
-       "uart3_rxd_pw7",
-       "uart3_txd_pw6",
-};
-
-static const char * const gmi_alt_groups[] = {
-       "gmi_a16_pj7",
-       "gmi_cs3_n_pk4",
-       "gmi_cs7_n_pi6",
-       "gmi_wp_n_pc7",
-};
-
-static const char * const hda_groups[] = {
-       "clk1_req_pee2",
-       "dap1_din_pn1",
-       "dap1_dout_pn2",
-       "dap1_fs_pn0",
-       "dap1_sclk_pn3",
-       "dap2_din_pa4",
-       "dap2_dout_pa5",
-       "dap2_fs_pa2",
-       "dap2_sclk_pa3",
-       "pex_l0_clkreq_n_pdd2",
-       "pex_l0_prsnt_n_pdd0",
-       "pex_l0_rst_n_pdd1",
-       "pex_l1_clkreq_n_pdd6",
-       "pex_l1_prsnt_n_pdd4",
-       "pex_l1_rst_n_pdd5",
-       "pex_l2_clkreq_n_pcc7",
-       "pex_l2_prsnt_n_pdd7",
-       "pex_l2_rst_n_pcc6",
-       "pex_wake_n_pdd3",
-       "spdif_in_pk6",
-};
-
-static const char * const hdcp_groups[] = {
-       "gen2_i2c_scl_pt5",
-       "gen2_i2c_sda_pt6",
-       "lcd_pwr0_pb2",
-       "lcd_pwr2_pc6",
-       "lcd_sck_pz4",
-       "lcd_sdout_pn5",
-       "lcd_wr_n_pz3",
-};
-
-static const char * const hdmi_groups[] = {
-       "hdmi_int_pn7",
-};
-
-static const char * const hsi_groups[] = {
-       "ulpi_data0_po1",
-       "ulpi_data1_po2",
-       "ulpi_data2_po3",
-       "ulpi_data3_po4",
-       "ulpi_data4_po5",
-       "ulpi_data5_po6",
-       "ulpi_data6_po7",
-       "ulpi_data7_po0",
-};
-
-static const char * const i2c1_groups[] = {
-       "gen1_i2c_scl_pc4",
-       "gen1_i2c_sda_pc5",
-       "spdif_in_pk6",
-       "spdif_out_pk5",
-       "spi2_cs1_n_pw2",
-       "spi2_cs2_n_pw3",
-};
-
-static const char * const i2c2_groups[] = {
-       "gen2_i2c_scl_pt5",
-       "gen2_i2c_sda_pt6",
-};
-
-static const char * const i2c3_groups[] = {
-       "cam_i2c_scl_pbb1",
-       "cam_i2c_sda_pbb2",
-       "sdmmc4_cmd_pt7",
-       "sdmmc4_dat4_paa4",
-};
-
-static const char * const i2c4_groups[] = {
-       "ddc_scl_pv4",
-       "ddc_sda_pv5",
-};
-
-static const char * const i2cpwr_groups[] = {
-       "pwr_i2c_scl_pz6",
-       "pwr_i2c_sda_pz7",
-};
-
-static const char * const i2s0_groups[] = {
-       "dap1_din_pn1",
-       "dap1_dout_pn2",
-       "dap1_fs_pn0",
-       "dap1_sclk_pn3",
-};
-
-static const char * const i2s1_groups[] = {
-       "dap2_din_pa4",
-       "dap2_dout_pa5",
-       "dap2_fs_pa2",
-       "dap2_sclk_pa3",
-};
-
-static const char * const i2s2_groups[] = {
-       "dap3_din_pp1",
-       "dap3_dout_pp2",
-       "dap3_fs_pp0",
-       "dap3_sclk_pp3",
-};
-
-static const char * const i2s3_groups[] = {
-       "dap4_din_pp5",
-       "dap4_dout_pp6",
-       "dap4_fs_pp4",
-       "dap4_sclk_pp7",
-};
-
-static const char * const i2s4_groups[] = {
-       "pbb0",
-       "pbb7",
-       "pcc1",
-       "pcc2",
-       "sdmmc4_dat4_paa4",
-       "sdmmc4_dat5_paa5",
-       "sdmmc4_dat6_paa6",
-       "sdmmc4_dat7_paa7",
-};
-
-static const char * const invalid_groups[] = {
-       "kb_row3_pr3",
-       "sdmmc4_clk_pcc4",
-};
-
-static const char * const kbc_groups[] = {
-       "kb_col0_pq0",
-       "kb_col1_pq1",
-       "kb_col2_pq2",
-       "kb_col3_pq3",
-       "kb_col4_pq4",
-       "kb_col5_pq5",
-       "kb_col6_pq6",
-       "kb_col7_pq7",
-       "kb_row0_pr0",
-       "kb_row1_pr1",
-       "kb_row10_ps2",
-       "kb_row11_ps3",
-       "kb_row12_ps4",
-       "kb_row13_ps5",
-       "kb_row14_ps6",
-       "kb_row15_ps7",
-       "kb_row2_pr2",
-       "kb_row3_pr3",
-       "kb_row4_pr4",
-       "kb_row5_pr5",
-       "kb_row6_pr6",
-       "kb_row7_pr7",
-       "kb_row8_ps0",
-       "kb_row9_ps1",
-};
-
-static const char * const mio_groups[] = {
-       "kb_col6_pq6",
-       "kb_col7_pq7",
-       "kb_row10_ps2",
-       "kb_row11_ps3",
-       "kb_row12_ps4",
-       "kb_row13_ps5",
-       "kb_row14_ps6",
-       "kb_row15_ps7",
-       "kb_row6_pr6",
-       "kb_row7_pr7",
-       "kb_row8_ps0",
-       "kb_row9_ps1",
-};
-
-static const char * const nand_groups[] = {
-       "gmi_ad0_pg0",
-       "gmi_ad1_pg1",
-       "gmi_ad10_ph2",
-       "gmi_ad11_ph3",
-       "gmi_ad12_ph4",
-       "gmi_ad13_ph5",
-       "gmi_ad14_ph6",
-       "gmi_ad15_ph7",
-       "gmi_ad2_pg2",
-       "gmi_ad3_pg3",
-       "gmi_ad4_pg4",
-       "gmi_ad5_pg5",
-       "gmi_ad6_pg6",
-       "gmi_ad7_pg7",
-       "gmi_ad8_ph0",
-       "gmi_ad9_ph1",
-       "gmi_adv_n_pk0",
-       "gmi_clk_pk1",
-       "gmi_cs0_n_pj0",
-       "gmi_cs1_n_pj2",
-       "gmi_cs2_n_pk3",
-       "gmi_cs3_n_pk4",
-       "gmi_cs4_n_pk2",
-       "gmi_cs6_n_pi3",
-       "gmi_cs7_n_pi6",
-       "gmi_dqs_pi2",
-       "gmi_iordy_pi5",
-       "gmi_oe_n_pi1",
-       "gmi_rst_n_pi4",
-       "gmi_wait_pi7",
-       "gmi_wp_n_pc7",
-       "gmi_wr_n_pi0",
-       "kb_col0_pq0",
-       "kb_col1_pq1",
-       "kb_col2_pq2",
-       "kb_col3_pq3",
-       "kb_col4_pq4",
-       "kb_col5_pq5",
-       "kb_col6_pq6",
-       "kb_col7_pq7",
-       "kb_row0_pr0",
-       "kb_row1_pr1",
-       "kb_row10_ps2",
-       "kb_row11_ps3",
-       "kb_row12_ps4",
-       "kb_row13_ps5",
-       "kb_row14_ps6",
-       "kb_row15_ps7",
-       "kb_row2_pr2",
-       "kb_row3_pr3",
-       "kb_row4_pr4",
-       "kb_row5_pr5",
-       "kb_row6_pr6",
-       "kb_row7_pr7",
-       "kb_row8_ps0",
-       "kb_row9_ps1",
-       "sdmmc4_clk_pcc4",
-       "sdmmc4_cmd_pt7",
-};
-
-static const char * const nand_alt_groups[] = {
-       "gmi_cs6_n_pi3",
-       "gmi_cs7_n_pi6",
-       "gmi_rst_n_pi4",
-};
-
-static const char * const owr_groups[] = {
-       "pu0",
-       "pv2",
-       "kb_row5_pr5",
-       "owr",
-};
-
-static const char * const pcie_groups[] = {
-       "pex_l0_clkreq_n_pdd2",
-       "pex_l0_prsnt_n_pdd0",
-       "pex_l0_rst_n_pdd1",
-       "pex_l1_clkreq_n_pdd6",
-       "pex_l1_prsnt_n_pdd4",
-       "pex_l1_rst_n_pdd5",
-       "pex_l2_clkreq_n_pcc7",
-       "pex_l2_prsnt_n_pdd7",
-       "pex_l2_rst_n_pcc6",
-       "pex_wake_n_pdd3",
-};
-
-static const char * const pwm0_groups[] = {
-       "gmi_ad8_ph0",
-       "pu3",
-       "sdmmc3_dat3_pb4",
-       "sdmmc3_dat5_pd0",
-       "uart3_rts_n_pc0",
-};
-
-static const char * const pwm1_groups[] = {
-       "gmi_ad9_ph1",
-       "pu4",
-       "sdmmc3_dat2_pb5",
-       "sdmmc3_dat4_pd1",
-};
-
-static const char * const pwm2_groups[] = {
-       "gmi_ad10_ph2",
-       "pu5",
-       "sdmmc3_clk_pa6",
-};
-
-static const char * const pwm3_groups[] = {
-       "gmi_ad11_ph3",
-       "pu6",
-       "sdmmc3_cmd_pa7",
-};
-
-static const char * const pwr_int_n_groups[] = {
-       "pwr_int_n",
-};
-
-static const char * const rsvd1_groups[] = {
-       "gmi_ad0_pg0",
-       "gmi_ad1_pg1",
-       "gmi_ad12_ph4",
-       "gmi_ad13_ph5",
-       "gmi_ad14_ph6",
-       "gmi_ad15_ph7",
-       "gmi_ad2_pg2",
-       "gmi_ad3_pg3",
-       "gmi_ad4_pg4",
-       "gmi_ad5_pg5",
-       "gmi_ad6_pg6",
-       "gmi_ad7_pg7",
-       "gmi_adv_n_pk0",
-       "gmi_clk_pk1",
-       "gmi_cs0_n_pj0",
-       "gmi_cs1_n_pj2",
-       "gmi_cs2_n_pk3",
-       "gmi_cs3_n_pk4",
-       "gmi_cs4_n_pk2",
-       "gmi_dqs_pi2",
-       "gmi_iordy_pi5",
-       "gmi_oe_n_pi1",
-       "gmi_wait_pi7",
-       "gmi_wp_n_pc7",
-       "gmi_wr_n_pi0",
-       "pu1",
-       "pu2",
-       "pv0",
-       "pv1",
-       "sdmmc3_dat0_pb7",
-       "sdmmc3_dat1_pb6",
-       "sdmmc3_dat2_pb5",
-       "sdmmc3_dat3_pb4",
-       "vi_pclk_pt0",
-};
-
-static const char * const rsvd2_groups[] = {
-       "clk1_out_pw4",
-       "clk2_out_pw5",
-       "clk2_req_pcc5",
-       "clk3_out_pee0",
-       "clk3_req_pee1",
-       "clk_32k_in",
-       "clk_32k_out_pa0",
-       "core_pwr_req",
-       "cpu_pwr_req",
-       "crt_hsync_pv6",
-       "crt_vsync_pv7",
-       "dap3_din_pp1",
-       "dap3_dout_pp2",
-       "dap3_fs_pp0",
-       "dap3_sclk_pp3",
-       "dap4_din_pp5",
-       "dap4_dout_pp6",
-       "dap4_fs_pp4",
-       "dap4_sclk_pp7",
-       "ddc_scl_pv4",
-       "ddc_sda_pv5",
-       "gen1_i2c_scl_pc4",
-       "gen1_i2c_sda_pc5",
-       "pbb0",
-       "pbb7",
-       "pcc1",
-       "pcc2",
-       "pv0",
-       "pv1",
-       "pv2",
-       "pv3",
-       "hdmi_cec_pee3",
-       "hdmi_int_pn7",
-       "jtag_rtck_pu7",
-       "pwr_i2c_scl_pz6",
-       "pwr_i2c_sda_pz7",
-       "pwr_int_n",
-       "sdmmc1_clk_pz0",
-       "sdmmc1_cmd_pz1",
-       "sdmmc1_dat0_py7",
-       "sdmmc1_dat1_py6",
-       "sdmmc1_dat2_py5",
-       "sdmmc1_dat3_py4",
-       "sdmmc3_dat0_pb7",
-       "sdmmc3_dat1_pb6",
-       "sdmmc4_rst_n_pcc3",
-       "spdif_out_pk5",
-       "sys_clk_req_pz5",
-       "uart3_cts_n_pa1",
-       "uart3_rxd_pw7",
-       "uart3_txd_pw6",
-       "ulpi_clk_py0",
-       "ulpi_dir_py1",
-       "ulpi_nxt_py2",
-       "ulpi_stp_py3",
-       "vi_d0_pt4",
-       "vi_d10_pt2",
-       "vi_d11_pt3",
-       "vi_hsync_pd7",
-       "vi_vsync_pd6",
-};
-
-static const char * const rsvd3_groups[] = {
-       "cam_i2c_scl_pbb1",
-       "cam_i2c_sda_pbb2",
-       "clk1_out_pw4",
-       "clk1_req_pee2",
-       "clk2_out_pw5",
-       "clk2_req_pcc5",
-       "clk3_out_pee0",
-       "clk3_req_pee1",
-       "clk_32k_in",
-       "clk_32k_out_pa0",
-       "core_pwr_req",
-       "cpu_pwr_req",
-       "crt_hsync_pv6",
-       "crt_vsync_pv7",
-       "dap2_din_pa4",
-       "dap2_dout_pa5",
-       "dap2_fs_pa2",
-       "dap2_sclk_pa3",
-       "ddc_scl_pv4",
-       "ddc_sda_pv5",
-       "gen1_i2c_scl_pc4",
-       "gen1_i2c_sda_pc5",
-       "pbb0",
-       "pbb7",
-       "pcc1",
-       "pcc2",
-       "pv0",
-       "pv1",
-       "pv2",
-       "pv3",
-       "hdmi_cec_pee3",
-       "hdmi_int_pn7",
-       "jtag_rtck_pu7",
-       "kb_row0_pr0",
-       "kb_row1_pr1",
-       "kb_row2_pr2",
-       "kb_row3_pr3",
-       "lcd_d0_pe0",
-       "lcd_d1_pe1",
-       "lcd_d10_pf2",
-       "lcd_d11_pf3",
-       "lcd_d12_pf4",
-       "lcd_d13_pf5",
-       "lcd_d14_pf6",
-       "lcd_d15_pf7",
-       "lcd_d16_pm0",
-       "lcd_d17_pm1",
-       "lcd_d18_pm2",
-       "lcd_d19_pm3",
-       "lcd_d2_pe2",
-       "lcd_d20_pm4",
-       "lcd_d21_pm5",
-       "lcd_d22_pm6",
-       "lcd_d23_pm7",
-       "lcd_d3_pe3",
-       "lcd_d4_pe4",
-       "lcd_d5_pe5",
-       "lcd_d6_pe6",
-       "lcd_d7_pe7",
-       "lcd_d8_pf0",
-       "lcd_d9_pf1",
-       "lcd_dc0_pn6",
-       "lcd_dc1_pd2",
-       "lcd_de_pj1",
-       "lcd_hsync_pj3",
-       "lcd_m1_pw1",
-       "lcd_pclk_pb3",
-       "lcd_pwr1_pc1",
-       "lcd_vsync_pj4",
-       "owr",
-       "pex_l0_clkreq_n_pdd2",
-       "pex_l0_prsnt_n_pdd0",
-       "pex_l0_rst_n_pdd1",
-       "pex_l1_clkreq_n_pdd6",
-       "pex_l1_prsnt_n_pdd4",
-       "pex_l1_rst_n_pdd5",
-       "pex_l2_clkreq_n_pcc7",
-       "pex_l2_prsnt_n_pdd7",
-       "pex_l2_rst_n_pcc6",
-       "pex_wake_n_pdd3",
-       "pwr_i2c_scl_pz6",
-       "pwr_i2c_sda_pz7",
-       "pwr_int_n",
-       "sdmmc1_clk_pz0",
-       "sdmmc1_cmd_pz1",
-       "sdmmc4_rst_n_pcc3",
-       "sys_clk_req_pz5",
-};
-
-static const char * const rsvd4_groups[] = {
-       "clk1_out_pw4",
-       "clk1_req_pee2",
-       "clk2_out_pw5",
-       "clk2_req_pcc5",
-       "clk3_out_pee0",
-       "clk3_req_pee1",
-       "clk_32k_in",
-       "clk_32k_out_pa0",
-       "core_pwr_req",
-       "cpu_pwr_req",
-       "crt_hsync_pv6",
-       "crt_vsync_pv7",
-       "dap4_din_pp5",
-       "dap4_dout_pp6",
-       "dap4_fs_pp4",
-       "dap4_sclk_pp7",
-       "ddc_scl_pv4",
-       "ddc_sda_pv5",
-       "gen1_i2c_scl_pc4",
-       "gen1_i2c_sda_pc5",
-       "gen2_i2c_scl_pt5",
-       "gen2_i2c_sda_pt6",
-       "gmi_a19_pk7",
-       "gmi_ad0_pg0",
-       "gmi_ad1_pg1",
-       "gmi_ad10_ph2",
-       "gmi_ad11_ph3",
-       "gmi_ad12_ph4",
-       "gmi_ad13_ph5",
-       "gmi_ad14_ph6",
-       "gmi_ad15_ph7",
-       "gmi_ad2_pg2",
-       "gmi_ad3_pg3",
-       "gmi_ad4_pg4",
-       "gmi_ad5_pg5",
-       "gmi_ad6_pg6",
-       "gmi_ad7_pg7",
-       "gmi_ad8_ph0",
-       "gmi_ad9_ph1",
-       "gmi_adv_n_pk0",
-       "gmi_clk_pk1",
-       "gmi_cs2_n_pk3",
-       "gmi_cs4_n_pk2",
-       "gmi_dqs_pi2",
-       "gmi_iordy_pi5",
-       "gmi_oe_n_pi1",
-       "gmi_rst_n_pi4",
-       "gmi_wait_pi7",
-       "gmi_wr_n_pi0",
-       "pcc2",
-       "pu0",
-       "pu1",
-       "pu2",
-       "pu3",
-       "pu4",
-       "pu5",
-       "pu6",
-       "pv0",
-       "pv1",
-       "pv2",
-       "pv3",
-       "hdmi_cec_pee3",
-       "hdmi_int_pn7",
-       "jtag_rtck_pu7",
-       "kb_col2_pq2",
-       "kb_col3_pq3",
-       "kb_col4_pq4",
-       "kb_col5_pq5",
-       "kb_row0_pr0",
-       "kb_row1_pr1",
-       "kb_row2_pr2",
-       "kb_row4_pr4",
-       "lcd_cs0_n_pn4",
-       "lcd_cs1_n_pw0",
-       "lcd_d0_pe0",
-       "lcd_d1_pe1",
-       "lcd_d10_pf2",
-       "lcd_d11_pf3",
-       "lcd_d12_pf4",
-       "lcd_d13_pf5",
-       "lcd_d14_pf6",
-       "lcd_d15_pf7",
-       "lcd_d16_pm0",
-       "lcd_d17_pm1",
-       "lcd_d18_pm2",
-       "lcd_d19_pm3",
-       "lcd_d2_pe2",
-       "lcd_d20_pm4",
-       "lcd_d21_pm5",
-       "lcd_d22_pm6",
-       "lcd_d23_pm7",
-       "lcd_d3_pe3",
-       "lcd_d4_pe4",
-       "lcd_d5_pe5",
-       "lcd_d6_pe6",
-       "lcd_d7_pe7",
-       "lcd_d8_pf0",
-       "lcd_d9_pf1",
-       "lcd_dc0_pn6",
-       "lcd_dc1_pd2",
-       "lcd_de_pj1",
-       "lcd_hsync_pj3",
-       "lcd_m1_pw1",
-       "lcd_pclk_pb3",
-       "lcd_pwr1_pc1",
-       "lcd_sdin_pz2",
-       "lcd_vsync_pj4",
-       "owr",
-       "pex_l0_clkreq_n_pdd2",
-       "pex_l0_prsnt_n_pdd0",
-       "pex_l0_rst_n_pdd1",
-       "pex_l1_clkreq_n_pdd6",
-       "pex_l1_prsnt_n_pdd4",
-       "pex_l1_rst_n_pdd5",
-       "pex_l2_clkreq_n_pcc7",
-       "pex_l2_prsnt_n_pdd7",
-       "pex_l2_rst_n_pcc6",
-       "pex_wake_n_pdd3",
-       "pwr_i2c_scl_pz6",
-       "pwr_i2c_sda_pz7",
-       "pwr_int_n",
-       "spi1_miso_px7",
-       "sys_clk_req_pz5",
-       "uart3_cts_n_pa1",
-       "uart3_rts_n_pc0",
-       "uart3_rxd_pw7",
-       "uart3_txd_pw6",
-       "vi_d0_pt4",
-       "vi_d1_pd5",
-       "vi_d10_pt2",
-       "vi_d11_pt3",
-       "vi_d2_pl0",
-       "vi_d3_pl1",
-       "vi_d4_pl2",
-       "vi_d5_pl3",
-       "vi_d6_pl4",
-       "vi_d7_pl5",
-       "vi_d8_pl6",
-       "vi_d9_pl7",
-       "vi_hsync_pd7",
-       "vi_pclk_pt0",
-       "vi_vsync_pd6",
-};
-
-static const char * const rtck_groups[] = {
-       "jtag_rtck_pu7",
-};
-
-static const char * const sata_groups[] = {
-       "gmi_cs6_n_pi3",
-};
-
-static const char * const sdmmc1_groups[] = {
-       "sdmmc1_clk_pz0",
-       "sdmmc1_cmd_pz1",
-       "sdmmc1_dat0_py7",
-       "sdmmc1_dat1_py6",
-       "sdmmc1_dat2_py5",
-       "sdmmc1_dat3_py4",
-};
-
-static const char * const sdmmc2_groups[] = {
-       "dap1_din_pn1",
-       "dap1_dout_pn2",
-       "dap1_fs_pn0",
-       "dap1_sclk_pn3",
-       "kb_row10_ps2",
-       "kb_row11_ps3",
-       "kb_row12_ps4",
-       "kb_row13_ps5",
-       "kb_row14_ps6",
-       "kb_row15_ps7",
-       "kb_row6_pr6",
-       "kb_row7_pr7",
-       "kb_row8_ps0",
-       "kb_row9_ps1",
-       "spdif_in_pk6",
-       "spdif_out_pk5",
-       "vi_d1_pd5",
-       "vi_d2_pl0",
-       "vi_d3_pl1",
-       "vi_d4_pl2",
-       "vi_d5_pl3",
-       "vi_d6_pl4",
-       "vi_d7_pl5",
-       "vi_d8_pl6",
-       "vi_d9_pl7",
-       "vi_pclk_pt0",
-};
-
-static const char * const sdmmc3_groups[] = {
-       "sdmmc3_clk_pa6",
-       "sdmmc3_cmd_pa7",
-       "sdmmc3_dat0_pb7",
-       "sdmmc3_dat1_pb6",
-       "sdmmc3_dat2_pb5",
-       "sdmmc3_dat3_pb4",
-       "sdmmc3_dat4_pd1",
-       "sdmmc3_dat5_pd0",
-       "sdmmc3_dat6_pd3",
-       "sdmmc3_dat7_pd4",
-};
-
-static const char * const sdmmc4_groups[] = {
-       "cam_i2c_scl_pbb1",
-       "cam_i2c_sda_pbb2",
-       "cam_mclk_pcc0",
-       "pbb0",
-       "pbb3",
-       "pbb4",
-       "pbb5",
-       "pbb6",
-       "pbb7",
-       "pcc1",
-       "sdmmc4_clk_pcc4",
-       "sdmmc4_cmd_pt7",
-       "sdmmc4_dat0_paa0",
-       "sdmmc4_dat1_paa1",
-       "sdmmc4_dat2_paa2",
-       "sdmmc4_dat3_paa3",
-       "sdmmc4_dat4_paa4",
-       "sdmmc4_dat5_paa5",
-       "sdmmc4_dat6_paa6",
-       "sdmmc4_dat7_paa7",
-       "sdmmc4_rst_n_pcc3",
-};
-
-static const char * const spdif_groups[] = {
-       "sdmmc3_dat6_pd3",
-       "sdmmc3_dat7_pd4",
-       "spdif_in_pk6",
-       "spdif_out_pk5",
-       "uart2_rxd_pc3",
-       "uart2_txd_pc2",
-};
-
-static const char * const spi1_groups[] = {
-       "spi1_cs0_n_px6",
-       "spi1_miso_px7",
-       "spi1_mosi_px4",
-       "spi1_sck_px5",
-       "ulpi_clk_py0",
-       "ulpi_dir_py1",
-       "ulpi_nxt_py2",
-       "ulpi_stp_py3",
-};
-
-static const char * const spi2_groups[] = {
-       "sdmmc3_cmd_pa7",
-       "sdmmc3_dat4_pd1",
-       "sdmmc3_dat5_pd0",
-       "sdmmc3_dat6_pd3",
-       "sdmmc3_dat7_pd4",
-       "spi1_cs0_n_px6",
-       "spi1_mosi_px4",
-       "spi1_sck_px5",
-       "spi2_cs0_n_px3",
-       "spi2_cs1_n_pw2",
-       "spi2_cs2_n_pw3",
-       "spi2_miso_px1",
-       "spi2_mosi_px0",
-       "spi2_sck_px2",
-       "ulpi_data4_po5",
-       "ulpi_data5_po6",
-       "ulpi_data6_po7",
-       "ulpi_data7_po0",
-};
-
-static const char * const spi2_alt_groups[] = {
-       "spi1_cs0_n_px6",
-       "spi1_miso_px7",
-       "spi1_mosi_px4",
-       "spi1_sck_px5",
-       "spi2_cs1_n_pw2",
-       "spi2_cs2_n_pw3",
-};
-
-static const char * const spi3_groups[] = {
-       "sdmmc3_clk_pa6",
-       "sdmmc3_dat0_pb7",
-       "sdmmc3_dat1_pb6",
-       "sdmmc3_dat2_pb5",
-       "sdmmc3_dat3_pb4",
-       "sdmmc4_dat0_paa0",
-       "sdmmc4_dat1_paa1",
-       "sdmmc4_dat2_paa2",
-       "sdmmc4_dat3_paa3",
-       "spi1_miso_px7",
-       "spi2_cs0_n_px3",
-       "spi2_cs1_n_pw2",
-       "spi2_cs2_n_pw3",
-       "spi2_miso_px1",
-       "spi2_mosi_px0",
-       "spi2_sck_px2",
-       "ulpi_data0_po1",
-       "ulpi_data1_po2",
-       "ulpi_data2_po3",
-       "ulpi_data3_po4",
-};
-
-static const char * const spi4_groups[] = {
-       "gmi_a16_pj7",
-       "gmi_a17_pb0",
-       "gmi_a18_pb1",
-       "gmi_a19_pk7",
-       "sdmmc3_dat4_pd1",
-       "sdmmc3_dat5_pd0",
-       "sdmmc3_dat6_pd3",
-       "sdmmc3_dat7_pd4",
-       "uart2_cts_n_pj5",
-       "uart2_rts_n_pj6",
-       "uart2_rxd_pc3",
-       "uart2_txd_pc2",
-};
-
-static const char * const spi5_groups[] = {
-       "lcd_cs0_n_pn4",
-       "lcd_cs1_n_pw0",
-       "lcd_pwr0_pb2",
-       "lcd_pwr2_pc6",
-       "lcd_sck_pz4",
-       "lcd_sdin_pz2",
-       "lcd_sdout_pn5",
-       "lcd_wr_n_pz3",
-};
-
-static const char * const spi6_groups[] = {
-       "spi2_cs0_n_px3",
-       "spi2_miso_px1",
-       "spi2_mosi_px0",
-       "spi2_sck_px2",
-};
-
-static const char * const sysclk_groups[] = {
-       "sys_clk_req_pz5",
-};
-
-static const char * const test_groups[] = {
-       "kb_col0_pq0",
-       "kb_col1_pq1",
-};
-
-static const char * const trace_groups[] = {
-       "kb_col0_pq0",
-       "kb_col1_pq1",
-       "kb_col2_pq2",
-       "kb_col3_pq3",
-       "kb_col4_pq4",
-       "kb_col5_pq5",
-       "kb_col6_pq6",
-       "kb_col7_pq7",
-       "kb_row4_pr4",
-       "kb_row5_pr5",
-};
-
-static const char * const uarta_groups[] = {
-       "pu0",
-       "pu1",
-       "pu2",
-       "pu3",
-       "pu4",
-       "pu5",
-       "pu6",
-       "sdmmc1_clk_pz0",
-       "sdmmc1_cmd_pz1",
-       "sdmmc1_dat0_py7",
-       "sdmmc1_dat1_py6",
-       "sdmmc1_dat2_py5",
-       "sdmmc1_dat3_py4",
-       "sdmmc3_clk_pa6",
-       "sdmmc3_cmd_pa7",
-       "uart2_cts_n_pj5",
-       "uart2_rts_n_pj6",
-       "uart2_rxd_pc3",
-       "uart2_txd_pc2",
-       "ulpi_data0_po1",
-       "ulpi_data1_po2",
-       "ulpi_data2_po3",
-       "ulpi_data3_po4",
-       "ulpi_data4_po5",
-       "ulpi_data5_po6",
-       "ulpi_data6_po7",
-       "ulpi_data7_po0",
-};
-
-static const char * const uartb_groups[] = {
-       "uart2_cts_n_pj5",
-       "uart2_rts_n_pj6",
-       "uart2_rxd_pc3",
-       "uart2_txd_pc2",
-};
-
-static const char * const uartc_groups[] = {
-       "uart3_cts_n_pa1",
-       "uart3_rts_n_pc0",
-       "uart3_rxd_pw7",
-       "uart3_txd_pw6",
-};
-
-static const char * const uartd_groups[] = {
-       "gmi_a16_pj7",
-       "gmi_a17_pb0",
-       "gmi_a18_pb1",
-       "gmi_a19_pk7",
-       "ulpi_clk_py0",
-       "ulpi_dir_py1",
-       "ulpi_nxt_py2",
-       "ulpi_stp_py3",
-};
-
-static const char * const uarte_groups[] = {
-       "sdmmc1_dat0_py7",
-       "sdmmc1_dat1_py6",
-       "sdmmc1_dat2_py5",
-       "sdmmc1_dat3_py4",
-       "sdmmc4_dat0_paa0",
-       "sdmmc4_dat1_paa1",
-       "sdmmc4_dat2_paa2",
-       "sdmmc4_dat3_paa3",
-};
-
-static const char * const ulpi_groups[] = {
-       "ulpi_clk_py0",
-       "ulpi_data0_po1",
-       "ulpi_data1_po2",
-       "ulpi_data2_po3",
-       "ulpi_data3_po4",
-       "ulpi_data4_po5",
-       "ulpi_data5_po6",
-       "ulpi_data6_po7",
-       "ulpi_data7_po0",
-       "ulpi_dir_py1",
-       "ulpi_nxt_py2",
-       "ulpi_stp_py3",
-};
-
-static const char * const vgp1_groups[] = {
-       "cam_i2c_scl_pbb1",
-};
-
-static const char * const vgp2_groups[] = {
-       "cam_i2c_sda_pbb2",
-};
-
-static const char * const vgp3_groups[] = {
-       "pbb3",
-       "sdmmc4_dat5_paa5",
-};
-
-static const char * const vgp4_groups[] = {
-       "pbb4",
-       "sdmmc4_dat6_paa6",
-};
-
-static const char * const vgp5_groups[] = {
-       "pbb5",
-       "sdmmc4_dat7_paa7",
-};
-
-static const char * const vgp6_groups[] = {
-       "pbb6",
-       "sdmmc4_rst_n_pcc3",
-};
-
-static const char * const vi_groups[] = {
-       "cam_mclk_pcc0",
-       "vi_d0_pt4",
-       "vi_d1_pd5",
-       "vi_d10_pt2",
-       "vi_d11_pt3",
-       "vi_d2_pl0",
-       "vi_d3_pl1",
-       "vi_d4_pl2",
-       "vi_d5_pl3",
-       "vi_d6_pl4",
-       "vi_d7_pl5",
-       "vi_d8_pl6",
-       "vi_d9_pl7",
-       "vi_hsync_pd7",
-       "vi_mclk_pt1",
-       "vi_pclk_pt0",
-       "vi_vsync_pd6",
-};
-
-static const char * const vi_alt1_groups[] = {
-       "cam_mclk_pcc0",
-       "vi_mclk_pt1",
-};
-
-static const char * const vi_alt2_groups[] = {
-       "vi_mclk_pt1",
-};
-
-static const char * const vi_alt3_groups[] = {
-       "cam_mclk_pcc0",
-       "vi_mclk_pt1",
-};
 
 #define FUNCTION(fname)                                        \
        {                                               \
                .name = #fname,                         \
-               .groups = fname##_groups,               \
-               .ngroups = ARRAY_SIZE(fname##_groups),  \
        }
 
-static const struct tegra_function tegra30_functions[] = {
+static struct tegra_function tegra30_functions[] = {
        FUNCTION(blink),
        FUNCTION(cec),
        FUNCTION(clk_12m_out),