diff options
author | Stephen Warren <swarren@nvidia.com> | 2014-03-07 14:22:16 -0500 |
---|---|---|
committer | Linus Walleij <linus.walleij@linaro.org> | 2014-03-12 10:23:41 -0400 |
commit | ce4362546612c00a059c255f5c55373d6ee1022a (patch) | |
tree | 88d22d243ae5e6b467caaeb7ab07af6f20f57632 /drivers/pinctrl/pinctrl-tegra20.c | |
parent | edfab368c8087ae574d6fa49fdc85068a116b79b (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>
Diffstat (limited to 'drivers/pinctrl/pinctrl-tegra20.c')
-rw-r--r-- | drivers/pinctrl/pinctrl-tegra20.c | 627 |
1 files changed, 1 insertions, 626 deletions
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 | ||
1897 | static const char * const ahb_clk_groups[] = { | ||
1898 | "cdev2", | ||
1899 | }; | ||
1900 | |||
1901 | static const char * const apb_clk_groups[] = { | ||
1902 | "cdev2", | ||
1903 | }; | ||
1904 | |||
1905 | static const char * const audio_sync_groups[] = { | ||
1906 | "cdev1", | ||
1907 | }; | ||
1908 | |||
1909 | static const char * const crt_groups[] = { | ||
1910 | "crtp", | ||
1911 | "lm1", | ||
1912 | }; | ||
1913 | |||
1914 | static const char * const dap1_groups[] = { | ||
1915 | "dap1", | ||
1916 | }; | ||
1917 | |||
1918 | static const char * const dap2_groups[] = { | ||
1919 | "dap2", | ||
1920 | }; | ||
1921 | |||
1922 | static const char * const dap3_groups[] = { | ||
1923 | "dap3", | ||
1924 | }; | ||
1925 | |||
1926 | static const char * const dap4_groups[] = { | ||
1927 | "dap4", | ||
1928 | }; | ||
1929 | |||
1930 | static const char * const dap5_groups[] = { | ||
1931 | "gme", | ||
1932 | }; | ||
1933 | |||
1934 | static 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 | |||
1977 | static 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 | |||
2020 | static const char * const emc_test0_dll_groups[] = { | ||
2021 | "kbca", | ||
2022 | }; | ||
2023 | |||
2024 | static const char * const emc_test1_dll_groups[] = { | ||
2025 | "kbcc", | ||
2026 | }; | ||
2027 | |||
2028 | static 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 | |||
2055 | static const char * const gmi_int_groups[] = { | ||
2056 | "gmb", | ||
2057 | }; | ||
2058 | |||
2059 | static const char * const hdmi_groups[] = { | ||
2060 | "hdint", | ||
2061 | "lpw0", | ||
2062 | "lpw2", | ||
2063 | "lsc1", | ||
2064 | "lsck", | ||
2065 | "lsda", | ||
2066 | "lspi", | ||
2067 | "pta", | ||
2068 | }; | ||
2069 | |||
2070 | static const char * const i2cp_groups[] = { | ||
2071 | "i2cp", | ||
2072 | }; | ||
2073 | |||
2074 | static const char * const i2c1_groups[] = { | ||
2075 | "rm", | ||
2076 | "spdi", | ||
2077 | "spdo", | ||
2078 | "spig", | ||
2079 | "spih", | ||
2080 | }; | ||
2081 | |||
2082 | static const char * const i2c2_groups[] = { | ||
2083 | "ddc", | ||
2084 | "pta", | ||
2085 | }; | ||
2086 | |||
2087 | static const char * const i2c3_groups[] = { | ||
2088 | "dtf", | ||
2089 | }; | ||
2090 | |||
2091 | static const char * const ide_groups[] = { | ||
2092 | "ata", | ||
2093 | "atb", | ||
2094 | "atc", | ||
2095 | "atd", | ||
2096 | "ate", | ||
2097 | "gmb", | ||
2098 | }; | ||
2099 | |||
2100 | static const char * const irda_groups[] = { | ||
2101 | "uad", | ||
2102 | }; | ||
2103 | |||
2104 | static const char * const kbc_groups[] = { | ||
2105 | "kbca", | ||
2106 | "kbcb", | ||
2107 | "kbcc", | ||
2108 | "kbcd", | ||
2109 | "kbce", | ||
2110 | "kbcf", | ||
2111 | }; | ||
2112 | |||
2113 | static const char * const mio_groups[] = { | ||
2114 | "kbcb", | ||
2115 | "kbcd", | ||
2116 | "kbcf", | ||
2117 | }; | ||
2118 | |||
2119 | static const char * const mipi_hs_groups[] = { | ||
2120 | "uaa", | ||
2121 | "uab", | ||
2122 | }; | ||
2123 | |||
2124 | static 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 | |||
2140 | static const char * const osc_groups[] = { | ||
2141 | "cdev1", | ||
2142 | "cdev2", | ||
2143 | }; | ||
2144 | |||
2145 | static const char * const owr_groups[] = { | ||
2146 | "kbce", | ||
2147 | "owc", | ||
2148 | "uac", | ||
2149 | }; | ||
2150 | |||
2151 | static const char * const pcie_groups[] = { | ||
2152 | "gpv", | ||
2153 | "slxa", | ||
2154 | "slxk", | ||
2155 | }; | ||
2156 | |||
2157 | static const char * const plla_out_groups[] = { | ||
2158 | "cdev1", | ||
2159 | }; | ||
2160 | |||
2161 | static const char * const pllc_out1_groups[] = { | ||
2162 | "csus", | ||
2163 | }; | ||
2164 | |||
2165 | static const char * const pllm_out1_groups[] = { | ||
2166 | "cdev1", | ||
2167 | }; | ||
2168 | |||
2169 | static const char * const pllp_out2_groups[] = { | ||
2170 | "csus", | ||
2171 | }; | ||
2172 | |||
2173 | static const char * const pllp_out3_groups[] = { | ||
2174 | "csus", | ||
2175 | }; | ||
2176 | |||
2177 | static const char * const pllp_out4_groups[] = { | ||
2178 | "cdev2", | ||
2179 | }; | ||
2180 | |||
2181 | static const char * const pwm_groups[] = { | ||
2182 | "gpu", | ||
2183 | "sdb", | ||
2184 | "sdc", | ||
2185 | "sdd", | ||
2186 | "ucb", | ||
2187 | }; | ||
2188 | |||
2189 | static const char * const pwr_intr_groups[] = { | ||
2190 | "pmc", | ||
2191 | }; | ||
2192 | |||
2193 | static const char * const pwr_on_groups[] = { | ||
2194 | "pmc", | ||
2195 | }; | ||
2196 | |||
2197 | static const char * const rsvd1_groups[] = { | ||
2198 | "dta", | ||
2199 | "dtb", | ||
2200 | "dtc", | ||
2201 | "dtd", | ||
2202 | "dte", | ||
2203 | "gmd", | ||
2204 | "gme", | ||
2205 | }; | ||
2206 | |||
2207 | static 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 | |||
2231 | static 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 | |||
2257 | static 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 | |||
2317 | static const char * const rtck_groups[] = { | ||
2318 | "gpu7", | ||
2319 | }; | ||
2320 | |||
2321 | static const char * const sdio1_groups[] = { | ||
2322 | "sdio1", | ||
2323 | }; | ||
2324 | |||
2325 | static const char * const sdio2_groups[] = { | ||
2326 | "dap1", | ||
2327 | "dta", | ||
2328 | "dtd", | ||
2329 | "kbca", | ||
2330 | "kbcb", | ||
2331 | "kbcd", | ||
2332 | "spdi", | ||
2333 | "spdo", | ||
2334 | }; | ||
2335 | |||
2336 | static const char * const sdio3_groups[] = { | ||
2337 | "sdb", | ||
2338 | "sdc", | ||
2339 | "sdd", | ||
2340 | "slxa", | ||
2341 | "slxc", | ||
2342 | "slxd", | ||
2343 | "slxk", | ||
2344 | }; | ||
2345 | |||
2346 | static const char * const sdio4_groups[] = { | ||
2347 | "atb", | ||
2348 | "atc", | ||
2349 | "atd", | ||
2350 | "gma", | ||
2351 | "gme", | ||
2352 | }; | ||
2353 | |||
2354 | static const char * const sflash_groups[] = { | ||
2355 | "gmc", | ||
2356 | "gmd", | ||
2357 | }; | ||
2358 | |||
2359 | static const char * const spdif_groups[] = { | ||
2360 | "slxc", | ||
2361 | "slxd", | ||
2362 | "spdi", | ||
2363 | "spdo", | ||
2364 | "uad", | ||
2365 | }; | ||
2366 | |||
2367 | static 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 | |||
2379 | static 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 | |||
2396 | static const char * const spi2_alt_groups[] = { | ||
2397 | "spid", | ||
2398 | "spie", | ||
2399 | "spig", | ||
2400 | "spih", | ||
2401 | }; | ||
2402 | |||
2403 | static 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 | |||
2424 | static const char * const spi4_groups[] = { | ||
2425 | "gmc", | ||
2426 | "irrx", | ||
2427 | "irtx", | ||
2428 | "slxa", | ||
2429 | "slxc", | ||
2430 | "slxd", | ||
2431 | "slxk", | ||
2432 | "uad", | ||
2433 | }; | ||
2434 | |||
2435 | static const char * const trace_groups[] = { | ||
2436 | "kbcc", | ||
2437 | "kbcf", | ||
2438 | }; | ||
2439 | |||
2440 | static const char * const twc_groups[] = { | ||
2441 | "dap2", | ||
2442 | "sdc", | ||
2443 | }; | ||
2444 | |||
2445 | static 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 | |||
2457 | static const char * const uartb_groups[] = { | ||
2458 | "irrx", | ||
2459 | "irtx", | ||
2460 | }; | ||
2461 | |||
2462 | static const char * const uartc_groups[] = { | ||
2463 | "uca", | ||
2464 | "ucb", | ||
2465 | }; | ||
2466 | |||
2467 | static const char * const uartd_groups[] = { | ||
2468 | "gmc", | ||
2469 | "uda", | ||
2470 | }; | ||
2471 | |||
2472 | static const char * const uarte_groups[] = { | ||
2473 | "gma", | ||
2474 | "sdio1", | ||
2475 | }; | ||
2476 | |||
2477 | static const char * const ulpi_groups[] = { | ||
2478 | "uaa", | ||
2479 | "uab", | ||
2480 | "uda", | ||
2481 | }; | ||
2482 | |||
2483 | static const char * const vi_groups[] = { | ||
2484 | "dta", | ||
2485 | "dtb", | ||
2486 | "dtc", | ||
2487 | "dtd", | ||
2488 | "dte", | ||
2489 | "dtf", | ||
2490 | }; | ||
2491 | |||
2492 | static const char * const vi_sensor_clk_groups[] = { | ||
2493 | "csus", | ||
2494 | }; | ||
2495 | |||
2496 | static 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 | ||
2527 | static const struct tegra_function tegra20_functions[] = { | 1902 | static 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), |