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. #include <linux/errno.h>
  21. #include <mach/msm_gpiomux.h>
  22. #include "gpiomux-v1.h"
  23. /**
  24. * struct msm_gpiomux_config: gpiomux settings for one gpio line.
  25. *
  26. * A complete gpiomux config is the bitwise-or of a drive-strength,
  27. * function, and pull. For functions other than GPIO, the OE
  28. * is hard-wired according to the function. For GPIO mode,
  29. * OE is controlled by gpiolib.
  30. *
  31. * Available settings differ by target; see the gpiomux header
  32. * specific to your target arch for available configurations.
  33. *
  34. * @active: The configuration to be installed when the line is
  35. * active, or its reference count is > 0.
  36. * @suspended: The configuration to be installed when the line
  37. * is suspended, or its reference count is 0.
  38. * @ref: The reference count of the line. For internal use of
  39. * the gpiomux framework only.
  40. */
  41. struct msm_gpiomux_config {
  42. gpiomux_config_t active;
  43. gpiomux_config_t suspended;
  44. unsigned ref;
  45. };
  46. /**
  47. * @GPIOMUX_VALID: If set, the config field contains 'good data'.
  48. * The absence of this bit will prevent the gpiomux
  49. * system from applying the configuration under all
  50. * circumstances.
  51. */
  52. enum {
  53. GPIOMUX_VALID = BIT(sizeof(gpiomux_config_t) * BITS_PER_BYTE - 1),
  54. GPIOMUX_CTL_MASK = GPIOMUX_VALID,
  55. };
  56. #ifdef CONFIG_MSM_GPIOMUX
  57. /* Each architecture must provide its own instance of this table.
  58. * To avoid having gpiomux manage any given gpio, one or both of
  59. * the entries can avoid setting GPIOMUX_VALID - the absence
  60. * of that flag will prevent the configuration from being applied
  61. * during state transitions.
  62. */
  63. extern struct msm_gpiomux_config msm_gpiomux_configs[GPIOMUX_NGPIOS];
  64. /* Install a new configuration to the gpio line. To avoid overwriting
  65. * a configuration, leave the VALID bit out.
  66. */
  67. int msm_gpiomux_write(unsigned gpio,
  68. gpiomux_config_t active,
  69. gpiomux_config_t suspended);
  70. /* Architecture-internal function for use by the framework only.
  71. * This function can assume the following:
  72. * - the gpio value has passed a bounds-check
  73. * - the gpiomux spinlock has been obtained
  74. *
  75. * This function is not for public consumption. External users
  76. * should use msm_gpiomux_write.
  77. */
  78. void __msm_gpiomux_write(unsigned gpio, gpiomux_config_t val);
  79. #else
  80. static inline int msm_gpiomux_write(unsigned gpio,
  81. gpiomux_config_t active,
  82. gpiomux_config_t suspended)
  83. {
  84. return -ENOSYS;
  85. }
  86. #endif
  87. #endif