pinctrl-equilibrium.c 24 KB

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