core.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. /*
  2. * Core private header for the pin control subsystem
  3. *
  4. * Copyright (C) 2011 ST-Ericsson SA
  5. * Written on behalf of Linaro for ST-Ericsson
  6. *
  7. * Author: Linus Walleij <linus.walleij@linaro.org>
  8. *
  9. * License terms: GNU General Public License (GPL) version 2
  10. */
  11. #include <linux/pinctrl/pinconf.h>
  12. struct pinctrl_gpio_range;
  13. /**
  14. * struct pinctrl_dev - pin control class device
  15. * @node: node to include this pin controller in the global pin controller list
  16. * @desc: the pin controller descriptor supplied when initializing this pin
  17. * controller
  18. * @pin_desc_tree: each pin descriptor for this pin controller is stored in
  19. * this radix tree
  20. * @gpio_ranges: a list of GPIO ranges that is handled by this pin controller,
  21. * ranges are added to this list at runtime
  22. * @gpio_ranges_lock: lock for the GPIO ranges list
  23. * @dev: the device entry for this pin controller
  24. * @owner: module providing the pin controller, used for refcounting
  25. * @driver_data: driver data for drivers registering to the pin controller
  26. * subsystem
  27. * @pinctrl_hogs: list of pin control maps hogged by this device
  28. * @device_root: debugfs root for this device
  29. */
  30. struct pinctrl_dev {
  31. struct list_head node;
  32. struct pinctrl_desc *desc;
  33. struct radix_tree_root pin_desc_tree;
  34. struct list_head gpio_ranges;
  35. struct mutex gpio_ranges_lock;
  36. struct device *dev;
  37. struct module *owner;
  38. void *driver_data;
  39. struct list_head pinctrl_hogs;
  40. #ifdef CONFIG_DEBUG_FS
  41. struct dentry *device_root;
  42. #endif
  43. };
  44. /**
  45. * struct pinctrl - per-device pin control state holder
  46. * @node: global list node
  47. * @dev: the device using this pin control handle
  48. * @usecount: the number of active users of this pin controller setting, used
  49. * to keep track of nested use cases
  50. * @pctldev: pin control device handling this pin control handle
  51. * @mutex: a lock for the pin control state holder
  52. * @func_selector: the function selector for the pinmux device handling
  53. * this pinmux
  54. * @groups: the group selectors for the pinmux device and
  55. * selector combination handling this pinmux, this is a list that
  56. * will be traversed on all pinmux operations such as
  57. * get/put/enable/disable
  58. */
  59. struct pinctrl {
  60. struct list_head node;
  61. struct device *dev;
  62. unsigned usecount;
  63. struct pinctrl_dev *pctldev;
  64. struct mutex mutex;
  65. #ifdef CONFIG_PINMUX
  66. unsigned func_selector;
  67. struct list_head groups;
  68. #endif
  69. };
  70. /**
  71. * struct pin_desc - pin descriptor for each physical pin in the arch
  72. * @pctldev: corresponding pin control device
  73. * @name: a name for the pin, e.g. the name of the pin/pad/finger on a
  74. * datasheet or such
  75. * @dynamic_name: if the name of this pin was dynamically allocated
  76. * @lock: a lock to protect the descriptor structure
  77. * @mux_requested: whether the pin is already requested by pinmux or not
  78. * @mux_function: a named muxing function for the pin that will be passed to
  79. * subdrivers and shown in debugfs etc
  80. */
  81. struct pin_desc {
  82. struct pinctrl_dev *pctldev;
  83. const char *name;
  84. bool dynamic_name;
  85. spinlock_t lock;
  86. /* These fields only added when supporting pinmux drivers */
  87. #ifdef CONFIG_PINMUX
  88. const char *owner;
  89. #endif
  90. };
  91. struct pinctrl_dev *get_pinctrl_dev_from_devname(const char *dev_name);
  92. int pin_get_from_name(struct pinctrl_dev *pctldev, const char *name);
  93. int pinctrl_get_group_selector(struct pinctrl_dev *pctldev,
  94. const char *pin_group);
  95. static inline struct pin_desc *pin_desc_get(struct pinctrl_dev *pctldev,
  96. unsigned int pin)
  97. {
  98. return radix_tree_lookup(&pctldev->pin_desc_tree, pin);
  99. }