pinctrl-mtk-common.c 29 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * mt65xx pinctrl driver based on Allwinner A1X pinctrl driver.
  4. * Copyright (c) 2014 MediaTek Inc.
  5. * Author: Hongzhou.Yang <[email protected]>
  6. */
  7. #include <linux/io.h>
  8. #include <linux/gpio/driver.h>
  9. #include <linux/of.h>
  10. #include <linux/of_address.h>
  11. #include <linux/of_device.h>
  12. #include <linux/of_irq.h>
  13. #include <linux/pinctrl/consumer.h>
  14. #include <linux/pinctrl/machine.h>
  15. #include <linux/pinctrl/pinconf.h>
  16. #include <linux/pinctrl/pinconf-generic.h>
  17. #include <linux/pinctrl/pinctrl.h>
  18. #include <linux/pinctrl/pinmux.h>
  19. #include <linux/platform_device.h>
  20. #include <linux/slab.h>
  21. #include <linux/bitops.h>
  22. #include <linux/regmap.h>
  23. #include <linux/mfd/syscon.h>
  24. #include <linux/delay.h>
  25. #include <linux/interrupt.h>
  26. #include <linux/pm.h>
  27. #include <dt-bindings/pinctrl/mt65xx.h>
  28. #include "../core.h"
  29. #include "../pinconf.h"
  30. #include "../pinctrl-utils.h"
  31. #include "mtk-eint.h"
  32. #include "pinctrl-mtk-common.h"
  33. #define GPIO_MODE_BITS 3
  34. #define GPIO_MODE_PREFIX "GPIO"
  35. static const char * const mtk_gpio_functions[] = {
  36. "func0", "func1", "func2", "func3",
  37. "func4", "func5", "func6", "func7",
  38. "func8", "func9", "func10", "func11",
  39. "func12", "func13", "func14", "func15",
  40. };
  41. /*
  42. * There are two base address for pull related configuration
  43. * in mt8135, and different GPIO pins use different base address.
  44. * When pin number greater than type1_start and less than type1_end,
  45. * should use the second base address.
  46. */
  47. static struct regmap *mtk_get_regmap(struct mtk_pinctrl *pctl,
  48. unsigned long pin)
  49. {
  50. if (pin >= pctl->devdata->type1_start && pin < pctl->devdata->type1_end)
  51. return pctl->regmap2;
  52. return pctl->regmap1;
  53. }
  54. static unsigned int mtk_get_port(struct mtk_pinctrl *pctl, unsigned long pin)
  55. {
  56. /* Different SoC has different mask and port shift. */
  57. return ((pin >> pctl->devdata->mode_shf) & pctl->devdata->port_mask)
  58. << pctl->devdata->port_shf;
  59. }
  60. static int mtk_pmx_gpio_set_direction(struct pinctrl_dev *pctldev,
  61. struct pinctrl_gpio_range *range, unsigned offset,
  62. bool input)
  63. {
  64. unsigned int reg_addr;
  65. unsigned int bit;
  66. struct mtk_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
  67. reg_addr = mtk_get_port(pctl, offset) + pctl->devdata->dir_offset;
  68. bit = BIT(offset & pctl->devdata->mode_mask);
  69. if (pctl->devdata->spec_dir_set)
  70. pctl->devdata->spec_dir_set(&reg_addr, offset);
  71. if (input)
  72. /* Different SoC has different alignment offset. */
  73. reg_addr = CLR_ADDR(reg_addr, pctl);
  74. else
  75. reg_addr = SET_ADDR(reg_addr, pctl);
  76. regmap_write(mtk_get_regmap(pctl, offset), reg_addr, bit);
  77. return 0;
  78. }
  79. static void mtk_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
  80. {
  81. unsigned int reg_addr;
  82. unsigned int bit;
  83. struct mtk_pinctrl *pctl = gpiochip_get_data(chip);
  84. reg_addr = mtk_get_port(pctl, offset) + pctl->devdata->dout_offset;
  85. bit = BIT(offset & pctl->devdata->mode_mask);
  86. if (value)
  87. reg_addr = SET_ADDR(reg_addr, pctl);
  88. else
  89. reg_addr = CLR_ADDR(reg_addr, pctl);
  90. regmap_write(mtk_get_regmap(pctl, offset), reg_addr, bit);
  91. }
  92. static int mtk_pconf_set_ies_smt(struct mtk_pinctrl *pctl, unsigned pin,
  93. int value, enum pin_config_param arg)
  94. {
  95. unsigned int reg_addr, offset;
  96. unsigned int bit;
  97. /**
  98. * Due to some soc are not support ies/smt config, add this special
  99. * control to handle it.
  100. */
  101. if (!pctl->devdata->spec_ies_smt_set &&
  102. pctl->devdata->ies_offset == MTK_PINCTRL_NOT_SUPPORT &&
  103. arg == PIN_CONFIG_INPUT_ENABLE)
  104. return -EINVAL;
  105. if (!pctl->devdata->spec_ies_smt_set &&
  106. pctl->devdata->smt_offset == MTK_PINCTRL_NOT_SUPPORT &&
  107. arg == PIN_CONFIG_INPUT_SCHMITT_ENABLE)
  108. return -EINVAL;
  109. /*
  110. * Due to some pins are irregular, their input enable and smt
  111. * control register are discontinuous, so we need this special handle.
  112. */
  113. if (pctl->devdata->spec_ies_smt_set) {
  114. return pctl->devdata->spec_ies_smt_set(mtk_get_regmap(pctl, pin),
  115. pctl->devdata, pin, value, arg);
  116. }
  117. if (arg == PIN_CONFIG_INPUT_ENABLE)
  118. offset = pctl->devdata->ies_offset;
  119. else
  120. offset = pctl->devdata->smt_offset;
  121. bit = BIT(offset & pctl->devdata->mode_mask);
  122. if (value)
  123. reg_addr = SET_ADDR(mtk_get_port(pctl, pin) + offset, pctl);
  124. else
  125. reg_addr = CLR_ADDR(mtk_get_port(pctl, pin) + offset, pctl);
  126. regmap_write(mtk_get_regmap(pctl, pin), reg_addr, bit);
  127. return 0;
  128. }
  129. int mtk_pconf_spec_set_ies_smt_range(struct regmap *regmap,
  130. const struct mtk_pinctrl_devdata *devdata,
  131. unsigned int pin, int value, enum pin_config_param arg)
  132. {
  133. const struct mtk_pin_ies_smt_set *ies_smt_infos = NULL;
  134. unsigned int i, info_num, reg_addr, bit;
  135. switch (arg) {
  136. case PIN_CONFIG_INPUT_ENABLE:
  137. ies_smt_infos = devdata->spec_ies;
  138. info_num = devdata->n_spec_ies;
  139. break;
  140. case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
  141. ies_smt_infos = devdata->spec_smt;
  142. info_num = devdata->n_spec_smt;
  143. break;
  144. default:
  145. break;
  146. }
  147. if (!ies_smt_infos)
  148. return -EINVAL;
  149. for (i = 0; i < info_num; i++) {
  150. if (pin >= ies_smt_infos[i].start &&
  151. pin <= ies_smt_infos[i].end) {
  152. break;
  153. }
  154. }
  155. if (i == info_num)
  156. return -EINVAL;
  157. if (value)
  158. reg_addr = ies_smt_infos[i].offset + devdata->port_align;
  159. else
  160. reg_addr = ies_smt_infos[i].offset + (devdata->port_align << 1);
  161. bit = BIT(ies_smt_infos[i].bit);
  162. regmap_write(regmap, reg_addr, bit);
  163. return 0;
  164. }
  165. static const struct mtk_pin_drv_grp *mtk_find_pin_drv_grp_by_pin(
  166. struct mtk_pinctrl *pctl, unsigned long pin) {
  167. int i;
  168. for (i = 0; i < pctl->devdata->n_pin_drv_grps; i++) {
  169. const struct mtk_pin_drv_grp *pin_drv =
  170. pctl->devdata->pin_drv_grp + i;
  171. if (pin == pin_drv->pin)
  172. return pin_drv;
  173. }
  174. return NULL;
  175. }
  176. static int mtk_pconf_set_driving(struct mtk_pinctrl *pctl,
  177. unsigned int pin, unsigned char driving)
  178. {
  179. const struct mtk_pin_drv_grp *pin_drv;
  180. unsigned int val;
  181. unsigned int bits, mask, shift;
  182. const struct mtk_drv_group_desc *drv_grp;
  183. if (pin >= pctl->devdata->npins)
  184. return -EINVAL;
  185. pin_drv = mtk_find_pin_drv_grp_by_pin(pctl, pin);
  186. if (!pin_drv || pin_drv->grp > pctl->devdata->n_grp_cls)
  187. return -EINVAL;
  188. drv_grp = pctl->devdata->grp_desc + pin_drv->grp;
  189. if (driving >= drv_grp->min_drv && driving <= drv_grp->max_drv
  190. && !(driving % drv_grp->step)) {
  191. val = driving / drv_grp->step - 1;
  192. bits = drv_grp->high_bit - drv_grp->low_bit + 1;
  193. mask = BIT(bits) - 1;
  194. shift = pin_drv->bit + drv_grp->low_bit;
  195. mask <<= shift;
  196. val <<= shift;
  197. return regmap_update_bits(mtk_get_regmap(pctl, pin),
  198. pin_drv->offset, mask, val);
  199. }
  200. return -EINVAL;
  201. }
  202. int mtk_pctrl_spec_pull_set_samereg(struct regmap *regmap,
  203. const struct mtk_pinctrl_devdata *devdata,
  204. unsigned int pin, bool isup, unsigned int r1r0)
  205. {
  206. unsigned int i;
  207. unsigned int reg_pupd, reg_set, reg_rst;
  208. unsigned int bit_pupd, bit_r0, bit_r1;
  209. const struct mtk_pin_spec_pupd_set_samereg *spec_pupd_pin;
  210. bool find = false;
  211. if (!devdata->spec_pupd)
  212. return -EINVAL;
  213. for (i = 0; i < devdata->n_spec_pupd; i++) {
  214. if (pin == devdata->spec_pupd[i].pin) {
  215. find = true;
  216. break;
  217. }
  218. }
  219. if (!find)
  220. return -EINVAL;
  221. spec_pupd_pin = devdata->spec_pupd + i;
  222. reg_set = spec_pupd_pin->offset + devdata->port_align;
  223. reg_rst = spec_pupd_pin->offset + (devdata->port_align << 1);
  224. if (isup)
  225. reg_pupd = reg_rst;
  226. else
  227. reg_pupd = reg_set;
  228. bit_pupd = BIT(spec_pupd_pin->pupd_bit);
  229. regmap_write(regmap, reg_pupd, bit_pupd);
  230. bit_r0 = BIT(spec_pupd_pin->r0_bit);
  231. bit_r1 = BIT(spec_pupd_pin->r1_bit);
  232. switch (r1r0) {
  233. case MTK_PUPD_SET_R1R0_00:
  234. regmap_write(regmap, reg_rst, bit_r0);
  235. regmap_write(regmap, reg_rst, bit_r1);
  236. break;
  237. case MTK_PUPD_SET_R1R0_01:
  238. regmap_write(regmap, reg_set, bit_r0);
  239. regmap_write(regmap, reg_rst, bit_r1);
  240. break;
  241. case MTK_PUPD_SET_R1R0_10:
  242. regmap_write(regmap, reg_rst, bit_r0);
  243. regmap_write(regmap, reg_set, bit_r1);
  244. break;
  245. case MTK_PUPD_SET_R1R0_11:
  246. regmap_write(regmap, reg_set, bit_r0);
  247. regmap_write(regmap, reg_set, bit_r1);
  248. break;
  249. default:
  250. return -EINVAL;
  251. }
  252. return 0;
  253. }
  254. static int mtk_pconf_set_pull_select(struct mtk_pinctrl *pctl,
  255. unsigned int pin, bool enable, bool isup, unsigned int arg)
  256. {
  257. unsigned int bit;
  258. unsigned int reg_pullen, reg_pullsel, r1r0;
  259. int ret;
  260. /* Some pins' pull setting are very different,
  261. * they have separate pull up/down bit, R0 and R1
  262. * resistor bit, so we need this special handle.
  263. */
  264. if (pctl->devdata->spec_pull_set) {
  265. /* For special pins, bias-disable is set by R1R0,
  266. * the parameter should be "MTK_PUPD_SET_R1R0_00".
  267. */
  268. r1r0 = enable ? arg : MTK_PUPD_SET_R1R0_00;
  269. ret = pctl->devdata->spec_pull_set(mtk_get_regmap(pctl, pin),
  270. pctl->devdata, pin, isup,
  271. r1r0);
  272. if (!ret)
  273. return 0;
  274. }
  275. /* For generic pull config, default arg value should be 0 or 1. */
  276. if (arg != 0 && arg != 1) {
  277. dev_err(pctl->dev, "invalid pull-up argument %d on pin %d .\n",
  278. arg, pin);
  279. return -EINVAL;
  280. }
  281. bit = BIT(pin & pctl->devdata->mode_mask);
  282. if (enable)
  283. reg_pullen = SET_ADDR(mtk_get_port(pctl, pin) +
  284. pctl->devdata->pullen_offset, pctl);
  285. else
  286. reg_pullen = CLR_ADDR(mtk_get_port(pctl, pin) +
  287. pctl->devdata->pullen_offset, pctl);
  288. if (isup)
  289. reg_pullsel = SET_ADDR(mtk_get_port(pctl, pin) +
  290. pctl->devdata->pullsel_offset, pctl);
  291. else
  292. reg_pullsel = CLR_ADDR(mtk_get_port(pctl, pin) +
  293. pctl->devdata->pullsel_offset, pctl);
  294. regmap_write(mtk_get_regmap(pctl, pin), reg_pullen, bit);
  295. regmap_write(mtk_get_regmap(pctl, pin), reg_pullsel, bit);
  296. return 0;
  297. }
  298. static int mtk_pconf_parse_conf(struct pinctrl_dev *pctldev,
  299. unsigned int pin, enum pin_config_param param,
  300. enum pin_config_param arg)
  301. {
  302. int ret = 0;
  303. struct mtk_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
  304. switch (param) {
  305. case PIN_CONFIG_BIAS_DISABLE:
  306. ret = mtk_pconf_set_pull_select(pctl, pin, false, false, arg);
  307. break;
  308. case PIN_CONFIG_BIAS_PULL_UP:
  309. ret = mtk_pconf_set_pull_select(pctl, pin, true, true, arg);
  310. break;
  311. case PIN_CONFIG_BIAS_PULL_DOWN:
  312. ret = mtk_pconf_set_pull_select(pctl, pin, true, false, arg);
  313. break;
  314. case PIN_CONFIG_INPUT_ENABLE:
  315. mtk_pmx_gpio_set_direction(pctldev, NULL, pin, true);
  316. ret = mtk_pconf_set_ies_smt(pctl, pin, arg, param);
  317. break;
  318. case PIN_CONFIG_OUTPUT:
  319. mtk_gpio_set(pctl->chip, pin, arg);
  320. ret = mtk_pmx_gpio_set_direction(pctldev, NULL, pin, false);
  321. break;
  322. case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
  323. mtk_pmx_gpio_set_direction(pctldev, NULL, pin, true);
  324. ret = mtk_pconf_set_ies_smt(pctl, pin, arg, param);
  325. break;
  326. case PIN_CONFIG_DRIVE_STRENGTH:
  327. ret = mtk_pconf_set_driving(pctl, pin, arg);
  328. break;
  329. default:
  330. ret = -EINVAL;
  331. }
  332. return ret;
  333. }
  334. static int mtk_pconf_group_get(struct pinctrl_dev *pctldev,
  335. unsigned group,
  336. unsigned long *config)
  337. {
  338. struct mtk_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
  339. *config = pctl->groups[group].config;
  340. return 0;
  341. }
  342. static int mtk_pconf_group_set(struct pinctrl_dev *pctldev, unsigned group,
  343. unsigned long *configs, unsigned num_configs)
  344. {
  345. struct mtk_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
  346. struct mtk_pinctrl_group *g = &pctl->groups[group];
  347. int i, ret;
  348. for (i = 0; i < num_configs; i++) {
  349. ret = mtk_pconf_parse_conf(pctldev, g->pin,
  350. pinconf_to_config_param(configs[i]),
  351. pinconf_to_config_argument(configs[i]));
  352. if (ret < 0)
  353. return ret;
  354. g->config = configs[i];
  355. }
  356. return 0;
  357. }
  358. static const struct pinconf_ops mtk_pconf_ops = {
  359. .pin_config_group_get = mtk_pconf_group_get,
  360. .pin_config_group_set = mtk_pconf_group_set,
  361. };
  362. static struct mtk_pinctrl_group *
  363. mtk_pctrl_find_group_by_pin(struct mtk_pinctrl *pctl, u32 pin)
  364. {
  365. int i;
  366. for (i = 0; i < pctl->ngroups; i++) {
  367. struct mtk_pinctrl_group *grp = pctl->groups + i;
  368. if (grp->pin == pin)
  369. return grp;
  370. }
  371. return NULL;
  372. }
  373. static const struct mtk_desc_function *mtk_pctrl_find_function_by_pin(
  374. struct mtk_pinctrl *pctl, u32 pin_num, u32 fnum)
  375. {
  376. const struct mtk_desc_pin *pin = pctl->devdata->pins + pin_num;
  377. const struct mtk_desc_function *func = pin->functions;
  378. while (func && func->name) {
  379. if (func->muxval == fnum)
  380. return func;
  381. func++;
  382. }
  383. return NULL;
  384. }
  385. static bool mtk_pctrl_is_function_valid(struct mtk_pinctrl *pctl,
  386. u32 pin_num, u32 fnum)
  387. {
  388. int i;
  389. for (i = 0; i < pctl->devdata->npins; i++) {
  390. const struct mtk_desc_pin *pin = pctl->devdata->pins + i;
  391. if (pin->pin.number == pin_num) {
  392. const struct mtk_desc_function *func =
  393. pin->functions;
  394. while (func && func->name) {
  395. if (func->muxval == fnum)
  396. return true;
  397. func++;
  398. }
  399. break;
  400. }
  401. }
  402. return false;
  403. }
  404. static int mtk_pctrl_dt_node_to_map_func(struct mtk_pinctrl *pctl,
  405. u32 pin, u32 fnum, struct mtk_pinctrl_group *grp,
  406. struct pinctrl_map **map, unsigned *reserved_maps,
  407. unsigned *num_maps)
  408. {
  409. bool ret;
  410. if (*num_maps == *reserved_maps)
  411. return -ENOSPC;
  412. (*map)[*num_maps].type = PIN_MAP_TYPE_MUX_GROUP;
  413. (*map)[*num_maps].data.mux.group = grp->name;
  414. ret = mtk_pctrl_is_function_valid(pctl, pin, fnum);
  415. if (!ret) {
  416. dev_err(pctl->dev, "invalid function %d on pin %d .\n",
  417. fnum, pin);
  418. return -EINVAL;
  419. }
  420. (*map)[*num_maps].data.mux.function = mtk_gpio_functions[fnum];
  421. (*num_maps)++;
  422. return 0;
  423. }
  424. static int mtk_pctrl_dt_subnode_to_map(struct pinctrl_dev *pctldev,
  425. struct device_node *node,
  426. struct pinctrl_map **map,
  427. unsigned *reserved_maps,
  428. unsigned *num_maps)
  429. {
  430. struct property *pins;
  431. u32 pinfunc, pin, func;
  432. int num_pins, num_funcs, maps_per_pin;
  433. unsigned long *configs;
  434. unsigned int num_configs;
  435. bool has_config = false;
  436. int i, err;
  437. unsigned reserve = 0;
  438. struct mtk_pinctrl_group *grp;
  439. struct mtk_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
  440. pins = of_find_property(node, "pinmux", NULL);
  441. if (!pins) {
  442. dev_err(pctl->dev, "missing pins property in node %pOFn .\n",
  443. node);
  444. return -EINVAL;
  445. }
  446. err = pinconf_generic_parse_dt_config(node, pctldev, &configs,
  447. &num_configs);
  448. if (err)
  449. return err;
  450. if (num_configs)
  451. has_config = true;
  452. num_pins = pins->length / sizeof(u32);
  453. num_funcs = num_pins;
  454. maps_per_pin = 0;
  455. if (num_funcs)
  456. maps_per_pin++;
  457. if (has_config && num_pins >= 1)
  458. maps_per_pin++;
  459. if (!num_pins || !maps_per_pin) {
  460. err = -EINVAL;
  461. goto exit;
  462. }
  463. reserve = num_pins * maps_per_pin;
  464. err = pinctrl_utils_reserve_map(pctldev, map,
  465. reserved_maps, num_maps, reserve);
  466. if (err < 0)
  467. goto exit;
  468. for (i = 0; i < num_pins; i++) {
  469. err = of_property_read_u32_index(node, "pinmux",
  470. i, &pinfunc);
  471. if (err)
  472. goto exit;
  473. pin = MTK_GET_PIN_NO(pinfunc);
  474. func = MTK_GET_PIN_FUNC(pinfunc);
  475. if (pin >= pctl->devdata->npins ||
  476. func >= ARRAY_SIZE(mtk_gpio_functions)) {
  477. dev_err(pctl->dev, "invalid pins value.\n");
  478. err = -EINVAL;
  479. goto exit;
  480. }
  481. grp = mtk_pctrl_find_group_by_pin(pctl, pin);
  482. if (!grp) {
  483. dev_err(pctl->dev, "unable to match pin %d to group\n",
  484. pin);
  485. err = -EINVAL;
  486. goto exit;
  487. }
  488. err = mtk_pctrl_dt_node_to_map_func(pctl, pin, func, grp, map,
  489. reserved_maps, num_maps);
  490. if (err < 0)
  491. goto exit;
  492. if (has_config) {
  493. err = pinctrl_utils_add_map_configs(pctldev, map,
  494. reserved_maps, num_maps, grp->name,
  495. configs, num_configs,
  496. PIN_MAP_TYPE_CONFIGS_GROUP);
  497. if (err < 0)
  498. goto exit;
  499. }
  500. }
  501. err = 0;
  502. exit:
  503. kfree(configs);
  504. return err;
  505. }
  506. static int mtk_pctrl_dt_node_to_map(struct pinctrl_dev *pctldev,
  507. struct device_node *np_config,
  508. struct pinctrl_map **map, unsigned *num_maps)
  509. {
  510. struct device_node *np;
  511. unsigned reserved_maps;
  512. int ret;
  513. *map = NULL;
  514. *num_maps = 0;
  515. reserved_maps = 0;
  516. for_each_child_of_node(np_config, np) {
  517. ret = mtk_pctrl_dt_subnode_to_map(pctldev, np, map,
  518. &reserved_maps, num_maps);
  519. if (ret < 0) {
  520. pinctrl_utils_free_map(pctldev, *map, *num_maps);
  521. of_node_put(np);
  522. return ret;
  523. }
  524. }
  525. return 0;
  526. }
  527. static int mtk_pctrl_get_groups_count(struct pinctrl_dev *pctldev)
  528. {
  529. struct mtk_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
  530. return pctl->ngroups;
  531. }
  532. static const char *mtk_pctrl_get_group_name(struct pinctrl_dev *pctldev,
  533. unsigned group)
  534. {
  535. struct mtk_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
  536. return pctl->groups[group].name;
  537. }
  538. static int mtk_pctrl_get_group_pins(struct pinctrl_dev *pctldev,
  539. unsigned group,
  540. const unsigned **pins,
  541. unsigned *num_pins)
  542. {
  543. struct mtk_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
  544. *pins = (unsigned *)&pctl->groups[group].pin;
  545. *num_pins = 1;
  546. return 0;
  547. }
  548. static const struct pinctrl_ops mtk_pctrl_ops = {
  549. .dt_node_to_map = mtk_pctrl_dt_node_to_map,
  550. .dt_free_map = pinctrl_utils_free_map,
  551. .get_groups_count = mtk_pctrl_get_groups_count,
  552. .get_group_name = mtk_pctrl_get_group_name,
  553. .get_group_pins = mtk_pctrl_get_group_pins,
  554. };
  555. static int mtk_pmx_get_funcs_cnt(struct pinctrl_dev *pctldev)
  556. {
  557. return ARRAY_SIZE(mtk_gpio_functions);
  558. }
  559. static const char *mtk_pmx_get_func_name(struct pinctrl_dev *pctldev,
  560. unsigned selector)
  561. {
  562. return mtk_gpio_functions[selector];
  563. }
  564. static int mtk_pmx_get_func_groups(struct pinctrl_dev *pctldev,
  565. unsigned function,
  566. const char * const **groups,
  567. unsigned * const num_groups)
  568. {
  569. struct mtk_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
  570. *groups = pctl->grp_names;
  571. *num_groups = pctl->ngroups;
  572. return 0;
  573. }
  574. static int mtk_pmx_set_mode(struct pinctrl_dev *pctldev,
  575. unsigned long pin, unsigned long mode)
  576. {
  577. unsigned int reg_addr;
  578. unsigned char bit;
  579. unsigned int val;
  580. unsigned int mask = (1L << GPIO_MODE_BITS) - 1;
  581. struct mtk_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
  582. if (pctl->devdata->spec_pinmux_set)
  583. pctl->devdata->spec_pinmux_set(mtk_get_regmap(pctl, pin),
  584. pin, mode);
  585. reg_addr = ((pin / pctl->devdata->mode_per_reg) << pctl->devdata->port_shf)
  586. + pctl->devdata->pinmux_offset;
  587. mode &= mask;
  588. bit = pin % pctl->devdata->mode_per_reg;
  589. mask <<= (GPIO_MODE_BITS * bit);
  590. val = (mode << (GPIO_MODE_BITS * bit));
  591. return regmap_update_bits(mtk_get_regmap(pctl, pin),
  592. reg_addr, mask, val);
  593. }
  594. static const struct mtk_desc_pin *
  595. mtk_find_pin_by_eint_num(struct mtk_pinctrl *pctl, unsigned int eint_num)
  596. {
  597. int i;
  598. const struct mtk_desc_pin *pin;
  599. for (i = 0; i < pctl->devdata->npins; i++) {
  600. pin = pctl->devdata->pins + i;
  601. if (pin->eint.eintnum == eint_num)
  602. return pin;
  603. }
  604. return NULL;
  605. }
  606. static int mtk_pmx_set_mux(struct pinctrl_dev *pctldev,
  607. unsigned function,
  608. unsigned group)
  609. {
  610. bool ret;
  611. const struct mtk_desc_function *desc;
  612. struct mtk_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
  613. struct mtk_pinctrl_group *g = pctl->groups + group;
  614. ret = mtk_pctrl_is_function_valid(pctl, g->pin, function);
  615. if (!ret) {
  616. dev_err(pctl->dev, "invalid function %d on group %d .\n",
  617. function, group);
  618. return -EINVAL;
  619. }
  620. desc = mtk_pctrl_find_function_by_pin(pctl, g->pin, function);
  621. if (!desc)
  622. return -EINVAL;
  623. mtk_pmx_set_mode(pctldev, g->pin, desc->muxval);
  624. return 0;
  625. }
  626. static int mtk_pmx_find_gpio_mode(struct mtk_pinctrl *pctl,
  627. unsigned offset)
  628. {
  629. const struct mtk_desc_pin *pin = pctl->devdata->pins + offset;
  630. const struct mtk_desc_function *func = pin->functions;
  631. while (func && func->name) {
  632. if (!strncmp(func->name, GPIO_MODE_PREFIX,
  633. sizeof(GPIO_MODE_PREFIX)-1))
  634. return func->muxval;
  635. func++;
  636. }
  637. return -EINVAL;
  638. }
  639. static int mtk_pmx_gpio_request_enable(struct pinctrl_dev *pctldev,
  640. struct pinctrl_gpio_range *range,
  641. unsigned offset)
  642. {
  643. int muxval;
  644. struct mtk_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
  645. muxval = mtk_pmx_find_gpio_mode(pctl, offset);
  646. if (muxval < 0) {
  647. dev_err(pctl->dev, "invalid gpio pin %d.\n", offset);
  648. return -EINVAL;
  649. }
  650. mtk_pmx_set_mode(pctldev, offset, muxval);
  651. mtk_pconf_set_ies_smt(pctl, offset, 1, PIN_CONFIG_INPUT_ENABLE);
  652. return 0;
  653. }
  654. static const struct pinmux_ops mtk_pmx_ops = {
  655. .get_functions_count = mtk_pmx_get_funcs_cnt,
  656. .get_function_name = mtk_pmx_get_func_name,
  657. .get_function_groups = mtk_pmx_get_func_groups,
  658. .set_mux = mtk_pmx_set_mux,
  659. .gpio_set_direction = mtk_pmx_gpio_set_direction,
  660. .gpio_request_enable = mtk_pmx_gpio_request_enable,
  661. };
  662. static int mtk_gpio_direction_input(struct gpio_chip *chip,
  663. unsigned offset)
  664. {
  665. return pinctrl_gpio_direction_input(chip->base + offset);
  666. }
  667. static int mtk_gpio_direction_output(struct gpio_chip *chip,
  668. unsigned offset, int value)
  669. {
  670. mtk_gpio_set(chip, offset, value);
  671. return pinctrl_gpio_direction_output(chip->base + offset);
  672. }
  673. static int mtk_gpio_get_direction(struct gpio_chip *chip, unsigned offset)
  674. {
  675. unsigned int reg_addr;
  676. unsigned int bit;
  677. unsigned int read_val = 0;
  678. struct mtk_pinctrl *pctl = gpiochip_get_data(chip);
  679. reg_addr = mtk_get_port(pctl, offset) + pctl->devdata->dir_offset;
  680. bit = BIT(offset & pctl->devdata->mode_mask);
  681. if (pctl->devdata->spec_dir_set)
  682. pctl->devdata->spec_dir_set(&reg_addr, offset);
  683. regmap_read(pctl->regmap1, reg_addr, &read_val);
  684. if (read_val & bit)
  685. return GPIO_LINE_DIRECTION_OUT;
  686. return GPIO_LINE_DIRECTION_IN;
  687. }
  688. static int mtk_gpio_get(struct gpio_chip *chip, unsigned offset)
  689. {
  690. unsigned int reg_addr;
  691. unsigned int bit;
  692. unsigned int read_val = 0;
  693. struct mtk_pinctrl *pctl = gpiochip_get_data(chip);
  694. reg_addr = mtk_get_port(pctl, offset) +
  695. pctl->devdata->din_offset;
  696. bit = BIT(offset & pctl->devdata->mode_mask);
  697. regmap_read(pctl->regmap1, reg_addr, &read_val);
  698. return !!(read_val & bit);
  699. }
  700. static int mtk_gpio_to_irq(struct gpio_chip *chip, unsigned offset)
  701. {
  702. struct mtk_pinctrl *pctl = gpiochip_get_data(chip);
  703. const struct mtk_desc_pin *pin;
  704. unsigned long eint_n;
  705. pin = pctl->devdata->pins + offset;
  706. if (pin->eint.eintnum == NO_EINT_SUPPORT)
  707. return -EINVAL;
  708. eint_n = pin->eint.eintnum;
  709. return mtk_eint_find_irq(pctl->eint, eint_n);
  710. }
  711. static int mtk_gpio_set_config(struct gpio_chip *chip, unsigned offset,
  712. unsigned long config)
  713. {
  714. struct mtk_pinctrl *pctl = gpiochip_get_data(chip);
  715. const struct mtk_desc_pin *pin;
  716. unsigned long eint_n;
  717. u32 debounce;
  718. if (pinconf_to_config_param(config) != PIN_CONFIG_INPUT_DEBOUNCE)
  719. return -ENOTSUPP;
  720. pin = pctl->devdata->pins + offset;
  721. if (pin->eint.eintnum == NO_EINT_SUPPORT)
  722. return -EINVAL;
  723. debounce = pinconf_to_config_argument(config);
  724. eint_n = pin->eint.eintnum;
  725. return mtk_eint_set_debounce(pctl->eint, eint_n, debounce);
  726. }
  727. static const struct gpio_chip mtk_gpio_chip = {
  728. .owner = THIS_MODULE,
  729. .request = gpiochip_generic_request,
  730. .free = gpiochip_generic_free,
  731. .get_direction = mtk_gpio_get_direction,
  732. .direction_input = mtk_gpio_direction_input,
  733. .direction_output = mtk_gpio_direction_output,
  734. .get = mtk_gpio_get,
  735. .set = mtk_gpio_set,
  736. .to_irq = mtk_gpio_to_irq,
  737. .set_config = mtk_gpio_set_config,
  738. .of_gpio_n_cells = 2,
  739. };
  740. static int mtk_eint_suspend(struct device *device)
  741. {
  742. struct mtk_pinctrl *pctl = dev_get_drvdata(device);
  743. return mtk_eint_do_suspend(pctl->eint);
  744. }
  745. static int mtk_eint_resume(struct device *device)
  746. {
  747. struct mtk_pinctrl *pctl = dev_get_drvdata(device);
  748. return mtk_eint_do_resume(pctl->eint);
  749. }
  750. const struct dev_pm_ops mtk_eint_pm_ops = {
  751. .suspend_noirq = mtk_eint_suspend,
  752. .resume_noirq = mtk_eint_resume,
  753. };
  754. static int mtk_pctrl_build_state(struct platform_device *pdev)
  755. {
  756. struct mtk_pinctrl *pctl = platform_get_drvdata(pdev);
  757. int i;
  758. pctl->ngroups = pctl->devdata->npins;
  759. /* Allocate groups */
  760. pctl->groups = devm_kcalloc(&pdev->dev, pctl->ngroups,
  761. sizeof(*pctl->groups), GFP_KERNEL);
  762. if (!pctl->groups)
  763. return -ENOMEM;
  764. /* We assume that one pin is one group, use pin name as group name. */
  765. pctl->grp_names = devm_kcalloc(&pdev->dev, pctl->ngroups,
  766. sizeof(*pctl->grp_names), GFP_KERNEL);
  767. if (!pctl->grp_names)
  768. return -ENOMEM;
  769. for (i = 0; i < pctl->devdata->npins; i++) {
  770. const struct mtk_desc_pin *pin = pctl->devdata->pins + i;
  771. struct mtk_pinctrl_group *group = pctl->groups + i;
  772. group->name = pin->pin.name;
  773. group->pin = pin->pin.number;
  774. pctl->grp_names[i] = pin->pin.name;
  775. }
  776. return 0;
  777. }
  778. static int
  779. mtk_xt_get_gpio_n(void *data, unsigned long eint_n, unsigned int *gpio_n,
  780. struct gpio_chip **gpio_chip)
  781. {
  782. struct mtk_pinctrl *pctl = (struct mtk_pinctrl *)data;
  783. const struct mtk_desc_pin *pin;
  784. pin = mtk_find_pin_by_eint_num(pctl, eint_n);
  785. if (!pin)
  786. return -EINVAL;
  787. *gpio_chip = pctl->chip;
  788. *gpio_n = pin->pin.number;
  789. return 0;
  790. }
  791. static int mtk_xt_get_gpio_state(void *data, unsigned long eint_n)
  792. {
  793. struct mtk_pinctrl *pctl = (struct mtk_pinctrl *)data;
  794. const struct mtk_desc_pin *pin;
  795. pin = mtk_find_pin_by_eint_num(pctl, eint_n);
  796. if (!pin)
  797. return -EINVAL;
  798. return mtk_gpio_get(pctl->chip, pin->pin.number);
  799. }
  800. static int mtk_xt_set_gpio_as_eint(void *data, unsigned long eint_n)
  801. {
  802. struct mtk_pinctrl *pctl = (struct mtk_pinctrl *)data;
  803. const struct mtk_desc_pin *pin;
  804. pin = mtk_find_pin_by_eint_num(pctl, eint_n);
  805. if (!pin)
  806. return -EINVAL;
  807. /* set mux to INT mode */
  808. mtk_pmx_set_mode(pctl->pctl_dev, pin->pin.number, pin->eint.eintmux);
  809. /* set gpio direction to input */
  810. mtk_pmx_gpio_set_direction(pctl->pctl_dev, NULL, pin->pin.number,
  811. true);
  812. /* set input-enable */
  813. mtk_pconf_set_ies_smt(pctl, pin->pin.number, 1,
  814. PIN_CONFIG_INPUT_ENABLE);
  815. return 0;
  816. }
  817. static const struct mtk_eint_xt mtk_eint_xt = {
  818. .get_gpio_n = mtk_xt_get_gpio_n,
  819. .get_gpio_state = mtk_xt_get_gpio_state,
  820. .set_gpio_as_eint = mtk_xt_set_gpio_as_eint,
  821. };
  822. static int mtk_eint_init(struct mtk_pinctrl *pctl, struct platform_device *pdev)
  823. {
  824. struct device_node *np = pdev->dev.of_node;
  825. if (!of_property_read_bool(np, "interrupt-controller"))
  826. return -ENODEV;
  827. pctl->eint = devm_kzalloc(pctl->dev, sizeof(*pctl->eint), GFP_KERNEL);
  828. if (!pctl->eint)
  829. return -ENOMEM;
  830. pctl->eint->base = devm_platform_ioremap_resource(pdev, 0);
  831. if (IS_ERR(pctl->eint->base))
  832. return PTR_ERR(pctl->eint->base);
  833. pctl->eint->irq = irq_of_parse_and_map(np, 0);
  834. if (!pctl->eint->irq)
  835. return -EINVAL;
  836. pctl->eint->dev = &pdev->dev;
  837. /*
  838. * If pctl->eint->regs == NULL, it would fall back into using a generic
  839. * register map in mtk_eint_do_init calls.
  840. */
  841. pctl->eint->regs = pctl->devdata->eint_regs;
  842. pctl->eint->hw = &pctl->devdata->eint_hw;
  843. pctl->eint->pctl = pctl;
  844. pctl->eint->gpio_xlate = &mtk_eint_xt;
  845. return mtk_eint_do_init(pctl->eint);
  846. }
  847. /* This is used as a common probe function */
  848. int mtk_pctrl_init(struct platform_device *pdev,
  849. const struct mtk_pinctrl_devdata *data,
  850. struct regmap *regmap)
  851. {
  852. struct device *dev = &pdev->dev;
  853. struct pinctrl_pin_desc *pins;
  854. struct mtk_pinctrl *pctl;
  855. struct device_node *np = pdev->dev.of_node, *node;
  856. struct property *prop;
  857. int ret, i;
  858. pctl = devm_kzalloc(&pdev->dev, sizeof(*pctl), GFP_KERNEL);
  859. if (!pctl)
  860. return -ENOMEM;
  861. platform_set_drvdata(pdev, pctl);
  862. prop = of_find_property(np, "pins-are-numbered", NULL);
  863. if (!prop)
  864. return dev_err_probe(dev, -EINVAL,
  865. "only support pins-are-numbered format\n");
  866. node = of_parse_phandle(np, "mediatek,pctl-regmap", 0);
  867. if (node) {
  868. pctl->regmap1 = syscon_node_to_regmap(node);
  869. of_node_put(node);
  870. if (IS_ERR(pctl->regmap1))
  871. return PTR_ERR(pctl->regmap1);
  872. } else if (regmap) {
  873. pctl->regmap1 = regmap;
  874. } else {
  875. return dev_err_probe(dev, -EINVAL, "Cannot find pinctrl regmap.\n");
  876. }
  877. /* Only 8135 has two base addr, other SoCs have only one. */
  878. node = of_parse_phandle(np, "mediatek,pctl-regmap", 1);
  879. if (node) {
  880. pctl->regmap2 = syscon_node_to_regmap(node);
  881. of_node_put(node);
  882. if (IS_ERR(pctl->regmap2))
  883. return PTR_ERR(pctl->regmap2);
  884. }
  885. pctl->devdata = data;
  886. ret = mtk_pctrl_build_state(pdev);
  887. if (ret)
  888. return dev_err_probe(dev, ret, "build state failed\n");
  889. pins = devm_kcalloc(&pdev->dev, pctl->devdata->npins, sizeof(*pins),
  890. GFP_KERNEL);
  891. if (!pins)
  892. return -ENOMEM;
  893. for (i = 0; i < pctl->devdata->npins; i++)
  894. pins[i] = pctl->devdata->pins[i].pin;
  895. pctl->pctl_desc.name = dev_name(&pdev->dev);
  896. pctl->pctl_desc.owner = THIS_MODULE;
  897. pctl->pctl_desc.pins = pins;
  898. pctl->pctl_desc.npins = pctl->devdata->npins;
  899. pctl->pctl_desc.confops = &mtk_pconf_ops;
  900. pctl->pctl_desc.pctlops = &mtk_pctrl_ops;
  901. pctl->pctl_desc.pmxops = &mtk_pmx_ops;
  902. pctl->dev = &pdev->dev;
  903. pctl->pctl_dev = devm_pinctrl_register(&pdev->dev, &pctl->pctl_desc,
  904. pctl);
  905. if (IS_ERR(pctl->pctl_dev))
  906. return dev_err_probe(dev, PTR_ERR(pctl->pctl_dev),
  907. "Couldn't register pinctrl driver\n");
  908. pctl->chip = devm_kzalloc(&pdev->dev, sizeof(*pctl->chip), GFP_KERNEL);
  909. if (!pctl->chip)
  910. return -ENOMEM;
  911. *pctl->chip = mtk_gpio_chip;
  912. pctl->chip->ngpio = pctl->devdata->npins;
  913. pctl->chip->label = dev_name(&pdev->dev);
  914. pctl->chip->parent = &pdev->dev;
  915. pctl->chip->base = -1;
  916. ret = gpiochip_add_data(pctl->chip, pctl);
  917. if (ret)
  918. return -EINVAL;
  919. /* Register the GPIO to pin mappings. */
  920. ret = gpiochip_add_pin_range(pctl->chip, dev_name(&pdev->dev),
  921. 0, 0, pctl->devdata->npins);
  922. if (ret) {
  923. ret = -EINVAL;
  924. goto chip_error;
  925. }
  926. ret = mtk_eint_init(pctl, pdev);
  927. if (ret)
  928. goto chip_error;
  929. return 0;
  930. chip_error:
  931. gpiochip_remove(pctl->chip);
  932. return ret;
  933. }
  934. int mtk_pctrl_common_probe(struct platform_device *pdev)
  935. {
  936. struct device *dev = &pdev->dev;
  937. const struct mtk_pinctrl_devdata *data = device_get_match_data(dev);
  938. if (!data)
  939. return -ENODEV;
  940. return mtk_pctrl_init(pdev, data, NULL);
  941. }