pinctrl-equilibrium.c 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960
  1. // SPDX-License-Identifier: GPL-2.0
  2. /* Copyright (C) 2019 Intel Corporation */
  3. #include <linux/gpio/driver.h>
  4. #include <linux/module.h>
  5. #include <linux/of.h>
  6. #include <linux/of_address.h>
  7. #include <linux/of_irq.h>
  8. #include <linux/pinctrl/pinctrl.h>
  9. #include <linux/pinctrl/pinconf.h>
  10. #include <linux/pinctrl/pinconf-generic.h>
  11. #include <linux/pinctrl/pinmux.h>
  12. #include <linux/platform_device.h>
  13. #include <linux/property.h>
  14. #include "core.h"
  15. #include "pinconf.h"
  16. #include "pinmux.h"
  17. #include "pinctrl-equilibrium.h"
  18. #define PIN_NAME_FMT "io-%d"
  19. #define PIN_NAME_LEN 10
  20. #define PAD_REG_OFF 0x100
  21. static void eqbr_gpio_disable_irq(struct irq_data *d)
  22. {
  23. struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
  24. struct eqbr_gpio_ctrl *gctrl = gpiochip_get_data(gc);
  25. unsigned int offset = irqd_to_hwirq(d);
  26. unsigned long flags;
  27. raw_spin_lock_irqsave(&gctrl->lock, flags);
  28. writel(BIT(offset), gctrl->membase + GPIO_IRNENCLR);
  29. raw_spin_unlock_irqrestore(&gctrl->lock, flags);
  30. }
  31. static void eqbr_gpio_enable_irq(struct irq_data *d)
  32. {
  33. struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
  34. struct eqbr_gpio_ctrl *gctrl = gpiochip_get_data(gc);
  35. unsigned int offset = irqd_to_hwirq(d);
  36. unsigned long flags;
  37. gc->direction_input(gc, offset);
  38. raw_spin_lock_irqsave(&gctrl->lock, flags);
  39. writel(BIT(offset), gctrl->membase + GPIO_IRNRNSET);
  40. raw_spin_unlock_irqrestore(&gctrl->lock, flags);
  41. }
  42. static void eqbr_gpio_ack_irq(struct irq_data *d)
  43. {
  44. struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
  45. struct eqbr_gpio_ctrl *gctrl = gpiochip_get_data(gc);
  46. unsigned int offset = irqd_to_hwirq(d);
  47. unsigned long flags;
  48. raw_spin_lock_irqsave(&gctrl->lock, flags);
  49. writel(BIT(offset), gctrl->membase + GPIO_IRNCR);
  50. raw_spin_unlock_irqrestore(&gctrl->lock, flags);
  51. }
  52. static void eqbr_gpio_mask_ack_irq(struct irq_data *d)
  53. {
  54. eqbr_gpio_disable_irq(d);
  55. eqbr_gpio_ack_irq(d);
  56. }
  57. static inline void eqbr_cfg_bit(void __iomem *addr,
  58. unsigned int offset, unsigned int set)
  59. {
  60. if (set)
  61. writel(readl(addr) | BIT(offset), addr);
  62. else
  63. writel(readl(addr) & ~BIT(offset), addr);
  64. }
  65. static int eqbr_irq_type_cfg(struct gpio_irq_type *type,
  66. struct eqbr_gpio_ctrl *gctrl,
  67. unsigned int offset)
  68. {
  69. unsigned long flags;
  70. raw_spin_lock_irqsave(&gctrl->lock, flags);
  71. eqbr_cfg_bit(gctrl->membase + GPIO_IRNCFG, offset, type->trig_type);
  72. eqbr_cfg_bit(gctrl->membase + GPIO_EXINTCR1, offset, type->trig_type);
  73. eqbr_cfg_bit(gctrl->membase + GPIO_EXINTCR0, offset, type->logic_type);
  74. raw_spin_unlock_irqrestore(&gctrl->lock, flags);
  75. return 0;
  76. }
  77. static int eqbr_gpio_set_irq_type(struct irq_data *d, unsigned int type)
  78. {
  79. struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
  80. struct eqbr_gpio_ctrl *gctrl = gpiochip_get_data(gc);
  81. unsigned int offset = irqd_to_hwirq(d);
  82. struct gpio_irq_type it;
  83. memset(&it, 0, sizeof(it));
  84. if ((type & IRQ_TYPE_SENSE_MASK) == IRQ_TYPE_NONE)
  85. return 0;
  86. switch (type) {
  87. case IRQ_TYPE_EDGE_RISING:
  88. it.trig_type = GPIO_EDGE_TRIG;
  89. it.edge_type = GPIO_SINGLE_EDGE;
  90. it.logic_type = GPIO_POSITIVE_TRIG;
  91. break;
  92. case IRQ_TYPE_EDGE_FALLING:
  93. it.trig_type = GPIO_EDGE_TRIG;
  94. it.edge_type = GPIO_SINGLE_EDGE;
  95. it.logic_type = GPIO_NEGATIVE_TRIG;
  96. break;
  97. case IRQ_TYPE_EDGE_BOTH:
  98. it.trig_type = GPIO_EDGE_TRIG;
  99. it.edge_type = GPIO_BOTH_EDGE;
  100. it.logic_type = GPIO_POSITIVE_TRIG;
  101. break;
  102. case IRQ_TYPE_LEVEL_HIGH:
  103. it.trig_type = GPIO_LEVEL_TRIG;
  104. it.edge_type = GPIO_SINGLE_EDGE;
  105. it.logic_type = GPIO_POSITIVE_TRIG;
  106. break;
  107. case IRQ_TYPE_LEVEL_LOW:
  108. it.trig_type = GPIO_LEVEL_TRIG;
  109. it.edge_type = GPIO_SINGLE_EDGE;
  110. it.logic_type = GPIO_NEGATIVE_TRIG;
  111. break;
  112. default:
  113. return -EINVAL;
  114. }
  115. eqbr_irq_type_cfg(&it, gctrl, offset);
  116. if (it.trig_type == GPIO_EDGE_TRIG)
  117. irq_set_handler_locked(d, handle_edge_irq);
  118. else
  119. irq_set_handler_locked(d, handle_level_irq);
  120. return 0;
  121. }
  122. static void eqbr_irq_handler(struct irq_desc *desc)
  123. {
  124. struct gpio_chip *gc = irq_desc_get_handler_data(desc);
  125. struct eqbr_gpio_ctrl *gctrl = gpiochip_get_data(gc);
  126. struct irq_chip *ic = irq_desc_get_chip(desc);
  127. unsigned long pins, offset;
  128. chained_irq_enter(ic, desc);
  129. pins = readl(gctrl->membase + GPIO_IRNCR);
  130. for_each_set_bit(offset, &pins, gc->ngpio)
  131. generic_handle_domain_irq(gc->irq.domain, offset);
  132. chained_irq_exit(ic, desc);
  133. }
  134. static int gpiochip_setup(struct device *dev, struct eqbr_gpio_ctrl *gctrl)
  135. {
  136. struct gpio_irq_chip *girq;
  137. struct gpio_chip *gc;
  138. gc = &gctrl->chip;
  139. gc->label = gctrl->name;
  140. gc->fwnode = gctrl->fwnode;
  141. if (!fwnode_property_read_bool(gctrl->fwnode, "interrupt-controller")) {
  142. dev_dbg(dev, "gc %s: doesn't act as interrupt controller!\n",
  143. gctrl->name);
  144. return 0;
  145. }
  146. gctrl->ic.name = "gpio_irq";
  147. gctrl->ic.irq_mask = eqbr_gpio_disable_irq;
  148. gctrl->ic.irq_unmask = eqbr_gpio_enable_irq;
  149. gctrl->ic.irq_ack = eqbr_gpio_ack_irq;
  150. gctrl->ic.irq_mask_ack = eqbr_gpio_mask_ack_irq;
  151. gctrl->ic.irq_set_type = eqbr_gpio_set_irq_type;
  152. girq = &gctrl->chip.irq;
  153. girq->chip = &gctrl->ic;
  154. girq->parent_handler = eqbr_irq_handler;
  155. girq->num_parents = 1;
  156. girq->parents = devm_kcalloc(dev, 1, sizeof(*girq->parents), GFP_KERNEL);
  157. if (!girq->parents)
  158. return -ENOMEM;
  159. girq->default_type = IRQ_TYPE_NONE;
  160. girq->handler = handle_bad_irq;
  161. girq->parents[0] = gctrl->virq;
  162. return 0;
  163. }
  164. static int gpiolib_reg(struct eqbr_pinctrl_drv_data *drvdata)
  165. {
  166. struct device *dev = drvdata->dev;
  167. struct eqbr_gpio_ctrl *gctrl;
  168. struct device_node *np;
  169. struct resource res;
  170. int i, ret;
  171. for (i = 0; i < drvdata->nr_gpio_ctrls; i++) {
  172. gctrl = drvdata->gpio_ctrls + i;
  173. np = to_of_node(gctrl->fwnode);
  174. gctrl->name = devm_kasprintf(dev, GFP_KERNEL, "gpiochip%d", i);
  175. if (!gctrl->name)
  176. return -ENOMEM;
  177. if (of_address_to_resource(np, 0, &res)) {
  178. dev_err(dev, "Failed to get GPIO register address\n");
  179. return -ENXIO;
  180. }
  181. gctrl->membase = devm_ioremap_resource(dev, &res);
  182. if (IS_ERR(gctrl->membase))
  183. return PTR_ERR(gctrl->membase);
  184. gctrl->virq = irq_of_parse_and_map(np, 0);
  185. if (!gctrl->virq) {
  186. dev_err(dev, "%s: failed to parse and map irq\n",
  187. gctrl->name);
  188. return -ENXIO;
  189. }
  190. raw_spin_lock_init(&gctrl->lock);
  191. ret = bgpio_init(&gctrl->chip, dev, gctrl->bank->nr_pins / 8,
  192. gctrl->membase + GPIO_IN,
  193. gctrl->membase + GPIO_OUTSET,
  194. gctrl->membase + GPIO_OUTCLR,
  195. gctrl->membase + GPIO_DIR,
  196. NULL, 0);
  197. if (ret) {
  198. dev_err(dev, "unable to init generic GPIO\n");
  199. return ret;
  200. }
  201. ret = gpiochip_setup(dev, gctrl);
  202. if (ret)
  203. return ret;
  204. ret = devm_gpiochip_add_data(dev, &gctrl->chip, gctrl);
  205. if (ret)
  206. return ret;
  207. }
  208. return 0;
  209. }
  210. static inline struct eqbr_pin_bank
  211. *find_pinbank_via_pin(struct eqbr_pinctrl_drv_data *pctl, unsigned int pin)
  212. {
  213. struct eqbr_pin_bank *bank;
  214. int i;
  215. for (i = 0; i < pctl->nr_banks; i++) {
  216. bank = &pctl->pin_banks[i];
  217. if (pin >= bank->pin_base &&
  218. (pin - bank->pin_base) < bank->nr_pins)
  219. return bank;
  220. }
  221. return NULL;
  222. }
  223. static const struct pinctrl_ops eqbr_pctl_ops = {
  224. .get_groups_count = pinctrl_generic_get_group_count,
  225. .get_group_name = pinctrl_generic_get_group_name,
  226. .get_group_pins = pinctrl_generic_get_group_pins,
  227. .dt_node_to_map = pinconf_generic_dt_node_to_map_all,
  228. .dt_free_map = pinconf_generic_dt_free_map,
  229. };
  230. static int eqbr_set_pin_mux(struct eqbr_pinctrl_drv_data *pctl,
  231. unsigned int pmx, unsigned int pin)
  232. {
  233. struct eqbr_pin_bank *bank;
  234. unsigned long flags;
  235. unsigned int offset;
  236. void __iomem *mem;
  237. bank = find_pinbank_via_pin(pctl, pin);
  238. if (!bank) {
  239. dev_err(pctl->dev, "Couldn't find pin bank for pin %u\n", pin);
  240. return -ENODEV;
  241. }
  242. mem = bank->membase;
  243. offset = pin - bank->pin_base;
  244. if (!(bank->aval_pinmap & BIT(offset))) {
  245. dev_err(pctl->dev,
  246. "PIN: %u is not valid, pinbase: %u, bitmap: %u\n",
  247. pin, bank->pin_base, bank->aval_pinmap);
  248. return -ENODEV;
  249. }
  250. raw_spin_lock_irqsave(&pctl->lock, flags);
  251. writel(pmx, mem + (offset * 4));
  252. raw_spin_unlock_irqrestore(&pctl->lock, flags);
  253. return 0;
  254. }
  255. static int eqbr_pinmux_set_mux(struct pinctrl_dev *pctldev,
  256. unsigned int selector, unsigned int group)
  257. {
  258. struct eqbr_pinctrl_drv_data *pctl = pinctrl_dev_get_drvdata(pctldev);
  259. struct function_desc *func;
  260. struct group_desc *grp;
  261. unsigned int *pinmux;
  262. int i;
  263. func = pinmux_generic_get_function(pctldev, selector);
  264. if (!func)
  265. return -EINVAL;
  266. grp = pinctrl_generic_get_group(pctldev, group);
  267. if (!grp)
  268. return -EINVAL;
  269. pinmux = grp->data;
  270. for (i = 0; i < grp->num_pins; i++)
  271. eqbr_set_pin_mux(pctl, pinmux[i], grp->pins[i]);
  272. return 0;
  273. }
  274. static int eqbr_pinmux_gpio_request(struct pinctrl_dev *pctldev,
  275. struct pinctrl_gpio_range *range,
  276. unsigned int pin)
  277. {
  278. struct eqbr_pinctrl_drv_data *pctl = pinctrl_dev_get_drvdata(pctldev);
  279. return eqbr_set_pin_mux(pctl, EQBR_GPIO_MODE, pin);
  280. }
  281. static const struct pinmux_ops eqbr_pinmux_ops = {
  282. .get_functions_count = pinmux_generic_get_function_count,
  283. .get_function_name = pinmux_generic_get_function_name,
  284. .get_function_groups = pinmux_generic_get_function_groups,
  285. .set_mux = eqbr_pinmux_set_mux,
  286. .gpio_request_enable = eqbr_pinmux_gpio_request,
  287. .strict = true,
  288. };
  289. static int get_drv_cur(void __iomem *mem, unsigned int offset)
  290. {
  291. unsigned int idx = offset / DRV_CUR_PINS; /* 0-15, 16-31 per register*/
  292. unsigned int pin_offset = offset % DRV_CUR_PINS;
  293. return PARSE_DRV_CURRENT(readl(mem + REG_DRCC(idx)), pin_offset);
  294. }
  295. static struct eqbr_gpio_ctrl
  296. *get_gpio_ctrls_via_bank(struct eqbr_pinctrl_drv_data *pctl,
  297. struct eqbr_pin_bank *bank)
  298. {
  299. int i;
  300. for (i = 0; i < pctl->nr_gpio_ctrls; i++) {
  301. if (pctl->gpio_ctrls[i].bank == bank)
  302. return &pctl->gpio_ctrls[i];
  303. }
  304. return NULL;
  305. }
  306. static int eqbr_pinconf_get(struct pinctrl_dev *pctldev, unsigned int pin,
  307. unsigned long *config)
  308. {
  309. struct eqbr_pinctrl_drv_data *pctl = pinctrl_dev_get_drvdata(pctldev);
  310. enum pin_config_param param = pinconf_to_config_param(*config);
  311. struct eqbr_gpio_ctrl *gctrl;
  312. struct eqbr_pin_bank *bank;
  313. unsigned long flags;
  314. unsigned int offset;
  315. void __iomem *mem;
  316. u32 val;
  317. bank = find_pinbank_via_pin(pctl, pin);
  318. if (!bank) {
  319. dev_err(pctl->dev, "Couldn't find pin bank for pin %u\n", pin);
  320. return -ENODEV;
  321. }
  322. mem = bank->membase;
  323. offset = pin - bank->pin_base;
  324. if (!(bank->aval_pinmap & BIT(offset))) {
  325. dev_err(pctl->dev,
  326. "PIN: %u is not valid, pinbase: %u, bitmap: %u\n",
  327. pin, bank->pin_base, bank->aval_pinmap);
  328. return -ENODEV;
  329. }
  330. raw_spin_lock_irqsave(&pctl->lock, flags);
  331. switch (param) {
  332. case PIN_CONFIG_BIAS_PULL_UP:
  333. val = !!(readl(mem + REG_PUEN) & BIT(offset));
  334. break;
  335. case PIN_CONFIG_BIAS_PULL_DOWN:
  336. val = !!(readl(mem + REG_PDEN) & BIT(offset));
  337. break;
  338. case PIN_CONFIG_DRIVE_OPEN_DRAIN:
  339. val = !!(readl(mem + REG_OD) & BIT(offset));
  340. break;
  341. case PIN_CONFIG_DRIVE_STRENGTH:
  342. val = get_drv_cur(mem, offset);
  343. break;
  344. case PIN_CONFIG_SLEW_RATE:
  345. val = !!(readl(mem + REG_SRC) & BIT(offset));
  346. break;
  347. case PIN_CONFIG_OUTPUT_ENABLE:
  348. gctrl = get_gpio_ctrls_via_bank(pctl, bank);
  349. if (!gctrl) {
  350. dev_err(pctl->dev, "Failed to find gpio via bank pinbase: %u, pin: %u\n",
  351. bank->pin_base, pin);
  352. raw_spin_unlock_irqrestore(&pctl->lock, flags);
  353. return -ENODEV;
  354. }
  355. val = !!(readl(gctrl->membase + GPIO_DIR) & BIT(offset));
  356. break;
  357. default:
  358. raw_spin_unlock_irqrestore(&pctl->lock, flags);
  359. return -ENOTSUPP;
  360. }
  361. raw_spin_unlock_irqrestore(&pctl->lock, flags);
  362. *config = pinconf_to_config_packed(param, val);
  363. ;
  364. return 0;
  365. }
  366. static int eqbr_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
  367. unsigned long *configs, unsigned int num_configs)
  368. {
  369. struct eqbr_pinctrl_drv_data *pctl = pinctrl_dev_get_drvdata(pctldev);
  370. struct eqbr_gpio_ctrl *gctrl;
  371. enum pin_config_param param;
  372. struct eqbr_pin_bank *bank;
  373. unsigned int val, offset;
  374. struct gpio_chip *gc;
  375. unsigned long flags;
  376. void __iomem *mem;
  377. u32 regval, mask;
  378. int i;
  379. for (i = 0; i < num_configs; i++) {
  380. param = pinconf_to_config_param(configs[i]);
  381. val = pinconf_to_config_argument(configs[i]);
  382. bank = find_pinbank_via_pin(pctl, pin);
  383. if (!bank) {
  384. dev_err(pctl->dev,
  385. "Couldn't find pin bank for pin %u\n", pin);
  386. return -ENODEV;
  387. }
  388. mem = bank->membase;
  389. offset = pin - bank->pin_base;
  390. switch (param) {
  391. case PIN_CONFIG_BIAS_PULL_UP:
  392. mem += REG_PUEN;
  393. mask = BIT(offset);
  394. break;
  395. case PIN_CONFIG_BIAS_PULL_DOWN:
  396. mem += REG_PDEN;
  397. mask = BIT(offset);
  398. break;
  399. case PIN_CONFIG_DRIVE_OPEN_DRAIN:
  400. mem += REG_OD;
  401. mask = BIT(offset);
  402. break;
  403. case PIN_CONFIG_DRIVE_STRENGTH:
  404. mem += REG_DRCC(offset / DRV_CUR_PINS);
  405. offset = (offset % DRV_CUR_PINS) * 2;
  406. mask = GENMASK(1, 0) << offset;
  407. break;
  408. case PIN_CONFIG_SLEW_RATE:
  409. mem += REG_SRC;
  410. mask = BIT(offset);
  411. break;
  412. case PIN_CONFIG_OUTPUT_ENABLE:
  413. gctrl = get_gpio_ctrls_via_bank(pctl, bank);
  414. if (!gctrl) {
  415. dev_err(pctl->dev, "Failed to find gpio via bank pinbase: %u, pin: %u\n",
  416. bank->pin_base, pin);
  417. return -ENODEV;
  418. }
  419. gc = &gctrl->chip;
  420. gc->direction_output(gc, offset, 0);
  421. continue;
  422. default:
  423. return -ENOTSUPP;
  424. }
  425. raw_spin_lock_irqsave(&pctl->lock, flags);
  426. regval = readl(mem);
  427. regval = (regval & ~mask) | ((val << offset) & mask);
  428. writel(regval, mem);
  429. raw_spin_unlock_irqrestore(&pctl->lock, flags);
  430. }
  431. return 0;
  432. }
  433. static int eqbr_pinconf_group_get(struct pinctrl_dev *pctldev,
  434. unsigned int group, unsigned long *config)
  435. {
  436. unsigned int i, npins, old = 0;
  437. const unsigned int *pins;
  438. int ret;
  439. ret = pinctrl_generic_get_group_pins(pctldev, group, &pins, &npins);
  440. if (ret)
  441. return ret;
  442. for (i = 0; i < npins; i++) {
  443. if (eqbr_pinconf_get(pctldev, pins[i], config))
  444. return -ENOTSUPP;
  445. if (i && old != *config)
  446. return -ENOTSUPP;
  447. old = *config;
  448. }
  449. return 0;
  450. }
  451. static int eqbr_pinconf_group_set(struct pinctrl_dev *pctldev,
  452. unsigned int group, unsigned long *configs,
  453. unsigned int num_configs)
  454. {
  455. const unsigned int *pins;
  456. unsigned int i, npins;
  457. int ret;
  458. ret = pinctrl_generic_get_group_pins(pctldev, group, &pins, &npins);
  459. if (ret)
  460. return ret;
  461. for (i = 0; i < npins; i++) {
  462. ret = eqbr_pinconf_set(pctldev, pins[i], configs, num_configs);
  463. if (ret)
  464. return ret;
  465. }
  466. return 0;
  467. }
  468. static const struct pinconf_ops eqbr_pinconf_ops = {
  469. .is_generic = true,
  470. .pin_config_get = eqbr_pinconf_get,
  471. .pin_config_set = eqbr_pinconf_set,
  472. .pin_config_group_get = eqbr_pinconf_group_get,
  473. .pin_config_group_set = eqbr_pinconf_group_set,
  474. .pin_config_config_dbg_show = pinconf_generic_dump_config,
  475. };
  476. static bool is_func_exist(struct eqbr_pmx_func *funcs, const char *name,
  477. unsigned int nr_funcs, unsigned int *idx)
  478. {
  479. int i;
  480. if (!funcs)
  481. return false;
  482. for (i = 0; i < nr_funcs; i++) {
  483. if (funcs[i].name && !strcmp(funcs[i].name, name)) {
  484. *idx = i;
  485. return true;
  486. }
  487. }
  488. return false;
  489. }
  490. static int funcs_utils(struct device *dev, struct eqbr_pmx_func *funcs,
  491. unsigned int *nr_funcs, funcs_util_ops op)
  492. {
  493. struct device_node *node = dev->of_node;
  494. struct device_node *np;
  495. struct property *prop;
  496. const char *fn_name;
  497. unsigned int fid;
  498. int i, j;
  499. i = 0;
  500. for_each_child_of_node(node, np) {
  501. prop = of_find_property(np, "groups", NULL);
  502. if (!prop)
  503. continue;
  504. if (of_property_read_string(np, "function", &fn_name)) {
  505. /* some groups may not have function, it's OK */
  506. dev_dbg(dev, "Group %s: not function binded!\n",
  507. (char *)prop->value);
  508. continue;
  509. }
  510. switch (op) {
  511. case OP_COUNT_NR_FUNCS:
  512. if (!is_func_exist(funcs, fn_name, *nr_funcs, &fid))
  513. *nr_funcs = *nr_funcs + 1;
  514. break;
  515. case OP_ADD_FUNCS:
  516. if (!is_func_exist(funcs, fn_name, *nr_funcs, &fid))
  517. funcs[i].name = fn_name;
  518. break;
  519. case OP_COUNT_NR_FUNC_GRPS:
  520. if (is_func_exist(funcs, fn_name, *nr_funcs, &fid))
  521. funcs[fid].nr_groups++;
  522. break;
  523. case OP_ADD_FUNC_GRPS:
  524. if (is_func_exist(funcs, fn_name, *nr_funcs, &fid)) {
  525. for (j = 0; j < funcs[fid].nr_groups; j++)
  526. if (!funcs[fid].groups[j])
  527. break;
  528. funcs[fid].groups[j] = prop->value;
  529. }
  530. break;
  531. default:
  532. of_node_put(np);
  533. return -EINVAL;
  534. }
  535. i++;
  536. }
  537. return 0;
  538. }
  539. static int eqbr_build_functions(struct eqbr_pinctrl_drv_data *drvdata)
  540. {
  541. struct device *dev = drvdata->dev;
  542. struct eqbr_pmx_func *funcs = NULL;
  543. unsigned int nr_funcs = 0;
  544. int i, ret;
  545. ret = funcs_utils(dev, funcs, &nr_funcs, OP_COUNT_NR_FUNCS);
  546. if (ret)
  547. return ret;
  548. funcs = devm_kcalloc(dev, nr_funcs, sizeof(*funcs), GFP_KERNEL);
  549. if (!funcs)
  550. return -ENOMEM;
  551. ret = funcs_utils(dev, funcs, &nr_funcs, OP_ADD_FUNCS);
  552. if (ret)
  553. return ret;
  554. ret = funcs_utils(dev, funcs, &nr_funcs, OP_COUNT_NR_FUNC_GRPS);
  555. if (ret)
  556. return ret;
  557. for (i = 0; i < nr_funcs; i++) {
  558. if (!funcs[i].nr_groups)
  559. continue;
  560. funcs[i].groups = devm_kcalloc(dev, funcs[i].nr_groups,
  561. sizeof(*(funcs[i].groups)),
  562. GFP_KERNEL);
  563. if (!funcs[i].groups)
  564. return -ENOMEM;
  565. }
  566. ret = funcs_utils(dev, funcs, &nr_funcs, OP_ADD_FUNC_GRPS);
  567. if (ret)
  568. return ret;
  569. for (i = 0; i < nr_funcs; i++) {
  570. /* Ignore the same function with multiple groups */
  571. if (funcs[i].name == NULL)
  572. continue;
  573. ret = pinmux_generic_add_function(drvdata->pctl_dev,
  574. funcs[i].name,
  575. funcs[i].groups,
  576. funcs[i].nr_groups,
  577. drvdata);
  578. if (ret < 0) {
  579. dev_err(dev, "Failed to register function %s\n",
  580. funcs[i].name);
  581. return ret;
  582. }
  583. }
  584. return 0;
  585. }
  586. static int eqbr_build_groups(struct eqbr_pinctrl_drv_data *drvdata)
  587. {
  588. struct device *dev = drvdata->dev;
  589. struct device_node *node = dev->of_node;
  590. unsigned int *pinmux, pin_id, pinmux_id;
  591. struct group_desc group;
  592. struct device_node *np;
  593. struct property *prop;
  594. int j, err;
  595. for_each_child_of_node(node, np) {
  596. prop = of_find_property(np, "groups", NULL);
  597. if (!prop)
  598. continue;
  599. group.num_pins = of_property_count_u32_elems(np, "pins");
  600. if (group.num_pins < 0) {
  601. dev_err(dev, "No pins in the group: %s\n", prop->name);
  602. of_node_put(np);
  603. return -EINVAL;
  604. }
  605. group.name = prop->value;
  606. group.pins = devm_kcalloc(dev, group.num_pins,
  607. sizeof(*(group.pins)), GFP_KERNEL);
  608. if (!group.pins) {
  609. of_node_put(np);
  610. return -ENOMEM;
  611. }
  612. pinmux = devm_kcalloc(dev, group.num_pins, sizeof(*pinmux),
  613. GFP_KERNEL);
  614. if (!pinmux) {
  615. of_node_put(np);
  616. return -ENOMEM;
  617. }
  618. for (j = 0; j < group.num_pins; j++) {
  619. if (of_property_read_u32_index(np, "pins", j, &pin_id)) {
  620. dev_err(dev, "Group %s: Read intel pins id failed\n",
  621. group.name);
  622. of_node_put(np);
  623. return -EINVAL;
  624. }
  625. if (pin_id >= drvdata->pctl_desc.npins) {
  626. dev_err(dev, "Group %s: Invalid pin ID, idx: %d, pin %u\n",
  627. group.name, j, pin_id);
  628. of_node_put(np);
  629. return -EINVAL;
  630. }
  631. group.pins[j] = pin_id;
  632. if (of_property_read_u32_index(np, "pinmux", j, &pinmux_id)) {
  633. dev_err(dev, "Group %s: Read intel pinmux id failed\n",
  634. group.name);
  635. of_node_put(np);
  636. return -EINVAL;
  637. }
  638. pinmux[j] = pinmux_id;
  639. }
  640. err = pinctrl_generic_add_group(drvdata->pctl_dev, group.name,
  641. group.pins, group.num_pins,
  642. pinmux);
  643. if (err < 0) {
  644. dev_err(dev, "Failed to register group %s\n", group.name);
  645. of_node_put(np);
  646. return err;
  647. }
  648. memset(&group, 0, sizeof(group));
  649. pinmux = NULL;
  650. }
  651. return 0;
  652. }
  653. static int pinctrl_reg(struct eqbr_pinctrl_drv_data *drvdata)
  654. {
  655. struct pinctrl_desc *pctl_desc;
  656. struct pinctrl_pin_desc *pdesc;
  657. struct device *dev;
  658. unsigned int nr_pins;
  659. char *pin_names;
  660. int i, ret;
  661. dev = drvdata->dev;
  662. pctl_desc = &drvdata->pctl_desc;
  663. pctl_desc->name = "eqbr-pinctrl";
  664. pctl_desc->owner = THIS_MODULE;
  665. pctl_desc->pctlops = &eqbr_pctl_ops;
  666. pctl_desc->pmxops = &eqbr_pinmux_ops;
  667. pctl_desc->confops = &eqbr_pinconf_ops;
  668. raw_spin_lock_init(&drvdata->lock);
  669. for (i = 0, nr_pins = 0; i < drvdata->nr_banks; i++)
  670. nr_pins += drvdata->pin_banks[i].nr_pins;
  671. pdesc = devm_kcalloc(dev, nr_pins, sizeof(*pdesc), GFP_KERNEL);
  672. if (!pdesc)
  673. return -ENOMEM;
  674. pin_names = devm_kcalloc(dev, nr_pins, PIN_NAME_LEN, GFP_KERNEL);
  675. if (!pin_names)
  676. return -ENOMEM;
  677. for (i = 0; i < nr_pins; i++) {
  678. sprintf(pin_names, PIN_NAME_FMT, i);
  679. pdesc[i].number = i;
  680. pdesc[i].name = pin_names;
  681. pin_names += PIN_NAME_LEN;
  682. }
  683. pctl_desc->pins = pdesc;
  684. pctl_desc->npins = nr_pins;
  685. dev_dbg(dev, "pinctrl total pin number: %u\n", nr_pins);
  686. ret = devm_pinctrl_register_and_init(dev, pctl_desc, drvdata,
  687. &drvdata->pctl_dev);
  688. if (ret)
  689. return ret;
  690. ret = eqbr_build_groups(drvdata);
  691. if (ret) {
  692. dev_err(dev, "Failed to build groups\n");
  693. return ret;
  694. }
  695. ret = eqbr_build_functions(drvdata);
  696. if (ret) {
  697. dev_err(dev, "Failed to build functions\n");
  698. return ret;
  699. }
  700. return pinctrl_enable(drvdata->pctl_dev);
  701. }
  702. static int pinbank_init(struct device_node *np,
  703. struct eqbr_pinctrl_drv_data *drvdata,
  704. struct eqbr_pin_bank *bank, unsigned int id)
  705. {
  706. struct device *dev = drvdata->dev;
  707. struct of_phandle_args spec;
  708. int ret;
  709. bank->membase = drvdata->membase + id * PAD_REG_OFF;
  710. ret = of_parse_phandle_with_fixed_args(np, "gpio-ranges", 3, 0, &spec);
  711. if (ret) {
  712. dev_err(dev, "gpio-range not available!\n");
  713. return ret;
  714. }
  715. bank->pin_base = spec.args[1];
  716. bank->nr_pins = spec.args[2];
  717. bank->aval_pinmap = readl(bank->membase + REG_AVAIL);
  718. bank->id = id;
  719. dev_dbg(dev, "pinbank id: %d, reg: %px, pinbase: %u, pin number: %u, pinmap: 0x%x\n",
  720. id, bank->membase, bank->pin_base,
  721. bank->nr_pins, bank->aval_pinmap);
  722. return ret;
  723. }
  724. static int pinbank_probe(struct eqbr_pinctrl_drv_data *drvdata)
  725. {
  726. struct device *dev = drvdata->dev;
  727. struct device_node *np_gpio;
  728. struct eqbr_gpio_ctrl *gctrls;
  729. struct eqbr_pin_bank *banks;
  730. int i, nr_gpio;
  731. /* Count gpio bank number */
  732. nr_gpio = 0;
  733. for_each_node_by_name(np_gpio, "gpio") {
  734. if (of_device_is_available(np_gpio))
  735. nr_gpio++;
  736. }
  737. if (!nr_gpio) {
  738. dev_err(dev, "NO pin bank available!\n");
  739. return -ENODEV;
  740. }
  741. /* Count pin bank number and gpio controller number */
  742. banks = devm_kcalloc(dev, nr_gpio, sizeof(*banks), GFP_KERNEL);
  743. if (!banks)
  744. return -ENOMEM;
  745. gctrls = devm_kcalloc(dev, nr_gpio, sizeof(*gctrls), GFP_KERNEL);
  746. if (!gctrls)
  747. return -ENOMEM;
  748. dev_dbg(dev, "found %d gpio controller!\n", nr_gpio);
  749. /* Initialize Pin bank */
  750. i = 0;
  751. for_each_node_by_name(np_gpio, "gpio") {
  752. if (!of_device_is_available(np_gpio))
  753. continue;
  754. pinbank_init(np_gpio, drvdata, banks + i, i);
  755. gctrls[i].fwnode = of_fwnode_handle(np_gpio);
  756. gctrls[i].bank = banks + i;
  757. i++;
  758. }
  759. drvdata->pin_banks = banks;
  760. drvdata->nr_banks = nr_gpio;
  761. drvdata->gpio_ctrls = gctrls;
  762. drvdata->nr_gpio_ctrls = nr_gpio;
  763. return 0;
  764. }
  765. static int eqbr_pinctrl_probe(struct platform_device *pdev)
  766. {
  767. struct eqbr_pinctrl_drv_data *drvdata;
  768. struct device *dev = &pdev->dev;
  769. int ret;
  770. drvdata = devm_kzalloc(dev, sizeof(*drvdata), GFP_KERNEL);
  771. if (!drvdata)
  772. return -ENOMEM;
  773. drvdata->dev = dev;
  774. drvdata->membase = devm_platform_ioremap_resource(pdev, 0);
  775. if (IS_ERR(drvdata->membase))
  776. return PTR_ERR(drvdata->membase);
  777. ret = pinbank_probe(drvdata);
  778. if (ret)
  779. return ret;
  780. ret = pinctrl_reg(drvdata);
  781. if (ret)
  782. return ret;
  783. ret = gpiolib_reg(drvdata);
  784. if (ret)
  785. return ret;
  786. platform_set_drvdata(pdev, drvdata);
  787. return 0;
  788. }
  789. static const struct of_device_id eqbr_pinctrl_dt_match[] = {
  790. { .compatible = "intel,lgm-io" },
  791. {}
  792. };
  793. MODULE_DEVICE_TABLE(of, eqbr_pinctrl_dt_match);
  794. static struct platform_driver eqbr_pinctrl_driver = {
  795. .probe = eqbr_pinctrl_probe,
  796. .driver = {
  797. .name = "eqbr-pinctrl",
  798. .of_match_table = eqbr_pinctrl_dt_match,
  799. },
  800. };
  801. module_platform_driver(eqbr_pinctrl_driver);
  802. MODULE_AUTHOR("Zhu Yixin <[email protected]>, Rahul Tanwar <[email protected]>");
  803. MODULE_DESCRIPTION("Pinctrl Driver for LGM SoC (Equilibrium)");
  804. MODULE_LICENSE("GPL v2");