pinctrl-owl.c 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * OWL SoC's Pinctrl driver
  4. *
  5. * Copyright (c) 2014 Actions Semi Inc.
  6. * Author: David Liu <liuwei@actions-semi.com>
  7. *
  8. * Copyright (c) 2018 Linaro Ltd.
  9. * Author: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
  10. */
  11. #include <linux/clk.h>
  12. #include <linux/err.h>
  13. #include <linux/gpio/driver.h>
  14. #include <linux/io.h>
  15. #include <linux/irq.h>
  16. #include <linux/module.h>
  17. #include <linux/of.h>
  18. #include <linux/platform_device.h>
  19. #include <linux/pinctrl/machine.h>
  20. #include <linux/pinctrl/pinctrl.h>
  21. #include <linux/pinctrl/pinmux.h>
  22. #include <linux/pinctrl/pinconf.h>
  23. #include <linux/pinctrl/pinconf-generic.h>
  24. #include <linux/slab.h>
  25. #include <linux/spinlock.h>
  26. #include "../core.h"
  27. #include "../pinctrl-utils.h"
  28. #include "pinctrl-owl.h"
  29. /**
  30. * struct owl_pinctrl - pinctrl state of the device
  31. * @dev: device handle
  32. * @pctrldev: pinctrl handle
  33. * @chip: gpio chip
  34. * @lock: spinlock to protect registers
  35. * @soc: reference to soc_data
  36. * @base: pinctrl register base address
  37. */
  38. struct owl_pinctrl {
  39. struct device *dev;
  40. struct pinctrl_dev *pctrldev;
  41. struct gpio_chip chip;
  42. raw_spinlock_t lock;
  43. struct clk *clk;
  44. const struct owl_pinctrl_soc_data *soc;
  45. void __iomem *base;
  46. struct irq_chip irq_chip;
  47. unsigned int num_irq;
  48. unsigned int *irq;
  49. };
  50. static void owl_update_bits(void __iomem *base, u32 mask, u32 val)
  51. {
  52. u32 reg_val;
  53. reg_val = readl_relaxed(base);
  54. reg_val = (reg_val & ~mask) | (val & mask);
  55. writel_relaxed(reg_val, base);
  56. }
  57. static u32 owl_read_field(struct owl_pinctrl *pctrl, u32 reg,
  58. u32 bit, u32 width)
  59. {
  60. u32 tmp, mask;
  61. tmp = readl_relaxed(pctrl->base + reg);
  62. mask = (1 << width) - 1;
  63. return (tmp >> bit) & mask;
  64. }
  65. static void owl_write_field(struct owl_pinctrl *pctrl, u32 reg, u32 arg,
  66. u32 bit, u32 width)
  67. {
  68. u32 mask;
  69. mask = (1 << width) - 1;
  70. mask = mask << bit;
  71. owl_update_bits(pctrl->base + reg, mask, (arg << bit));
  72. }
  73. static int owl_get_groups_count(struct pinctrl_dev *pctrldev)
  74. {
  75. struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev);
  76. return pctrl->soc->ngroups;
  77. }
  78. static const char *owl_get_group_name(struct pinctrl_dev *pctrldev,
  79. unsigned int group)
  80. {
  81. struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev);
  82. return pctrl->soc->groups[group].name;
  83. }
  84. static int owl_get_group_pins(struct pinctrl_dev *pctrldev,
  85. unsigned int group,
  86. const unsigned int **pins,
  87. unsigned int *num_pins)
  88. {
  89. struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev);
  90. *pins = pctrl->soc->groups[group].pads;
  91. *num_pins = pctrl->soc->groups[group].npads;
  92. return 0;
  93. }
  94. static void owl_pin_dbg_show(struct pinctrl_dev *pctrldev,
  95. struct seq_file *s,
  96. unsigned int offset)
  97. {
  98. struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev);
  99. seq_printf(s, "%s", dev_name(pctrl->dev));
  100. }
  101. static struct pinctrl_ops owl_pinctrl_ops = {
  102. .get_groups_count = owl_get_groups_count,
  103. .get_group_name = owl_get_group_name,
  104. .get_group_pins = owl_get_group_pins,
  105. .pin_dbg_show = owl_pin_dbg_show,
  106. .dt_node_to_map = pinconf_generic_dt_node_to_map_all,
  107. .dt_free_map = pinctrl_utils_free_map,
  108. };
  109. static int owl_get_funcs_count(struct pinctrl_dev *pctrldev)
  110. {
  111. struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev);
  112. return pctrl->soc->nfunctions;
  113. }
  114. static const char *owl_get_func_name(struct pinctrl_dev *pctrldev,
  115. unsigned int function)
  116. {
  117. struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev);
  118. return pctrl->soc->functions[function].name;
  119. }
  120. static int owl_get_func_groups(struct pinctrl_dev *pctrldev,
  121. unsigned int function,
  122. const char * const **groups,
  123. unsigned int * const num_groups)
  124. {
  125. struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev);
  126. *groups = pctrl->soc->functions[function].groups;
  127. *num_groups = pctrl->soc->functions[function].ngroups;
  128. return 0;
  129. }
  130. static inline int get_group_mfp_mask_val(const struct owl_pingroup *g,
  131. int function,
  132. u32 *mask,
  133. u32 *val)
  134. {
  135. int id;
  136. u32 option_num;
  137. u32 option_mask;
  138. for (id = 0; id < g->nfuncs; id++) {
  139. if (g->funcs[id] == function)
  140. break;
  141. }
  142. if (WARN_ON(id == g->nfuncs))
  143. return -EINVAL;
  144. option_num = (1 << g->mfpctl_width);
  145. if (id > option_num)
  146. id -= option_num;
  147. option_mask = option_num - 1;
  148. *mask = (option_mask << g->mfpctl_shift);
  149. *val = (id << g->mfpctl_shift);
  150. return 0;
  151. }
  152. static int owl_set_mux(struct pinctrl_dev *pctrldev,
  153. unsigned int function,
  154. unsigned int group)
  155. {
  156. struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev);
  157. const struct owl_pingroup *g;
  158. unsigned long flags;
  159. u32 val, mask;
  160. g = &pctrl->soc->groups[group];
  161. if (get_group_mfp_mask_val(g, function, &mask, &val))
  162. return -EINVAL;
  163. raw_spin_lock_irqsave(&pctrl->lock, flags);
  164. owl_update_bits(pctrl->base + g->mfpctl_reg, mask, val);
  165. raw_spin_unlock_irqrestore(&pctrl->lock, flags);
  166. return 0;
  167. }
  168. static struct pinmux_ops owl_pinmux_ops = {
  169. .get_functions_count = owl_get_funcs_count,
  170. .get_function_name = owl_get_func_name,
  171. .get_function_groups = owl_get_func_groups,
  172. .set_mux = owl_set_mux,
  173. };
  174. static int owl_pad_pinconf_reg(const struct owl_padinfo *info,
  175. unsigned int param,
  176. u32 *reg,
  177. u32 *bit,
  178. u32 *width)
  179. {
  180. switch (param) {
  181. case PIN_CONFIG_BIAS_BUS_HOLD:
  182. case PIN_CONFIG_BIAS_HIGH_IMPEDANCE:
  183. case PIN_CONFIG_BIAS_PULL_DOWN:
  184. case PIN_CONFIG_BIAS_PULL_UP:
  185. if (!info->pullctl)
  186. return -EINVAL;
  187. *reg = info->pullctl->reg;
  188. *bit = info->pullctl->shift;
  189. *width = info->pullctl->width;
  190. break;
  191. case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
  192. if (!info->st)
  193. return -EINVAL;
  194. *reg = info->st->reg;
  195. *bit = info->st->shift;
  196. *width = info->st->width;
  197. break;
  198. default:
  199. return -ENOTSUPP;
  200. }
  201. return 0;
  202. }
  203. static int owl_pad_pinconf_arg2val(const struct owl_padinfo *info,
  204. unsigned int param,
  205. u32 *arg)
  206. {
  207. switch (param) {
  208. case PIN_CONFIG_BIAS_BUS_HOLD:
  209. *arg = OWL_PINCONF_PULL_HOLD;
  210. break;
  211. case PIN_CONFIG_BIAS_HIGH_IMPEDANCE:
  212. *arg = OWL_PINCONF_PULL_HIZ;
  213. break;
  214. case PIN_CONFIG_BIAS_PULL_DOWN:
  215. *arg = OWL_PINCONF_PULL_DOWN;
  216. break;
  217. case PIN_CONFIG_BIAS_PULL_UP:
  218. *arg = OWL_PINCONF_PULL_UP;
  219. break;
  220. case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
  221. *arg = (*arg >= 1 ? 1 : 0);
  222. break;
  223. default:
  224. return -ENOTSUPP;
  225. }
  226. return 0;
  227. }
  228. static int owl_pad_pinconf_val2arg(const struct owl_padinfo *padinfo,
  229. unsigned int param,
  230. u32 *arg)
  231. {
  232. switch (param) {
  233. case PIN_CONFIG_BIAS_BUS_HOLD:
  234. *arg = *arg == OWL_PINCONF_PULL_HOLD;
  235. break;
  236. case PIN_CONFIG_BIAS_HIGH_IMPEDANCE:
  237. *arg = *arg == OWL_PINCONF_PULL_HIZ;
  238. break;
  239. case PIN_CONFIG_BIAS_PULL_DOWN:
  240. *arg = *arg == OWL_PINCONF_PULL_DOWN;
  241. break;
  242. case PIN_CONFIG_BIAS_PULL_UP:
  243. *arg = *arg == OWL_PINCONF_PULL_UP;
  244. break;
  245. case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
  246. *arg = *arg == 1;
  247. break;
  248. default:
  249. return -ENOTSUPP;
  250. }
  251. return 0;
  252. }
  253. static int owl_pin_config_get(struct pinctrl_dev *pctrldev,
  254. unsigned int pin,
  255. unsigned long *config)
  256. {
  257. int ret = 0;
  258. struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev);
  259. const struct owl_padinfo *info;
  260. unsigned int param = pinconf_to_config_param(*config);
  261. u32 reg, bit, width, arg;
  262. info = &pctrl->soc->padinfo[pin];
  263. ret = owl_pad_pinconf_reg(info, param, &reg, &bit, &width);
  264. if (ret)
  265. return ret;
  266. arg = owl_read_field(pctrl, reg, bit, width);
  267. ret = owl_pad_pinconf_val2arg(info, param, &arg);
  268. if (ret)
  269. return ret;
  270. *config = pinconf_to_config_packed(param, arg);
  271. return ret;
  272. }
  273. static int owl_pin_config_set(struct pinctrl_dev *pctrldev,
  274. unsigned int pin,
  275. unsigned long *configs,
  276. unsigned int num_configs)
  277. {
  278. struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev);
  279. const struct owl_padinfo *info;
  280. unsigned long flags;
  281. unsigned int param;
  282. u32 reg, bit, width, arg;
  283. int ret = 0, i;
  284. info = &pctrl->soc->padinfo[pin];
  285. for (i = 0; i < num_configs; i++) {
  286. param = pinconf_to_config_param(configs[i]);
  287. arg = pinconf_to_config_argument(configs[i]);
  288. ret = owl_pad_pinconf_reg(info, param, &reg, &bit, &width);
  289. if (ret)
  290. return ret;
  291. ret = owl_pad_pinconf_arg2val(info, param, &arg);
  292. if (ret)
  293. return ret;
  294. raw_spin_lock_irqsave(&pctrl->lock, flags);
  295. owl_write_field(pctrl, reg, arg, bit, width);
  296. raw_spin_unlock_irqrestore(&pctrl->lock, flags);
  297. }
  298. return ret;
  299. }
  300. static int owl_group_pinconf_reg(const struct owl_pingroup *g,
  301. unsigned int param,
  302. u32 *reg,
  303. u32 *bit,
  304. u32 *width)
  305. {
  306. switch (param) {
  307. case PIN_CONFIG_DRIVE_STRENGTH:
  308. if (g->drv_reg < 0)
  309. return -EINVAL;
  310. *reg = g->drv_reg;
  311. *bit = g->drv_shift;
  312. *width = g->drv_width;
  313. break;
  314. case PIN_CONFIG_SLEW_RATE:
  315. if (g->sr_reg < 0)
  316. return -EINVAL;
  317. *reg = g->sr_reg;
  318. *bit = g->sr_shift;
  319. *width = g->sr_width;
  320. break;
  321. default:
  322. return -ENOTSUPP;
  323. }
  324. return 0;
  325. }
  326. static int owl_group_pinconf_arg2val(const struct owl_pingroup *g,
  327. unsigned int param,
  328. u32 *arg)
  329. {
  330. switch (param) {
  331. case PIN_CONFIG_DRIVE_STRENGTH:
  332. switch (*arg) {
  333. case 2:
  334. *arg = OWL_PINCONF_DRV_2MA;
  335. break;
  336. case 4:
  337. *arg = OWL_PINCONF_DRV_4MA;
  338. break;
  339. case 8:
  340. *arg = OWL_PINCONF_DRV_8MA;
  341. break;
  342. case 12:
  343. *arg = OWL_PINCONF_DRV_12MA;
  344. break;
  345. default:
  346. return -EINVAL;
  347. }
  348. break;
  349. case PIN_CONFIG_SLEW_RATE:
  350. if (*arg)
  351. *arg = OWL_PINCONF_SLEW_FAST;
  352. else
  353. *arg = OWL_PINCONF_SLEW_SLOW;
  354. break;
  355. default:
  356. return -ENOTSUPP;
  357. }
  358. return 0;
  359. }
  360. static int owl_group_pinconf_val2arg(const struct owl_pingroup *g,
  361. unsigned int param,
  362. u32 *arg)
  363. {
  364. switch (param) {
  365. case PIN_CONFIG_DRIVE_STRENGTH:
  366. switch (*arg) {
  367. case OWL_PINCONF_DRV_2MA:
  368. *arg = 2;
  369. break;
  370. case OWL_PINCONF_DRV_4MA:
  371. *arg = 4;
  372. break;
  373. case OWL_PINCONF_DRV_8MA:
  374. *arg = 8;
  375. break;
  376. case OWL_PINCONF_DRV_12MA:
  377. *arg = 12;
  378. break;
  379. default:
  380. return -EINVAL;
  381. }
  382. break;
  383. case PIN_CONFIG_SLEW_RATE:
  384. if (*arg)
  385. *arg = 1;
  386. else
  387. *arg = 0;
  388. break;
  389. default:
  390. return -ENOTSUPP;
  391. }
  392. return 0;
  393. }
  394. static int owl_group_config_get(struct pinctrl_dev *pctrldev,
  395. unsigned int group,
  396. unsigned long *config)
  397. {
  398. const struct owl_pingroup *g;
  399. struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev);
  400. unsigned int param = pinconf_to_config_param(*config);
  401. u32 reg, bit, width, arg;
  402. int ret;
  403. g = &pctrl->soc->groups[group];
  404. ret = owl_group_pinconf_reg(g, param, &reg, &bit, &width);
  405. if (ret)
  406. return ret;
  407. arg = owl_read_field(pctrl, reg, bit, width);
  408. ret = owl_group_pinconf_val2arg(g, param, &arg);
  409. if (ret)
  410. return ret;
  411. *config = pinconf_to_config_packed(param, arg);
  412. return ret;
  413. }
  414. static int owl_group_config_set(struct pinctrl_dev *pctrldev,
  415. unsigned int group,
  416. unsigned long *configs,
  417. unsigned int num_configs)
  418. {
  419. const struct owl_pingroup *g;
  420. struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev);
  421. unsigned long flags;
  422. unsigned int param;
  423. u32 reg, bit, width, arg;
  424. int ret, i;
  425. g = &pctrl->soc->groups[group];
  426. for (i = 0; i < num_configs; i++) {
  427. param = pinconf_to_config_param(configs[i]);
  428. arg = pinconf_to_config_argument(configs[i]);
  429. ret = owl_group_pinconf_reg(g, param, &reg, &bit, &width);
  430. if (ret)
  431. return ret;
  432. ret = owl_group_pinconf_arg2val(g, param, &arg);
  433. if (ret)
  434. return ret;
  435. /* Update register */
  436. raw_spin_lock_irqsave(&pctrl->lock, flags);
  437. owl_write_field(pctrl, reg, arg, bit, width);
  438. raw_spin_unlock_irqrestore(&pctrl->lock, flags);
  439. }
  440. return 0;
  441. }
  442. static const struct pinconf_ops owl_pinconf_ops = {
  443. .is_generic = true,
  444. .pin_config_get = owl_pin_config_get,
  445. .pin_config_set = owl_pin_config_set,
  446. .pin_config_group_get = owl_group_config_get,
  447. .pin_config_group_set = owl_group_config_set,
  448. };
  449. static struct pinctrl_desc owl_pinctrl_desc = {
  450. .pctlops = &owl_pinctrl_ops,
  451. .pmxops = &owl_pinmux_ops,
  452. .confops = &owl_pinconf_ops,
  453. .owner = THIS_MODULE,
  454. };
  455. static const struct owl_gpio_port *
  456. owl_gpio_get_port(struct owl_pinctrl *pctrl, unsigned int *pin)
  457. {
  458. unsigned int start = 0, i;
  459. for (i = 0; i < pctrl->soc->nports; i++) {
  460. const struct owl_gpio_port *port = &pctrl->soc->ports[i];
  461. if (*pin >= start && *pin < start + port->pins) {
  462. *pin -= start;
  463. return port;
  464. }
  465. start += port->pins;
  466. }
  467. return NULL;
  468. }
  469. static void owl_gpio_update_reg(void __iomem *base, unsigned int pin, int flag)
  470. {
  471. u32 val;
  472. val = readl_relaxed(base);
  473. if (flag)
  474. val |= BIT(pin);
  475. else
  476. val &= ~BIT(pin);
  477. writel_relaxed(val, base);
  478. }
  479. static int owl_gpio_request(struct gpio_chip *chip, unsigned int offset)
  480. {
  481. struct owl_pinctrl *pctrl = gpiochip_get_data(chip);
  482. const struct owl_gpio_port *port;
  483. void __iomem *gpio_base;
  484. unsigned long flags;
  485. port = owl_gpio_get_port(pctrl, &offset);
  486. if (WARN_ON(port == NULL))
  487. return -ENODEV;
  488. gpio_base = pctrl->base + port->offset;
  489. /*
  490. * GPIOs have higher priority over other modules, so either setting
  491. * them as OUT or IN is sufficient
  492. */
  493. raw_spin_lock_irqsave(&pctrl->lock, flags);
  494. owl_gpio_update_reg(gpio_base + port->outen, offset, true);
  495. raw_spin_unlock_irqrestore(&pctrl->lock, flags);
  496. return 0;
  497. }
  498. static void owl_gpio_free(struct gpio_chip *chip, unsigned int offset)
  499. {
  500. struct owl_pinctrl *pctrl = gpiochip_get_data(chip);
  501. const struct owl_gpio_port *port;
  502. void __iomem *gpio_base;
  503. unsigned long flags;
  504. port = owl_gpio_get_port(pctrl, &offset);
  505. if (WARN_ON(port == NULL))
  506. return;
  507. gpio_base = pctrl->base + port->offset;
  508. raw_spin_lock_irqsave(&pctrl->lock, flags);
  509. /* disable gpio output */
  510. owl_gpio_update_reg(gpio_base + port->outen, offset, false);
  511. /* disable gpio input */
  512. owl_gpio_update_reg(gpio_base + port->inen, offset, false);
  513. raw_spin_unlock_irqrestore(&pctrl->lock, flags);
  514. }
  515. static int owl_gpio_get(struct gpio_chip *chip, unsigned int offset)
  516. {
  517. struct owl_pinctrl *pctrl = gpiochip_get_data(chip);
  518. const struct owl_gpio_port *port;
  519. void __iomem *gpio_base;
  520. unsigned long flags;
  521. u32 val;
  522. port = owl_gpio_get_port(pctrl, &offset);
  523. if (WARN_ON(port == NULL))
  524. return -ENODEV;
  525. gpio_base = pctrl->base + port->offset;
  526. raw_spin_lock_irqsave(&pctrl->lock, flags);
  527. val = readl_relaxed(gpio_base + port->dat);
  528. raw_spin_unlock_irqrestore(&pctrl->lock, flags);
  529. return !!(val & BIT(offset));
  530. }
  531. static void owl_gpio_set(struct gpio_chip *chip, unsigned int offset, int value)
  532. {
  533. struct owl_pinctrl *pctrl = gpiochip_get_data(chip);
  534. const struct owl_gpio_port *port;
  535. void __iomem *gpio_base;
  536. unsigned long flags;
  537. port = owl_gpio_get_port(pctrl, &offset);
  538. if (WARN_ON(port == NULL))
  539. return;
  540. gpio_base = pctrl->base + port->offset;
  541. raw_spin_lock_irqsave(&pctrl->lock, flags);
  542. owl_gpio_update_reg(gpio_base + port->dat, offset, value);
  543. raw_spin_unlock_irqrestore(&pctrl->lock, flags);
  544. }
  545. static int owl_gpio_direction_input(struct gpio_chip *chip, unsigned int offset)
  546. {
  547. struct owl_pinctrl *pctrl = gpiochip_get_data(chip);
  548. const struct owl_gpio_port *port;
  549. void __iomem *gpio_base;
  550. unsigned long flags;
  551. port = owl_gpio_get_port(pctrl, &offset);
  552. if (WARN_ON(port == NULL))
  553. return -ENODEV;
  554. gpio_base = pctrl->base + port->offset;
  555. raw_spin_lock_irqsave(&pctrl->lock, flags);
  556. owl_gpio_update_reg(gpio_base + port->outen, offset, false);
  557. owl_gpio_update_reg(gpio_base + port->inen, offset, true);
  558. raw_spin_unlock_irqrestore(&pctrl->lock, flags);
  559. return 0;
  560. }
  561. static int owl_gpio_direction_output(struct gpio_chip *chip,
  562. unsigned int offset, int value)
  563. {
  564. struct owl_pinctrl *pctrl = gpiochip_get_data(chip);
  565. const struct owl_gpio_port *port;
  566. void __iomem *gpio_base;
  567. unsigned long flags;
  568. port = owl_gpio_get_port(pctrl, &offset);
  569. if (WARN_ON(port == NULL))
  570. return -ENODEV;
  571. gpio_base = pctrl->base + port->offset;
  572. raw_spin_lock_irqsave(&pctrl->lock, flags);
  573. owl_gpio_update_reg(gpio_base + port->inen, offset, false);
  574. owl_gpio_update_reg(gpio_base + port->outen, offset, true);
  575. owl_gpio_update_reg(gpio_base + port->dat, offset, value);
  576. raw_spin_unlock_irqrestore(&pctrl->lock, flags);
  577. return 0;
  578. }
  579. static void irq_set_type(struct owl_pinctrl *pctrl, int gpio, unsigned int type)
  580. {
  581. const struct owl_gpio_port *port;
  582. void __iomem *gpio_base;
  583. unsigned long flags;
  584. unsigned int offset, value, irq_type = 0;
  585. switch (type) {
  586. case IRQ_TYPE_EDGE_BOTH:
  587. /*
  588. * Since the hardware doesn't support interrupts on both edges,
  589. * emulate it in the software by setting the single edge
  590. * interrupt and switching to the opposite edge while ACKing
  591. * the interrupt
  592. */
  593. if (owl_gpio_get(&pctrl->chip, gpio))
  594. irq_type = OWL_GPIO_INT_EDGE_FALLING;
  595. else
  596. irq_type = OWL_GPIO_INT_EDGE_RISING;
  597. break;
  598. case IRQ_TYPE_EDGE_RISING:
  599. irq_type = OWL_GPIO_INT_EDGE_RISING;
  600. break;
  601. case IRQ_TYPE_EDGE_FALLING:
  602. irq_type = OWL_GPIO_INT_EDGE_FALLING;
  603. break;
  604. case IRQ_TYPE_LEVEL_HIGH:
  605. irq_type = OWL_GPIO_INT_LEVEL_HIGH;
  606. break;
  607. case IRQ_TYPE_LEVEL_LOW:
  608. irq_type = OWL_GPIO_INT_LEVEL_LOW;
  609. break;
  610. default:
  611. break;
  612. }
  613. port = owl_gpio_get_port(pctrl, &gpio);
  614. if (WARN_ON(port == NULL))
  615. return;
  616. gpio_base = pctrl->base + port->offset;
  617. raw_spin_lock_irqsave(&pctrl->lock, flags);
  618. offset = (gpio < 16) ? 4 : 0;
  619. value = readl_relaxed(gpio_base + port->intc_type + offset);
  620. value &= ~(OWL_GPIO_INT_MASK << ((gpio % 16) * 2));
  621. value |= irq_type << ((gpio % 16) * 2);
  622. writel_relaxed(value, gpio_base + port->intc_type + offset);
  623. raw_spin_unlock_irqrestore(&pctrl->lock, flags);
  624. }
  625. static void owl_gpio_irq_mask(struct irq_data *data)
  626. {
  627. struct gpio_chip *gc = irq_data_get_irq_chip_data(data);
  628. struct owl_pinctrl *pctrl = gpiochip_get_data(gc);
  629. const struct owl_gpio_port *port;
  630. void __iomem *gpio_base;
  631. unsigned long flags;
  632. unsigned int gpio = data->hwirq;
  633. u32 val;
  634. port = owl_gpio_get_port(pctrl, &gpio);
  635. if (WARN_ON(port == NULL))
  636. return;
  637. gpio_base = pctrl->base + port->offset;
  638. raw_spin_lock_irqsave(&pctrl->lock, flags);
  639. owl_gpio_update_reg(gpio_base + port->intc_msk, gpio, false);
  640. /* disable port interrupt if no interrupt pending bit is active */
  641. val = readl_relaxed(gpio_base + port->intc_msk);
  642. if (val == 0)
  643. owl_gpio_update_reg(gpio_base + port->intc_ctl,
  644. OWL_GPIO_CTLR_ENABLE, false);
  645. raw_spin_unlock_irqrestore(&pctrl->lock, flags);
  646. }
  647. static void owl_gpio_irq_unmask(struct irq_data *data)
  648. {
  649. struct gpio_chip *gc = irq_data_get_irq_chip_data(data);
  650. struct owl_pinctrl *pctrl = gpiochip_get_data(gc);
  651. const struct owl_gpio_port *port;
  652. void __iomem *gpio_base;
  653. unsigned long flags;
  654. unsigned int gpio = data->hwirq;
  655. u32 value;
  656. port = owl_gpio_get_port(pctrl, &gpio);
  657. if (WARN_ON(port == NULL))
  658. return;
  659. gpio_base = pctrl->base + port->offset;
  660. raw_spin_lock_irqsave(&pctrl->lock, flags);
  661. /* enable port interrupt */
  662. value = readl_relaxed(gpio_base + port->intc_ctl);
  663. value |= BIT(OWL_GPIO_CTLR_ENABLE) | BIT(OWL_GPIO_CTLR_SAMPLE_CLK_24M);
  664. writel_relaxed(value, gpio_base + port->intc_ctl);
  665. /* enable GPIO interrupt */
  666. owl_gpio_update_reg(gpio_base + port->intc_msk, gpio, true);
  667. raw_spin_unlock_irqrestore(&pctrl->lock, flags);
  668. }
  669. static void owl_gpio_irq_ack(struct irq_data *data)
  670. {
  671. struct gpio_chip *gc = irq_data_get_irq_chip_data(data);
  672. struct owl_pinctrl *pctrl = gpiochip_get_data(gc);
  673. const struct owl_gpio_port *port;
  674. void __iomem *gpio_base;
  675. unsigned long flags;
  676. unsigned int gpio = data->hwirq;
  677. /*
  678. * Switch the interrupt edge to the opposite edge of the interrupt
  679. * which got triggered for the case of emulating both edges
  680. */
  681. if (irqd_get_trigger_type(data) == IRQ_TYPE_EDGE_BOTH) {
  682. if (owl_gpio_get(gc, gpio))
  683. irq_set_type(pctrl, gpio, IRQ_TYPE_EDGE_FALLING);
  684. else
  685. irq_set_type(pctrl, gpio, IRQ_TYPE_EDGE_RISING);
  686. }
  687. port = owl_gpio_get_port(pctrl, &gpio);
  688. if (WARN_ON(port == NULL))
  689. return;
  690. gpio_base = pctrl->base + port->offset;
  691. raw_spin_lock_irqsave(&pctrl->lock, flags);
  692. owl_gpio_update_reg(gpio_base + port->intc_ctl,
  693. OWL_GPIO_CTLR_PENDING, true);
  694. raw_spin_unlock_irqrestore(&pctrl->lock, flags);
  695. }
  696. static int owl_gpio_irq_set_type(struct irq_data *data, unsigned int type)
  697. {
  698. struct gpio_chip *gc = irq_data_get_irq_chip_data(data);
  699. struct owl_pinctrl *pctrl = gpiochip_get_data(gc);
  700. if (type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH))
  701. irq_set_handler_locked(data, handle_level_irq);
  702. else
  703. irq_set_handler_locked(data, handle_edge_irq);
  704. irq_set_type(pctrl, data->hwirq, type);
  705. return 0;
  706. }
  707. static void owl_gpio_irq_handler(struct irq_desc *desc)
  708. {
  709. struct owl_pinctrl *pctrl = irq_desc_get_handler_data(desc);
  710. struct irq_chip *chip = irq_desc_get_chip(desc);
  711. struct irq_domain *domain = pctrl->chip.irq.domain;
  712. unsigned int parent = irq_desc_get_irq(desc);
  713. const struct owl_gpio_port *port;
  714. void __iomem *base;
  715. unsigned int pin, irq, offset = 0, i;
  716. unsigned long pending_irq;
  717. chained_irq_enter(chip, desc);
  718. for (i = 0; i < pctrl->soc->nports; i++) {
  719. port = &pctrl->soc->ports[i];
  720. base = pctrl->base + port->offset;
  721. /* skip ports that are not associated with this irq */
  722. if (parent != pctrl->irq[i])
  723. goto skip;
  724. pending_irq = readl_relaxed(base + port->intc_pd);
  725. for_each_set_bit(pin, &pending_irq, port->pins) {
  726. irq = irq_find_mapping(domain, offset + pin);
  727. generic_handle_irq(irq);
  728. /* clear pending interrupt */
  729. owl_gpio_update_reg(base + port->intc_pd, pin, true);
  730. }
  731. skip:
  732. offset += port->pins;
  733. }
  734. chained_irq_exit(chip, desc);
  735. }
  736. static int owl_gpio_init(struct owl_pinctrl *pctrl)
  737. {
  738. struct gpio_chip *chip;
  739. struct gpio_irq_chip *gpio_irq;
  740. int ret, i, j, offset;
  741. chip = &pctrl->chip;
  742. chip->base = -1;
  743. chip->ngpio = pctrl->soc->ngpios;
  744. chip->label = dev_name(pctrl->dev);
  745. chip->parent = pctrl->dev;
  746. chip->owner = THIS_MODULE;
  747. chip->of_node = pctrl->dev->of_node;
  748. pctrl->irq_chip.name = chip->of_node->name;
  749. pctrl->irq_chip.irq_ack = owl_gpio_irq_ack;
  750. pctrl->irq_chip.irq_mask = owl_gpio_irq_mask;
  751. pctrl->irq_chip.irq_unmask = owl_gpio_irq_unmask;
  752. pctrl->irq_chip.irq_set_type = owl_gpio_irq_set_type;
  753. gpio_irq = &chip->irq;
  754. gpio_irq->chip = &pctrl->irq_chip;
  755. gpio_irq->handler = handle_simple_irq;
  756. gpio_irq->default_type = IRQ_TYPE_NONE;
  757. gpio_irq->parent_handler = owl_gpio_irq_handler;
  758. gpio_irq->parent_handler_data = pctrl;
  759. gpio_irq->num_parents = pctrl->num_irq;
  760. gpio_irq->parents = pctrl->irq;
  761. gpio_irq->map = devm_kcalloc(pctrl->dev, chip->ngpio,
  762. sizeof(*gpio_irq->map), GFP_KERNEL);
  763. if (!gpio_irq->map)
  764. return -ENOMEM;
  765. for (i = 0, offset = 0; i < pctrl->soc->nports; i++) {
  766. const struct owl_gpio_port *port = &pctrl->soc->ports[i];
  767. for (j = 0; j < port->pins; j++)
  768. gpio_irq->map[offset + j] = gpio_irq->parents[i];
  769. offset += port->pins;
  770. }
  771. ret = gpiochip_add_data(&pctrl->chip, pctrl);
  772. if (ret) {
  773. dev_err(pctrl->dev, "failed to register gpiochip\n");
  774. return ret;
  775. }
  776. return 0;
  777. }
  778. int owl_pinctrl_probe(struct platform_device *pdev,
  779. struct owl_pinctrl_soc_data *soc_data)
  780. {
  781. struct resource *res;
  782. struct owl_pinctrl *pctrl;
  783. int ret, i;
  784. pctrl = devm_kzalloc(&pdev->dev, sizeof(*pctrl), GFP_KERNEL);
  785. if (!pctrl)
  786. return -ENOMEM;
  787. res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  788. pctrl->base = devm_ioremap_resource(&pdev->dev, res);
  789. if (IS_ERR(pctrl->base))
  790. return PTR_ERR(pctrl->base);
  791. /* enable GPIO/MFP clock */
  792. pctrl->clk = devm_clk_get(&pdev->dev, NULL);
  793. if (IS_ERR(pctrl->clk)) {
  794. dev_err(&pdev->dev, "no clock defined\n");
  795. return PTR_ERR(pctrl->clk);
  796. }
  797. ret = clk_prepare_enable(pctrl->clk);
  798. if (ret) {
  799. dev_err(&pdev->dev, "clk enable failed\n");
  800. return ret;
  801. }
  802. raw_spin_lock_init(&pctrl->lock);
  803. owl_pinctrl_desc.name = dev_name(&pdev->dev);
  804. owl_pinctrl_desc.pins = soc_data->pins;
  805. owl_pinctrl_desc.npins = soc_data->npins;
  806. pctrl->chip.direction_input = owl_gpio_direction_input;
  807. pctrl->chip.direction_output = owl_gpio_direction_output;
  808. pctrl->chip.get = owl_gpio_get;
  809. pctrl->chip.set = owl_gpio_set;
  810. pctrl->chip.request = owl_gpio_request;
  811. pctrl->chip.free = owl_gpio_free;
  812. pctrl->soc = soc_data;
  813. pctrl->dev = &pdev->dev;
  814. pctrl->pctrldev = devm_pinctrl_register(&pdev->dev,
  815. &owl_pinctrl_desc, pctrl);
  816. if (IS_ERR(pctrl->pctrldev)) {
  817. dev_err(&pdev->dev, "could not register Actions OWL pinmux driver\n");
  818. ret = PTR_ERR(pctrl->pctrldev);
  819. goto err_exit;
  820. }
  821. ret = platform_irq_count(pdev);
  822. if (ret < 0)
  823. goto err_exit;
  824. pctrl->num_irq = ret;
  825. pctrl->irq = devm_kcalloc(&pdev->dev, pctrl->num_irq,
  826. sizeof(*pctrl->irq), GFP_KERNEL);
  827. if (!pctrl->irq) {
  828. ret = -ENOMEM;
  829. goto err_exit;
  830. }
  831. for (i = 0; i < pctrl->num_irq ; i++) {
  832. ret = platform_get_irq(pdev, i);
  833. if (ret < 0)
  834. goto err_exit;
  835. pctrl->irq[i] = ret;
  836. }
  837. ret = owl_gpio_init(pctrl);
  838. if (ret)
  839. goto err_exit;
  840. platform_set_drvdata(pdev, pctrl);
  841. return 0;
  842. err_exit:
  843. clk_disable_unprepare(pctrl->clk);
  844. return ret;
  845. }