core.c 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599
  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. #ifdef CONFIG_DEBUG_FS
  250. static int pinctrl_pins_show(struct seq_file *s, void *what)
  251. {
  252. struct pinctrl_dev *pctldev = s->private;
  253. const struct pinctrl_ops *ops = pctldev->desc->pctlops;
  254. unsigned pin;
  255. seq_printf(s, "registered pins: %d\n", pctldev->desc->npins);
  256. seq_printf(s, "max pin number: %d\n", pctldev->desc->maxpin);
  257. /* The highest pin number need to be included in the loop, thus <= */
  258. for (pin = 0; pin <= pctldev->desc->maxpin; pin++) {
  259. struct pin_desc *desc;
  260. desc = pin_desc_get(pctldev, pin);
  261. /* Pin space may be sparse */
  262. if (desc == NULL)
  263. continue;
  264. seq_printf(s, "pin %d (%s) ", pin,
  265. desc->name ? desc->name : "unnamed");
  266. /* Driver-specific info per pin */
  267. if (ops->pin_dbg_show)
  268. ops->pin_dbg_show(pctldev, s, pin);
  269. seq_puts(s, "\n");
  270. }
  271. return 0;
  272. }
  273. static int pinctrl_groups_show(struct seq_file *s, void *what)
  274. {
  275. struct pinctrl_dev *pctldev = s->private;
  276. const struct pinctrl_ops *ops = pctldev->desc->pctlops;
  277. unsigned selector = 0;
  278. /* No grouping */
  279. if (!ops)
  280. return 0;
  281. seq_puts(s, "registered pin groups:\n");
  282. while (ops->list_groups(pctldev, selector) >= 0) {
  283. const unsigned *pins;
  284. unsigned num_pins;
  285. const char *gname = ops->get_group_name(pctldev, selector);
  286. int ret;
  287. int i;
  288. ret = ops->get_group_pins(pctldev, selector,
  289. &pins, &num_pins);
  290. if (ret)
  291. seq_printf(s, "%s [ERROR GETTING PINS]\n",
  292. gname);
  293. else {
  294. seq_printf(s, "group: %s, pins = [ ", gname);
  295. for (i = 0; i < num_pins; i++)
  296. seq_printf(s, "%d ", pins[i]);
  297. seq_puts(s, "]\n");
  298. }
  299. selector++;
  300. }
  301. return 0;
  302. }
  303. static int pinctrl_gpioranges_show(struct seq_file *s, void *what)
  304. {
  305. struct pinctrl_dev *pctldev = s->private;
  306. struct pinctrl_gpio_range *range = NULL;
  307. seq_puts(s, "GPIO ranges handled:\n");
  308. /* Loop over the ranges */
  309. mutex_lock(&pctldev->gpio_ranges_lock);
  310. list_for_each_entry(range, &pctldev->gpio_ranges, node) {
  311. seq_printf(s, "%u: %s [%u - %u]\n", range->id, range->name,
  312. range->base, (range->base + range->npins - 1));
  313. }
  314. mutex_unlock(&pctldev->gpio_ranges_lock);
  315. return 0;
  316. }
  317. static int pinctrl_devices_show(struct seq_file *s, void *what)
  318. {
  319. struct pinctrl_dev *pctldev;
  320. seq_puts(s, "name [pinmux]\n");
  321. mutex_lock(&pinctrldev_list_mutex);
  322. list_for_each_entry(pctldev, &pinctrldev_list, node) {
  323. seq_printf(s, "%s ", pctldev->desc->name);
  324. if (pctldev->desc->pmxops)
  325. seq_puts(s, "yes");
  326. else
  327. seq_puts(s, "no");
  328. seq_puts(s, "\n");
  329. }
  330. mutex_unlock(&pinctrldev_list_mutex);
  331. return 0;
  332. }
  333. static int pinctrl_pins_open(struct inode *inode, struct file *file)
  334. {
  335. return single_open(file, pinctrl_pins_show, inode->i_private);
  336. }
  337. static int pinctrl_groups_open(struct inode *inode, struct file *file)
  338. {
  339. return single_open(file, pinctrl_groups_show, inode->i_private);
  340. }
  341. static int pinctrl_gpioranges_open(struct inode *inode, struct file *file)
  342. {
  343. return single_open(file, pinctrl_gpioranges_show, inode->i_private);
  344. }
  345. static int pinctrl_devices_open(struct inode *inode, struct file *file)
  346. {
  347. return single_open(file, pinctrl_devices_show, NULL);
  348. }
  349. static const struct file_operations pinctrl_pins_ops = {
  350. .open = pinctrl_pins_open,
  351. .read = seq_read,
  352. .llseek = seq_lseek,
  353. .release = single_release,
  354. };
  355. static const struct file_operations pinctrl_groups_ops = {
  356. .open = pinctrl_groups_open,
  357. .read = seq_read,
  358. .llseek = seq_lseek,
  359. .release = single_release,
  360. };
  361. static const struct file_operations pinctrl_gpioranges_ops = {
  362. .open = pinctrl_gpioranges_open,
  363. .read = seq_read,
  364. .llseek = seq_lseek,
  365. .release = single_release,
  366. };
  367. static const struct file_operations pinctrl_devices_ops = {
  368. .open = pinctrl_devices_open,
  369. .read = seq_read,
  370. .llseek = seq_lseek,
  371. .release = single_release,
  372. };
  373. static struct dentry *debugfs_root;
  374. static void pinctrl_init_device_debugfs(struct pinctrl_dev *pctldev)
  375. {
  376. static struct dentry *device_root;
  377. device_root = debugfs_create_dir(dev_name(&pctldev->dev),
  378. debugfs_root);
  379. if (IS_ERR(device_root) || !device_root) {
  380. pr_warn("failed to create debugfs directory for %s\n",
  381. dev_name(&pctldev->dev));
  382. return;
  383. }
  384. debugfs_create_file("pins", S_IFREG | S_IRUGO,
  385. device_root, pctldev, &pinctrl_pins_ops);
  386. debugfs_create_file("pingroups", S_IFREG | S_IRUGO,
  387. device_root, pctldev, &pinctrl_groups_ops);
  388. debugfs_create_file("gpio-ranges", S_IFREG | S_IRUGO,
  389. device_root, pctldev, &pinctrl_gpioranges_ops);
  390. pinmux_init_device_debugfs(device_root, pctldev);
  391. }
  392. static void pinctrl_init_debugfs(void)
  393. {
  394. debugfs_root = debugfs_create_dir("pinctrl", NULL);
  395. if (IS_ERR(debugfs_root) || !debugfs_root) {
  396. pr_warn("failed to create debugfs directory\n");
  397. debugfs_root = NULL;
  398. return;
  399. }
  400. debugfs_create_file("pinctrl-devices", S_IFREG | S_IRUGO,
  401. debugfs_root, NULL, &pinctrl_devices_ops);
  402. pinmux_init_debugfs(debugfs_root);
  403. }
  404. #else /* CONFIG_DEBUG_FS */
  405. static void pinctrl_init_device_debugfs(struct pinctrl_dev *pctldev)
  406. {
  407. }
  408. static void pinctrl_init_debugfs(void)
  409. {
  410. }
  411. #endif
  412. /**
  413. * pinctrl_register() - register a pin controller device
  414. * @pctldesc: descriptor for this pin controller
  415. * @dev: parent device for this pin controller
  416. * @driver_data: private pin controller data for this pin controller
  417. */
  418. struct pinctrl_dev *pinctrl_register(struct pinctrl_desc *pctldesc,
  419. struct device *dev, void *driver_data)
  420. {
  421. static atomic_t pinmux_no = ATOMIC_INIT(0);
  422. struct pinctrl_dev *pctldev;
  423. int ret;
  424. if (pctldesc == NULL)
  425. return NULL;
  426. if (pctldesc->name == NULL)
  427. return NULL;
  428. /* If we're implementing pinmuxing, check the ops for sanity */
  429. if (pctldesc->pmxops) {
  430. ret = pinmux_check_ops(pctldesc->pmxops);
  431. if (ret) {
  432. pr_err("%s pinmux ops lacks necessary functions\n",
  433. pctldesc->name);
  434. return NULL;
  435. }
  436. }
  437. pctldev = kzalloc(sizeof(struct pinctrl_dev), GFP_KERNEL);
  438. if (pctldev == NULL)
  439. return NULL;
  440. /* Initialize pin control device struct */
  441. pctldev->owner = pctldesc->owner;
  442. pctldev->desc = pctldesc;
  443. pctldev->driver_data = driver_data;
  444. INIT_RADIX_TREE(&pctldev->pin_desc_tree, GFP_KERNEL);
  445. spin_lock_init(&pctldev->pin_desc_tree_lock);
  446. INIT_LIST_HEAD(&pctldev->gpio_ranges);
  447. mutex_init(&pctldev->gpio_ranges_lock);
  448. /* Register device */
  449. pctldev->dev.parent = dev;
  450. dev_set_name(&pctldev->dev, "pinctrl.%d",
  451. atomic_inc_return(&pinmux_no) - 1);
  452. pctldev->dev.release = pinctrl_dev_release;
  453. ret = device_register(&pctldev->dev);
  454. if (ret != 0) {
  455. pr_err("error in device registration\n");
  456. goto out_reg_dev_err;
  457. }
  458. dev_set_drvdata(&pctldev->dev, pctldev);
  459. /* Register all the pins */
  460. pr_debug("try to register %d pins on %s...\n",
  461. pctldesc->npins, pctldesc->name);
  462. ret = pinctrl_register_pins(pctldev, pctldesc->pins, pctldesc->npins);
  463. if (ret) {
  464. pr_err("error during pin registration\n");
  465. pinctrl_free_pindescs(pctldev, pctldesc->pins,
  466. pctldesc->npins);
  467. goto out_reg_pins_err;
  468. }
  469. pinctrl_init_device_debugfs(pctldev);
  470. mutex_lock(&pinctrldev_list_mutex);
  471. list_add(&pctldev->node, &pinctrldev_list);
  472. mutex_unlock(&pinctrldev_list_mutex);
  473. pinmux_hog_maps(pctldev);
  474. return pctldev;
  475. out_reg_pins_err:
  476. device_del(&pctldev->dev);
  477. out_reg_dev_err:
  478. put_device(&pctldev->dev);
  479. return NULL;
  480. }
  481. EXPORT_SYMBOL_GPL(pinctrl_register);
  482. /**
  483. * pinctrl_unregister() - unregister pinmux
  484. * @pctldev: pin controller to unregister
  485. *
  486. * Called by pinmux drivers to unregister a pinmux.
  487. */
  488. void pinctrl_unregister(struct pinctrl_dev *pctldev)
  489. {
  490. if (pctldev == NULL)
  491. return;
  492. pinmux_unhog_maps(pctldev);
  493. /* TODO: check that no pinmuxes are still active? */
  494. mutex_lock(&pinctrldev_list_mutex);
  495. list_del(&pctldev->node);
  496. mutex_unlock(&pinctrldev_list_mutex);
  497. /* Destroy descriptor tree */
  498. pinctrl_free_pindescs(pctldev, pctldev->desc->pins,
  499. pctldev->desc->npins);
  500. device_unregister(&pctldev->dev);
  501. }
  502. EXPORT_SYMBOL_GPL(pinctrl_unregister);
  503. static int __init pinctrl_init(void)
  504. {
  505. pr_info("initialized pinctrl subsystem\n");
  506. pinctrl_init_debugfs();
  507. return 0;
  508. }
  509. /* init early since many drivers really need to initialized pinmux early */
  510. core_initcall(pinctrl_init);