core.c 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630
  1. /*
  2. * Core driver for the pin control subsystem
  3. *
  4. * Copyright (C) 2011 ST-Ericsson SA
  5. * Written on behalf of Linaro for ST-Ericsson
  6. * Based on bits of regulator core, gpio core and clk core
  7. *
  8. * Author: Linus Walleij <linus.walleij@linaro.org>
  9. *
  10. * License terms: GNU General Public License (GPL) version 2
  11. */
  12. #define pr_fmt(fmt) "pinctrl core: " fmt
  13. #include <linux/kernel.h>
  14. #include <linux/export.h>
  15. #include <linux/init.h>
  16. #include <linux/device.h>
  17. #include <linux/slab.h>
  18. #include <linux/radix-tree.h>
  19. #include <linux/err.h>
  20. #include <linux/list.h>
  21. #include <linux/mutex.h>
  22. #include <linux/spinlock.h>
  23. #include <linux/sysfs.h>
  24. #include <linux/debugfs.h>
  25. #include <linux/seq_file.h>
  26. #include <linux/pinctrl/pinctrl.h>
  27. #include <linux/pinctrl/machine.h>
  28. #include "core.h"
  29. #include "pinmux.h"
  30. /* Global list of pin control devices */
  31. static DEFINE_MUTEX(pinctrldev_list_mutex);
  32. static LIST_HEAD(pinctrldev_list);
  33. static void pinctrl_dev_release(struct device *dev)
  34. {
  35. struct pinctrl_dev *pctldev = dev_get_drvdata(dev);
  36. kfree(pctldev);
  37. }
  38. const char *pinctrl_dev_get_name(struct pinctrl_dev *pctldev)
  39. {
  40. /* We're not allowed to register devices without name */
  41. return pctldev->desc->name;
  42. }
  43. EXPORT_SYMBOL_GPL(pinctrl_dev_get_name);
  44. void *pinctrl_dev_get_drvdata(struct pinctrl_dev *pctldev)
  45. {
  46. return pctldev->driver_data;
  47. }
  48. EXPORT_SYMBOL_GPL(pinctrl_dev_get_drvdata);
  49. /**
  50. * get_pinctrl_dev_from_dev() - look up pin controller device
  51. * @dev: a device pointer, this may be NULL but then devname needs to be
  52. * defined instead
  53. * @devname: the name of a device instance, as returned by dev_name(), this
  54. * may be NULL but then dev needs to be defined instead
  55. *
  56. * Looks up a pin control device matching a certain device name or pure device
  57. * pointer, the pure device pointer will take precedence.
  58. */
  59. struct pinctrl_dev *get_pinctrl_dev_from_dev(struct device *dev,
  60. const char *devname)
  61. {
  62. struct pinctrl_dev *pctldev = NULL;
  63. bool found = false;
  64. mutex_lock(&pinctrldev_list_mutex);
  65. list_for_each_entry(pctldev, &pinctrldev_list, node) {
  66. if (dev && &pctldev->dev == dev) {
  67. /* Matched on device pointer */
  68. found = true;
  69. break;
  70. }
  71. if (devname &&
  72. !strcmp(dev_name(&pctldev->dev), devname)) {
  73. /* Matched on device name */
  74. found = true;
  75. break;
  76. }
  77. }
  78. mutex_unlock(&pinctrldev_list_mutex);
  79. return found ? pctldev : NULL;
  80. }
  81. struct pin_desc *pin_desc_get(struct pinctrl_dev *pctldev, int pin)
  82. {
  83. struct pin_desc *pindesc;
  84. unsigned long flags;
  85. spin_lock_irqsave(&pctldev->pin_desc_tree_lock, flags);
  86. pindesc = radix_tree_lookup(&pctldev->pin_desc_tree, pin);
  87. spin_unlock_irqrestore(&pctldev->pin_desc_tree_lock, flags);
  88. return pindesc;
  89. }
  90. /**
  91. * pin_is_valid() - check if pin exists on controller
  92. * @pctldev: the pin control device to check the pin on
  93. * @pin: pin to check, use the local pin controller index number
  94. *
  95. * This tells us whether a certain pin exist on a certain pin controller or
  96. * not. Pin lists may be sparse, so some pins may not exist.
  97. */
  98. bool pin_is_valid(struct pinctrl_dev *pctldev, int pin)
  99. {
  100. struct pin_desc *pindesc;
  101. if (pin < 0)
  102. return false;
  103. pindesc = pin_desc_get(pctldev, pin);
  104. if (pindesc == NULL)
  105. return false;
  106. return true;
  107. }
  108. EXPORT_SYMBOL_GPL(pin_is_valid);
  109. /* Deletes a range of pin descriptors */
  110. static void pinctrl_free_pindescs(struct pinctrl_dev *pctldev,
  111. const struct pinctrl_pin_desc *pins,
  112. unsigned num_pins)
  113. {
  114. int i;
  115. spin_lock(&pctldev->pin_desc_tree_lock);
  116. for (i = 0; i < num_pins; i++) {
  117. struct pin_desc *pindesc;
  118. pindesc = radix_tree_lookup(&pctldev->pin_desc_tree,
  119. pins[i].number);
  120. if (pindesc != NULL) {
  121. radix_tree_delete(&pctldev->pin_desc_tree,
  122. pins[i].number);
  123. }
  124. kfree(pindesc);
  125. }
  126. spin_unlock(&pctldev->pin_desc_tree_lock);
  127. }
  128. static int pinctrl_register_one_pin(struct pinctrl_dev *pctldev,
  129. unsigned number, const char *name)
  130. {
  131. struct pin_desc *pindesc;
  132. pindesc = pin_desc_get(pctldev, number);
  133. if (pindesc != NULL) {
  134. pr_err("pin %d already registered on %s\n", number,
  135. pctldev->desc->name);
  136. return -EINVAL;
  137. }
  138. pindesc = kzalloc(sizeof(*pindesc), GFP_KERNEL);
  139. if (pindesc == NULL)
  140. return -ENOMEM;
  141. spin_lock_init(&pindesc->lock);
  142. /* Set owner */
  143. pindesc->pctldev = pctldev;
  144. /* Copy basic pin info */
  145. pindesc->name = name;
  146. spin_lock(&pctldev->pin_desc_tree_lock);
  147. radix_tree_insert(&pctldev->pin_desc_tree, number, pindesc);
  148. spin_unlock(&pctldev->pin_desc_tree_lock);
  149. pr_debug("registered pin %d (%s) on %s\n",
  150. number, name ? name : "(unnamed)", pctldev->desc->name);
  151. return 0;
  152. }
  153. static int pinctrl_register_pins(struct pinctrl_dev *pctldev,
  154. struct pinctrl_pin_desc const *pins,
  155. unsigned num_descs)
  156. {
  157. unsigned i;
  158. int ret = 0;
  159. for (i = 0; i < num_descs; i++) {
  160. ret = pinctrl_register_one_pin(pctldev,
  161. pins[i].number, pins[i].name);
  162. if (ret)
  163. return ret;
  164. }
  165. return 0;
  166. }
  167. /**
  168. * pinctrl_match_gpio_range() - check if a certain GPIO pin is in range
  169. * @pctldev: pin controller device to check
  170. * @gpio: gpio pin to check taken from the global GPIO pin space
  171. *
  172. * Tries to match a GPIO pin number to the ranges handled by a certain pin
  173. * controller, return the range or NULL
  174. */
  175. static struct pinctrl_gpio_range *
  176. pinctrl_match_gpio_range(struct pinctrl_dev *pctldev, unsigned gpio)
  177. {
  178. struct pinctrl_gpio_range *range = NULL;
  179. /* Loop over the ranges */
  180. mutex_lock(&pctldev->gpio_ranges_lock);
  181. list_for_each_entry(range, &pctldev->gpio_ranges, node) {
  182. /* Check if we're in the valid range */
  183. if (gpio >= range->base &&
  184. gpio < range->base + range->npins) {
  185. mutex_unlock(&pctldev->gpio_ranges_lock);
  186. return range;
  187. }
  188. }
  189. mutex_unlock(&pctldev->gpio_ranges_lock);
  190. return NULL;
  191. }
  192. /**
  193. * pinctrl_get_device_gpio_range() - find device for GPIO range
  194. * @gpio: the pin to locate the pin controller for
  195. * @outdev: the pin control device if found
  196. * @outrange: the GPIO range if found
  197. *
  198. * Find the pin controller handling a certain GPIO pin from the pinspace of
  199. * the GPIO subsystem, return the device and the matching GPIO range. Returns
  200. * negative if the GPIO range could not be found in any device.
  201. */
  202. int pinctrl_get_device_gpio_range(unsigned gpio,
  203. struct pinctrl_dev **outdev,
  204. struct pinctrl_gpio_range **outrange)
  205. {
  206. struct pinctrl_dev *pctldev = NULL;
  207. /* Loop over the pin controllers */
  208. mutex_lock(&pinctrldev_list_mutex);
  209. list_for_each_entry(pctldev, &pinctrldev_list, node) {
  210. struct pinctrl_gpio_range *range;
  211. range = pinctrl_match_gpio_range(pctldev, gpio);
  212. if (range != NULL) {
  213. *outdev = pctldev;
  214. *outrange = range;
  215. mutex_unlock(&pinctrldev_list_mutex);
  216. return 0;
  217. }
  218. }
  219. mutex_unlock(&pinctrldev_list_mutex);
  220. return -EINVAL;
  221. }
  222. /**
  223. * pinctrl_add_gpio_range() - register a GPIO range for a controller
  224. * @pctldev: pin controller device to add the range to
  225. * @range: the GPIO range to add
  226. *
  227. * This adds a range of GPIOs to be handled by a certain pin controller. Call
  228. * this to register handled ranges after registering your pin controller.
  229. */
  230. void pinctrl_add_gpio_range(struct pinctrl_dev *pctldev,
  231. struct pinctrl_gpio_range *range)
  232. {
  233. mutex_lock(&pctldev->gpio_ranges_lock);
  234. list_add(&range->node, &pctldev->gpio_ranges);
  235. mutex_unlock(&pctldev->gpio_ranges_lock);
  236. }
  237. /**
  238. * pinctrl_remove_gpio_range() - remove a range of GPIOs fro a pin controller
  239. * @pctldev: pin controller device to remove the range from
  240. * @range: the GPIO range to remove
  241. */
  242. void pinctrl_remove_gpio_range(struct pinctrl_dev *pctldev,
  243. struct pinctrl_gpio_range *range)
  244. {
  245. mutex_lock(&pctldev->gpio_ranges_lock);
  246. list_del(&range->node);
  247. mutex_unlock(&pctldev->gpio_ranges_lock);
  248. }
  249. /**
  250. * pinctrl_get_group_selector() - returns the group selector for a group
  251. * @pctldev: the pin controller handling the group
  252. * @pin_group: the pin group to look up
  253. */
  254. int pinctrl_get_group_selector(struct pinctrl_dev *pctldev,
  255. const char *pin_group)
  256. {
  257. const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
  258. unsigned group_selector = 0;
  259. while (pctlops->list_groups(pctldev, group_selector) >= 0) {
  260. const char *gname = pctlops->get_group_name(pctldev,
  261. group_selector);
  262. if (!strcmp(gname, pin_group)) {
  263. dev_dbg(&pctldev->dev,
  264. "found group selector %u for %s\n",
  265. group_selector,
  266. pin_group);
  267. return group_selector;
  268. }
  269. group_selector++;
  270. }
  271. dev_err(&pctldev->dev, "does not have pin group %s\n",
  272. pin_group);
  273. return -EINVAL;
  274. }
  275. #ifdef CONFIG_DEBUG_FS
  276. static int pinctrl_pins_show(struct seq_file *s, void *what)
  277. {
  278. struct pinctrl_dev *pctldev = s->private;
  279. const struct pinctrl_ops *ops = pctldev->desc->pctlops;
  280. unsigned pin;
  281. seq_printf(s, "registered pins: %d\n", pctldev->desc->npins);
  282. seq_printf(s, "max pin number: %d\n", pctldev->desc->maxpin);
  283. /* The highest pin number need to be included in the loop, thus <= */
  284. for (pin = 0; pin <= pctldev->desc->maxpin; pin++) {
  285. struct pin_desc *desc;
  286. desc = pin_desc_get(pctldev, pin);
  287. /* Pin space may be sparse */
  288. if (desc == NULL)
  289. continue;
  290. seq_printf(s, "pin %d (%s) ", pin,
  291. desc->name ? desc->name : "unnamed");
  292. /* Driver-specific info per pin */
  293. if (ops->pin_dbg_show)
  294. ops->pin_dbg_show(pctldev, s, pin);
  295. seq_puts(s, "\n");
  296. }
  297. return 0;
  298. }
  299. static int pinctrl_groups_show(struct seq_file *s, void *what)
  300. {
  301. struct pinctrl_dev *pctldev = s->private;
  302. const struct pinctrl_ops *ops = pctldev->desc->pctlops;
  303. unsigned selector = 0;
  304. /* No grouping */
  305. if (!ops)
  306. return 0;
  307. seq_puts(s, "registered pin groups:\n");
  308. while (ops->list_groups(pctldev, selector) >= 0) {
  309. const unsigned *pins;
  310. unsigned num_pins;
  311. const char *gname = ops->get_group_name(pctldev, selector);
  312. int ret;
  313. int i;
  314. ret = ops->get_group_pins(pctldev, selector,
  315. &pins, &num_pins);
  316. if (ret)
  317. seq_printf(s, "%s [ERROR GETTING PINS]\n",
  318. gname);
  319. else {
  320. seq_printf(s, "group: %s, pins = [ ", gname);
  321. for (i = 0; i < num_pins; i++)
  322. seq_printf(s, "%d ", pins[i]);
  323. seq_puts(s, "]\n");
  324. }
  325. selector++;
  326. }
  327. return 0;
  328. }
  329. static int pinctrl_gpioranges_show(struct seq_file *s, void *what)
  330. {
  331. struct pinctrl_dev *pctldev = s->private;
  332. struct pinctrl_gpio_range *range = NULL;
  333. seq_puts(s, "GPIO ranges handled:\n");
  334. /* Loop over the ranges */
  335. mutex_lock(&pctldev->gpio_ranges_lock);
  336. list_for_each_entry(range, &pctldev->gpio_ranges, node) {
  337. seq_printf(s, "%u: %s [%u - %u]\n", range->id, range->name,
  338. range->base, (range->base + range->npins - 1));
  339. }
  340. mutex_unlock(&pctldev->gpio_ranges_lock);
  341. return 0;
  342. }
  343. static int pinctrl_devices_show(struct seq_file *s, void *what)
  344. {
  345. struct pinctrl_dev *pctldev;
  346. seq_puts(s, "name [pinmux]\n");
  347. mutex_lock(&pinctrldev_list_mutex);
  348. list_for_each_entry(pctldev, &pinctrldev_list, node) {
  349. seq_printf(s, "%s ", pctldev->desc->name);
  350. if (pctldev->desc->pmxops)
  351. seq_puts(s, "yes");
  352. else
  353. seq_puts(s, "no");
  354. seq_puts(s, "\n");
  355. }
  356. mutex_unlock(&pinctrldev_list_mutex);
  357. return 0;
  358. }
  359. static int pinctrl_pins_open(struct inode *inode, struct file *file)
  360. {
  361. return single_open(file, pinctrl_pins_show, inode->i_private);
  362. }
  363. static int pinctrl_groups_open(struct inode *inode, struct file *file)
  364. {
  365. return single_open(file, pinctrl_groups_show, inode->i_private);
  366. }
  367. static int pinctrl_gpioranges_open(struct inode *inode, struct file *file)
  368. {
  369. return single_open(file, pinctrl_gpioranges_show, inode->i_private);
  370. }
  371. static int pinctrl_devices_open(struct inode *inode, struct file *file)
  372. {
  373. return single_open(file, pinctrl_devices_show, NULL);
  374. }
  375. static const struct file_operations pinctrl_pins_ops = {
  376. .open = pinctrl_pins_open,
  377. .read = seq_read,
  378. .llseek = seq_lseek,
  379. .release = single_release,
  380. };
  381. static const struct file_operations pinctrl_groups_ops = {
  382. .open = pinctrl_groups_open,
  383. .read = seq_read,
  384. .llseek = seq_lseek,
  385. .release = single_release,
  386. };
  387. static const struct file_operations pinctrl_gpioranges_ops = {
  388. .open = pinctrl_gpioranges_open,
  389. .read = seq_read,
  390. .llseek = seq_lseek,
  391. .release = single_release,
  392. };
  393. static const struct file_operations pinctrl_devices_ops = {
  394. .open = pinctrl_devices_open,
  395. .read = seq_read,
  396. .llseek = seq_lseek,
  397. .release = single_release,
  398. };
  399. static struct dentry *debugfs_root;
  400. static void pinctrl_init_device_debugfs(struct pinctrl_dev *pctldev)
  401. {
  402. static struct dentry *device_root;
  403. device_root = debugfs_create_dir(dev_name(&pctldev->dev),
  404. debugfs_root);
  405. if (IS_ERR(device_root) || !device_root) {
  406. pr_warn("failed to create debugfs directory for %s\n",
  407. dev_name(&pctldev->dev));
  408. return;
  409. }
  410. debugfs_create_file("pins", S_IFREG | S_IRUGO,
  411. device_root, pctldev, &pinctrl_pins_ops);
  412. debugfs_create_file("pingroups", S_IFREG | S_IRUGO,
  413. device_root, pctldev, &pinctrl_groups_ops);
  414. debugfs_create_file("gpio-ranges", S_IFREG | S_IRUGO,
  415. device_root, pctldev, &pinctrl_gpioranges_ops);
  416. pinmux_init_device_debugfs(device_root, pctldev);
  417. }
  418. static void pinctrl_init_debugfs(void)
  419. {
  420. debugfs_root = debugfs_create_dir("pinctrl", NULL);
  421. if (IS_ERR(debugfs_root) || !debugfs_root) {
  422. pr_warn("failed to create debugfs directory\n");
  423. debugfs_root = NULL;
  424. return;
  425. }
  426. debugfs_create_file("pinctrl-devices", S_IFREG | S_IRUGO,
  427. debugfs_root, NULL, &pinctrl_devices_ops);
  428. pinmux_init_debugfs(debugfs_root);
  429. }
  430. #else /* CONFIG_DEBUG_FS */
  431. static void pinctrl_init_device_debugfs(struct pinctrl_dev *pctldev)
  432. {
  433. }
  434. static void pinctrl_init_debugfs(void)
  435. {
  436. }
  437. #endif
  438. /**
  439. * pinctrl_register() - register a pin controller device
  440. * @pctldesc: descriptor for this pin controller
  441. * @dev: parent device for this pin controller
  442. * @driver_data: private pin controller data for this pin controller
  443. */
  444. struct pinctrl_dev *pinctrl_register(struct pinctrl_desc *pctldesc,
  445. struct device *dev, void *driver_data)
  446. {
  447. static atomic_t pinmux_no = ATOMIC_INIT(0);
  448. struct pinctrl_dev *pctldev;
  449. int ret;
  450. if (pctldesc == NULL)
  451. return NULL;
  452. if (pctldesc->name == NULL)
  453. return NULL;
  454. /* If we're implementing pinmuxing, check the ops for sanity */
  455. if (pctldesc->pmxops) {
  456. ret = pinmux_check_ops(pctldesc->pmxops);
  457. if (ret) {
  458. pr_err("%s pinmux ops lacks necessary functions\n",
  459. pctldesc->name);
  460. return NULL;
  461. }
  462. }
  463. pctldev = kzalloc(sizeof(struct pinctrl_dev), GFP_KERNEL);
  464. if (pctldev == NULL)
  465. return NULL;
  466. /* Initialize pin control device struct */
  467. pctldev->owner = pctldesc->owner;
  468. pctldev->desc = pctldesc;
  469. pctldev->driver_data = driver_data;
  470. INIT_RADIX_TREE(&pctldev->pin_desc_tree, GFP_KERNEL);
  471. spin_lock_init(&pctldev->pin_desc_tree_lock);
  472. INIT_LIST_HEAD(&pctldev->gpio_ranges);
  473. mutex_init(&pctldev->gpio_ranges_lock);
  474. /* Register device */
  475. pctldev->dev.parent = dev;
  476. dev_set_name(&pctldev->dev, "pinctrl.%d",
  477. atomic_inc_return(&pinmux_no) - 1);
  478. pctldev->dev.release = pinctrl_dev_release;
  479. ret = device_register(&pctldev->dev);
  480. if (ret != 0) {
  481. pr_err("error in device registration\n");
  482. goto out_reg_dev_err;
  483. }
  484. dev_set_drvdata(&pctldev->dev, pctldev);
  485. /* Register all the pins */
  486. pr_debug("try to register %d pins on %s...\n",
  487. pctldesc->npins, pctldesc->name);
  488. ret = pinctrl_register_pins(pctldev, pctldesc->pins, pctldesc->npins);
  489. if (ret) {
  490. pr_err("error during pin registration\n");
  491. pinctrl_free_pindescs(pctldev, pctldesc->pins,
  492. pctldesc->npins);
  493. goto out_reg_pins_err;
  494. }
  495. pinctrl_init_device_debugfs(pctldev);
  496. mutex_lock(&pinctrldev_list_mutex);
  497. list_add(&pctldev->node, &pinctrldev_list);
  498. mutex_unlock(&pinctrldev_list_mutex);
  499. pinmux_hog_maps(pctldev);
  500. return pctldev;
  501. out_reg_pins_err:
  502. device_del(&pctldev->dev);
  503. out_reg_dev_err:
  504. put_device(&pctldev->dev);
  505. return NULL;
  506. }
  507. EXPORT_SYMBOL_GPL(pinctrl_register);
  508. /**
  509. * pinctrl_unregister() - unregister pinmux
  510. * @pctldev: pin controller to unregister
  511. *
  512. * Called by pinmux drivers to unregister a pinmux.
  513. */
  514. void pinctrl_unregister(struct pinctrl_dev *pctldev)
  515. {
  516. if (pctldev == NULL)
  517. return;
  518. pinmux_unhog_maps(pctldev);
  519. /* TODO: check that no pinmuxes are still active? */
  520. mutex_lock(&pinctrldev_list_mutex);
  521. list_del(&pctldev->node);
  522. mutex_unlock(&pinctrldev_list_mutex);
  523. /* Destroy descriptor tree */
  524. pinctrl_free_pindescs(pctldev, pctldev->desc->pins,
  525. pctldev->desc->npins);
  526. device_unregister(&pctldev->dev);
  527. }
  528. EXPORT_SYMBOL_GPL(pinctrl_unregister);
  529. static int __init pinctrl_init(void)
  530. {
  531. pr_info("initialized pinctrl subsystem\n");
  532. pinctrl_init_debugfs();
  533. return 0;
  534. }
  535. /* init early since many drivers really need to initialized pinmux early */
  536. core_initcall(pinctrl_init);