pinctrl-equilibrium.c 23 KB

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