core.c 17 KB

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