pinctrl-mtk-common.c 29 KB

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