aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Warren <swarren@nvidia.com>2014-03-07 14:22:16 -0500
committerLinus Walleij <linus.walleij@linaro.org>2014-03-12 10:23:41 -0400
commitce4362546612c00a059c255f5c55373d6ee1022a (patch)
tree88d22d243ae5e6b467caaeb7ab07af6f20f57632
parentedfab368c8087ae574d6fa49fdc85068a116b79b (diff)
pinctrl: tegra: dynamically calculate function list of groups
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>
-rw-r--r--drivers/pinctrl/pinctrl-tegra.c38
-rw-r--r--drivers/pinctrl/pinctrl-tegra.h4
-rw-r--r--drivers/pinctrl/pinctrl-tegra114.c931
-rw-r--r--drivers/pinctrl/pinctrl-tegra124.c1102
-rw-r--r--drivers/pinctrl/pinctrl-tegra20.c627
-rw-r--r--drivers/pinctrl/pinctrl-tegra30.c1242
6 files changed, 44 insertions, 3900 deletions
diff --git a/drivers/pinctrl/pinctrl-tegra.c b/drivers/pinctrl/pinctrl-tegra.c
index e767355ab0ad..65458096f41e 100644
--- a/drivers/pinctrl/pinctrl-tegra.c
+++ b/drivers/pinctrl/pinctrl-tegra.c
@@ -39,6 +39,7 @@ struct tegra_pmx {
39 struct pinctrl_dev *pctl; 39 struct pinctrl_dev *pctl;
40 40
41 const struct tegra_pinctrl_soc_data *soc; 41 const struct tegra_pinctrl_soc_data *soc;
42 const char **group_pins;
42 43
43 int nbanks; 44 int nbanks;
44 void __iomem **regs; 45 void __iomem **regs;
@@ -620,6 +621,8 @@ int tegra_pinctrl_probe(struct platform_device *pdev,
620 struct tegra_pmx *pmx; 621 struct tegra_pmx *pmx;
621 struct resource *res; 622 struct resource *res;
622 int i; 623 int i;
624 const char **group_pins;
625 int fn, gn, gfn;
623 626
624 pmx = devm_kzalloc(&pdev->dev, sizeof(*pmx), GFP_KERNEL); 627 pmx = devm_kzalloc(&pdev->dev, sizeof(*pmx), GFP_KERNEL);
625 if (!pmx) { 628 if (!pmx) {
@@ -629,6 +632,41 @@ int tegra_pinctrl_probe(struct platform_device *pdev,
629 pmx->dev = &pdev->dev; 632 pmx->dev = &pdev->dev;
630 pmx->soc = soc_data; 633 pmx->soc = soc_data;
631 634
635 /*
636 * Each mux group will appear in 4 functions' list of groups.
637 * This over-allocates slightly, since not all groups are mux groups.
638 */
639 pmx->group_pins = devm_kzalloc(&pdev->dev,
640 soc_data->ngroups * 4 * sizeof(*pmx->group_pins),
641 GFP_KERNEL);
642 if (!pmx->group_pins)
643 return -ENOMEM;
644
645 group_pins = pmx->group_pins;
646 for (fn = 0; fn < soc_data->nfunctions; fn++) {
647 struct tegra_function *func = &soc_data->functions[fn];
648
649 func->groups = group_pins;
650
651 for (gn = 0; gn < soc_data->ngroups; gn++) {
652 const struct tegra_pingroup *g = &soc_data->groups[gn];
653
654 if (g->mux_reg == -1)
655 continue;
656
657 for (gfn = 0; gfn < 4; gfn++)
658 if (g->funcs[gfn] == fn)
659 break;
660 if (gfn == 4)
661 continue;
662
663 BUG_ON(group_pins - pmx->group_pins >=
664 soc_data->ngroups * 4);
665 *group_pins++ = g->name;
666 func->ngroups++;
667 }
668 }
669
632 tegra_pinctrl_gpio_range.npins = pmx->soc->ngpios; 670 tegra_pinctrl_gpio_range.npins = pmx->soc->ngpios;
633 tegra_pinctrl_desc.name = dev_name(&pdev->dev); 671 tegra_pinctrl_desc.name = dev_name(&pdev->dev);
634 tegra_pinctrl_desc.pins = pmx->soc->pins; 672 tegra_pinctrl_desc.pins = pmx->soc->pins;
diff --git a/drivers/pinctrl/pinctrl-tegra.h b/drivers/pinctrl/pinctrl-tegra.h
index 817f7061dc4c..6053832d433e 100644
--- a/drivers/pinctrl/pinctrl-tegra.h
+++ b/drivers/pinctrl/pinctrl-tegra.h
@@ -72,7 +72,7 @@ enum tegra_pinconf_tristate {
72 */ 72 */
73struct tegra_function { 73struct tegra_function {
74 const char *name; 74 const char *name;
75 const char * const *groups; 75 const char **groups;
76 unsigned ngroups; 76 unsigned ngroups;
77}; 77};
78 78
@@ -193,7 +193,7 @@ struct tegra_pinctrl_soc_data {
193 unsigned ngpios; 193 unsigned ngpios;
194 const struct pinctrl_pin_desc *pins; 194 const struct pinctrl_pin_desc *pins;
195 unsigned npins; 195 unsigned npins;
196 const struct tegra_function *functions; 196 struct tegra_function *functions;
197 unsigned nfunctions; 197 unsigned nfunctions;
198 const struct tegra_pingroup *groups; 198 const struct tegra_pingroup *groups;
199 unsigned ngroups; 199 unsigned ngroups;
diff --git a/drivers/pinctrl/pinctrl-tegra114.c b/drivers/pinctrl/pinctrl-tegra114.c
index 46da27ff2d64..1c9346f28b84 100644
--- a/drivers/pinctrl/pinctrl-tegra114.c
+++ b/drivers/pinctrl/pinctrl-tegra114.c
@@ -1420,941 +1420,12 @@ enum tegra_mux {
1420 TEGRA_MUX_VI_ALT3, 1420 TEGRA_MUX_VI_ALT3,
1421}; 1421};
1422 1422
1423static const char * const blink_groups[] = {
1424 "clk_32k_out_pa0",
1425};
1426
1427static const char * const cec_groups[] = {
1428 "hdmi_cec_pee3",
1429};
1430
1431static const char * const cldvfs_groups[] = {
1432 "gmi_ad9_ph1",
1433 "gmi_ad10_ph2",
1434 "kb_row7_pr7",
1435 "kb_row8_ps0",
1436 "dvfs_pwm_px0",
1437 "dvfs_clk_px2",
1438};
1439
1440static const char * const clk12_groups[] = {
1441 "sdmmc1_wp_n_pv3",
1442 "sdmmc1_clk_pz0",
1443};
1444
1445static const char * const cpu_groups[] = {
1446 "cpu_pwr_req",
1447};
1448
1449static const char * const dap_groups[] = {
1450 "clk1_req_pee2",
1451 "clk2_req_pcc5",
1452};
1453
1454static const char * const dap1_groups[] = {
1455 "clk1_req_pee2",
1456};
1457
1458static const char * const dap2_groups[] = {
1459 "clk1_out_pw4",
1460 "gpio_x4_aud_px4",
1461};
1462
1463static const char * const dev3_groups[] = {
1464 "clk3_req_pee1",
1465};
1466
1467static const char * const displaya_groups[] = {
1468 "dap3_fs_pp0",
1469 "dap3_din_pp1",
1470 "dap3_dout_pp2",
1471 "dap3_sclk_pp3",
1472 "uart3_rts_n_pc0",
1473 "pu3",
1474 "pu4",
1475 "pu5",
1476 "pbb3",
1477 "pbb4",
1478 "pbb5",
1479 "pbb6",
1480 "kb_row3_pr3",
1481 "kb_row4_pr4",
1482 "kb_row5_pr5",
1483 "kb_row6_pr6",
1484 "kb_col3_pq3",
1485 "sdmmc3_dat2_pb5",
1486};
1487
1488static const char * const displaya_alt_groups[] = {
1489 "kb_row6_pr6",
1490};
1491
1492static const char * const displayb_groups[] = {
1493 "dap3_fs_pp0",
1494 "dap3_din_pp1",
1495 "dap3_dout_pp2",
1496 "dap3_sclk_pp3",
1497 "pu3",
1498 "pu4",
1499 "pu5",
1500 "pu6",
1501 "pbb3",
1502 "pbb4",
1503 "pbb5",
1504 "pbb6",
1505 "kb_row3_pr3",
1506 "kb_row4_pr4",
1507 "kb_row5_pr5",
1508 "kb_row6_pr6",
1509 "sdmmc3_dat3_pb4",
1510};
1511
1512static const char * const dtv_groups[] = {
1513 "uart3_cts_n_pa1",
1514 "uart3_rts_n_pc0",
1515 "dap4_fs_pp4",
1516 "dap4_dout_pp6",
1517 "gmi_wait_pi7",
1518 "gmi_ad8_ph0",
1519 "gmi_ad14_ph6",
1520 "gmi_ad15_ph7",
1521};
1522
1523static const char * const emc_dll_groups[] = {
1524 "kb_col0_pq0",
1525 "kb_col1_pq1",
1526};
1527
1528static const char * const extperiph1_groups[] = {
1529 "clk1_out_pw4",
1530};
1531
1532static const char * const extperiph2_groups[] = {
1533 "clk2_out_pw5",
1534};
1535
1536static const char * const extperiph3_groups[] = {
1537 "clk3_out_pee0",
1538};
1539
1540static const char * const gmi_groups[] = {
1541 "gmi_wp_n_pc7",
1542
1543 "gmi_ad0_pg0",
1544 "gmi_ad1_pg1",
1545 "gmi_ad2_pg2",
1546 "gmi_ad3_pg3",
1547 "gmi_ad4_pg4",
1548 "gmi_ad5_pg5",
1549 "gmi_ad6_pg6",
1550 "gmi_ad7_pg7",
1551 "gmi_ad8_ph0",
1552 "gmi_ad9_ph1",
1553 "gmi_ad10_ph2",
1554 "gmi_ad11_ph3",
1555 "gmi_ad12_ph4",
1556 "gmi_ad13_ph5",
1557 "gmi_ad14_ph6",
1558 "gmi_ad15_ph7",
1559 "gmi_wr_n_pi0",
1560 "gmi_oe_n_pi1",
1561 "gmi_cs6_n_pi3",
1562 "gmi_rst_n_pi4",
1563 "gmi_iordy_pi5",
1564 "gmi_cs7_n_pi6",
1565 "gmi_wait_pi7",
1566 "gmi_cs0_n_pj0",
1567 "gmi_cs1_n_pj2",
1568 "gmi_dqs_p_pj3",
1569 "gmi_adv_n_pk0",
1570 "gmi_clk_pk1",
1571 "gmi_cs4_n_pk2",
1572 "gmi_cs2_n_pk3",
1573 "gmi_cs3_n_pk4",
1574 "gmi_a16_pj7",
1575 "gmi_a17_pb0",
1576 "gmi_a18_pb1",
1577 "gmi_a19_pk7",
1578 "gen2_i2c_scl_pt5",
1579 "gen2_i2c_sda_pt6",
1580 "sdmmc4_dat0_paa0",
1581 "sdmmc4_dat1_paa1",
1582 "sdmmc4_dat2_paa2",
1583 "sdmmc4_dat3_paa3",
1584 "sdmmc4_dat4_paa4",
1585 "sdmmc4_dat5_paa5",
1586 "sdmmc4_dat6_paa6",
1587 "sdmmc4_dat7_paa7",
1588 "sdmmc4_clk_pcc4",
1589 "sdmmc4_cmd_pt7",
1590 "dap1_fs_pn0",
1591 "dap1_din_pn1",
1592 "dap1_dout_pn2",
1593 "dap1_sclk_pn3",
1594};
1595
1596static const char * const gmi_alt_groups[] = {
1597 "gmi_wp_n_pc7",
1598 "gmi_cs3_n_pk4",
1599 "gmi_a16_pj7",
1600};
1601
1602static const char * const hda_groups[] = {
1603 "dap1_fs_pn0",
1604 "dap1_din_pn1",
1605 "dap1_dout_pn2",
1606 "dap1_sclk_pn3",
1607 "dap2_fs_pa2",
1608 "dap2_sclk_pa3",
1609 "dap2_din_pa4",
1610 "dap2_dout_pa5",
1611};
1612
1613static const char * const hsi_groups[] = {
1614 "ulpi_data0_po1",
1615 "ulpi_data1_po2",
1616 "ulpi_data2_po3",
1617 "ulpi_data3_po4",
1618 "ulpi_data4_po5",
1619 "ulpi_data5_po6",
1620 "ulpi_data6_po7",
1621 "ulpi_data7_po0",
1622};
1623
1624static const char * const i2c1_groups[] = {
1625 "gen1_i2c_scl_pc4",
1626 "gen1_i2c_sda_pc5",
1627 "gpio_w2_aud_pw2",
1628 "gpio_w3_aud_pw3",
1629};
1630
1631static const char * const i2c2_groups[] = {
1632 "gen2_i2c_scl_pt5",
1633 "gen2_i2c_sda_pt6",
1634};
1635
1636static const char * const i2c3_groups[] = {
1637 "cam_i2c_scl_pbb1",
1638 "cam_i2c_sda_pbb2",
1639};
1640
1641static const char * const i2c4_groups[] = {
1642 "ddc_scl_pv4",
1643 "ddc_sda_pv5",
1644};
1645
1646static const char * const i2cpwr_groups[] = {
1647 "pwr_i2c_scl_pz6",
1648 "pwr_i2c_sda_pz7",
1649};
1650
1651static const char * const i2s0_groups[] = {
1652 "dap1_fs_pn0",
1653 "dap1_din_pn1",
1654 "dap1_dout_pn2",
1655 "dap1_sclk_pn3",
1656};
1657
1658static const char * const i2s1_groups[] = {
1659 "dap2_fs_pa2",
1660 "dap2_sclk_pa3",
1661 "dap2_din_pa4",
1662 "dap2_dout_pa5",
1663};
1664
1665static const char * const i2s2_groups[] = {
1666 "dap3_fs_pp0",
1667 "dap3_din_pp1",
1668 "dap3_dout_pp2",
1669 "dap3_sclk_pp3",
1670};
1671
1672static const char * const i2s3_groups[] = {
1673 "dap4_fs_pp4",
1674 "dap4_din_pp5",
1675 "dap4_dout_pp6",
1676 "dap4_sclk_pp7",
1677};
1678
1679static const char * const i2s4_groups[] = {
1680 "pcc1",
1681 "pbb0",
1682 "pbb7",
1683 "pcc2",
1684};
1685
1686static const char * const irda_groups[] = {
1687 "uart2_rxd_pc3",
1688 "uart2_txd_pc2",
1689};
1690
1691static const char * const kbc_groups[] = {
1692 "kb_row0_pr0",
1693 "kb_row1_pr1",
1694 "kb_row2_pr2",
1695 "kb_row3_pr3",
1696 "kb_row4_pr4",
1697 "kb_row5_pr5",
1698 "kb_row6_pr6",
1699 "kb_row7_pr7",
1700 "kb_row8_ps0",
1701 "kb_row9_ps1",
1702 "kb_row10_ps2",
1703 "kb_col0_pq0",
1704 "kb_col1_pq1",
1705 "kb_col2_pq2",
1706 "kb_col3_pq3",
1707 "kb_col4_pq4",
1708 "kb_col5_pq5",
1709 "kb_col6_pq6",
1710 "kb_col7_pq7",
1711};
1712
1713static const char * const nand_groups[] = {
1714 "gmi_wp_n_pc7",
1715 "gmi_wait_pi7",
1716 "gmi_adv_n_pk0",
1717 "gmi_clk_pk1",
1718 "gmi_cs0_n_pj0",
1719 "gmi_cs1_n_pj2",
1720 "gmi_cs2_n_pk3",
1721 "gmi_cs3_n_pk4",
1722 "gmi_cs4_n_pk2",
1723 "gmi_cs6_n_pi3",
1724 "gmi_cs7_n_pi6",
1725 "gmi_ad0_pg0",
1726 "gmi_ad1_pg1",
1727 "gmi_ad2_pg2",
1728 "gmi_ad3_pg3",
1729 "gmi_ad4_pg4",
1730 "gmi_ad5_pg5",
1731 "gmi_ad6_pg6",
1732 "gmi_ad7_pg7",
1733 "gmi_ad8_ph0",
1734 "gmi_ad9_ph1",
1735 "gmi_ad10_ph2",
1736 "gmi_ad11_ph3",
1737 "gmi_ad12_ph4",
1738 "gmi_ad13_ph5",
1739 "gmi_ad14_ph6",
1740 "gmi_ad15_ph7",
1741 "gmi_wr_n_pi0",
1742 "gmi_oe_n_pi1",
1743 "gmi_dqs_p_pj3",
1744 "gmi_rst_n_pi4",
1745};
1746
1747static const char * const nand_alt_groups[] = {
1748 "gmi_cs6_n_pi3",
1749 "gmi_cs7_n_pi6",
1750 "gmi_rst_n_pi4",
1751};
1752
1753static const char * const owr_groups[] = {
1754 "pu0",
1755 "kb_col4_pq4",
1756 "owr",
1757 "sdmmc3_cd_n_pv2",
1758};
1759
1760static const char * const pmi_groups[] = {
1761 "pwr_int_n",
1762};
1763
1764static const char * const pwm0_groups[] = {
1765 "sdmmc1_dat2_py5",
1766 "uart3_rts_n_pc0",
1767 "pu3",
1768 "gmi_ad8_ph0",
1769 "sdmmc3_dat3_pb4",
1770};
1771
1772static const char * const pwm1_groups[] = {
1773 "sdmmc1_dat1_py6",
1774 "pu4",
1775 "gmi_ad9_ph1",
1776 "sdmmc3_dat2_pb5",
1777};
1778
1779static const char * const pwm2_groups[] = {
1780 "pu5",
1781 "gmi_ad10_ph2",
1782 "kb_col3_pq3",
1783 "sdmmc3_dat1_pb6",
1784};
1785
1786static const char * const pwm3_groups[] = {
1787 "pu6",
1788 "gmi_ad11_ph3",
1789 "sdmmc3_cmd_pa7",
1790};
1791
1792static const char * const pwron_groups[] = {
1793 "core_pwr_req",
1794};
1795
1796static const char * const reset_out_n_groups[] = {
1797 "reset_out_n",
1798};
1799
1800static const char * const rsvd1_groups[] = {
1801 "pv1",
1802 "hdmi_int_pn7",
1803 "pu1",
1804 "pu2",
1805 "gmi_wp_n_pc7",
1806 "gmi_adv_n_pk0",
1807 "gmi_cs0_n_pj0",
1808 "gmi_cs1_n_pj2",
1809 "gmi_ad0_pg0",
1810 "gmi_ad1_pg1",
1811 "gmi_ad2_pg2",
1812 "gmi_ad3_pg3",
1813 "gmi_ad4_pg4",
1814 "gmi_ad5_pg5",
1815 "gmi_ad6_pg6",
1816 "gmi_ad7_pg7",
1817 "gmi_wr_n_pi0",
1818 "gmi_oe_n_pi1",
1819 "gpio_x4_aud_px4",
1820 "gpio_x5_aud_px5",
1821 "gpio_x7_aud_px7",
1822
1823 "reset_out_n",
1824};
1825
1826static const char * const rsvd2_groups[] = {
1827 "pv0",
1828 "pv1",
1829 "sdmmc1_dat0_py7",
1830 "clk2_out_pw5",
1831 "clk2_req_pcc5",
1832 "hdmi_int_pn7",
1833 "ddc_scl_pv4",
1834 "ddc_sda_pv5",
1835 "uart3_txd_pw6",
1836 "uart3_rxd_pw7",
1837 "gen1_i2c_scl_pc4",
1838 "gen1_i2c_sda_pc5",
1839 "dap4_fs_pp4",
1840 "dap4_din_pp5",
1841 "dap4_dout_pp6",
1842 "dap4_sclk_pp7",
1843 "clk3_out_pee0",
1844 "clk3_req_pee1",
1845 "gmi_iordy_pi5",
1846 "gmi_a17_pb0",
1847 "gmi_a18_pb1",
1848 "gen2_i2c_scl_pt5",
1849 "gen2_i2c_sda_pt6",
1850 "sdmmc4_clk_pcc4",
1851 "sdmmc4_cmd_pt7",
1852 "sdmmc4_dat7_paa7",
1853 "pcc1",
1854 "pbb7",
1855 "pcc2",
1856 "pwr_i2c_scl_pz6",
1857 "pwr_i2c_sda_pz7",
1858 "kb_row0_pr0",
1859 "kb_row1_pr1",
1860 "kb_row2_pr2",
1861 "kb_row7_pr7",
1862 "kb_row8_ps0",
1863 "kb_row9_ps1",
1864 "kb_row10_ps2",
1865 "kb_col1_pq1",
1866 "kb_col2_pq2",
1867 "kb_col5_pq5",
1868 "kb_col6_pq6",
1869 "kb_col7_pq7",
1870 "sys_clk_req_pz5",
1871 "core_pwr_req",
1872 "cpu_pwr_req",
1873 "pwr_int_n",
1874 "owr",
1875 "spdif_out_pk5",
1876 "gpio_x1_aud_px1",
1877 "sdmmc3_clk_pa6",
1878 "sdmmc3_dat0_pb7",
1879 "gpio_w2_aud_pw2",
1880 "usb_vbus_en0_pn4",
1881 "usb_vbus_en1_pn5",
1882 "sdmmc3_clk_lb_out_pee4",
1883 "sdmmc3_clk_lb_in_pee5",
1884 "reset_out_n",
1885};
1886
1887static const char * const rsvd3_groups[] = {
1888 "pv0",
1889 "pv1",
1890 "sdmmc1_clk_pz0",
1891 "clk2_out_pw5",
1892 "clk2_req_pcc5",
1893 "hdmi_int_pn7",
1894 "ddc_scl_pv4",
1895 "ddc_sda_pv5",
1896 "uart2_rts_n_pj6",
1897 "uart2_cts_n_pj5",
1898 "uart3_txd_pw6",
1899 "uart3_rxd_pw7",
1900 "pu0",
1901 "pu1",
1902 "pu2",
1903 "gen1_i2c_scl_pc4",
1904 "gen1_i2c_sda_pc5",
1905 "dap4_din_pp5",
1906 "dap4_sclk_pp7",
1907 "clk3_out_pee0",
1908 "clk3_req_pee1",
1909 "pcc1",
1910 "cam_i2c_scl_pbb1",
1911 "cam_i2c_sda_pbb2",
1912 "pbb7",
1913 "pcc2",
1914 "pwr_i2c_scl_pz6",
1915 "pwr_i2c_sda_pz7",
1916 "kb_row0_pr0",
1917 "kb_row1_pr1",
1918 "kb_row2_pr2",
1919 "kb_row3_pr3",
1920 "kb_row9_ps1",
1921 "kb_row10_ps2",
1922 "clk_32k_out_pa0",
1923 "sys_clk_req_pz5",
1924 "core_pwr_req",
1925 "cpu_pwr_req",
1926 "pwr_int_n",
1927 "owr",
1928 "clk1_req_pee2",
1929 "clk1_out_pw4",
1930 "spdif_out_pk5",
1931 "spdif_in_pk6",
1932 "dap2_fs_pa2",
1933 "dap2_sclk_pa3",
1934 "dap2_din_pa4",
1935 "dap2_dout_pa5",
1936 "dvfs_pwm_px0",
1937 "gpio_x1_aud_px1",
1938 "gpio_x3_aud_px3",
1939 "dvfs_clk_px2",
1940 "sdmmc3_clk_pa6",
1941 "sdmmc3_dat0_pb7",
1942 "hdmi_cec_pee3",
1943 "sdmmc3_cd_n_pv2",
1944 "usb_vbus_en0_pn4",
1945 "usb_vbus_en1_pn5",
1946 "sdmmc3_clk_lb_out_pee4",
1947 "sdmmc3_clk_lb_in_pee5",
1948 "reset_out_n",
1949};
1950
1951static const char * const rsvd4_groups[] = {
1952 "pv0",
1953 "pv1",
1954 "sdmmc1_clk_pz0",
1955 "clk2_out_pw5",
1956 "clk2_req_pcc5",
1957 "hdmi_int_pn7",
1958 "ddc_scl_pv4",
1959 "ddc_sda_pv5",
1960 "pu0",
1961 "pu1",
1962 "pu2",
1963 "gen1_i2c_scl_pc4",
1964 "gen1_i2c_sda_pc5",
1965 "dap4_fs_pp4",
1966 "dap4_din_pp5",
1967 "dap4_dout_pp6",
1968 "dap4_sclk_pp7",
1969 "clk3_out_pee0",
1970 "clk3_req_pee1",
1971 "gmi_ad0_pg0",
1972 "gmi_ad1_pg1",
1973 "gmi_ad2_pg2",
1974 "gmi_ad3_pg3",
1975 "gmi_ad4_pg4",
1976 "gmi_ad12_ph4",
1977 "gmi_ad13_ph5",
1978 "gmi_rst_n_pi4",
1979 "gen2_i2c_scl_pt5",
1980 "gen2_i2c_sda_pt6",
1981 "sdmmc4_clk_pcc4",
1982 "sdmmc4_cmd_pt7",
1983 "sdmmc4_dat0_paa0",
1984 "sdmmc4_dat1_paa1",
1985 "sdmmc4_dat2_paa2",
1986 "sdmmc4_dat3_paa3",
1987 "sdmmc4_dat4_paa4",
1988 "sdmmc4_dat5_paa5",
1989 "sdmmc4_dat6_paa6",
1990 "sdmmc4_dat7_paa7",
1991 "cam_mclk_pcc0",
1992 "pcc1",
1993 "cam_i2c_scl_pbb1",
1994 "cam_i2c_sda_pbb2",
1995 "pbb3",
1996 "pbb4",
1997 "pbb5",
1998 "pbb6",
1999 "pbb7",
2000 "pcc2",
2001 "pwr_i2c_scl_pz6",
2002 "pwr_i2c_sda_pz7",
2003 "kb_row0_pr0",
2004 "kb_row1_pr1",
2005 "kb_row2_pr2",
2006 "kb_col2_pq2",
2007 "kb_col5_pq5",
2008 "kb_col6_pq6",
2009 "kb_col7_pq7",
2010 "clk_32k_out_pa0",
2011 "sys_clk_req_pz5",
2012 "core_pwr_req",
2013 "cpu_pwr_req",
2014 "pwr_int_n",
2015 "owr",
2016 "dap1_fs_pn0",
2017 "dap1_din_pn1",
2018 "dap1_dout_pn2",
2019 "dap1_sclk_pn3",
2020 "clk1_req_pee2",
2021 "clk1_out_pw4",
2022 "spdif_in_pk6",
2023 "spdif_out_pk5",
2024 "dap2_fs_pa2",
2025 "dap2_sclk_pa3",
2026 "dap2_din_pa4",
2027 "dap2_dout_pa5",
2028 "dvfs_pwm_px0",
2029 "gpio_x1_aud_px1",
2030 "gpio_x3_aud_px3",
2031 "dvfs_clk_px2",
2032 "gpio_x5_aud_px5",
2033 "gpio_x6_aud_px6",
2034 "gpio_x7_aud_px7",
2035 "sdmmc3_cd_n_pv2",
2036 "usb_vbus_en0_pn4",
2037 "usb_vbus_en1_pn5",
2038 "sdmmc3_clk_lb_in_pee5",
2039 "sdmmc3_clk_lb_out_pee4",
2040};
2041
2042static const char * const sdmmc1_groups[] = {
2043
2044 "sdmmc1_clk_pz0",
2045 "sdmmc1_cmd_pz1",
2046 "sdmmc1_dat3_py4",
2047 "sdmmc1_dat2_py5",
2048 "sdmmc1_dat1_py6",
2049 "sdmmc1_dat0_py7",
2050 "uart3_cts_n_pa1",
2051 "kb_col5_pq5",
2052 "sdmmc1_wp_n_pv3",
2053};
2054
2055static const char * const sdmmc2_groups[] = {
2056 "gmi_iordy_pi5",
2057 "gmi_clk_pk1",
2058 "gmi_cs2_n_pk3",
2059 "gmi_cs3_n_pk4",
2060 "gmi_cs7_n_pi6",
2061 "gmi_ad12_ph4",
2062 "gmi_ad13_ph5",
2063 "gmi_ad14_ph6",
2064 "gmi_ad15_ph7",
2065 "gmi_dqs_p_pj3",
2066};
2067
2068static const char * const sdmmc3_groups[] = {
2069 "kb_col4_pq4",
2070 "sdmmc3_clk_pa6",
2071 "sdmmc3_cmd_pa7",
2072 "sdmmc3_dat0_pb7",
2073 "sdmmc3_dat1_pb6",
2074 "sdmmc3_dat2_pb5",
2075 "sdmmc3_dat3_pb4",
2076 "hdmi_cec_pee3",
2077 "sdmmc3_cd_n_pv2",
2078 "sdmmc3_clk_lb_in_pee5",
2079 "sdmmc3_clk_lb_out_pee4",
2080};
2081
2082static const char * const sdmmc4_groups[] = {
2083 "sdmmc4_clk_pcc4",
2084 "sdmmc4_cmd_pt7",
2085 "sdmmc4_dat0_paa0",
2086 "sdmmc4_dat1_paa1",
2087 "sdmmc4_dat2_paa2",
2088 "sdmmc4_dat3_paa3",
2089 "sdmmc4_dat4_paa4",
2090 "sdmmc4_dat5_paa5",
2091 "sdmmc4_dat6_paa6",
2092 "sdmmc4_dat7_paa7",
2093};
2094
2095static const char * const soc_groups[] = {
2096 "gmi_cs1_n_pj2",
2097 "gmi_oe_n_pi1",
2098 "clk_32k_out_pa0",
2099 "hdmi_cec_pee3",
2100};
2101
2102static const char * const spdif_groups[] = {
2103 "sdmmc1_cmd_pz1",
2104 "sdmmc1_dat3_py4",
2105 "uart2_rxd_pc3",
2106 "uart2_txd_pc2",
2107 "spdif_in_pk6",
2108 "spdif_out_pk5",
2109};
2110
2111static const char * const spi1_groups[] = {
2112 "ulpi_clk_py0",
2113 "ulpi_dir_py1",
2114 "ulpi_nxt_py2",
2115 "ulpi_stp_py3",
2116 "gpio_x3_aud_px3",
2117 "gpio_x4_aud_px4",
2118 "gpio_x5_aud_px5",
2119 "gpio_x6_aud_px6",
2120 "gpio_x7_aud_px7",
2121 "gpio_w3_aud_pw3",
2122};
2123
2124static const char * const spi2_groups[] = {
2125 "ulpi_data4_po5",
2126 "ulpi_data5_po6",
2127 "ulpi_data6_po7",
2128 "ulpi_data7_po0",
2129 "kb_row4_pr4",
2130 "kb_row5_pr5",
2131 "kb_col0_pq0",
2132 "kb_col1_pq1",
2133 "kb_col2_pq2",
2134 "kb_col6_pq6",
2135 "kb_col7_pq7",
2136 "gpio_x4_aud_px4",
2137 "gpio_x5_aud_px5",
2138 "gpio_x6_aud_px6",
2139 "gpio_x7_aud_px7",
2140 "gpio_w2_aud_pw2",
2141 "gpio_w3_aud_pw3",
2142};
2143
2144static const char * const spi3_groups[] = {
2145 "ulpi_data0_po1",
2146 "ulpi_data1_po2",
2147 "ulpi_data2_po3",
2148 "ulpi_data3_po4",
2149 "sdmmc4_dat0_paa0",
2150 "sdmmc4_dat1_paa1",
2151 "sdmmc4_dat2_paa2",
2152 "sdmmc4_dat3_paa3",
2153 "sdmmc4_dat4_paa4",
2154 "sdmmc4_dat5_paa5",
2155 "sdmmc4_dat6_paa6",
2156 "sdmmc3_clk_pa6",
2157 "sdmmc3_cmd_pa7",
2158 "sdmmc3_dat0_pb7",
2159 "sdmmc3_dat1_pb6",
2160 "sdmmc3_dat2_pb5",
2161 "sdmmc3_dat3_pb4",
2162};
2163
2164static const char * const spi4_groups[] = {
2165 "sdmmc1_cmd_pz1",
2166 "sdmmc1_dat3_py4",
2167 "sdmmc1_dat2_py5",
2168 "sdmmc1_dat1_py6",
2169 "sdmmc1_dat0_py7",
2170 "uart2_rxd_pc3",
2171 "uart2_txd_pc2",
2172 "uart2_rts_n_pj6",
2173 "uart2_cts_n_pj5",
2174 "uart3_txd_pw6",
2175 "uart3_rxd_pw7",
2176 "uart3_cts_n_pa1",
2177 "gmi_wait_pi7",
2178 "gmi_cs6_n_pi3",
2179 "gmi_ad5_pg5",
2180 "gmi_ad6_pg6",
2181 "gmi_ad7_pg7",
2182 "gmi_a19_pk7",
2183 "gmi_wr_n_pi0",
2184 "sdmmc1_wp_n_pv3",
2185};
2186
2187static const char * const spi5_groups[] = {
2188 "ulpi_clk_py0",
2189 "ulpi_dir_py1",
2190 "ulpi_nxt_py2",
2191 "ulpi_stp_py3",
2192 "dap3_fs_pp0",
2193 "dap3_din_pp1",
2194 "dap3_dout_pp2",
2195 "dap3_sclk_pp3",
2196};
2197
2198static const char * const spi6_groups[] = {
2199 "dvfs_pwm_px0",
2200 "gpio_x1_aud_px1",
2201 "gpio_x3_aud_px3",
2202 "dvfs_clk_px2",
2203 "gpio_x6_aud_px6",
2204 "gpio_w2_aud_pw2",
2205 "gpio_w3_aud_pw3",
2206};
2207
2208static const char * const sysclk_groups[] = {
2209 "sys_clk_req_pz5",
2210};
2211
2212static const char * const trace_groups[] = {
2213 "gmi_iordy_pi5",
2214 "gmi_adv_n_pk0",
2215 "gmi_clk_pk1",
2216 "gmi_cs2_n_pk3",
2217 "gmi_cs4_n_pk2",
2218 "gmi_a16_pj7",
2219 "gmi_a17_pb0",
2220 "gmi_a18_pb1",
2221 "gmi_a19_pk7",
2222 "gmi_dqs_p_pj3",
2223};
2224
2225static const char * const uarta_groups[] = {
2226 "ulpi_data0_po1",
2227 "ulpi_data1_po2",
2228 "ulpi_data2_po3",
2229 "ulpi_data3_po4",
2230 "ulpi_data4_po5",
2231 "ulpi_data5_po6",
2232 "ulpi_data6_po7",
2233 "ulpi_data7_po0",
2234 "sdmmc1_cmd_pz1",
2235 "sdmmc1_dat3_py4",
2236 "sdmmc1_dat2_py5",
2237 "sdmmc1_dat1_py6",
2238 "sdmmc1_dat0_py7",
2239 "uart2_rxd_pc3",
2240 "uart2_txd_pc2",
2241 "uart2_rts_n_pj6",
2242 "uart2_cts_n_pj5",
2243 "pu0",
2244 "pu1",
2245 "pu2",
2246 "pu3",
2247 "pu4",
2248 "pu5",
2249 "pu6",
2250 "kb_row7_pr7",
2251 "kb_row8_ps0",
2252 "kb_row9_ps1",
2253 "kb_row10_ps2",
2254 "kb_col3_pq3",
2255 "kb_col4_pq4",
2256 "sdmmc3_cmd_pa7",
2257 "sdmmc3_dat1_pb6",
2258 "sdmmc1_wp_n_pv3",
2259};
2260
2261static const char * const uartb_groups[] = {
2262 "uart2_rts_n_pj6",
2263 "uart2_cts_n_pj5",
2264};
2265
2266static const char * const uartc_groups[] = {
2267 "uart3_txd_pw6",
2268 "uart3_rxd_pw7",
2269 "uart3_cts_n_pa1",
2270 "uart3_rts_n_pc0",
2271};
2272
2273static const char * const uartd_groups[] = {
2274 "ulpi_clk_py0",
2275 "ulpi_dir_py1",
2276 "ulpi_nxt_py2",
2277 "ulpi_stp_py3",
2278 "gmi_a16_pj7",
2279 "gmi_a17_pb0",
2280 "gmi_a18_pb1",
2281 "gmi_a19_pk7",
2282};
2283
2284static const char * const ulpi_groups[] = {
2285 "ulpi_data0_po1",
2286 "ulpi_data1_po2",
2287 "ulpi_data2_po3",
2288 "ulpi_data3_po4",
2289 "ulpi_data4_po5",
2290 "ulpi_data5_po6",
2291 "ulpi_data6_po7",
2292 "ulpi_data7_po0",
2293 "ulpi_clk_py0",
2294 "ulpi_dir_py1",
2295 "ulpi_nxt_py2",
2296 "ulpi_stp_py3",
2297};
2298
2299static const char * const usb_groups[] = {
2300 "pv0",
2301 "pu6",
2302 "gmi_cs0_n_pj0",
2303 "gmi_cs4_n_pk2",
2304 "gmi_ad11_ph3",
2305 "kb_col0_pq0",
2306 "spdif_in_pk6",
2307 "usb_vbus_en0_pn4",
2308 "usb_vbus_en1_pn5",
2309};
2310
2311static const char * const vgp1_groups[] = {
2312 "cam_i2c_scl_pbb1",
2313};
2314
2315static const char * const vgp2_groups[] = {
2316 "cam_i2c_sda_pbb2",
2317};
2318
2319static const char * const vgp3_groups[] = {
2320 "pbb3",
2321};
2322
2323static const char * const vgp4_groups[] = {
2324 "pbb4",
2325};
2326
2327static const char * const vgp5_groups[] = {
2328 "pbb5",
2329};
2330
2331static const char * const vgp6_groups[] = {
2332 "pbb6",
2333};
2334
2335static const char * const vi_groups[] = {
2336 "cam_mclk_pcc0",
2337 "pbb0",
2338};
2339
2340static const char * const vi_alt1_groups[] = {
2341 "cam_mclk_pcc0",
2342 "pbb0",
2343};
2344
2345static const char * const vi_alt3_groups[] = {
2346 "cam_mclk_pcc0",
2347 "pbb0",
2348};
2349
2350#define FUNCTION(fname) \ 1423#define FUNCTION(fname) \
2351 { \ 1424 { \
2352 .name = #fname, \ 1425 .name = #fname, \
2353 .groups = fname##_groups, \
2354 .ngroups = ARRAY_SIZE(fname##_groups), \
2355 } 1426 }
2356 1427
2357static const struct tegra_function tegra114_functions[] = { 1428static struct tegra_function tegra114_functions[] = {
2358 FUNCTION(blink), 1429 FUNCTION(blink),
2359 FUNCTION(cec), 1430 FUNCTION(cec),
2360 FUNCTION(cldvfs), 1431 FUNCTION(cldvfs),
diff --git a/drivers/pinctrl/pinctrl-tegra124.c b/drivers/pinctrl/pinctrl-tegra124.c
index 7c6b7b63320f..3b03d77d454b 100644
--- a/drivers/pinctrl/pinctrl-tegra124.c
+++ b/drivers/pinctrl/pinctrl-tegra124.c
@@ -1581,1112 +1581,12 @@ enum tegra_mux {
1581 TEGRA_MUX_TMDS, 1581 TEGRA_MUX_TMDS,
1582}; 1582};
1583 1583
1584static const char * const blink_groups[] = {
1585 "clk_32k_out_pa0",
1586};
1587
1588static const char * const cec_groups[] = {
1589 "hdmi_cec_pee3",
1590};
1591
1592static const char * const cldvfs_groups[] = {
1593 "ph2",
1594 "ph3",
1595 "kb_row7_pr7",
1596 "kb_row8_ps0",
1597 "dvfs_pwm_px0",
1598 "dvfs_clk_px2",
1599};
1600
1601static const char * const clk12_groups[] = {
1602 "sdmmc1_wp_n_pv3",
1603 "sdmmc1_clk_pz0",
1604};
1605
1606static const char * const cpu_groups[] = {
1607 "cpu_pwr_req",
1608};
1609
1610static const char * const dap_groups[] = {
1611 "dap_mclk1_req_pee2",
1612 "clk2_req_pcc5",
1613};
1614
1615static const char * const dap1_groups[] = {
1616 "dap_mclk1_req_pee2",
1617};
1618
1619static const char * const dap2_groups[] = {
1620 "dap_mclk1_pw4",
1621 "gpio_x4_aud_px4",
1622};
1623
1624static const char * const dev3_groups[] = {
1625 "clk3_req_pee1",
1626};
1627
1628static const char * const displaya_groups[] = {
1629 "dap3_fs_pp0",
1630 "dap3_din_pp1",
1631 "dap3_dout_pp2",
1632 "ph1",
1633 "pi4",
1634 "pbb3",
1635 "pbb4",
1636 "pbb5",
1637 "kb_row3_pr3",
1638 "kb_row4_pr4",
1639 "kb_row5_pr5",
1640 "kb_row6_pr6",
1641 "kb_col3_pq3",
1642 "sdmmc3_dat2_pb5",
1643};
1644
1645static const char * const displaya_alt_groups[] = {
1646 "kb_row6_pr6",
1647};
1648
1649static const char * const displayb_groups[] = {
1650 "dap3_fs_pp0",
1651 "dap3_din_pp1",
1652 "dap3_sclk_pp3",
1653
1654 "pu3",
1655 "pu4",
1656 "pu5",
1657
1658 "pbb3",
1659 "pbb4",
1660 "pbb6",
1661
1662 "kb_row3_pr3",
1663 "kb_row4_pr4",
1664 "kb_row5_pr5",
1665 "kb_row6_pr6",
1666
1667 "sdmmc3_dat3_pb4",
1668};
1669
1670static const char * const dtv_groups[] = {
1671 "uart3_cts_n_pa1",
1672 "uart3_rts_n_pc0",
1673 "dap4_fs_pp4",
1674 "dap4_dout_pp6",
1675 "pi7",
1676 "ph0",
1677 "ph6",
1678 "ph7",
1679};
1680
1681static const char * const extperiph1_groups[] = {
1682 "dap_mclk1_pw4",
1683};
1684
1685static const char * const extperiph2_groups[] = {
1686 "clk2_out_pw5",
1687};
1688
1689static const char * const extperiph3_groups[] = {
1690 "clk3_out_pee0",
1691};
1692
1693static const char * const gmi_groups[] = {
1694 "uart2_cts_n_pj5",
1695 "uart2_rts_n_pj6",
1696 "uart3_txd_pw6",
1697 "uart3_rxd_pw7",
1698 "uart3_cts_n_pa1",
1699 "uart3_rts_n_pc0",
1700
1701 "pu0",
1702 "pu1",
1703 "pu2",
1704 "pu3",
1705 "pu4",
1706 "pu5",
1707 "pu6",
1708
1709 "dap4_fs_pp4",
1710 "dap4_din_pp5",
1711 "dap4_dout_pp6",
1712 "dap4_sclk_pp7",
1713
1714 "pc7",
1715
1716 "pg0",
1717 "pg1",
1718 "pg2",
1719 "pg3",
1720 "pg4",
1721 "pg5",
1722 "pg6",
1723 "pg7",
1724
1725 "ph0",
1726 "ph1",
1727 "ph2",
1728 "ph3",
1729 "ph4",
1730 "ph5",
1731 "ph6",
1732 "ph7",
1733
1734 "pi0",
1735 "pi1",
1736 "pi2",
1737 "pi3",
1738 "pi4",
1739 "pi5",
1740 "pi6",
1741 "pi7",
1742
1743 "pj0",
1744 "pj2",
1745
1746 "pk0",
1747 "pk1",
1748 "pk2",
1749 "pk3",
1750 "pk4",
1751
1752 "pj7",
1753 "pb0",
1754 "pb1",
1755 "pk7",
1756
1757 "gen2_i2c_scl_pt5",
1758 "gen2_i2c_sda_pt6",
1759
1760 "sdmmc4_dat0_paa0",
1761 "sdmmc4_dat1_paa1",
1762 "sdmmc4_dat2_paa2",
1763 "sdmmc4_dat3_paa3",
1764 "sdmmc4_dat4_paa4",
1765 "sdmmc4_dat6_paa6",
1766 "sdmmc4_dat7_paa7",
1767 "sdmmc4_clk_pcc4",
1768 "sdmmc4_cmd_pt7",
1769 "gmi_clk_lb",
1770
1771 "dap1_fs_pn0",
1772 "dap1_din_pn1",
1773 "dap1_dout_pn2",
1774 "dap1_sclk_pn3",
1775
1776 "dap2_fs_pa2",
1777 "dap2_din_pa4",
1778 "dap2_dout_pa5",
1779 "dap2_sclk_pa3",
1780
1781 "dvfs_pwm_px0",
1782 "dvfs_clk_px2",
1783 "gpio_x1_aud_px1",
1784 "gpio_x3_aud_px3",
1785 "gpio_x4_aud_px4",
1786 "gpio_x5_aud_px5",
1787 "gpio_x6_aud_px6",
1788};
1789
1790static const char * const gmi_alt_groups[] = {
1791 "pc7",
1792 "pk4",
1793 "pj7",
1794};
1795
1796static const char * const hda_groups[] = {
1797 "dap1_fs_pn0",
1798 "dap1_din_pn1",
1799 "dap1_dout_pn2",
1800 "dap1_sclk_pn3",
1801 "dap2_fs_pa2",
1802 "dap2_sclk_pa3",
1803 "dap2_din_pa4",
1804 "dap2_dout_pa5",
1805};
1806
1807static const char * const hsi_groups[] = {
1808 "ulpi_data0_po1",
1809 "ulpi_data1_po2",
1810 "ulpi_data2_po3",
1811 "ulpi_data3_po4",
1812 "ulpi_data4_po5",
1813 "ulpi_data5_po6",
1814 "ulpi_data6_po7",
1815 "ulpi_data7_po0",
1816};
1817
1818static const char * const i2c1_groups[] = {
1819 "gen1_i2c_scl_pc4",
1820 "gen1_i2c_sda_pc5",
1821 "gpio_w2_aud_pw2",
1822 "gpio_w3_aud_pw3",
1823};
1824
1825static const char * const i2c2_groups[] = {
1826 "gen2_i2c_scl_pt5",
1827 "gen2_i2c_sda_pt6",
1828};
1829
1830static const char * const i2c3_groups[] = {
1831 "spdif_in_pk6",
1832 "spdif_out_pk5",
1833 "cam_i2c_scl_pbb1",
1834 "cam_i2c_sda_pbb2",
1835};
1836
1837static const char * const i2c4_groups[] = {
1838 "ddc_scl_pv4",
1839 "ddc_sda_pv5",
1840};
1841
1842static const char * const i2cpwr_groups[] = {
1843 "pwr_i2c_scl_pz6",
1844 "pwr_i2c_sda_pz7",
1845};
1846
1847static const char * const i2s0_groups[] = {
1848 "dap1_fs_pn0",
1849 "dap1_din_pn1",
1850 "dap1_dout_pn2",
1851 "dap1_sclk_pn3",
1852};
1853
1854static const char * const i2s1_groups[] = {
1855 "dap2_fs_pa2",
1856 "dap2_sclk_pa3",
1857 "dap2_din_pa4",
1858 "dap2_dout_pa5",
1859};
1860
1861static const char * const i2s2_groups[] = {
1862 "dap3_fs_pp0",
1863 "dap3_din_pp1",
1864 "dap3_dout_pp2",
1865 "dap3_sclk_pp3",
1866};
1867
1868static const char * const i2s3_groups[] = {
1869 "dap4_fs_pp4",
1870 "dap4_din_pp5",
1871 "dap4_dout_pp6",
1872 "dap4_sclk_pp7",
1873};
1874
1875static const char * const i2s4_groups[] = {
1876 "pcc1",
1877 "pbb6",
1878 "pbb7",
1879 "pcc2",
1880};
1881
1882static const char * const irda_groups[] = {
1883 "uart2_rxd_pc3",
1884 "uart2_txd_pc2",
1885 "kb_row11_ps3",
1886 "kb_row12_ps4",
1887};
1888
1889static const char * const kbc_groups[] = {
1890 "kb_row0_pr0",
1891 "kb_row1_pr1",
1892 "kb_row2_pr2",
1893 "kb_row3_pr3",
1894 "kb_row4_pr4",
1895 "kb_row5_pr5",
1896 "kb_row6_pr6",
1897 "kb_row7_pr7",
1898 "kb_row8_ps0",
1899 "kb_row9_ps1",
1900 "kb_row10_ps2",
1901 "kb_row11_ps3",
1902 "kb_row12_ps4",
1903 "kb_row13_ps5",
1904 "kb_row14_ps6",
1905 "kb_row15_ps7",
1906 "kb_row16_pt0",
1907 "kb_row17_pt1",
1908
1909 "kb_col0_pq0",
1910 "kb_col1_pq1",
1911 "kb_col2_pq2",
1912 "kb_col3_pq3",
1913 "kb_col4_pq4",
1914 "kb_col5_pq5",
1915 "kb_col6_pq6",
1916 "kb_col7_pq7",
1917};
1918
1919static const char * const owr_groups[] = {
1920 "pu0",
1921 "kb_col4_pq4",
1922 "owr",
1923 "sdmmc3_cd_n_pv2",
1924};
1925
1926static const char * const pmi_groups[] = {
1927 "pwr_int_n",
1928};
1929
1930static const char * const pwm0_groups[] = {
1931 "sdmmc1_dat2_py5",
1932 "uart3_rts_n_pc0",
1933 "pu3",
1934 "ph0",
1935 "sdmmc3_dat3_pb4",
1936};
1937
1938static const char * const pwm1_groups[] = {
1939 "sdmmc1_dat1_py6",
1940 "pu4",
1941 "ph1",
1942 "sdmmc3_dat2_pb5",
1943};
1944
1945static const char * const pwm2_groups[] = {
1946 "pu5",
1947 "ph2",
1948 "kb_col3_pq3",
1949 "sdmmc3_dat1_pb6",
1950};
1951
1952static const char * const pwm3_groups[] = {
1953 "pu6",
1954 "ph3",
1955 "sdmmc3_cmd_pa7",
1956};
1957
1958static const char * const pwron_groups[] = {
1959 "core_pwr_req",
1960};
1961
1962static const char * const reset_out_n_groups[] = {
1963 "reset_out_n",
1964};
1965
1966static const char * const rsvd1_groups[] = {
1967 "pv0",
1968 "pv1",
1969
1970 "hdmi_int_pn7",
1971 "pu1",
1972 "pu2",
1973 "pc7",
1974 "pi7",
1975 "pk0",
1976 "pj0",
1977 "pj2",
1978 "pk2",
1979 "pi3",
1980 "pi6",
1981
1982 "pg0",
1983 "pg1",
1984 "pg2",
1985 "pg3",
1986 "pg4",
1987 "pg5",
1988 "pg6",
1989 "pg7",
1990
1991 "pi0",
1992 "pi1",
1993
1994 "gpio_x7_aud_px7",
1995
1996 "reset_out_n",
1997};
1998
1999static const char * const rsvd2_groups[] = {
2000 "pv0",
2001 "pv1",
2002
2003 "sdmmc1_dat0_py7",
2004 "clk2_out_pw5",
2005 "clk2_req_pcc5",
2006 "hdmi_int_pn7",
2007 "ddc_scl_pv4",
2008 "ddc_sda_pv5",
2009
2010 "uart3_txd_pw6",
2011 "uart3_rxd_pw7",
2012
2013 "gen1_i2c_scl_pc4",
2014 "gen1_i2c_sda_pc5",
2015
2016 "clk3_out_pee0",
2017 "clk3_req_pee1",
2018 "pc7",
2019 "pi5",
2020 "pj0",
2021 "pj2",
2022
2023 "pk4",
2024 "pk2",
2025 "pi3",
2026 "pi6",
2027 "pg0",
2028 "pg1",
2029 "pg5",
2030 "pg6",
2031 "pg7",
2032
2033 "ph4",
2034 "ph5",
2035 "pj7",
2036 "pb0",
2037 "pb1",
2038 "pk7",
2039 "pi0",
2040 "pi1",
2041
2042 "gen2_i2c_scl_pt5",
2043 "gen2_i2c_sda_pt6",
2044 "sdmmc4_clk_pcc4",
2045 "sdmmc4_cmd_pt7",
2046 "sdmmc4_dat7_paa7",
2047 "pcc1",
2048 "pbb6",
2049 "pbb7",
2050 "pcc2",
2051 "jtag_rtck",
2052
2053 "pwr_i2c_scl_pz6",
2054 "pwr_i2c_sda_pz7",
2055
2056 "kb_row0_pr0",
2057 "kb_row1_pr1",
2058 "kb_row2_pr2",
2059 "kb_row7_pr7",
2060 "kb_row8_ps0",
2061 "kb_row9_ps1",
2062 "kb_row10_ps2",
2063 "kb_row11_ps3",
2064 "kb_row12_ps4",
2065 "kb_row13_ps5",
2066 "kb_row14_ps6",
2067
2068 "kb_col0_pq0",
2069 "kb_col1_pq1",
2070 "kb_col2_pq2",
2071 "kb_col5_pq5",
2072 "kb_col6_pq6",
2073 "kb_col7_pq7",
2074
2075 "core_pwr_req",
2076 "cpu_pwr_req",
2077 "pwr_int_n",
2078 "clk_32k_in",
2079 "owr",
2080
2081 "spdif_in_pk6",
2082 "spdif_out_pk5",
2083 "gpio_x1_aud_px1",
2084
2085 "sdmmc3_clk_pa6",
2086 "sdmmc3_dat0_pb7",
2087
2088 "pex_l0_rst_n_pdd1",
2089 "pex_l0_clkreq_n_pdd2",
2090 "pex_wake_n_pdd3",
2091 "pex_l1_rst_n_pdd5",
2092 "pex_l1_clkreq_n_pdd6",
2093 "hdmi_cec_pee3",
2094
2095 "gpio_w2_aud_pw2",
2096 "usb_vbus_en0_pn4",
2097 "usb_vbus_en1_pn5",
2098 "sdmmc3_clk_lb_out_pee4",
2099 "sdmmc3_clk_lb_in_pee5",
2100 "gmi_clk_lb",
2101 "reset_out_n",
2102 "kb_row16_pt0",
2103 "kb_row17_pt1",
2104 "dp_hpd_pff0",
2105 "usb_vbus_en2_pff1",
2106 "pff2",
2107};
2108
2109static const char * const rsvd3_groups[] = {
2110 "dap3_sclk_pp3",
2111 "pv0",
2112 "pv1",
2113 "sdmmc1_clk_pz0",
2114 "clk2_out_pw5",
2115 "clk2_req_pcc5",
2116 "hdmi_int_pn7",
2117
2118 "ddc_scl_pv4",
2119 "ddc_sda_pv5",
2120
2121 "pu6",
2122
2123 "gen1_i2c_scl_pc4",
2124 "gen1_i2c_sda_pc5",
2125
2126 "dap4_din_pp5",
2127 "dap4_sclk_pp7",
2128
2129 "clk3_out_pee0",
2130 "clk3_req_pee1",
2131
2132 "sdmmc4_dat5_paa5",
2133 "pcc1",
2134 "cam_i2c_scl_pbb1",
2135 "cam_i2c_sda_pbb2",
2136 "pbb5",
2137 "pbb7",
2138 "jtag_rtck",
2139 "pwr_i2c_scl_pz6",
2140 "pwr_i2c_sda_pz7",
2141
2142 "kb_row0_pr0",
2143 "kb_row1_pr1",
2144 "kb_row2_pr2",
2145 "kb_row4_pr4",
2146 "kb_row5_pr5",
2147 "kb_row9_ps1",
2148 "kb_row10_ps2",
2149 "kb_row11_ps3",
2150 "kb_row12_ps4",
2151 "kb_row15_ps7",
2152
2153 "clk_32k_out_pa0",
2154 "core_pwr_req",
2155 "cpu_pwr_req",
2156 "pwr_int_n",
2157 "clk_32k_in",
2158 "owr",
2159
2160 "dap_mclk1_pw4",
2161 "spdif_in_pk6",
2162 "spdif_out_pk5",
2163 "sdmmc3_clk_pa6",
2164 "sdmmc3_dat0_pb7",
2165
2166 "pex_l0_rst_n_pdd1",
2167 "pex_l0_clkreq_n_pdd2",
2168 "pex_wake_n_pdd3",
2169 "pex_l1_rst_n_pdd5",
2170 "pex_l1_clkreq_n_pdd6",
2171 "hdmi_cec_pee3",
2172
2173 "sdmmc3_cd_n_pv2",
2174 "usb_vbus_en0_pn4",
2175 "usb_vbus_en1_pn5",
2176 "sdmmc3_clk_lb_out_pee4",
2177 "sdmmc3_clk_lb_in_pee5",
2178 "reset_out_n",
2179 "kb_row16_pt0",
2180 "kb_row17_pt1",
2181 "dp_hpd_pff0",
2182 "usb_vbus_en2_pff1",
2183 "pff2",
2184};
2185
2186static const char * const rsvd4_groups[] = {
2187 "dap3_dout_pp2",
2188 "pv0",
2189 "pv1",
2190 "sdmmc1_clk_pz0",
2191
2192 "clk2_out_pw5",
2193 "clk2_req_pcc5",
2194 "hdmi_int_pn7",
2195 "ddc_scl_pv4",
2196 "ddc_sda_pv5",
2197
2198 "pu0",
2199 "pu1",
2200 "pu2",
2201
2202 "gen1_i2c_scl_pc4",
2203 "gen1_i2c_sda_pc5",
2204
2205 "dap4_fs_pp4",
2206 "dap4_dout_pp6",
2207 "dap4_din_pp5",
2208 "dap4_sclk_pp7",
2209
2210 "clk3_out_pee0",
2211 "clk3_req_pee1",
2212
2213 "pi5",
2214 "pk1",
2215 "pk2",
2216 "pg0",
2217 "pg1",
2218 "pg2",
2219 "pg3",
2220 "ph4",
2221 "ph5",
2222 "pb0",
2223 "pb1",
2224 "pk7",
2225 "pi0",
2226 "pi1",
2227 "pi2",
2228
2229 "gen2_i2c_scl_pt5",
2230 "gen2_i2c_sda_pt6",
2231
2232 "sdmmc4_clk_pcc4",
2233 "sdmmc4_cmd_pt7",
2234 "sdmmc4_dat0_paa0",
2235 "sdmmc4_dat1_paa1",
2236 "sdmmc4_dat2_paa2",
2237 "sdmmc4_dat3_paa3",
2238 "sdmmc4_dat4_paa4",
2239 "sdmmc4_dat5_paa5",
2240 "sdmmc4_dat6_paa6",
2241 "sdmmc4_dat7_paa7",
2242
2243 "jtag_rtck",
2244 "pwr_i2c_scl_pz6",
2245 "pwr_i2c_sda_pz7",
2246
2247 "kb_row0_pr0",
2248 "kb_row1_pr1",
2249 "kb_row2_pr2",
2250 "kb_row13_ps5",
2251 "kb_row14_ps6",
2252 "kb_row15_ps7",
2253
2254 "kb_col0_pq0",
2255 "kb_col1_pq1",
2256 "kb_col2_pq2",
2257 "kb_col5_pq5",
2258
2259 "clk_32k_out_pa0",
2260 "core_pwr_req",
2261 "cpu_pwr_req",
2262 "pwr_int_n",
2263 "clk_32k_in",
2264 "owr",
2265
2266 "dap1_fs_pn0",
2267 "dap1_din_pn1",
2268 "dap1_sclk_pn3",
2269 "dap_mclk1_req_pee2",
2270 "dap_mclk1_pw4",
2271
2272 "dap2_fs_pa2",
2273 "dap2_din_pa4",
2274 "dap2_dout_pa5",
2275 "dap2_sclk_pa3",
2276
2277 "dvfs_pwm_px0",
2278 "dvfs_clk_px2",
2279 "gpio_x1_aud_px1",
2280 "gpio_x3_aud_px3",
2281
2282 "gpio_x5_aud_px5",
2283 "gpio_x7_aud_px7",
2284
2285 "pex_l0_rst_n_pdd1",
2286 "pex_l0_clkreq_n_pdd2",
2287 "pex_wake_n_pdd3",
2288 "pex_l1_rst_n_pdd5",
2289 "pex_l1_clkreq_n_pdd6",
2290 "hdmi_cec_pee3",
2291
2292 "sdmmc3_cd_n_pv2",
2293 "usb_vbus_en0_pn4",
2294 "usb_vbus_en1_pn5",
2295 "sdmmc3_clk_lb_out_pee4",
2296 "sdmmc3_clk_lb_in_pee5",
2297 "gmi_clk_lb",
2298
2299 "dp_hpd_pff0",
2300 "usb_vbus_en2_pff1",
2301 "pff2",
2302};
2303
2304static const char * const sdmmc1_groups[] = {
2305 "sdmmc1_clk_pz0",
2306 "sdmmc1_cmd_pz1",
2307 "sdmmc1_dat3_py4",
2308 "sdmmc1_dat2_py5",
2309 "sdmmc1_dat1_py6",
2310 "sdmmc1_dat0_py7",
2311 "uart3_cts_n_pa1",
2312 "sdmmc1_wp_n_pv3",
2313};
2314
2315static const char * const sdmmc2_groups[] = {
2316 "pi5",
2317 "pk1",
2318 "pk3",
2319 "pk4",
2320 "pi6",
2321 "ph4",
2322 "ph5",
2323 "ph6",
2324 "ph7",
2325 "pi2",
2326 "cam_mclk_pcc0",
2327 "pcc1",
2328 "pbb0",
2329 "cam_i2c_scl_pbb1",
2330 "cam_i2c_sda_pbb2",
2331 "pbb3",
2332 "pbb4",
2333 "pbb5",
2334 "pbb6",
2335 "pbb7",
2336 "pcc2",
2337 "gmi_clk_lb",
2338};
2339
2340static const char * const sdmmc3_groups[] = {
2341 "pk0",
2342 "pcc2",
2343
2344 "kb_col4_pq4",
2345 "kb_col5_pq5",
2346
2347 "sdmmc3_clk_pa6",
2348 "sdmmc3_cmd_pa7",
2349 "sdmmc3_dat0_pb7",
2350 "sdmmc3_dat1_pb6",
2351 "sdmmc3_dat2_pb5",
2352 "sdmmc3_dat3_pb4",
2353
2354 "sdmmc3_cd_n_pv2",
2355 "sdmmc3_clk_lb_in_pee5",
2356 "sdmmc3_clk_lb_out_pee4",
2357};
2358
2359static const char * const sdmmc4_groups[] = {
2360 "sdmmc4_clk_pcc4",
2361 "sdmmc4_cmd_pt7",
2362 "sdmmc4_dat0_paa0",
2363 "sdmmc4_dat1_paa1",
2364 "sdmmc4_dat2_paa2",
2365 "sdmmc4_dat3_paa3",
2366 "sdmmc4_dat4_paa4",
2367 "sdmmc4_dat5_paa5",
2368 "sdmmc4_dat6_paa6",
2369 "sdmmc4_dat7_paa7",
2370};
2371
2372static const char * const soc_groups[] = {
2373 "pk0",
2374 "pj2",
2375 "kb_row15_ps7",
2376 "clk_32k_out_pa0",
2377};
2378
2379static const char * const spdif_groups[] = {
2380 "sdmmc1_cmd_pz1",
2381 "sdmmc1_dat3_py4",
2382 "uart2_rxd_pc3",
2383 "uart2_txd_pc2",
2384 "spdif_in_pk6",
2385 "spdif_out_pk5",
2386};
2387
2388static const char * const spi1_groups[] = {
2389 "ulpi_clk_py0",
2390 "ulpi_dir_py1",
2391 "ulpi_nxt_py2",
2392 "ulpi_stp_py3",
2393 "gpio_x3_aud_px3",
2394 "gpio_x4_aud_px4",
2395 "gpio_x5_aud_px5",
2396 "gpio_x6_aud_px6",
2397 "gpio_x7_aud_px7",
2398 "gpio_w3_aud_pw3",
2399};
2400
2401static const char * const spi2_groups[] = {
2402 "ulpi_data4_po5",
2403 "ulpi_data5_po6",
2404 "ulpi_data6_po7",
2405 "ulpi_data7_po0",
2406
2407 "kb_row13_ps5",
2408 "kb_row14_ps6",
2409 "kb_col0_pq0",
2410 "kb_col1_pq1",
2411 "kb_col2_pq2",
2412 "kb_col6_pq6",
2413 "kb_col7_pq7",
2414 "gpio_x4_aud_px4",
2415 "gpio_x5_aud_px5",
2416 "gpio_x6_aud_px6",
2417 "gpio_x7_aud_px7",
2418 "gpio_w2_aud_pw2",
2419 "gpio_w3_aud_pw3",
2420};
2421
2422static const char * const spi3_groups[] = {
2423 "ulpi_data0_po1",
2424 "ulpi_data1_po2",
2425 "ulpi_data2_po3",
2426 "ulpi_data3_po4",
2427 "sdmmc4_dat0_paa0",
2428 "sdmmc4_dat1_paa1",
2429 "sdmmc4_dat2_paa2",
2430 "sdmmc4_dat3_paa3",
2431 "sdmmc4_dat4_paa4",
2432 "sdmmc4_dat5_paa5",
2433 "sdmmc4_dat6_paa6",
2434 "sdmmc3_clk_pa6",
2435 "sdmmc3_cmd_pa7",
2436 "sdmmc3_dat0_pb7",
2437 "sdmmc3_dat1_pb6",
2438 "sdmmc3_dat2_pb5",
2439 "sdmmc3_dat3_pb4",
2440};
2441
2442static const char * const spi4_groups[] = {
2443 "sdmmc1_cmd_pz1",
2444 "sdmmc1_dat3_py4",
2445 "sdmmc1_dat2_py5",
2446 "sdmmc1_dat1_py6",
2447 "sdmmc1_dat0_py7",
2448
2449 "uart2_rxd_pc3",
2450 "uart2_txd_pc2",
2451 "uart2_rts_n_pj6",
2452 "uart2_cts_n_pj5",
2453 "uart3_txd_pw6",
2454 "uart3_rxd_pw7",
2455
2456 "pi3",
2457 "pg4",
2458 "pg5",
2459 "pg6",
2460 "pg7",
2461 "ph3",
2462 "pi4",
2463 "sdmmc1_wp_n_pv3",
2464};
2465
2466static const char * const spi5_groups[] = {
2467 "ulpi_clk_py0",
2468 "ulpi_dir_py1",
2469 "ulpi_nxt_py2",
2470 "ulpi_stp_py3",
2471 "dap3_fs_pp0",
2472 "dap3_din_pp1",
2473 "dap3_dout_pp2",
2474 "dap3_sclk_pp3",
2475};
2476
2477static const char * const spi6_groups[] = {
2478 "dvfs_pwm_px0",
2479 "gpio_x1_aud_px1",
2480 "gpio_x3_aud_px3",
2481 "dvfs_clk_px2",
2482 "gpio_x6_aud_px6",
2483 "gpio_w2_aud_pw2",
2484 "gpio_w3_aud_pw3",
2485};
2486
2487static const char * const trace_groups[] = {
2488 "pi2",
2489 "pi4",
2490 "pi7",
2491 "ph0",
2492 "ph6",
2493 "ph7",
2494 "pg2",
2495 "pg3",
2496 "pk1",
2497 "pk3",
2498};
2499
2500static const char * const uarta_groups[] = {
2501 "ulpi_data0_po1",
2502 "ulpi_data1_po2",
2503 "ulpi_data2_po3",
2504 "ulpi_data3_po4",
2505 "ulpi_data4_po5",
2506 "ulpi_data5_po6",
2507 "ulpi_data6_po7",
2508 "ulpi_data7_po0",
2509
2510 "sdmmc1_cmd_pz1",
2511 "sdmmc1_dat3_py4",
2512 "sdmmc1_dat2_py5",
2513 "sdmmc1_dat1_py6",
2514 "sdmmc1_dat0_py7",
2515
2516
2517 "uart2_rxd_pc3",
2518 "uart2_txd_pc2",
2519 "uart2_rts_n_pj6",
2520 "uart2_cts_n_pj5",
2521
2522 "pu0",
2523 "pu1",
2524 "pu2",
2525 "pu3",
2526 "pu4",
2527 "pu5",
2528 "pu6",
2529
2530 "kb_row7_pr7",
2531 "kb_row8_ps0",
2532 "kb_row9_ps1",
2533 "kb_row10_ps2",
2534 "kb_col3_pq3",
2535 "kb_col4_pq4",
2536
2537 "sdmmc3_cmd_pa7",
2538 "sdmmc3_dat1_pb6",
2539 "sdmmc1_wp_n_pv3",
2540
2541};
2542
2543static const char * const uartb_groups[] = {
2544 "uart2_rts_n_pj6",
2545 "uart2_cts_n_pj5",
2546};
2547
2548static const char * const uartc_groups[] = {
2549 "uart3_txd_pw6",
2550 "uart3_rxd_pw7",
2551 "uart3_cts_n_pa1",
2552 "uart3_rts_n_pc0",
2553 "kb_row16_pt0",
2554 "kb_row17_pt1",
2555};
2556
2557static const char * const uartd_groups[] = {
2558 "ulpi_clk_py0",
2559 "ulpi_dir_py1",
2560 "ulpi_nxt_py2",
2561 "ulpi_stp_py3",
2562 "pj7",
2563 "pb0",
2564 "pb1",
2565 "pk7",
2566 "kb_col6_pq6",
2567 "kb_col7_pq7",
2568};
2569
2570static const char * const ulpi_groups[] = {
2571 "ulpi_data0_po1",
2572 "ulpi_data1_po2",
2573 "ulpi_data2_po3",
2574 "ulpi_data3_po4",
2575 "ulpi_data4_po5",
2576 "ulpi_data5_po6",
2577 "ulpi_data6_po7",
2578 "ulpi_data7_po0",
2579 "ulpi_clk_py0",
2580 "ulpi_dir_py1",
2581 "ulpi_nxt_py2",
2582 "ulpi_stp_py3",
2583};
2584
2585static const char * const usb_groups[] = {
2586 "pj0",
2587 "usb_vbus_en0_pn4",
2588 "usb_vbus_en1_pn5",
2589 "usb_vbus_en2_pff1",
2590};
2591
2592static const char * const vgp1_groups[] = {
2593 "cam_i2c_scl_pbb1",
2594};
2595
2596static const char * const vgp2_groups[] = {
2597 "cam_i2c_sda_pbb2",
2598};
2599
2600static const char * const vgp3_groups[] = {
2601 "pbb3",
2602};
2603
2604static const char * const vgp4_groups[] = {
2605 "pbb4",
2606};
2607
2608static const char * const vgp5_groups[] = {
2609 "pbb5",
2610};
2611
2612static const char * const vgp6_groups[] = {
2613 "pbb0",
2614};
2615
2616static const char * const vi_groups[] = {
2617 "cam_mclk_pcc0",
2618};
2619
2620static const char * const vi_alt1_groups[] = {
2621 "cam_mclk_pcc0",
2622};
2623
2624static const char * const vi_alt3_groups[] = {
2625 "cam_mclk_pcc0",
2626};
2627
2628static const char * const vimclk2_groups[] = {
2629 "pbb0",
2630};
2631
2632static const char * const vimclk2_alt_groups[] = {
2633 "pbb0",
2634};
2635
2636static const char * const sata_groups[] = {
2637 "dap_mclk1_req_pee2",
2638 "dap1_dout_pn2",
2639 "pff2",
2640};
2641
2642static const char * const ccla_groups[] = {
2643 "pk3",
2644};
2645
2646static const char * const rtck_groups[] = {
2647 "jtag_rtck",
2648};
2649
2650static const char * const sys_groups[] = {
2651 "kb_row3_pr3",
2652};
2653
2654static const char * const pe0_groups[] = {
2655 "pex_l0_rst_n_pdd1",
2656 "pex_l0_clkreq_n_pdd2",
2657};
2658
2659static const char * const pe_groups[] = {
2660 "pex_wake_n_pdd3",
2661};
2662
2663static const char * const pe1_groups[] = {
2664 "pex_l1_rst_n_pdd5",
2665 "pex_l1_clkreq_n_pdd6",
2666};
2667
2668static const char * const dp_groups[] = {
2669 "dp_hpd_pff0",
2670};
2671
2672static const char * const clk_groups[] = {
2673 "clk_32k_in",
2674};
2675
2676static const char * const tmds_groups[] = {
2677 "pg4",
2678 "ph1",
2679 "ph2",
2680};
2681
2682#define FUNCTION(fname) \ 1584#define FUNCTION(fname) \
2683 { \ 1585 { \
2684 .name = #fname, \ 1586 .name = #fname, \
2685 .groups = fname##_groups, \
2686 .ngroups = ARRAY_SIZE(fname##_groups), \
2687 } 1587 }
2688 1588
2689static const struct tegra_function tegra124_functions[] = { 1589static struct tegra_function tegra124_functions[] = {
2690 FUNCTION(blink), 1590 FUNCTION(blink),
2691 FUNCTION(cec), 1591 FUNCTION(cec),
2692 FUNCTION(cldvfs), 1592 FUNCTION(cldvfs),
diff --git a/drivers/pinctrl/pinctrl-tegra20.c b/drivers/pinctrl/pinctrl-tegra20.c
index a8ceb08172b2..e0b504088387 100644
--- a/drivers/pinctrl/pinctrl-tegra20.c
+++ b/drivers/pinctrl/pinctrl-tegra20.c
@@ -1894,637 +1894,12 @@ enum tegra_mux {
1894 TEGRA_MUX_XIO, 1894 TEGRA_MUX_XIO,
1895}; 1895};
1896 1896
1897static const char * const ahb_clk_groups[] = {
1898 "cdev2",
1899};
1900
1901static const char * const apb_clk_groups[] = {
1902 "cdev2",
1903};
1904
1905static const char * const audio_sync_groups[] = {
1906 "cdev1",
1907};
1908
1909static const char * const crt_groups[] = {
1910 "crtp",
1911 "lm1",
1912};
1913
1914static const char * const dap1_groups[] = {
1915 "dap1",
1916};
1917
1918static const char * const dap2_groups[] = {
1919 "dap2",
1920};
1921
1922static const char * const dap3_groups[] = {
1923 "dap3",
1924};
1925
1926static const char * const dap4_groups[] = {
1927 "dap4",
1928};
1929
1930static const char * const dap5_groups[] = {
1931 "gme",
1932};
1933
1934static const char * const displaya_groups[] = {
1935 "lcsn",
1936 "ld0",
1937 "ld1",
1938 "ld10",
1939 "ld11",
1940 "ld12",
1941 "ld13",
1942 "ld14",
1943 "ld15",
1944 "ld16",
1945 "ld17",
1946 "ld2",
1947 "ld3",
1948 "ld4",
1949 "ld5",
1950 "ld6",
1951 "ld7",
1952 "ld8",
1953 "ld9",
1954 "ldc",
1955 "ldi",
1956 "lhp0",
1957 "lhp1",
1958 "lhp2",
1959 "lhs",
1960 "lm0",
1961 "lm1",
1962 "lpp",
1963 "lpw0",
1964 "lpw1",
1965 "lpw2",
1966 "lsc0",
1967 "lsc1",
1968 "lsck",
1969 "lsda",
1970 "lsdi",
1971 "lspi",
1972 "lvp0",
1973 "lvp1",
1974 "lvs",
1975};
1976
1977static const char * const displayb_groups[] = {
1978 "lcsn",
1979 "ld0",
1980 "ld1",
1981 "ld10",
1982 "ld11",
1983 "ld12",
1984 "ld13",
1985 "ld14",
1986 "ld15",
1987 "ld16",
1988 "ld17",
1989 "ld2",
1990 "ld3",
1991 "ld4",
1992 "ld5",
1993 "ld6",
1994 "ld7",
1995 "ld8",
1996 "ld9",
1997 "ldc",
1998 "ldi",
1999 "lhp0",
2000 "lhp1",
2001 "lhp2",
2002 "lhs",
2003 "lm0",
2004 "lm1",
2005 "lpp",
2006 "lpw0",
2007 "lpw1",
2008 "lpw2",
2009 "lsc0",
2010 "lsc1",
2011 "lsck",
2012 "lsda",
2013 "lsdi",
2014 "lspi",
2015 "lvp0",
2016 "lvp1",
2017 "lvs",
2018};
2019
2020static const char * const emc_test0_dll_groups[] = {
2021 "kbca",
2022};
2023
2024static const char * const emc_test1_dll_groups[] = {
2025 "kbcc",
2026};
2027
2028static const char * const gmi_groups[] = {
2029 "ata",
2030 "atb",
2031 "atc",
2032 "atd",
2033 "ate",
2034 "dap1",
2035 "dap2",
2036 "dap4",
2037 "gma",
2038 "gmb",
2039 "gmc",
2040 "gmd",
2041 "gme",
2042 "gpu",
2043 "irrx",
2044 "irtx",
2045 "pta",
2046 "spia",
2047 "spib",
2048 "spic",
2049 "spid",
2050 "spie",
2051 "uca",
2052 "ucb",
2053};
2054
2055static const char * const gmi_int_groups[] = {
2056 "gmb",
2057};
2058
2059static const char * const hdmi_groups[] = {
2060 "hdint",
2061 "lpw0",
2062 "lpw2",
2063 "lsc1",
2064 "lsck",
2065 "lsda",
2066 "lspi",
2067 "pta",
2068};
2069
2070static const char * const i2cp_groups[] = {
2071 "i2cp",
2072};
2073
2074static const char * const i2c1_groups[] = {
2075 "rm",
2076 "spdi",
2077 "spdo",
2078 "spig",
2079 "spih",
2080};
2081
2082static const char * const i2c2_groups[] = {
2083 "ddc",
2084 "pta",
2085};
2086
2087static const char * const i2c3_groups[] = {
2088 "dtf",
2089};
2090
2091static const char * const ide_groups[] = {
2092 "ata",
2093 "atb",
2094 "atc",
2095 "atd",
2096 "ate",
2097 "gmb",
2098};
2099
2100static const char * const irda_groups[] = {
2101 "uad",
2102};
2103
2104static const char * const kbc_groups[] = {
2105 "kbca",
2106 "kbcb",
2107 "kbcc",
2108 "kbcd",
2109 "kbce",
2110 "kbcf",
2111};
2112
2113static const char * const mio_groups[] = {
2114 "kbcb",
2115 "kbcd",
2116 "kbcf",
2117};
2118
2119static const char * const mipi_hs_groups[] = {
2120 "uaa",
2121 "uab",
2122};
2123
2124static const char * const nand_groups[] = {
2125 "ata",
2126 "atb",
2127 "atc",
2128 "atd",
2129 "ate",
2130 "gmb",
2131 "gmd",
2132 "kbca",
2133 "kbcb",
2134 "kbcc",
2135 "kbcd",
2136 "kbce",
2137 "kbcf",
2138};
2139
2140static const char * const osc_groups[] = {
2141 "cdev1",
2142 "cdev2",
2143};
2144
2145static const char * const owr_groups[] = {
2146 "kbce",
2147 "owc",
2148 "uac",
2149};
2150
2151static const char * const pcie_groups[] = {
2152 "gpv",
2153 "slxa",
2154 "slxk",
2155};
2156
2157static const char * const plla_out_groups[] = {
2158 "cdev1",
2159};
2160
2161static const char * const pllc_out1_groups[] = {
2162 "csus",
2163};
2164
2165static const char * const pllm_out1_groups[] = {
2166 "cdev1",
2167};
2168
2169static const char * const pllp_out2_groups[] = {
2170 "csus",
2171};
2172
2173static const char * const pllp_out3_groups[] = {
2174 "csus",
2175};
2176
2177static const char * const pllp_out4_groups[] = {
2178 "cdev2",
2179};
2180
2181static const char * const pwm_groups[] = {
2182 "gpu",
2183 "sdb",
2184 "sdc",
2185 "sdd",
2186 "ucb",
2187};
2188
2189static const char * const pwr_intr_groups[] = {
2190 "pmc",
2191};
2192
2193static const char * const pwr_on_groups[] = {
2194 "pmc",
2195};
2196
2197static const char * const rsvd1_groups[] = {
2198 "dta",
2199 "dtb",
2200 "dtc",
2201 "dtd",
2202 "dte",
2203 "gmd",
2204 "gme",
2205};
2206
2207static const char * const rsvd2_groups[] = {
2208 "crtp",
2209 "dap1",
2210 "dap3",
2211 "dap4",
2212 "ddc",
2213 "dtb",
2214 "dtc",
2215 "dte",
2216 "dtf",
2217 "gpu7",
2218 "gpv",
2219 "hdint",
2220 "i2cp",
2221 "owc",
2222 "rm",
2223 "sdio1",
2224 "spdi",
2225 "spdo",
2226 "uac",
2227 "uca",
2228 "uda",
2229};
2230
2231static const char * const rsvd3_groups[] = {
2232 "crtp",
2233 "dap2",
2234 "dap3",
2235 "ddc",
2236 "gpu7",
2237 "gpv",
2238 "hdint",
2239 "i2cp",
2240 "ld17",
2241 "ldc",
2242 "ldi",
2243 "lhp0",
2244 "lhp1",
2245 "lhp2",
2246 "lm1",
2247 "lpp",
2248 "lpw1",
2249 "lvp0",
2250 "lvp1",
2251 "owc",
2252 "pmc",
2253 "rm",
2254 "uac",
2255};
2256
2257static const char * const rsvd4_groups[] = {
2258 "ata",
2259 "ate",
2260 "crtp",
2261 "dap3",
2262 "dap4",
2263 "ddc",
2264 "dta",
2265 "dtc",
2266 "dtd",
2267 "dtf",
2268 "gpu",
2269 "gpu7",
2270 "gpv",
2271 "hdint",
2272 "i2cp",
2273 "kbce",
2274 "lcsn",
2275 "ld0",
2276 "ld1",
2277 "ld2",
2278 "ld3",
2279 "ld4",
2280 "ld5",
2281 "ld6",
2282 "ld7",
2283 "ld8",
2284 "ld9",
2285 "ld10",
2286 "ld11",
2287 "ld12",
2288 "ld13",
2289 "ld14",
2290 "ld15",
2291 "ld16",
2292 "ld17",
2293 "ldc",
2294 "ldi",
2295 "lhp0",
2296 "lhp1",
2297 "lhp2",
2298 "lhs",
2299 "lm0",
2300 "lpp",
2301 "lpw1",
2302 "lsc0",
2303 "lsdi",
2304 "lvp0",
2305 "lvp1",
2306 "lvs",
2307 "owc",
2308 "pmc",
2309 "pta",
2310 "rm",
2311 "spif",
2312 "uac",
2313 "uca",
2314 "ucb",
2315};
2316
2317static const char * const rtck_groups[] = {
2318 "gpu7",
2319};
2320
2321static const char * const sdio1_groups[] = {
2322 "sdio1",
2323};
2324
2325static const char * const sdio2_groups[] = {
2326 "dap1",
2327 "dta",
2328 "dtd",
2329 "kbca",
2330 "kbcb",
2331 "kbcd",
2332 "spdi",
2333 "spdo",
2334};
2335
2336static const char * const sdio3_groups[] = {
2337 "sdb",
2338 "sdc",
2339 "sdd",
2340 "slxa",
2341 "slxc",
2342 "slxd",
2343 "slxk",
2344};
2345
2346static const char * const sdio4_groups[] = {
2347 "atb",
2348 "atc",
2349 "atd",
2350 "gma",
2351 "gme",
2352};
2353
2354static const char * const sflash_groups[] = {
2355 "gmc",
2356 "gmd",
2357};
2358
2359static const char * const spdif_groups[] = {
2360 "slxc",
2361 "slxd",
2362 "spdi",
2363 "spdo",
2364 "uad",
2365};
2366
2367static const char * const spi1_groups[] = {
2368 "dtb",
2369 "dte",
2370 "spia",
2371 "spib",
2372 "spic",
2373 "spid",
2374 "spie",
2375 "spif",
2376 "uda",
2377};
2378
2379static const char * const spi2_groups[] = {
2380 "sdb",
2381 "slxa",
2382 "slxc",
2383 "slxd",
2384 "slxk",
2385 "spia",
2386 "spib",
2387 "spic",
2388 "spid",
2389 "spie",
2390 "spif",
2391 "spig",
2392 "spih",
2393 "uab",
2394};
2395
2396static const char * const spi2_alt_groups[] = {
2397 "spid",
2398 "spie",
2399 "spig",
2400 "spih",
2401};
2402
2403static const char * const spi3_groups[] = {
2404 "gma",
2405 "lcsn",
2406 "lm0",
2407 "lpw0",
2408 "lpw2",
2409 "lsc1",
2410 "lsck",
2411 "lsda",
2412 "lsdi",
2413 "sdc",
2414 "sdd",
2415 "spia",
2416 "spib",
2417 "spic",
2418 "spif",
2419 "spig",
2420 "spih",
2421 "uaa",
2422};
2423
2424static const char * const spi4_groups[] = {
2425 "gmc",
2426 "irrx",
2427 "irtx",
2428 "slxa",
2429 "slxc",
2430 "slxd",
2431 "slxk",
2432 "uad",
2433};
2434
2435static const char * const trace_groups[] = {
2436 "kbcc",
2437 "kbcf",
2438};
2439
2440static const char * const twc_groups[] = {
2441 "dap2",
2442 "sdc",
2443};
2444
2445static const char * const uarta_groups[] = {
2446 "gpu",
2447 "irrx",
2448 "irtx",
2449 "sdb",
2450 "sdd",
2451 "sdio1",
2452 "uaa",
2453 "uab",
2454 "uad",
2455};
2456
2457static const char * const uartb_groups[] = {
2458 "irrx",
2459 "irtx",
2460};
2461
2462static const char * const uartc_groups[] = {
2463 "uca",
2464 "ucb",
2465};
2466
2467static const char * const uartd_groups[] = {
2468 "gmc",
2469 "uda",
2470};
2471
2472static const char * const uarte_groups[] = {
2473 "gma",
2474 "sdio1",
2475};
2476
2477static const char * const ulpi_groups[] = {
2478 "uaa",
2479 "uab",
2480 "uda",
2481};
2482
2483static const char * const vi_groups[] = {
2484 "dta",
2485 "dtb",
2486 "dtc",
2487 "dtd",
2488 "dte",
2489 "dtf",
2490};
2491
2492static const char * const vi_sensor_clk_groups[] = {
2493 "csus",
2494};
2495
2496static const char * const xio_groups[] = {
2497 "ld0",
2498 "ld1",
2499 "ld10",
2500 "ld11",
2501 "ld12",
2502 "ld13",
2503 "ld14",
2504 "ld15",
2505 "ld16",
2506 "ld2",
2507 "ld3",
2508 "ld4",
2509 "ld5",
2510 "ld6",
2511 "ld7",
2512 "ld8",
2513 "ld9",
2514 "lhs",
2515 "lsc0",
2516 "lspi",
2517 "lvs",
2518};
2519
2520#define FUNCTION(fname) \ 1897#define FUNCTION(fname) \
2521 { \ 1898 { \
2522 .name = #fname, \ 1899 .name = #fname, \
2523 .groups = fname##_groups, \
2524 .ngroups = ARRAY_SIZE(fname##_groups), \
2525 } 1900 }
2526 1901
2527static const struct tegra_function tegra20_functions[] = { 1902static struct tegra_function tegra20_functions[] = {
2528 FUNCTION(ahb_clk), 1903 FUNCTION(ahb_clk),
2529 FUNCTION(apb_clk), 1904 FUNCTION(apb_clk),
2530 FUNCTION(audio_sync), 1905 FUNCTION(audio_sync),
diff --git a/drivers/pinctrl/pinctrl-tegra30.c b/drivers/pinctrl/pinctrl-tegra30.c
index 4e591f62cfa1..4bc95802ea67 100644
--- a/drivers/pinctrl/pinctrl-tegra30.c
+++ b/drivers/pinctrl/pinctrl-tegra30.c
@@ -2015,1253 +2015,13 @@ enum tegra_mux {
2015 TEGRA_MUX_VI_ALT2, 2015 TEGRA_MUX_VI_ALT2,
2016 TEGRA_MUX_VI_ALT3, 2016 TEGRA_MUX_VI_ALT3,
2017}; 2017};
2018static const char * const blink_groups[] = {
2019 "clk_32k_out_pa0",
2020};
2021
2022static const char * const cec_groups[] = {
2023 "hdmi_cec_pee3",
2024 "owr",
2025};
2026
2027static const char * const clk_12m_out_groups[] = {
2028 "pv3",
2029};
2030
2031static const char * const clk_32k_in_groups[] = {
2032 "clk_32k_in",
2033};
2034
2035static const char * const core_pwr_req_groups[] = {
2036 "core_pwr_req",
2037};
2038
2039static const char * const cpu_pwr_req_groups[] = {
2040 "cpu_pwr_req",
2041};
2042
2043static const char * const crt_groups[] = {
2044 "crt_hsync_pv6",
2045 "crt_vsync_pv7",
2046};
2047
2048static const char * const dap_groups[] = {
2049 "clk1_req_pee2",
2050 "clk2_req_pcc5",
2051};
2052
2053static const char * const ddr_groups[] = {
2054 "vi_d0_pt4",
2055 "vi_d1_pd5",
2056 "vi_d10_pt2",
2057 "vi_d11_pt3",
2058 "vi_d2_pl0",
2059 "vi_d3_pl1",
2060 "vi_d4_pl2",
2061 "vi_d5_pl3",
2062 "vi_d6_pl4",
2063 "vi_d7_pl5",
2064 "vi_d8_pl6",
2065 "vi_d9_pl7",
2066 "vi_hsync_pd7",
2067 "vi_vsync_pd6",
2068};
2069
2070static const char * const dev3_groups[] = {
2071 "clk3_req_pee1",
2072};
2073
2074static const char * const displaya_groups[] = {
2075 "dap3_din_pp1",
2076 "dap3_dout_pp2",
2077 "dap3_fs_pp0",
2078 "dap3_sclk_pp3",
2079 "pbb3",
2080 "pbb4",
2081 "pbb5",
2082 "pbb6",
2083 "lcd_cs0_n_pn4",
2084 "lcd_cs1_n_pw0",
2085 "lcd_d0_pe0",
2086 "lcd_d1_pe1",
2087 "lcd_d10_pf2",
2088 "lcd_d11_pf3",
2089 "lcd_d12_pf4",
2090 "lcd_d13_pf5",
2091 "lcd_d14_pf6",
2092 "lcd_d15_pf7",
2093 "lcd_d16_pm0",
2094 "lcd_d17_pm1",
2095 "lcd_d18_pm2",
2096 "lcd_d19_pm3",
2097 "lcd_d2_pe2",
2098 "lcd_d20_pm4",
2099 "lcd_d21_pm5",
2100 "lcd_d22_pm6",
2101 "lcd_d23_pm7",
2102 "lcd_d3_pe3",
2103 "lcd_d4_pe4",
2104 "lcd_d5_pe5",
2105 "lcd_d6_pe6",
2106 "lcd_d7_pe7",
2107 "lcd_d8_pf0",
2108 "lcd_d9_pf1",
2109 "lcd_dc0_pn6",
2110 "lcd_dc1_pd2",
2111 "lcd_de_pj1",
2112 "lcd_hsync_pj3",
2113 "lcd_m1_pw1",
2114 "lcd_pclk_pb3",
2115 "lcd_pwr0_pb2",
2116 "lcd_pwr1_pc1",
2117 "lcd_pwr2_pc6",
2118 "lcd_sck_pz4",
2119 "lcd_sdin_pz2",
2120 "lcd_sdout_pn5",
2121 "lcd_vsync_pj4",
2122 "lcd_wr_n_pz3",
2123};
2124
2125static const char * const displayb_groups[] = {
2126 "dap3_din_pp1",
2127 "dap3_dout_pp2",
2128 "dap3_fs_pp0",
2129 "dap3_sclk_pp3",
2130 "pbb3",
2131 "pbb4",
2132 "pbb5",
2133 "pbb6",
2134 "lcd_cs0_n_pn4",
2135 "lcd_cs1_n_pw0",
2136 "lcd_d0_pe0",
2137 "lcd_d1_pe1",
2138 "lcd_d10_pf2",
2139 "lcd_d11_pf3",
2140 "lcd_d12_pf4",
2141 "lcd_d13_pf5",
2142 "lcd_d14_pf6",
2143 "lcd_d15_pf7",
2144 "lcd_d16_pm0",
2145 "lcd_d17_pm1",
2146 "lcd_d18_pm2",
2147 "lcd_d19_pm3",
2148 "lcd_d2_pe2",
2149 "lcd_d20_pm4",
2150 "lcd_d21_pm5",
2151 "lcd_d22_pm6",
2152 "lcd_d23_pm7",
2153 "lcd_d3_pe3",
2154 "lcd_d4_pe4",
2155 "lcd_d5_pe5",
2156 "lcd_d6_pe6",
2157 "lcd_d7_pe7",
2158 "lcd_d8_pf0",
2159 "lcd_d9_pf1",
2160 "lcd_dc0_pn6",
2161 "lcd_dc1_pd2",
2162 "lcd_de_pj1",
2163 "lcd_hsync_pj3",
2164 "lcd_m1_pw1",
2165 "lcd_pclk_pb3",
2166 "lcd_pwr0_pb2",
2167 "lcd_pwr1_pc1",
2168 "lcd_pwr2_pc6",
2169 "lcd_sck_pz4",
2170 "lcd_sdin_pz2",
2171 "lcd_sdout_pn5",
2172 "lcd_vsync_pj4",
2173 "lcd_wr_n_pz3",
2174};
2175
2176static const char * const dtv_groups[] = {
2177 "gmi_a17_pb0",
2178 "gmi_a18_pb1",
2179 "gmi_cs0_n_pj0",
2180 "gmi_cs1_n_pj2",
2181};
2182
2183static const char * const extperiph1_groups[] = {
2184 "clk1_out_pw4",
2185};
2186
2187static const char * const extperiph2_groups[] = {
2188 "clk2_out_pw5",
2189};
2190
2191static const char * const extperiph3_groups[] = {
2192 "clk3_out_pee0",
2193};
2194
2195static const char * const gmi_groups[] = {
2196 "dap1_din_pn1",
2197 "dap1_dout_pn2",
2198 "dap1_fs_pn0",
2199 "dap1_sclk_pn3",
2200 "dap2_din_pa4",
2201 "dap2_dout_pa5",
2202 "dap2_fs_pa2",
2203 "dap2_sclk_pa3",
2204 "dap4_din_pp5",
2205 "dap4_dout_pp6",
2206 "dap4_fs_pp4",
2207 "dap4_sclk_pp7",
2208 "gen2_i2c_scl_pt5",
2209 "gen2_i2c_sda_pt6",
2210 "gmi_a16_pj7",
2211 "gmi_a17_pb0",
2212 "gmi_a18_pb1",
2213 "gmi_a19_pk7",
2214 "gmi_ad0_pg0",
2215 "gmi_ad1_pg1",
2216 "gmi_ad10_ph2",
2217 "gmi_ad11_ph3",
2218 "gmi_ad12_ph4",
2219 "gmi_ad13_ph5",
2220 "gmi_ad14_ph6",
2221 "gmi_ad15_ph7",
2222 "gmi_ad2_pg2",
2223 "gmi_ad3_pg3",
2224 "gmi_ad4_pg4",
2225 "gmi_ad5_pg5",
2226 "gmi_ad6_pg6",
2227 "gmi_ad7_pg7",
2228 "gmi_ad8_ph0",
2229 "gmi_ad9_ph1",
2230 "gmi_adv_n_pk0",
2231 "gmi_clk_pk1",
2232 "gmi_cs0_n_pj0",
2233 "gmi_cs1_n_pj2",
2234 "gmi_cs2_n_pk3",
2235 "gmi_cs3_n_pk4",
2236 "gmi_cs4_n_pk2",
2237 "gmi_cs6_n_pi3",
2238 "gmi_cs7_n_pi6",
2239 "gmi_dqs_pi2",
2240 "gmi_iordy_pi5",
2241 "gmi_oe_n_pi1",
2242 "gmi_rst_n_pi4",
2243 "gmi_wait_pi7",
2244 "gmi_wp_n_pc7",
2245 "gmi_wr_n_pi0",
2246 "pu0",
2247 "pu1",
2248 "pu2",
2249 "pu3",
2250 "pu4",
2251 "pu5",
2252 "pu6",
2253 "sdmmc4_clk_pcc4",
2254 "sdmmc4_cmd_pt7",
2255 "sdmmc4_dat0_paa0",
2256 "sdmmc4_dat1_paa1",
2257 "sdmmc4_dat2_paa2",
2258 "sdmmc4_dat3_paa3",
2259 "sdmmc4_dat4_paa4",
2260 "sdmmc4_dat5_paa5",
2261 "sdmmc4_dat6_paa6",
2262 "sdmmc4_dat7_paa7",
2263 "spi1_cs0_n_px6",
2264 "spi1_mosi_px4",
2265 "spi1_sck_px5",
2266 "spi2_cs0_n_px3",
2267 "spi2_miso_px1",
2268 "spi2_mosi_px0",
2269 "spi2_sck_px2",
2270 "uart2_cts_n_pj5",
2271 "uart2_rts_n_pj6",
2272 "uart3_cts_n_pa1",
2273 "uart3_rts_n_pc0",
2274 "uart3_rxd_pw7",
2275 "uart3_txd_pw6",
2276};
2277
2278static const char * const gmi_alt_groups[] = {
2279 "gmi_a16_pj7",
2280 "gmi_cs3_n_pk4",
2281 "gmi_cs7_n_pi6",
2282 "gmi_wp_n_pc7",
2283};
2284
2285static const char * const hda_groups[] = {
2286 "clk1_req_pee2",
2287 "dap1_din_pn1",
2288 "dap1_dout_pn2",
2289 "dap1_fs_pn0",
2290 "dap1_sclk_pn3",
2291 "dap2_din_pa4",
2292 "dap2_dout_pa5",
2293 "dap2_fs_pa2",
2294 "dap2_sclk_pa3",
2295 "pex_l0_clkreq_n_pdd2",
2296 "pex_l0_prsnt_n_pdd0",
2297 "pex_l0_rst_n_pdd1",
2298 "pex_l1_clkreq_n_pdd6",
2299 "pex_l1_prsnt_n_pdd4",
2300 "pex_l1_rst_n_pdd5",
2301 "pex_l2_clkreq_n_pcc7",
2302 "pex_l2_prsnt_n_pdd7",
2303 "pex_l2_rst_n_pcc6",
2304 "pex_wake_n_pdd3",
2305 "spdif_in_pk6",
2306};
2307
2308static const char * const hdcp_groups[] = {
2309 "gen2_i2c_scl_pt5",
2310 "gen2_i2c_sda_pt6",
2311 "lcd_pwr0_pb2",
2312 "lcd_pwr2_pc6",
2313 "lcd_sck_pz4",
2314 "lcd_sdout_pn5",
2315 "lcd_wr_n_pz3",
2316};
2317
2318static const char * const hdmi_groups[] = {
2319 "hdmi_int_pn7",
2320};
2321
2322static const char * const hsi_groups[] = {
2323 "ulpi_data0_po1",
2324 "ulpi_data1_po2",
2325 "ulpi_data2_po3",
2326 "ulpi_data3_po4",
2327 "ulpi_data4_po5",
2328 "ulpi_data5_po6",
2329 "ulpi_data6_po7",
2330 "ulpi_data7_po0",
2331};
2332
2333static const char * const i2c1_groups[] = {
2334 "gen1_i2c_scl_pc4",
2335 "gen1_i2c_sda_pc5",
2336 "spdif_in_pk6",
2337 "spdif_out_pk5",
2338 "spi2_cs1_n_pw2",
2339 "spi2_cs2_n_pw3",
2340};
2341
2342static const char * const i2c2_groups[] = {
2343 "gen2_i2c_scl_pt5",
2344 "gen2_i2c_sda_pt6",
2345};
2346
2347static const char * const i2c3_groups[] = {
2348 "cam_i2c_scl_pbb1",
2349 "cam_i2c_sda_pbb2",
2350 "sdmmc4_cmd_pt7",
2351 "sdmmc4_dat4_paa4",
2352};
2353
2354static const char * const i2c4_groups[] = {
2355 "ddc_scl_pv4",
2356 "ddc_sda_pv5",
2357};
2358
2359static const char * const i2cpwr_groups[] = {
2360 "pwr_i2c_scl_pz6",
2361 "pwr_i2c_sda_pz7",
2362};
2363
2364static const char * const i2s0_groups[] = {
2365 "dap1_din_pn1",
2366 "dap1_dout_pn2",
2367 "dap1_fs_pn0",
2368 "dap1_sclk_pn3",
2369};
2370
2371static const char * const i2s1_groups[] = {
2372 "dap2_din_pa4",
2373 "dap2_dout_pa5",
2374 "dap2_fs_pa2",
2375 "dap2_sclk_pa3",
2376};
2377
2378static const char * const i2s2_groups[] = {
2379 "dap3_din_pp1",
2380 "dap3_dout_pp2",
2381 "dap3_fs_pp0",
2382 "dap3_sclk_pp3",
2383};
2384
2385static const char * const i2s3_groups[] = {
2386 "dap4_din_pp5",
2387 "dap4_dout_pp6",
2388 "dap4_fs_pp4",
2389 "dap4_sclk_pp7",
2390};
2391
2392static const char * const i2s4_groups[] = {
2393 "pbb0",
2394 "pbb7",
2395 "pcc1",
2396 "pcc2",
2397 "sdmmc4_dat4_paa4",
2398 "sdmmc4_dat5_paa5",
2399 "sdmmc4_dat6_paa6",
2400 "sdmmc4_dat7_paa7",
2401};
2402
2403static const char * const invalid_groups[] = {
2404 "kb_row3_pr3",
2405 "sdmmc4_clk_pcc4",
2406};
2407
2408static const char * const kbc_groups[] = {
2409 "kb_col0_pq0",
2410 "kb_col1_pq1",
2411 "kb_col2_pq2",
2412 "kb_col3_pq3",
2413 "kb_col4_pq4",
2414 "kb_col5_pq5",
2415 "kb_col6_pq6",
2416 "kb_col7_pq7",
2417 "kb_row0_pr0",
2418 "kb_row1_pr1",
2419 "kb_row10_ps2",
2420 "kb_row11_ps3",
2421 "kb_row12_ps4",
2422 "kb_row13_ps5",
2423 "kb_row14_ps6",
2424 "kb_row15_ps7",
2425 "kb_row2_pr2",
2426 "kb_row3_pr3",
2427 "kb_row4_pr4",
2428 "kb_row5_pr5",
2429 "kb_row6_pr6",
2430 "kb_row7_pr7",
2431 "kb_row8_ps0",
2432 "kb_row9_ps1",
2433};
2434
2435static const char * const mio_groups[] = {
2436 "kb_col6_pq6",
2437 "kb_col7_pq7",
2438 "kb_row10_ps2",
2439 "kb_row11_ps3",
2440 "kb_row12_ps4",
2441 "kb_row13_ps5",
2442 "kb_row14_ps6",
2443 "kb_row15_ps7",
2444 "kb_row6_pr6",
2445 "kb_row7_pr7",
2446 "kb_row8_ps0",
2447 "kb_row9_ps1",
2448};
2449
2450static const char * const nand_groups[] = {
2451 "gmi_ad0_pg0",
2452 "gmi_ad1_pg1",
2453 "gmi_ad10_ph2",
2454 "gmi_ad11_ph3",
2455 "gmi_ad12_ph4",
2456 "gmi_ad13_ph5",
2457 "gmi_ad14_ph6",
2458 "gmi_ad15_ph7",
2459 "gmi_ad2_pg2",
2460 "gmi_ad3_pg3",
2461 "gmi_ad4_pg4",
2462 "gmi_ad5_pg5",
2463 "gmi_ad6_pg6",
2464 "gmi_ad7_pg7",
2465 "gmi_ad8_ph0",
2466 "gmi_ad9_ph1",
2467 "gmi_adv_n_pk0",
2468 "gmi_clk_pk1",
2469 "gmi_cs0_n_pj0",
2470 "gmi_cs1_n_pj2",
2471 "gmi_cs2_n_pk3",
2472 "gmi_cs3_n_pk4",
2473 "gmi_cs4_n_pk2",
2474 "gmi_cs6_n_pi3",
2475 "gmi_cs7_n_pi6",
2476 "gmi_dqs_pi2",
2477 "gmi_iordy_pi5",
2478 "gmi_oe_n_pi1",
2479 "gmi_rst_n_pi4",
2480 "gmi_wait_pi7",
2481 "gmi_wp_n_pc7",
2482 "gmi_wr_n_pi0",
2483 "kb_col0_pq0",
2484 "kb_col1_pq1",
2485 "kb_col2_pq2",
2486 "kb_col3_pq3",
2487 "kb_col4_pq4",
2488 "kb_col5_pq5",
2489 "kb_col6_pq6",
2490 "kb_col7_pq7",
2491 "kb_row0_pr0",
2492 "kb_row1_pr1",
2493 "kb_row10_ps2",
2494 "kb_row11_ps3",
2495 "kb_row12_ps4",
2496 "kb_row13_ps5",
2497 "kb_row14_ps6",
2498 "kb_row15_ps7",
2499 "kb_row2_pr2",
2500 "kb_row3_pr3",
2501 "kb_row4_pr4",
2502 "kb_row5_pr5",
2503 "kb_row6_pr6",
2504 "kb_row7_pr7",
2505 "kb_row8_ps0",
2506 "kb_row9_ps1",
2507 "sdmmc4_clk_pcc4",
2508 "sdmmc4_cmd_pt7",
2509};
2510
2511static const char * const nand_alt_groups[] = {
2512 "gmi_cs6_n_pi3",
2513 "gmi_cs7_n_pi6",
2514 "gmi_rst_n_pi4",
2515};
2516
2517static const char * const owr_groups[] = {
2518 "pu0",
2519 "pv2",
2520 "kb_row5_pr5",
2521 "owr",
2522};
2523
2524static const char * const pcie_groups[] = {
2525 "pex_l0_clkreq_n_pdd2",
2526 "pex_l0_prsnt_n_pdd0",
2527 "pex_l0_rst_n_pdd1",
2528 "pex_l1_clkreq_n_pdd6",
2529 "pex_l1_prsnt_n_pdd4",
2530 "pex_l1_rst_n_pdd5",
2531 "pex_l2_clkreq_n_pcc7",
2532 "pex_l2_prsnt_n_pdd7",
2533 "pex_l2_rst_n_pcc6",
2534 "pex_wake_n_pdd3",
2535};
2536
2537static const char * const pwm0_groups[] = {
2538 "gmi_ad8_ph0",
2539 "pu3",
2540 "sdmmc3_dat3_pb4",
2541 "sdmmc3_dat5_pd0",
2542 "uart3_rts_n_pc0",
2543};
2544
2545static const char * const pwm1_groups[] = {
2546 "gmi_ad9_ph1",
2547 "pu4",
2548 "sdmmc3_dat2_pb5",
2549 "sdmmc3_dat4_pd1",
2550};
2551
2552static const char * const pwm2_groups[] = {
2553 "gmi_ad10_ph2",
2554 "pu5",
2555 "sdmmc3_clk_pa6",
2556};
2557
2558static const char * const pwm3_groups[] = {
2559 "gmi_ad11_ph3",
2560 "pu6",
2561 "sdmmc3_cmd_pa7",
2562};
2563
2564static const char * const pwr_int_n_groups[] = {
2565 "pwr_int_n",
2566};
2567
2568static const char * const rsvd1_groups[] = {
2569 "gmi_ad0_pg0",
2570 "gmi_ad1_pg1",
2571 "gmi_ad12_ph4",
2572 "gmi_ad13_ph5",
2573 "gmi_ad14_ph6",
2574 "gmi_ad15_ph7",
2575 "gmi_ad2_pg2",
2576 "gmi_ad3_pg3",
2577 "gmi_ad4_pg4",
2578 "gmi_ad5_pg5",
2579 "gmi_ad6_pg6",
2580 "gmi_ad7_pg7",
2581 "gmi_adv_n_pk0",
2582 "gmi_clk_pk1",
2583 "gmi_cs0_n_pj0",
2584 "gmi_cs1_n_pj2",
2585 "gmi_cs2_n_pk3",
2586 "gmi_cs3_n_pk4",
2587 "gmi_cs4_n_pk2",
2588 "gmi_dqs_pi2",
2589 "gmi_iordy_pi5",
2590 "gmi_oe_n_pi1",
2591 "gmi_wait_pi7",
2592 "gmi_wp_n_pc7",
2593 "gmi_wr_n_pi0",
2594 "pu1",
2595 "pu2",
2596 "pv0",
2597 "pv1",
2598 "sdmmc3_dat0_pb7",
2599 "sdmmc3_dat1_pb6",
2600 "sdmmc3_dat2_pb5",
2601 "sdmmc3_dat3_pb4",
2602 "vi_pclk_pt0",
2603};
2604
2605static const char * const rsvd2_groups[] = {
2606 "clk1_out_pw4",
2607 "clk2_out_pw5",
2608 "clk2_req_pcc5",
2609 "clk3_out_pee0",
2610 "clk3_req_pee1",
2611 "clk_32k_in",
2612 "clk_32k_out_pa0",
2613 "core_pwr_req",
2614 "cpu_pwr_req",
2615 "crt_hsync_pv6",
2616 "crt_vsync_pv7",
2617 "dap3_din_pp1",
2618 "dap3_dout_pp2",
2619 "dap3_fs_pp0",
2620 "dap3_sclk_pp3",
2621 "dap4_din_pp5",
2622 "dap4_dout_pp6",
2623 "dap4_fs_pp4",
2624 "dap4_sclk_pp7",
2625 "ddc_scl_pv4",
2626 "ddc_sda_pv5",
2627 "gen1_i2c_scl_pc4",
2628 "gen1_i2c_sda_pc5",
2629 "pbb0",
2630 "pbb7",
2631 "pcc1",
2632 "pcc2",
2633 "pv0",
2634 "pv1",
2635 "pv2",
2636 "pv3",
2637 "hdmi_cec_pee3",
2638 "hdmi_int_pn7",
2639 "jtag_rtck_pu7",
2640 "pwr_i2c_scl_pz6",
2641 "pwr_i2c_sda_pz7",
2642 "pwr_int_n",
2643 "sdmmc1_clk_pz0",
2644 "sdmmc1_cmd_pz1",
2645 "sdmmc1_dat0_py7",
2646 "sdmmc1_dat1_py6",
2647 "sdmmc1_dat2_py5",
2648 "sdmmc1_dat3_py4",
2649 "sdmmc3_dat0_pb7",
2650 "sdmmc3_dat1_pb6",
2651 "sdmmc4_rst_n_pcc3",
2652 "spdif_out_pk5",
2653 "sys_clk_req_pz5",
2654 "uart3_cts_n_pa1",
2655 "uart3_rxd_pw7",
2656 "uart3_txd_pw6",
2657 "ulpi_clk_py0",
2658 "ulpi_dir_py1",
2659 "ulpi_nxt_py2",
2660 "ulpi_stp_py3",
2661 "vi_d0_pt4",
2662 "vi_d10_pt2",
2663 "vi_d11_pt3",
2664 "vi_hsync_pd7",
2665 "vi_vsync_pd6",
2666};
2667
2668static const char * const rsvd3_groups[] = {
2669 "cam_i2c_scl_pbb1",
2670 "cam_i2c_sda_pbb2",
2671 "clk1_out_pw4",
2672 "clk1_req_pee2",
2673 "clk2_out_pw5",
2674 "clk2_req_pcc5",
2675 "clk3_out_pee0",
2676 "clk3_req_pee1",
2677 "clk_32k_in",
2678 "clk_32k_out_pa0",
2679 "core_pwr_req",
2680 "cpu_pwr_req",
2681 "crt_hsync_pv6",
2682 "crt_vsync_pv7",
2683 "dap2_din_pa4",
2684 "dap2_dout_pa5",
2685 "dap2_fs_pa2",
2686 "dap2_sclk_pa3",
2687 "ddc_scl_pv4",
2688 "ddc_sda_pv5",
2689 "gen1_i2c_scl_pc4",
2690 "gen1_i2c_sda_pc5",
2691 "pbb0",
2692 "pbb7",
2693 "pcc1",
2694 "pcc2",
2695 "pv0",
2696 "pv1",
2697 "pv2",
2698 "pv3",
2699 "hdmi_cec_pee3",
2700 "hdmi_int_pn7",
2701 "jtag_rtck_pu7",
2702 "kb_row0_pr0",
2703 "kb_row1_pr1",
2704 "kb_row2_pr2",
2705 "kb_row3_pr3",
2706 "lcd_d0_pe0",
2707 "lcd_d1_pe1",
2708 "lcd_d10_pf2",
2709 "lcd_d11_pf3",
2710 "lcd_d12_pf4",
2711 "lcd_d13_pf5",
2712 "lcd_d14_pf6",
2713 "lcd_d15_pf7",
2714 "lcd_d16_pm0",
2715 "lcd_d17_pm1",
2716 "lcd_d18_pm2",
2717 "lcd_d19_pm3",
2718 "lcd_d2_pe2",
2719 "lcd_d20_pm4",
2720 "lcd_d21_pm5",
2721 "lcd_d22_pm6",
2722 "lcd_d23_pm7",
2723 "lcd_d3_pe3",
2724 "lcd_d4_pe4",
2725 "lcd_d5_pe5",
2726 "lcd_d6_pe6",
2727 "lcd_d7_pe7",
2728 "lcd_d8_pf0",
2729 "lcd_d9_pf1",
2730 "lcd_dc0_pn6",
2731 "lcd_dc1_pd2",
2732 "lcd_de_pj1",
2733 "lcd_hsync_pj3",
2734 "lcd_m1_pw1",
2735 "lcd_pclk_pb3",
2736 "lcd_pwr1_pc1",
2737 "lcd_vsync_pj4",
2738 "owr",
2739 "pex_l0_clkreq_n_pdd2",
2740 "pex_l0_prsnt_n_pdd0",
2741 "pex_l0_rst_n_pdd1",
2742 "pex_l1_clkreq_n_pdd6",
2743 "pex_l1_prsnt_n_pdd4",
2744 "pex_l1_rst_n_pdd5",
2745 "pex_l2_clkreq_n_pcc7",
2746 "pex_l2_prsnt_n_pdd7",
2747 "pex_l2_rst_n_pcc6",
2748 "pex_wake_n_pdd3",
2749 "pwr_i2c_scl_pz6",
2750 "pwr_i2c_sda_pz7",
2751 "pwr_int_n",
2752 "sdmmc1_clk_pz0",
2753 "sdmmc1_cmd_pz1",
2754 "sdmmc4_rst_n_pcc3",
2755 "sys_clk_req_pz5",
2756};
2757
2758static const char * const rsvd4_groups[] = {
2759 "clk1_out_pw4",
2760 "clk1_req_pee2",
2761 "clk2_out_pw5",
2762 "clk2_req_pcc5",
2763 "clk3_out_pee0",
2764 "clk3_req_pee1",
2765 "clk_32k_in",
2766 "clk_32k_out_pa0",
2767 "core_pwr_req",
2768 "cpu_pwr_req",
2769 "crt_hsync_pv6",
2770 "crt_vsync_pv7",
2771 "dap4_din_pp5",
2772 "dap4_dout_pp6",
2773 "dap4_fs_pp4",
2774 "dap4_sclk_pp7",
2775 "ddc_scl_pv4",
2776 "ddc_sda_pv5",
2777 "gen1_i2c_scl_pc4",
2778 "gen1_i2c_sda_pc5",
2779 "gen2_i2c_scl_pt5",
2780 "gen2_i2c_sda_pt6",
2781 "gmi_a19_pk7",
2782 "gmi_ad0_pg0",
2783 "gmi_ad1_pg1",
2784 "gmi_ad10_ph2",
2785 "gmi_ad11_ph3",
2786 "gmi_ad12_ph4",
2787 "gmi_ad13_ph5",
2788 "gmi_ad14_ph6",
2789 "gmi_ad15_ph7",
2790 "gmi_ad2_pg2",
2791 "gmi_ad3_pg3",
2792 "gmi_ad4_pg4",
2793 "gmi_ad5_pg5",
2794 "gmi_ad6_pg6",
2795 "gmi_ad7_pg7",
2796 "gmi_ad8_ph0",
2797 "gmi_ad9_ph1",
2798 "gmi_adv_n_pk0",
2799 "gmi_clk_pk1",
2800 "gmi_cs2_n_pk3",
2801 "gmi_cs4_n_pk2",
2802 "gmi_dqs_pi2",
2803 "gmi_iordy_pi5",
2804 "gmi_oe_n_pi1",
2805 "gmi_rst_n_pi4",
2806 "gmi_wait_pi7",
2807 "gmi_wr_n_pi0",
2808 "pcc2",
2809 "pu0",
2810 "pu1",
2811 "pu2",
2812 "pu3",
2813 "pu4",
2814 "pu5",
2815 "pu6",
2816 "pv0",
2817 "pv1",
2818 "pv2",
2819 "pv3",
2820 "hdmi_cec_pee3",
2821 "hdmi_int_pn7",
2822 "jtag_rtck_pu7",
2823 "kb_col2_pq2",
2824 "kb_col3_pq3",
2825 "kb_col4_pq4",
2826 "kb_col5_pq5",
2827 "kb_row0_pr0",
2828 "kb_row1_pr1",
2829 "kb_row2_pr2",
2830 "kb_row4_pr4",
2831 "lcd_cs0_n_pn4",
2832 "lcd_cs1_n_pw0",
2833 "lcd_d0_pe0",
2834 "lcd_d1_pe1",
2835 "lcd_d10_pf2",
2836 "lcd_d11_pf3",
2837 "lcd_d12_pf4",
2838 "lcd_d13_pf5",
2839 "lcd_d14_pf6",
2840 "lcd_d15_pf7",
2841 "lcd_d16_pm0",
2842 "lcd_d17_pm1",
2843 "lcd_d18_pm2",
2844 "lcd_d19_pm3",
2845 "lcd_d2_pe2",
2846 "lcd_d20_pm4",
2847 "lcd_d21_pm5",
2848 "lcd_d22_pm6",
2849 "lcd_d23_pm7",
2850 "lcd_d3_pe3",
2851 "lcd_d4_pe4",
2852 "lcd_d5_pe5",
2853 "lcd_d6_pe6",
2854 "lcd_d7_pe7",
2855 "lcd_d8_pf0",
2856 "lcd_d9_pf1",
2857 "lcd_dc0_pn6",
2858 "lcd_dc1_pd2",
2859 "lcd_de_pj1",
2860 "lcd_hsync_pj3",
2861 "lcd_m1_pw1",
2862 "lcd_pclk_pb3",
2863 "lcd_pwr1_pc1",
2864 "lcd_sdin_pz2",
2865 "lcd_vsync_pj4",
2866 "owr",
2867 "pex_l0_clkreq_n_pdd2",
2868 "pex_l0_prsnt_n_pdd0",
2869 "pex_l0_rst_n_pdd1",
2870 "pex_l1_clkreq_n_pdd6",
2871 "pex_l1_prsnt_n_pdd4",
2872 "pex_l1_rst_n_pdd5",
2873 "pex_l2_clkreq_n_pcc7",
2874 "pex_l2_prsnt_n_pdd7",
2875 "pex_l2_rst_n_pcc6",
2876 "pex_wake_n_pdd3",
2877 "pwr_i2c_scl_pz6",
2878 "pwr_i2c_sda_pz7",
2879 "pwr_int_n",
2880 "spi1_miso_px7",
2881 "sys_clk_req_pz5",
2882 "uart3_cts_n_pa1",
2883 "uart3_rts_n_pc0",
2884 "uart3_rxd_pw7",
2885 "uart3_txd_pw6",
2886 "vi_d0_pt4",
2887 "vi_d1_pd5",
2888 "vi_d10_pt2",
2889 "vi_d11_pt3",
2890 "vi_d2_pl0",
2891 "vi_d3_pl1",
2892 "vi_d4_pl2",
2893 "vi_d5_pl3",
2894 "vi_d6_pl4",
2895 "vi_d7_pl5",
2896 "vi_d8_pl6",
2897 "vi_d9_pl7",
2898 "vi_hsync_pd7",
2899 "vi_pclk_pt0",
2900 "vi_vsync_pd6",
2901};
2902
2903static const char * const rtck_groups[] = {
2904 "jtag_rtck_pu7",
2905};
2906
2907static const char * const sata_groups[] = {
2908 "gmi_cs6_n_pi3",
2909};
2910
2911static const char * const sdmmc1_groups[] = {
2912 "sdmmc1_clk_pz0",
2913 "sdmmc1_cmd_pz1",
2914 "sdmmc1_dat0_py7",
2915 "sdmmc1_dat1_py6",
2916 "sdmmc1_dat2_py5",
2917 "sdmmc1_dat3_py4",
2918};
2919
2920static const char * const sdmmc2_groups[] = {
2921 "dap1_din_pn1",
2922 "dap1_dout_pn2",
2923 "dap1_fs_pn0",
2924 "dap1_sclk_pn3",
2925 "kb_row10_ps2",
2926 "kb_row11_ps3",
2927 "kb_row12_ps4",
2928 "kb_row13_ps5",
2929 "kb_row14_ps6",
2930 "kb_row15_ps7",
2931 "kb_row6_pr6",
2932 "kb_row7_pr7",
2933 "kb_row8_ps0",
2934 "kb_row9_ps1",
2935 "spdif_in_pk6",
2936 "spdif_out_pk5",
2937 "vi_d1_pd5",
2938 "vi_d2_pl0",
2939 "vi_d3_pl1",
2940 "vi_d4_pl2",
2941 "vi_d5_pl3",
2942 "vi_d6_pl4",
2943 "vi_d7_pl5",
2944 "vi_d8_pl6",
2945 "vi_d9_pl7",
2946 "vi_pclk_pt0",
2947};
2948
2949static const char * const sdmmc3_groups[] = {
2950 "sdmmc3_clk_pa6",
2951 "sdmmc3_cmd_pa7",
2952 "sdmmc3_dat0_pb7",
2953 "sdmmc3_dat1_pb6",
2954 "sdmmc3_dat2_pb5",
2955 "sdmmc3_dat3_pb4",
2956 "sdmmc3_dat4_pd1",
2957 "sdmmc3_dat5_pd0",
2958 "sdmmc3_dat6_pd3",
2959 "sdmmc3_dat7_pd4",
2960};
2961
2962static const char * const sdmmc4_groups[] = {
2963 "cam_i2c_scl_pbb1",
2964 "cam_i2c_sda_pbb2",
2965 "cam_mclk_pcc0",
2966 "pbb0",
2967 "pbb3",
2968 "pbb4",
2969 "pbb5",
2970 "pbb6",
2971 "pbb7",
2972 "pcc1",
2973 "sdmmc4_clk_pcc4",
2974 "sdmmc4_cmd_pt7",
2975 "sdmmc4_dat0_paa0",
2976 "sdmmc4_dat1_paa1",
2977 "sdmmc4_dat2_paa2",
2978 "sdmmc4_dat3_paa3",
2979 "sdmmc4_dat4_paa4",
2980 "sdmmc4_dat5_paa5",
2981 "sdmmc4_dat6_paa6",
2982 "sdmmc4_dat7_paa7",
2983 "sdmmc4_rst_n_pcc3",
2984};
2985
2986static const char * const spdif_groups[] = {
2987 "sdmmc3_dat6_pd3",
2988 "sdmmc3_dat7_pd4",
2989 "spdif_in_pk6",
2990 "spdif_out_pk5",
2991 "uart2_rxd_pc3",
2992 "uart2_txd_pc2",
2993};
2994
2995static const char * const spi1_groups[] = {
2996 "spi1_cs0_n_px6",
2997 "spi1_miso_px7",
2998 "spi1_mosi_px4",
2999 "spi1_sck_px5",
3000 "ulpi_clk_py0",
3001 "ulpi_dir_py1",
3002 "ulpi_nxt_py2",
3003 "ulpi_stp_py3",
3004};
3005
3006static const char * const spi2_groups[] = {
3007 "sdmmc3_cmd_pa7",
3008 "sdmmc3_dat4_pd1",
3009 "sdmmc3_dat5_pd0",
3010 "sdmmc3_dat6_pd3",
3011 "sdmmc3_dat7_pd4",
3012 "spi1_cs0_n_px6",
3013 "spi1_mosi_px4",
3014 "spi1_sck_px5",
3015 "spi2_cs0_n_px3",
3016 "spi2_cs1_n_pw2",
3017 "spi2_cs2_n_pw3",
3018 "spi2_miso_px1",
3019 "spi2_mosi_px0",
3020 "spi2_sck_px2",
3021 "ulpi_data4_po5",
3022 "ulpi_data5_po6",
3023 "ulpi_data6_po7",
3024 "ulpi_data7_po0",
3025};
3026
3027static const char * const spi2_alt_groups[] = {
3028 "spi1_cs0_n_px6",
3029 "spi1_miso_px7",
3030 "spi1_mosi_px4",
3031 "spi1_sck_px5",
3032 "spi2_cs1_n_pw2",
3033 "spi2_cs2_n_pw3",
3034};
3035
3036static const char * const spi3_groups[] = {
3037 "sdmmc3_clk_pa6",
3038 "sdmmc3_dat0_pb7",
3039 "sdmmc3_dat1_pb6",
3040 "sdmmc3_dat2_pb5",
3041 "sdmmc3_dat3_pb4",
3042 "sdmmc4_dat0_paa0",
3043 "sdmmc4_dat1_paa1",
3044 "sdmmc4_dat2_paa2",
3045 "sdmmc4_dat3_paa3",
3046 "spi1_miso_px7",
3047 "spi2_cs0_n_px3",
3048 "spi2_cs1_n_pw2",
3049 "spi2_cs2_n_pw3",
3050 "spi2_miso_px1",
3051 "spi2_mosi_px0",
3052 "spi2_sck_px2",
3053 "ulpi_data0_po1",
3054 "ulpi_data1_po2",
3055 "ulpi_data2_po3",
3056 "ulpi_data3_po4",
3057};
3058
3059static const char * const spi4_groups[] = {
3060 "gmi_a16_pj7",
3061 "gmi_a17_pb0",
3062 "gmi_a18_pb1",
3063 "gmi_a19_pk7",
3064 "sdmmc3_dat4_pd1",
3065 "sdmmc3_dat5_pd0",
3066 "sdmmc3_dat6_pd3",
3067 "sdmmc3_dat7_pd4",
3068 "uart2_cts_n_pj5",
3069 "uart2_rts_n_pj6",
3070 "uart2_rxd_pc3",
3071 "uart2_txd_pc2",
3072};
3073
3074static const char * const spi5_groups[] = {
3075 "lcd_cs0_n_pn4",
3076 "lcd_cs1_n_pw0",
3077 "lcd_pwr0_pb2",
3078 "lcd_pwr2_pc6",
3079 "lcd_sck_pz4",
3080 "lcd_sdin_pz2",
3081 "lcd_sdout_pn5",
3082 "lcd_wr_n_pz3",
3083};
3084
3085static const char * const spi6_groups[] = {
3086 "spi2_cs0_n_px3",
3087 "spi2_miso_px1",
3088 "spi2_mosi_px0",
3089 "spi2_sck_px2",
3090};
3091
3092static const char * const sysclk_groups[] = {
3093 "sys_clk_req_pz5",
3094};
3095
3096static const char * const test_groups[] = {
3097 "kb_col0_pq0",
3098 "kb_col1_pq1",
3099};
3100
3101static const char * const trace_groups[] = {
3102 "kb_col0_pq0",
3103 "kb_col1_pq1",
3104 "kb_col2_pq2",
3105 "kb_col3_pq3",
3106 "kb_col4_pq4",
3107 "kb_col5_pq5",
3108 "kb_col6_pq6",
3109 "kb_col7_pq7",
3110 "kb_row4_pr4",
3111 "kb_row5_pr5",
3112};
3113
3114static const char * const uarta_groups[] = {
3115 "pu0",
3116 "pu1",
3117 "pu2",
3118 "pu3",
3119 "pu4",
3120 "pu5",
3121 "pu6",
3122 "sdmmc1_clk_pz0",
3123 "sdmmc1_cmd_pz1",
3124 "sdmmc1_dat0_py7",
3125 "sdmmc1_dat1_py6",
3126 "sdmmc1_dat2_py5",
3127 "sdmmc1_dat3_py4",
3128 "sdmmc3_clk_pa6",
3129 "sdmmc3_cmd_pa7",
3130 "uart2_cts_n_pj5",
3131 "uart2_rts_n_pj6",
3132 "uart2_rxd_pc3",
3133 "uart2_txd_pc2",
3134 "ulpi_data0_po1",
3135 "ulpi_data1_po2",
3136 "ulpi_data2_po3",
3137 "ulpi_data3_po4",
3138 "ulpi_data4_po5",
3139 "ulpi_data5_po6",
3140 "ulpi_data6_po7",
3141 "ulpi_data7_po0",
3142};
3143
3144static const char * const uartb_groups[] = {
3145 "uart2_cts_n_pj5",
3146 "uart2_rts_n_pj6",
3147 "uart2_rxd_pc3",
3148 "uart2_txd_pc2",
3149};
3150
3151static const char * const uartc_groups[] = {
3152 "uart3_cts_n_pa1",
3153 "uart3_rts_n_pc0",
3154 "uart3_rxd_pw7",
3155 "uart3_txd_pw6",
3156};
3157
3158static const char * const uartd_groups[] = {
3159 "gmi_a16_pj7",
3160 "gmi_a17_pb0",
3161 "gmi_a18_pb1",
3162 "gmi_a19_pk7",
3163 "ulpi_clk_py0",
3164 "ulpi_dir_py1",
3165 "ulpi_nxt_py2",
3166 "ulpi_stp_py3",
3167};
3168
3169static const char * const uarte_groups[] = {
3170 "sdmmc1_dat0_py7",
3171 "sdmmc1_dat1_py6",
3172 "sdmmc1_dat2_py5",
3173 "sdmmc1_dat3_py4",
3174 "sdmmc4_dat0_paa0",
3175 "sdmmc4_dat1_paa1",
3176 "sdmmc4_dat2_paa2",
3177 "sdmmc4_dat3_paa3",
3178};
3179
3180static const char * const ulpi_groups[] = {
3181 "ulpi_clk_py0",
3182 "ulpi_data0_po1",
3183 "ulpi_data1_po2",
3184 "ulpi_data2_po3",
3185 "ulpi_data3_po4",
3186 "ulpi_data4_po5",
3187 "ulpi_data5_po6",
3188 "ulpi_data6_po7",
3189 "ulpi_data7_po0",
3190 "ulpi_dir_py1",
3191 "ulpi_nxt_py2",
3192 "ulpi_stp_py3",
3193};
3194
3195static const char * const vgp1_groups[] = {
3196 "cam_i2c_scl_pbb1",
3197};
3198
3199static const char * const vgp2_groups[] = {
3200 "cam_i2c_sda_pbb2",
3201};
3202
3203static const char * const vgp3_groups[] = {
3204 "pbb3",
3205 "sdmmc4_dat5_paa5",
3206};
3207
3208static const char * const vgp4_groups[] = {
3209 "pbb4",
3210 "sdmmc4_dat6_paa6",
3211};
3212
3213static const char * const vgp5_groups[] = {
3214 "pbb5",
3215 "sdmmc4_dat7_paa7",
3216};
3217
3218static const char * const vgp6_groups[] = {
3219 "pbb6",
3220 "sdmmc4_rst_n_pcc3",
3221};
3222
3223static const char * const vi_groups[] = {
3224 "cam_mclk_pcc0",
3225 "vi_d0_pt4",
3226 "vi_d1_pd5",
3227 "vi_d10_pt2",
3228 "vi_d11_pt3",
3229 "vi_d2_pl0",
3230 "vi_d3_pl1",
3231 "vi_d4_pl2",
3232 "vi_d5_pl3",
3233 "vi_d6_pl4",
3234 "vi_d7_pl5",
3235 "vi_d8_pl6",
3236 "vi_d9_pl7",
3237 "vi_hsync_pd7",
3238 "vi_mclk_pt1",
3239 "vi_pclk_pt0",
3240 "vi_vsync_pd6",
3241};
3242
3243static const char * const vi_alt1_groups[] = {
3244 "cam_mclk_pcc0",
3245 "vi_mclk_pt1",
3246};
3247
3248static const char * const vi_alt2_groups[] = {
3249 "vi_mclk_pt1",
3250};
3251
3252static const char * const vi_alt3_groups[] = {
3253 "cam_mclk_pcc0",
3254 "vi_mclk_pt1",
3255};
3256 2018
3257#define FUNCTION(fname) \ 2019#define FUNCTION(fname) \
3258 { \ 2020 { \
3259 .name = #fname, \ 2021 .name = #fname, \
3260 .groups = fname##_groups, \
3261 .ngroups = ARRAY_SIZE(fname##_groups), \
3262 } 2022 }
3263 2023
3264static const struct tegra_function tegra30_functions[] = { 2024static struct tegra_function tegra30_functions[] = {
3265 FUNCTION(blink), 2025 FUNCTION(blink),
3266 FUNCTION(cec), 2026 FUNCTION(cec),
3267 FUNCTION(clk_12m_out), 2027 FUNCTION(clk_12m_out),