gpiomux.h 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /* Copyright (c) 2010, Code Aurora Forum. All rights reserved.
  2. *
  3. * This program is free software; you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License version 2 and
  5. * only version 2 as published by the Free Software Foundation.
  6. *
  7. * This program is distributed in the hope that it will be useful,
  8. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. * GNU General Public License for more details.
  11. *
  12. * You should have received a copy of the GNU General Public License
  13. * along with this program; if not, write to the Free Software
  14. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  15. * 02110-1301, USA.
  16. */
  17. #ifndef __ARCH_ARM_MACH_MSM_GPIOMUX_H
  18. #define __ARCH_ARM_MACH_MSM_GPIOMUX_H
  19. #include <linux/bitops.h>
  20. #if defined(CONFIG_MSM_V2_TLMM)
  21. #include "gpiomux-v2.h"
  22. #else
  23. #include "gpiomux-v1.h"
  24. #endif
  25. /**
  26. * struct msm_gpiomux_config: gpiomux settings for one gpio line.
  27. *
  28. * A complete gpiomux config is the bitwise-or of a drive-strength,
  29. * function, and pull. For functions other than GPIO, the OE
  30. * is hard-wired according to the function. For GPIO mode,
  31. * OE is controlled by gpiolib.
  32. *
  33. * Available settings differ by target; see the gpiomux header
  34. * specific to your target arch for available configurations.
  35. *
  36. * @active: The configuration to be installed when the line is
  37. * active, or its reference count is > 0.
  38. * @suspended: The configuration to be installed when the line
  39. * is suspended, or its reference count is 0.
  40. * @ref: The reference count of the line. For internal use of
  41. * the gpiomux framework only.
  42. */
  43. struct msm_gpiomux_config {
  44. gpiomux_config_t active;
  45. gpiomux_config_t suspended;
  46. unsigned ref;
  47. };
  48. /**
  49. * @GPIOMUX_VALID: If set, the config field contains 'good data'.
  50. * The absence of this bit will prevent the gpiomux
  51. * system from applying the configuration under all
  52. * circumstances.
  53. */
  54. enum {
  55. GPIOMUX_VALID = BIT(sizeof(gpiomux_config_t) * BITS_PER_BYTE - 1),
  56. GPIOMUX_CTL_MASK = GPIOMUX_VALID,
  57. };
  58. /* Each architecture must provide its own instance of this table.
  59. * To avoid having gpiomux manage any given gpio, one or both of
  60. * the entries can avoid setting GPIOMUX_VALID - the absence
  61. * of that flag will prevent the configuration from being applied
  62. * during state transitions.
  63. */
  64. extern struct msm_gpiomux_config msm_gpiomux_configs[GPIOMUX_NGPIOS];
  65. /* Increment a gpio's reference count, possibly activating the line. */
  66. int __must_check msm_gpiomux_get(unsigned gpio);
  67. /* Decrement a gpio's reference count, possibly suspending the line. */
  68. int msm_gpiomux_put(unsigned gpio);
  69. /* Install a new configuration to the gpio line. To avoid overwriting
  70. * a configuration, leave the VALID bit out.
  71. */
  72. int msm_gpiomux_write(unsigned gpio,
  73. gpiomux_config_t active,
  74. gpiomux_config_t suspended);
  75. /* Architecture-internal function for use by the framework only.
  76. * This function can assume the following:
  77. * - the gpio value has passed a bounds-check
  78. * - the gpiomux spinlock has been obtained
  79. *
  80. * This function is not for public consumption. External users
  81. * should use msm_gpiomux_write.
  82. */
  83. void __msm_gpiomux_write(unsigned gpio, gpiomux_config_t val);
  84. #endif