core.c 15 KB

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