core.c 17 KB

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