pinctrl-tegra.c 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Driver for the NVIDIA Tegra pinmux
  4. *
  5. * Copyright (c) 2011-2012, NVIDIA CORPORATION. All rights reserved.
  6. *
  7. * Derived from code:
  8. * Copyright (C) 2010 Google, Inc.
  9. * Copyright (C) 2010 NVIDIA Corporation
  10. * Copyright (C) 2009-2011 ST-Ericsson AB
  11. */
  12. #include <linux/err.h>
  13. #include <linux/init.h>
  14. #include <linux/io.h>
  15. #include <linux/of.h>
  16. #include <linux/platform_device.h>
  17. #include <linux/pinctrl/machine.h>
  18. #include <linux/pinctrl/pinctrl.h>
  19. #include <linux/pinctrl/pinmux.h>
  20. #include <linux/pinctrl/pinconf.h>
  21. #include <linux/slab.h>
  22. #include "../core.h"
  23. #include "../pinctrl-utils.h"
  24. #include "pinctrl-tegra.h"
  25. static inline u32 pmx_readl(struct tegra_pmx *pmx, u32 bank, u32 reg)
  26. {
  27. return readl(pmx->regs[bank] + reg);
  28. }
  29. static inline void pmx_writel(struct tegra_pmx *pmx, u32 val, u32 bank, u32 reg)
  30. {
  31. writel_relaxed(val, pmx->regs[bank] + reg);
  32. /* make sure pinmux register write completed */
  33. pmx_readl(pmx, bank, reg);
  34. }
  35. static int tegra_pinctrl_get_groups_count(struct pinctrl_dev *pctldev)
  36. {
  37. struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
  38. return pmx->soc->ngroups;
  39. }
  40. static const char *tegra_pinctrl_get_group_name(struct pinctrl_dev *pctldev,
  41. unsigned group)
  42. {
  43. struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
  44. return pmx->soc->groups[group].name;
  45. }
  46. static int tegra_pinctrl_get_group_pins(struct pinctrl_dev *pctldev,
  47. unsigned group,
  48. const unsigned **pins,
  49. unsigned *num_pins)
  50. {
  51. struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
  52. *pins = pmx->soc->groups[group].pins;
  53. *num_pins = pmx->soc->groups[group].npins;
  54. return 0;
  55. }
  56. #ifdef CONFIG_DEBUG_FS
  57. static void tegra_pinctrl_pin_dbg_show(struct pinctrl_dev *pctldev,
  58. struct seq_file *s,
  59. unsigned offset)
  60. {
  61. seq_printf(s, " %s", dev_name(pctldev->dev));
  62. }
  63. #endif
  64. static const struct cfg_param {
  65. const char *property;
  66. enum tegra_pinconf_param param;
  67. } cfg_params[] = {
  68. {"nvidia,pull", TEGRA_PINCONF_PARAM_PULL},
  69. {"nvidia,tristate", TEGRA_PINCONF_PARAM_TRISTATE},
  70. {"nvidia,enable-input", TEGRA_PINCONF_PARAM_ENABLE_INPUT},
  71. {"nvidia,open-drain", TEGRA_PINCONF_PARAM_OPEN_DRAIN},
  72. {"nvidia,lock", TEGRA_PINCONF_PARAM_LOCK},
  73. {"nvidia,io-reset", TEGRA_PINCONF_PARAM_IORESET},
  74. {"nvidia,rcv-sel", TEGRA_PINCONF_PARAM_RCV_SEL},
  75. {"nvidia,io-hv", TEGRA_PINCONF_PARAM_RCV_SEL},
  76. {"nvidia,high-speed-mode", TEGRA_PINCONF_PARAM_HIGH_SPEED_MODE},
  77. {"nvidia,schmitt", TEGRA_PINCONF_PARAM_SCHMITT},
  78. {"nvidia,low-power-mode", TEGRA_PINCONF_PARAM_LOW_POWER_MODE},
  79. {"nvidia,pull-down-strength", TEGRA_PINCONF_PARAM_DRIVE_DOWN_STRENGTH},
  80. {"nvidia,pull-up-strength", TEGRA_PINCONF_PARAM_DRIVE_UP_STRENGTH},
  81. {"nvidia,slew-rate-falling", TEGRA_PINCONF_PARAM_SLEW_RATE_FALLING},
  82. {"nvidia,slew-rate-rising", TEGRA_PINCONF_PARAM_SLEW_RATE_RISING},
  83. {"nvidia,drive-type", TEGRA_PINCONF_PARAM_DRIVE_TYPE},
  84. };
  85. static int tegra_pinctrl_dt_subnode_to_map(struct pinctrl_dev *pctldev,
  86. struct device_node *np,
  87. struct pinctrl_map **map,
  88. unsigned *reserved_maps,
  89. unsigned *num_maps)
  90. {
  91. struct device *dev = pctldev->dev;
  92. int ret, i;
  93. const char *function;
  94. u32 val;
  95. unsigned long config;
  96. unsigned long *configs = NULL;
  97. unsigned num_configs = 0;
  98. unsigned reserve;
  99. struct property *prop;
  100. const char *group;
  101. ret = of_property_read_string(np, "nvidia,function", &function);
  102. if (ret < 0) {
  103. /* EINVAL=missing, which is fine since it's optional */
  104. if (ret != -EINVAL)
  105. dev_err(dev,
  106. "could not parse property nvidia,function\n");
  107. function = NULL;
  108. }
  109. for (i = 0; i < ARRAY_SIZE(cfg_params); i++) {
  110. ret = of_property_read_u32(np, cfg_params[i].property, &val);
  111. if (!ret) {
  112. config = TEGRA_PINCONF_PACK(cfg_params[i].param, val);
  113. ret = pinctrl_utils_add_config(pctldev, &configs,
  114. &num_configs, config);
  115. if (ret < 0)
  116. goto exit;
  117. /* EINVAL=missing, which is fine since it's optional */
  118. } else if (ret != -EINVAL) {
  119. dev_err(dev, "could not parse property %s\n",
  120. cfg_params[i].property);
  121. }
  122. }
  123. reserve = 0;
  124. if (function != NULL)
  125. reserve++;
  126. if (num_configs)
  127. reserve++;
  128. ret = of_property_count_strings(np, "nvidia,pins");
  129. if (ret < 0) {
  130. dev_err(dev, "could not parse property nvidia,pins\n");
  131. goto exit;
  132. }
  133. reserve *= ret;
  134. ret = pinctrl_utils_reserve_map(pctldev, map, reserved_maps,
  135. num_maps, reserve);
  136. if (ret < 0)
  137. goto exit;
  138. of_property_for_each_string(np, "nvidia,pins", prop, group) {
  139. if (function) {
  140. ret = pinctrl_utils_add_map_mux(pctldev, map,
  141. reserved_maps, num_maps, group,
  142. function);
  143. if (ret < 0)
  144. goto exit;
  145. }
  146. if (num_configs) {
  147. ret = pinctrl_utils_add_map_configs(pctldev, map,
  148. reserved_maps, num_maps, group,
  149. configs, num_configs,
  150. PIN_MAP_TYPE_CONFIGS_GROUP);
  151. if (ret < 0)
  152. goto exit;
  153. }
  154. }
  155. ret = 0;
  156. exit:
  157. kfree(configs);
  158. return ret;
  159. }
  160. static int tegra_pinctrl_dt_node_to_map(struct pinctrl_dev *pctldev,
  161. struct device_node *np_config,
  162. struct pinctrl_map **map,
  163. unsigned *num_maps)
  164. {
  165. unsigned reserved_maps;
  166. struct device_node *np;
  167. int ret;
  168. reserved_maps = 0;
  169. *map = NULL;
  170. *num_maps = 0;
  171. for_each_child_of_node(np_config, np) {
  172. ret = tegra_pinctrl_dt_subnode_to_map(pctldev, np, map,
  173. &reserved_maps, num_maps);
  174. if (ret < 0) {
  175. pinctrl_utils_free_map(pctldev, *map,
  176. *num_maps);
  177. of_node_put(np);
  178. return ret;
  179. }
  180. }
  181. return 0;
  182. }
  183. static const struct pinctrl_ops tegra_pinctrl_ops = {
  184. .get_groups_count = tegra_pinctrl_get_groups_count,
  185. .get_group_name = tegra_pinctrl_get_group_name,
  186. .get_group_pins = tegra_pinctrl_get_group_pins,
  187. #ifdef CONFIG_DEBUG_FS
  188. .pin_dbg_show = tegra_pinctrl_pin_dbg_show,
  189. #endif
  190. .dt_node_to_map = tegra_pinctrl_dt_node_to_map,
  191. .dt_free_map = pinctrl_utils_free_map,
  192. };
  193. static int tegra_pinctrl_get_funcs_count(struct pinctrl_dev *pctldev)
  194. {
  195. struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
  196. return pmx->soc->nfunctions;
  197. }
  198. static const char *tegra_pinctrl_get_func_name(struct pinctrl_dev *pctldev,
  199. unsigned function)
  200. {
  201. struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
  202. return pmx->soc->functions[function].name;
  203. }
  204. static int tegra_pinctrl_get_func_groups(struct pinctrl_dev *pctldev,
  205. unsigned function,
  206. const char * const **groups,
  207. unsigned * const num_groups)
  208. {
  209. struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
  210. *groups = pmx->soc->functions[function].groups;
  211. *num_groups = pmx->soc->functions[function].ngroups;
  212. return 0;
  213. }
  214. static int tegra_pinctrl_set_mux(struct pinctrl_dev *pctldev,
  215. unsigned function,
  216. unsigned group)
  217. {
  218. struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
  219. const struct tegra_pingroup *g;
  220. int i;
  221. u32 val;
  222. g = &pmx->soc->groups[group];
  223. if (WARN_ON(g->mux_reg < 0))
  224. return -EINVAL;
  225. for (i = 0; i < ARRAY_SIZE(g->funcs); i++) {
  226. if (g->funcs[i] == function)
  227. break;
  228. }
  229. if (WARN_ON(i == ARRAY_SIZE(g->funcs)))
  230. return -EINVAL;
  231. val = pmx_readl(pmx, g->mux_bank, g->mux_reg);
  232. val &= ~(0x3 << g->mux_bit);
  233. val |= i << g->mux_bit;
  234. pmx_writel(pmx, val, g->mux_bank, g->mux_reg);
  235. return 0;
  236. }
  237. static const struct tegra_pingroup *tegra_pinctrl_get_group(struct pinctrl_dev *pctldev,
  238. unsigned int offset)
  239. {
  240. struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
  241. unsigned int group, num_pins, j;
  242. const unsigned int *pins;
  243. int ret;
  244. for (group = 0; group < pmx->soc->ngroups; ++group) {
  245. ret = tegra_pinctrl_get_group_pins(pctldev, group, &pins, &num_pins);
  246. if (ret < 0)
  247. continue;
  248. for (j = 0; j < num_pins; j++) {
  249. if (offset == pins[j])
  250. return &pmx->soc->groups[group];
  251. }
  252. }
  253. dev_err(pctldev->dev, "Pingroup not found for pin %u\n", offset);
  254. return NULL;
  255. }
  256. static int tegra_pinctrl_gpio_request_enable(struct pinctrl_dev *pctldev,
  257. struct pinctrl_gpio_range *range,
  258. unsigned int offset)
  259. {
  260. struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
  261. const struct tegra_pingroup *group;
  262. u32 value;
  263. if (!pmx->soc->sfsel_in_mux)
  264. return 0;
  265. group = tegra_pinctrl_get_group(pctldev, offset);
  266. if (!group)
  267. return -EINVAL;
  268. if (group->mux_reg < 0 || group->sfsel_bit < 0)
  269. return -EINVAL;
  270. value = pmx_readl(pmx, group->mux_bank, group->mux_reg);
  271. value &= ~BIT(group->sfsel_bit);
  272. pmx_writel(pmx, value, group->mux_bank, group->mux_reg);
  273. return 0;
  274. }
  275. static void tegra_pinctrl_gpio_disable_free(struct pinctrl_dev *pctldev,
  276. struct pinctrl_gpio_range *range,
  277. unsigned int offset)
  278. {
  279. struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
  280. const struct tegra_pingroup *group;
  281. u32 value;
  282. if (!pmx->soc->sfsel_in_mux)
  283. return;
  284. group = tegra_pinctrl_get_group(pctldev, offset);
  285. if (!group)
  286. return;
  287. if (group->mux_reg < 0 || group->sfsel_bit < 0)
  288. return;
  289. value = pmx_readl(pmx, group->mux_bank, group->mux_reg);
  290. value |= BIT(group->sfsel_bit);
  291. pmx_writel(pmx, value, group->mux_bank, group->mux_reg);
  292. }
  293. static const struct pinmux_ops tegra_pinmux_ops = {
  294. .get_functions_count = tegra_pinctrl_get_funcs_count,
  295. .get_function_name = tegra_pinctrl_get_func_name,
  296. .get_function_groups = tegra_pinctrl_get_func_groups,
  297. .set_mux = tegra_pinctrl_set_mux,
  298. .gpio_request_enable = tegra_pinctrl_gpio_request_enable,
  299. .gpio_disable_free = tegra_pinctrl_gpio_disable_free,
  300. };
  301. static int tegra_pinconf_reg(struct tegra_pmx *pmx,
  302. const struct tegra_pingroup *g,
  303. enum tegra_pinconf_param param,
  304. bool report_err,
  305. s8 *bank, s32 *reg, s8 *bit, s8 *width)
  306. {
  307. switch (param) {
  308. case TEGRA_PINCONF_PARAM_PULL:
  309. *bank = g->pupd_bank;
  310. *reg = g->pupd_reg;
  311. *bit = g->pupd_bit;
  312. *width = 2;
  313. break;
  314. case TEGRA_PINCONF_PARAM_TRISTATE:
  315. *bank = g->tri_bank;
  316. *reg = g->tri_reg;
  317. *bit = g->tri_bit;
  318. *width = 1;
  319. break;
  320. case TEGRA_PINCONF_PARAM_ENABLE_INPUT:
  321. *bank = g->mux_bank;
  322. *reg = g->mux_reg;
  323. *bit = g->einput_bit;
  324. *width = 1;
  325. break;
  326. case TEGRA_PINCONF_PARAM_OPEN_DRAIN:
  327. *bank = g->mux_bank;
  328. *reg = g->mux_reg;
  329. *bit = g->odrain_bit;
  330. *width = 1;
  331. break;
  332. case TEGRA_PINCONF_PARAM_LOCK:
  333. *bank = g->mux_bank;
  334. *reg = g->mux_reg;
  335. *bit = g->lock_bit;
  336. *width = 1;
  337. break;
  338. case TEGRA_PINCONF_PARAM_IORESET:
  339. *bank = g->mux_bank;
  340. *reg = g->mux_reg;
  341. *bit = g->ioreset_bit;
  342. *width = 1;
  343. break;
  344. case TEGRA_PINCONF_PARAM_RCV_SEL:
  345. *bank = g->mux_bank;
  346. *reg = g->mux_reg;
  347. *bit = g->rcv_sel_bit;
  348. *width = 1;
  349. break;
  350. case TEGRA_PINCONF_PARAM_HIGH_SPEED_MODE:
  351. if (pmx->soc->hsm_in_mux) {
  352. *bank = g->mux_bank;
  353. *reg = g->mux_reg;
  354. } else {
  355. *bank = g->drv_bank;
  356. *reg = g->drv_reg;
  357. }
  358. *bit = g->hsm_bit;
  359. *width = 1;
  360. break;
  361. case TEGRA_PINCONF_PARAM_SCHMITT:
  362. if (pmx->soc->schmitt_in_mux) {
  363. *bank = g->mux_bank;
  364. *reg = g->mux_reg;
  365. } else {
  366. *bank = g->drv_bank;
  367. *reg = g->drv_reg;
  368. }
  369. *bit = g->schmitt_bit;
  370. *width = 1;
  371. break;
  372. case TEGRA_PINCONF_PARAM_LOW_POWER_MODE:
  373. *bank = g->drv_bank;
  374. *reg = g->drv_reg;
  375. *bit = g->lpmd_bit;
  376. *width = 2;
  377. break;
  378. case TEGRA_PINCONF_PARAM_DRIVE_DOWN_STRENGTH:
  379. *bank = g->drv_bank;
  380. *reg = g->drv_reg;
  381. *bit = g->drvdn_bit;
  382. *width = g->drvdn_width;
  383. break;
  384. case TEGRA_PINCONF_PARAM_DRIVE_UP_STRENGTH:
  385. *bank = g->drv_bank;
  386. *reg = g->drv_reg;
  387. *bit = g->drvup_bit;
  388. *width = g->drvup_width;
  389. break;
  390. case TEGRA_PINCONF_PARAM_SLEW_RATE_FALLING:
  391. *bank = g->drv_bank;
  392. *reg = g->drv_reg;
  393. *bit = g->slwf_bit;
  394. *width = g->slwf_width;
  395. break;
  396. case TEGRA_PINCONF_PARAM_SLEW_RATE_RISING:
  397. *bank = g->drv_bank;
  398. *reg = g->drv_reg;
  399. *bit = g->slwr_bit;
  400. *width = g->slwr_width;
  401. break;
  402. case TEGRA_PINCONF_PARAM_DRIVE_TYPE:
  403. if (pmx->soc->drvtype_in_mux) {
  404. *bank = g->mux_bank;
  405. *reg = g->mux_reg;
  406. } else {
  407. *bank = g->drv_bank;
  408. *reg = g->drv_reg;
  409. }
  410. *bit = g->drvtype_bit;
  411. *width = 2;
  412. break;
  413. default:
  414. dev_err(pmx->dev, "Invalid config param %04x\n", param);
  415. return -ENOTSUPP;
  416. }
  417. if (*reg < 0 || *bit < 0) {
  418. if (report_err) {
  419. const char *prop = "unknown";
  420. int i;
  421. for (i = 0; i < ARRAY_SIZE(cfg_params); i++) {
  422. if (cfg_params[i].param == param) {
  423. prop = cfg_params[i].property;
  424. break;
  425. }
  426. }
  427. dev_err(pmx->dev,
  428. "Config param %04x (%s) not supported on group %s\n",
  429. param, prop, g->name);
  430. }
  431. return -ENOTSUPP;
  432. }
  433. return 0;
  434. }
  435. static int tegra_pinconf_get(struct pinctrl_dev *pctldev,
  436. unsigned pin, unsigned long *config)
  437. {
  438. dev_err(pctldev->dev, "pin_config_get op not supported\n");
  439. return -ENOTSUPP;
  440. }
  441. static int tegra_pinconf_set(struct pinctrl_dev *pctldev,
  442. unsigned pin, unsigned long *configs,
  443. unsigned num_configs)
  444. {
  445. dev_err(pctldev->dev, "pin_config_set op not supported\n");
  446. return -ENOTSUPP;
  447. }
  448. static int tegra_pinconf_group_get(struct pinctrl_dev *pctldev,
  449. unsigned group, unsigned long *config)
  450. {
  451. struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
  452. enum tegra_pinconf_param param = TEGRA_PINCONF_UNPACK_PARAM(*config);
  453. u16 arg;
  454. const struct tegra_pingroup *g;
  455. int ret;
  456. s8 bank, bit, width;
  457. s32 reg;
  458. u32 val, mask;
  459. g = &pmx->soc->groups[group];
  460. ret = tegra_pinconf_reg(pmx, g, param, true, &bank, &reg, &bit,
  461. &width);
  462. if (ret < 0)
  463. return ret;
  464. val = pmx_readl(pmx, bank, reg);
  465. mask = (1 << width) - 1;
  466. arg = (val >> bit) & mask;
  467. *config = TEGRA_PINCONF_PACK(param, arg);
  468. return 0;
  469. }
  470. static int tegra_pinconf_group_set(struct pinctrl_dev *pctldev,
  471. unsigned group, unsigned long *configs,
  472. unsigned num_configs)
  473. {
  474. struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
  475. enum tegra_pinconf_param param;
  476. u16 arg;
  477. const struct tegra_pingroup *g;
  478. int ret, i;
  479. s8 bank, bit, width;
  480. s32 reg;
  481. u32 val, mask;
  482. g = &pmx->soc->groups[group];
  483. for (i = 0; i < num_configs; i++) {
  484. param = TEGRA_PINCONF_UNPACK_PARAM(configs[i]);
  485. arg = TEGRA_PINCONF_UNPACK_ARG(configs[i]);
  486. ret = tegra_pinconf_reg(pmx, g, param, true, &bank, &reg, &bit,
  487. &width);
  488. if (ret < 0)
  489. return ret;
  490. val = pmx_readl(pmx, bank, reg);
  491. /* LOCK can't be cleared */
  492. if (param == TEGRA_PINCONF_PARAM_LOCK) {
  493. if ((val & BIT(bit)) && !arg) {
  494. dev_err(pctldev->dev, "LOCK bit cannot be cleared\n");
  495. return -EINVAL;
  496. }
  497. }
  498. /* Special-case Boolean values; allow any non-zero as true */
  499. if (width == 1)
  500. arg = !!arg;
  501. /* Range-check user-supplied value */
  502. mask = (1 << width) - 1;
  503. if (arg & ~mask) {
  504. dev_err(pctldev->dev,
  505. "config %lx: %x too big for %d bit register\n",
  506. configs[i], arg, width);
  507. return -EINVAL;
  508. }
  509. /* Update register */
  510. val &= ~(mask << bit);
  511. val |= arg << bit;
  512. pmx_writel(pmx, val, bank, reg);
  513. } /* for each config */
  514. return 0;
  515. }
  516. #ifdef CONFIG_DEBUG_FS
  517. static void tegra_pinconf_dbg_show(struct pinctrl_dev *pctldev,
  518. struct seq_file *s, unsigned offset)
  519. {
  520. }
  521. static const char *strip_prefix(const char *s)
  522. {
  523. const char *comma = strchr(s, ',');
  524. if (!comma)
  525. return s;
  526. return comma + 1;
  527. }
  528. static void tegra_pinconf_group_dbg_show(struct pinctrl_dev *pctldev,
  529. struct seq_file *s, unsigned group)
  530. {
  531. struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
  532. const struct tegra_pingroup *g;
  533. int i, ret;
  534. s8 bank, bit, width;
  535. s32 reg;
  536. u32 val;
  537. g = &pmx->soc->groups[group];
  538. for (i = 0; i < ARRAY_SIZE(cfg_params); i++) {
  539. ret = tegra_pinconf_reg(pmx, g, cfg_params[i].param, false,
  540. &bank, &reg, &bit, &width);
  541. if (ret < 0)
  542. continue;
  543. val = pmx_readl(pmx, bank, reg);
  544. val >>= bit;
  545. val &= (1 << width) - 1;
  546. seq_printf(s, "\n\t%s=%u",
  547. strip_prefix(cfg_params[i].property), val);
  548. }
  549. }
  550. static void tegra_pinconf_config_dbg_show(struct pinctrl_dev *pctldev,
  551. struct seq_file *s,
  552. unsigned long config)
  553. {
  554. enum tegra_pinconf_param param = TEGRA_PINCONF_UNPACK_PARAM(config);
  555. u16 arg = TEGRA_PINCONF_UNPACK_ARG(config);
  556. const char *pname = "unknown";
  557. int i;
  558. for (i = 0; i < ARRAY_SIZE(cfg_params); i++) {
  559. if (cfg_params[i].param == param) {
  560. pname = cfg_params[i].property;
  561. break;
  562. }
  563. }
  564. seq_printf(s, "%s=%d", strip_prefix(pname), arg);
  565. }
  566. #endif
  567. static const struct pinconf_ops tegra_pinconf_ops = {
  568. .pin_config_get = tegra_pinconf_get,
  569. .pin_config_set = tegra_pinconf_set,
  570. .pin_config_group_get = tegra_pinconf_group_get,
  571. .pin_config_group_set = tegra_pinconf_group_set,
  572. #ifdef CONFIG_DEBUG_FS
  573. .pin_config_dbg_show = tegra_pinconf_dbg_show,
  574. .pin_config_group_dbg_show = tegra_pinconf_group_dbg_show,
  575. .pin_config_config_dbg_show = tegra_pinconf_config_dbg_show,
  576. #endif
  577. };
  578. static struct pinctrl_gpio_range tegra_pinctrl_gpio_range = {
  579. .name = "Tegra GPIOs",
  580. .id = 0,
  581. .base = 0,
  582. };
  583. static struct pinctrl_desc tegra_pinctrl_desc = {
  584. .pctlops = &tegra_pinctrl_ops,
  585. .pmxops = &tegra_pinmux_ops,
  586. .confops = &tegra_pinconf_ops,
  587. .owner = THIS_MODULE,
  588. };
  589. static void tegra_pinctrl_clear_parked_bits(struct tegra_pmx *pmx)
  590. {
  591. int i = 0;
  592. const struct tegra_pingroup *g;
  593. u32 val;
  594. for (i = 0; i < pmx->soc->ngroups; ++i) {
  595. g = &pmx->soc->groups[i];
  596. if (g->parked_bitmask > 0) {
  597. unsigned int bank, reg;
  598. if (g->mux_reg != -1) {
  599. bank = g->mux_bank;
  600. reg = g->mux_reg;
  601. } else {
  602. bank = g->drv_bank;
  603. reg = g->drv_reg;
  604. }
  605. val = pmx_readl(pmx, bank, reg);
  606. val &= ~g->parked_bitmask;
  607. pmx_writel(pmx, val, bank, reg);
  608. }
  609. }
  610. }
  611. static size_t tegra_pinctrl_get_bank_size(struct device *dev,
  612. unsigned int bank_id)
  613. {
  614. struct platform_device *pdev = to_platform_device(dev);
  615. struct resource *res;
  616. res = platform_get_resource(pdev, IORESOURCE_MEM, bank_id);
  617. return resource_size(res) / 4;
  618. }
  619. static int tegra_pinctrl_suspend(struct device *dev)
  620. {
  621. struct tegra_pmx *pmx = dev_get_drvdata(dev);
  622. u32 *backup_regs = pmx->backup_regs;
  623. u32 __iomem *regs;
  624. size_t bank_size;
  625. unsigned int i, k;
  626. for (i = 0; i < pmx->nbanks; i++) {
  627. bank_size = tegra_pinctrl_get_bank_size(dev, i);
  628. regs = pmx->regs[i];
  629. for (k = 0; k < bank_size; k++)
  630. *backup_regs++ = readl_relaxed(regs++);
  631. }
  632. return pinctrl_force_sleep(pmx->pctl);
  633. }
  634. static int tegra_pinctrl_resume(struct device *dev)
  635. {
  636. struct tegra_pmx *pmx = dev_get_drvdata(dev);
  637. u32 *backup_regs = pmx->backup_regs;
  638. u32 __iomem *regs;
  639. size_t bank_size;
  640. unsigned int i, k;
  641. for (i = 0; i < pmx->nbanks; i++) {
  642. bank_size = tegra_pinctrl_get_bank_size(dev, i);
  643. regs = pmx->regs[i];
  644. for (k = 0; k < bank_size; k++)
  645. writel_relaxed(*backup_regs++, regs++);
  646. }
  647. /* flush all the prior writes */
  648. readl_relaxed(pmx->regs[0]);
  649. /* wait for pinctrl register read to complete */
  650. rmb();
  651. return 0;
  652. }
  653. const struct dev_pm_ops tegra_pinctrl_pm = {
  654. .suspend_noirq = &tegra_pinctrl_suspend,
  655. .resume_noirq = &tegra_pinctrl_resume
  656. };
  657. static bool tegra_pinctrl_gpio_node_has_range(struct tegra_pmx *pmx)
  658. {
  659. struct device_node *np;
  660. bool has_prop = false;
  661. np = of_find_compatible_node(NULL, NULL, pmx->soc->gpio_compatible);
  662. if (!np)
  663. return has_prop;
  664. has_prop = of_find_property(np, "gpio-ranges", NULL);
  665. of_node_put(np);
  666. return has_prop;
  667. }
  668. int tegra_pinctrl_probe(struct platform_device *pdev,
  669. const struct tegra_pinctrl_soc_data *soc_data)
  670. {
  671. struct tegra_pmx *pmx;
  672. struct resource *res;
  673. int i;
  674. const char **group_pins;
  675. int fn, gn, gfn;
  676. unsigned long backup_regs_size = 0;
  677. pmx = devm_kzalloc(&pdev->dev, sizeof(*pmx), GFP_KERNEL);
  678. if (!pmx)
  679. return -ENOMEM;
  680. pmx->dev = &pdev->dev;
  681. pmx->soc = soc_data;
  682. /*
  683. * Each mux group will appear in 4 functions' list of groups.
  684. * This over-allocates slightly, since not all groups are mux groups.
  685. */
  686. pmx->group_pins = devm_kcalloc(&pdev->dev,
  687. soc_data->ngroups * 4, sizeof(*pmx->group_pins),
  688. GFP_KERNEL);
  689. if (!pmx->group_pins)
  690. return -ENOMEM;
  691. group_pins = pmx->group_pins;
  692. for (fn = 0; fn < soc_data->nfunctions; fn++) {
  693. struct tegra_function *func = &soc_data->functions[fn];
  694. func->groups = group_pins;
  695. for (gn = 0; gn < soc_data->ngroups; gn++) {
  696. const struct tegra_pingroup *g = &soc_data->groups[gn];
  697. if (g->mux_reg == -1)
  698. continue;
  699. for (gfn = 0; gfn < 4; gfn++)
  700. if (g->funcs[gfn] == fn)
  701. break;
  702. if (gfn == 4)
  703. continue;
  704. BUG_ON(group_pins - pmx->group_pins >=
  705. soc_data->ngroups * 4);
  706. *group_pins++ = g->name;
  707. func->ngroups++;
  708. }
  709. }
  710. tegra_pinctrl_gpio_range.npins = pmx->soc->ngpios;
  711. tegra_pinctrl_desc.name = dev_name(&pdev->dev);
  712. tegra_pinctrl_desc.pins = pmx->soc->pins;
  713. tegra_pinctrl_desc.npins = pmx->soc->npins;
  714. for (i = 0; ; i++) {
  715. res = platform_get_resource(pdev, IORESOURCE_MEM, i);
  716. if (!res)
  717. break;
  718. backup_regs_size += resource_size(res);
  719. }
  720. pmx->nbanks = i;
  721. pmx->regs = devm_kcalloc(&pdev->dev, pmx->nbanks, sizeof(*pmx->regs),
  722. GFP_KERNEL);
  723. if (!pmx->regs)
  724. return -ENOMEM;
  725. pmx->backup_regs = devm_kzalloc(&pdev->dev, backup_regs_size,
  726. GFP_KERNEL);
  727. if (!pmx->backup_regs)
  728. return -ENOMEM;
  729. for (i = 0; i < pmx->nbanks; i++) {
  730. pmx->regs[i] = devm_platform_ioremap_resource(pdev, i);
  731. if (IS_ERR(pmx->regs[i]))
  732. return PTR_ERR(pmx->regs[i]);
  733. }
  734. pmx->pctl = devm_pinctrl_register(&pdev->dev, &tegra_pinctrl_desc, pmx);
  735. if (IS_ERR(pmx->pctl)) {
  736. dev_err(&pdev->dev, "Couldn't register pinctrl driver\n");
  737. return PTR_ERR(pmx->pctl);
  738. }
  739. tegra_pinctrl_clear_parked_bits(pmx);
  740. if (pmx->soc->ngpios > 0 && !tegra_pinctrl_gpio_node_has_range(pmx))
  741. pinctrl_add_gpio_range(pmx->pctl, &tegra_pinctrl_gpio_range);
  742. platform_set_drvdata(pdev, pmx);
  743. dev_dbg(&pdev->dev, "Probed Tegra pinctrl driver\n");
  744. return 0;
  745. }