mux.c 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. /*
  2. * TNETV107X: Pinmux configuration
  3. *
  4. * See file CREDITS for list of people who contributed to this
  5. * project.
  6. *
  7. * This program is free software; you can redistribute it and/or modify
  8. * it under the terms of the GNU General Public License as published by
  9. * the Free Software Foundation; either version 2 of the License, or
  10. * (at your option) any later version.
  11. *
  12. * This program is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. * GNU General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU General Public License
  18. * along with this program; if not, write to the Free Software
  19. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  20. */
  21. #include <common.h>
  22. #include <asm/io.h>
  23. #include <asm/arch/clock.h>
  24. #include <asm/arch/mux.h>
  25. #define MUX_MODE_1 0x00
  26. #define MUX_MODE_2 0x04
  27. #define MUX_MODE_3 0x0c
  28. #define MUX_MODE_4 0x1c
  29. #define MUX_DEBUG 0
  30. static const struct pin_config pin_table[] = {
  31. /* reg shift mode */
  32. TNETV107X_MUX_CFG(0, 0, MUX_MODE_1),
  33. TNETV107X_MUX_CFG(0, 0, MUX_MODE_2),
  34. TNETV107X_MUX_CFG(0, 5, MUX_MODE_1),
  35. TNETV107X_MUX_CFG(0, 5, MUX_MODE_2),
  36. TNETV107X_MUX_CFG(0, 10, MUX_MODE_1),
  37. TNETV107X_MUX_CFG(0, 10, MUX_MODE_2),
  38. TNETV107X_MUX_CFG(0, 15, MUX_MODE_1),
  39. TNETV107X_MUX_CFG(0, 15, MUX_MODE_2),
  40. TNETV107X_MUX_CFG(0, 20, MUX_MODE_1),
  41. TNETV107X_MUX_CFG(0, 20, MUX_MODE_2),
  42. TNETV107X_MUX_CFG(0, 25, MUX_MODE_1),
  43. TNETV107X_MUX_CFG(0, 25, MUX_MODE_2),
  44. TNETV107X_MUX_CFG(1, 0, MUX_MODE_1),
  45. TNETV107X_MUX_CFG(1, 0, MUX_MODE_2),
  46. TNETV107X_MUX_CFG(1, 5, MUX_MODE_1),
  47. TNETV107X_MUX_CFG(1, 5, MUX_MODE_2),
  48. TNETV107X_MUX_CFG(1, 10, MUX_MODE_1),
  49. TNETV107X_MUX_CFG(1, 10, MUX_MODE_2),
  50. TNETV107X_MUX_CFG(1, 15, MUX_MODE_1),
  51. TNETV107X_MUX_CFG(1, 15, MUX_MODE_2),
  52. TNETV107X_MUX_CFG(1, 20, MUX_MODE_1),
  53. TNETV107X_MUX_CFG(1, 20, MUX_MODE_2),
  54. TNETV107X_MUX_CFG(1, 25, MUX_MODE_1),
  55. TNETV107X_MUX_CFG(1, 25, MUX_MODE_2),
  56. TNETV107X_MUX_CFG(2, 0, MUX_MODE_1),
  57. TNETV107X_MUX_CFG(2, 0, MUX_MODE_2),
  58. TNETV107X_MUX_CFG(2, 5, MUX_MODE_1),
  59. TNETV107X_MUX_CFG(2, 5, MUX_MODE_2),
  60. TNETV107X_MUX_CFG(2, 10, MUX_MODE_1),
  61. TNETV107X_MUX_CFG(2, 10, MUX_MODE_2),
  62. TNETV107X_MUX_CFG(2, 15, MUX_MODE_1),
  63. TNETV107X_MUX_CFG(2, 15, MUX_MODE_2),
  64. TNETV107X_MUX_CFG(2, 20, MUX_MODE_1),
  65. TNETV107X_MUX_CFG(2, 20, MUX_MODE_2),
  66. TNETV107X_MUX_CFG(2, 25, MUX_MODE_1),
  67. TNETV107X_MUX_CFG(2, 25, MUX_MODE_2),
  68. TNETV107X_MUX_CFG(3, 0, MUX_MODE_1),
  69. TNETV107X_MUX_CFG(3, 0, MUX_MODE_2),
  70. TNETV107X_MUX_CFG(3, 0, MUX_MODE_4),
  71. TNETV107X_MUX_CFG(3, 5, MUX_MODE_1),
  72. TNETV107X_MUX_CFG(3, 5, MUX_MODE_2),
  73. TNETV107X_MUX_CFG(3, 5, MUX_MODE_4),
  74. TNETV107X_MUX_CFG(3, 10, MUX_MODE_1),
  75. TNETV107X_MUX_CFG(3, 10, MUX_MODE_2),
  76. TNETV107X_MUX_CFG(3, 10, MUX_MODE_4),
  77. TNETV107X_MUX_CFG(3, 15, MUX_MODE_1),
  78. TNETV107X_MUX_CFG(3, 15, MUX_MODE_2),
  79. TNETV107X_MUX_CFG(3, 15, MUX_MODE_4),
  80. TNETV107X_MUX_CFG(3, 20, MUX_MODE_1),
  81. TNETV107X_MUX_CFG(3, 20, MUX_MODE_2),
  82. TNETV107X_MUX_CFG(3, 20, MUX_MODE_4),
  83. TNETV107X_MUX_CFG(3, 25, MUX_MODE_1),
  84. TNETV107X_MUX_CFG(3, 25, MUX_MODE_2),
  85. TNETV107X_MUX_CFG(3, 25, MUX_MODE_4),
  86. TNETV107X_MUX_CFG(4, 0, MUX_MODE_1),
  87. TNETV107X_MUX_CFG(4, 0, MUX_MODE_2),
  88. TNETV107X_MUX_CFG(4, 0, MUX_MODE_4),
  89. TNETV107X_MUX_CFG(4, 5, MUX_MODE_1),
  90. TNETV107X_MUX_CFG(4, 10, MUX_MODE_1),
  91. TNETV107X_MUX_CFG(4, 15, MUX_MODE_1),
  92. TNETV107X_MUX_CFG(4, 15, MUX_MODE_4),
  93. TNETV107X_MUX_CFG(4, 20, MUX_MODE_1),
  94. TNETV107X_MUX_CFG(4, 20, MUX_MODE_3),
  95. TNETV107X_MUX_CFG(4, 25, MUX_MODE_1),
  96. TNETV107X_MUX_CFG(4, 25, MUX_MODE_4),
  97. TNETV107X_MUX_CFG(5, 0, MUX_MODE_1),
  98. TNETV107X_MUX_CFG(5, 0, MUX_MODE_4),
  99. TNETV107X_MUX_CFG(5, 5, MUX_MODE_1),
  100. TNETV107X_MUX_CFG(5, 5, MUX_MODE_4),
  101. TNETV107X_MUX_CFG(5, 10, MUX_MODE_1),
  102. TNETV107X_MUX_CFG(5, 10, MUX_MODE_4),
  103. TNETV107X_MUX_CFG(5, 15, MUX_MODE_1),
  104. TNETV107X_MUX_CFG(5, 15, MUX_MODE_4),
  105. TNETV107X_MUX_CFG(5, 20, MUX_MODE_1),
  106. TNETV107X_MUX_CFG(5, 20, MUX_MODE_4),
  107. TNETV107X_MUX_CFG(5, 25, MUX_MODE_1),
  108. TNETV107X_MUX_CFG(5, 25, MUX_MODE_4),
  109. TNETV107X_MUX_CFG(6, 0, MUX_MODE_1),
  110. TNETV107X_MUX_CFG(6, 0, MUX_MODE_4),
  111. TNETV107X_MUX_CFG(6, 5, MUX_MODE_1),
  112. TNETV107X_MUX_CFG(6, 5, MUX_MODE_4),
  113. TNETV107X_MUX_CFG(6, 10, MUX_MODE_1),
  114. TNETV107X_MUX_CFG(6, 10, MUX_MODE_4),
  115. TNETV107X_MUX_CFG(6, 15, MUX_MODE_1),
  116. TNETV107X_MUX_CFG(6, 15, MUX_MODE_4),
  117. TNETV107X_MUX_CFG(6, 20, MUX_MODE_1),
  118. TNETV107X_MUX_CFG(6, 20, MUX_MODE_4),
  119. TNETV107X_MUX_CFG(6, 25, MUX_MODE_1),
  120. TNETV107X_MUX_CFG(6, 25, MUX_MODE_4),
  121. TNETV107X_MUX_CFG(7, 0, MUX_MODE_1),
  122. TNETV107X_MUX_CFG(7, 0, MUX_MODE_4),
  123. TNETV107X_MUX_CFG(7, 5, MUX_MODE_1),
  124. TNETV107X_MUX_CFG(7, 5, MUX_MODE_4),
  125. TNETV107X_MUX_CFG(7, 10, MUX_MODE_1),
  126. TNETV107X_MUX_CFG(7, 10, MUX_MODE_4),
  127. TNETV107X_MUX_CFG(7, 15, MUX_MODE_1),
  128. TNETV107X_MUX_CFG(7, 15, MUX_MODE_2),
  129. TNETV107X_MUX_CFG(7, 20, MUX_MODE_1),
  130. TNETV107X_MUX_CFG(7, 20, MUX_MODE_2),
  131. TNETV107X_MUX_CFG(7, 25, MUX_MODE_1),
  132. TNETV107X_MUX_CFG(7, 25, MUX_MODE_2),
  133. TNETV107X_MUX_CFG(8, 0, MUX_MODE_1),
  134. TNETV107X_MUX_CFG(8, 0, MUX_MODE_2),
  135. TNETV107X_MUX_CFG(8, 5, MUX_MODE_1),
  136. TNETV107X_MUX_CFG(8, 5, MUX_MODE_2),
  137. TNETV107X_MUX_CFG(8, 5, MUX_MODE_4),
  138. TNETV107X_MUX_CFG(8, 10, MUX_MODE_1),
  139. TNETV107X_MUX_CFG(8, 10, MUX_MODE_2),
  140. TNETV107X_MUX_CFG(9, 0, MUX_MODE_1),
  141. TNETV107X_MUX_CFG(9, 0, MUX_MODE_2),
  142. TNETV107X_MUX_CFG(9, 0, MUX_MODE_4),
  143. TNETV107X_MUX_CFG(9, 5, MUX_MODE_1),
  144. TNETV107X_MUX_CFG(9, 5, MUX_MODE_2),
  145. TNETV107X_MUX_CFG(9, 5, MUX_MODE_4),
  146. TNETV107X_MUX_CFG(9, 10, MUX_MODE_1),
  147. TNETV107X_MUX_CFG(9, 10, MUX_MODE_2),
  148. TNETV107X_MUX_CFG(9, 10, MUX_MODE_4),
  149. TNETV107X_MUX_CFG(9, 15, MUX_MODE_1),
  150. TNETV107X_MUX_CFG(9, 15, MUX_MODE_2),
  151. TNETV107X_MUX_CFG(9, 15, MUX_MODE_4),
  152. TNETV107X_MUX_CFG(9, 20, MUX_MODE_1),
  153. TNETV107X_MUX_CFG(9, 20, MUX_MODE_2),
  154. TNETV107X_MUX_CFG(9, 20, MUX_MODE_4),
  155. TNETV107X_MUX_CFG(10, 0, MUX_MODE_1),
  156. TNETV107X_MUX_CFG(10, 0, MUX_MODE_2),
  157. TNETV107X_MUX_CFG(10, 5, MUX_MODE_1),
  158. TNETV107X_MUX_CFG(10, 5, MUX_MODE_2),
  159. TNETV107X_MUX_CFG(10, 10, MUX_MODE_1),
  160. TNETV107X_MUX_CFG(10, 10, MUX_MODE_2),
  161. TNETV107X_MUX_CFG(10, 15, MUX_MODE_1),
  162. TNETV107X_MUX_CFG(10, 15, MUX_MODE_2),
  163. TNETV107X_MUX_CFG(10, 20, MUX_MODE_1),
  164. TNETV107X_MUX_CFG(10, 20, MUX_MODE_2),
  165. TNETV107X_MUX_CFG(10, 25, MUX_MODE_1),
  166. TNETV107X_MUX_CFG(10, 25, MUX_MODE_2),
  167. TNETV107X_MUX_CFG(11, 0, MUX_MODE_1),
  168. TNETV107X_MUX_CFG(11, 5, MUX_MODE_1),
  169. TNETV107X_MUX_CFG(12, 0, MUX_MODE_1),
  170. TNETV107X_MUX_CFG(12, 5, MUX_MODE_1),
  171. TNETV107X_MUX_CFG(12, 10, MUX_MODE_1),
  172. TNETV107X_MUX_CFG(12, 15, MUX_MODE_1),
  173. TNETV107X_MUX_CFG(12, 20, MUX_MODE_1),
  174. TNETV107X_MUX_CFG(12, 25, MUX_MODE_1),
  175. TNETV107X_MUX_CFG(13, 0, MUX_MODE_1),
  176. TNETV107X_MUX_CFG(13, 5, MUX_MODE_1),
  177. TNETV107X_MUX_CFG(13, 10, MUX_MODE_1),
  178. TNETV107X_MUX_CFG(13, 15, MUX_MODE_1),
  179. TNETV107X_MUX_CFG(14, 0, MUX_MODE_1),
  180. TNETV107X_MUX_CFG(14, 5, MUX_MODE_1),
  181. TNETV107X_MUX_CFG(14, 10, MUX_MODE_1),
  182. TNETV107X_MUX_CFG(14, 15, MUX_MODE_1),
  183. TNETV107X_MUX_CFG(14, 20, MUX_MODE_1),
  184. TNETV107X_MUX_CFG(14, 25, MUX_MODE_1),
  185. TNETV107X_MUX_CFG(15, 0, MUX_MODE_1),
  186. TNETV107X_MUX_CFG(15, 0, MUX_MODE_2),
  187. TNETV107X_MUX_CFG(15, 5, MUX_MODE_1),
  188. TNETV107X_MUX_CFG(15, 5, MUX_MODE_2),
  189. TNETV107X_MUX_CFG(15, 10, MUX_MODE_1),
  190. TNETV107X_MUX_CFG(15, 15, MUX_MODE_1),
  191. TNETV107X_MUX_CFG(15, 20, MUX_MODE_1),
  192. TNETV107X_MUX_CFG(15, 25, MUX_MODE_1),
  193. TNETV107X_MUX_CFG(16, 0, MUX_MODE_1),
  194. TNETV107X_MUX_CFG(16, 5, MUX_MODE_1),
  195. TNETV107X_MUX_CFG(16, 10, MUX_MODE_1),
  196. TNETV107X_MUX_CFG(16, 10, MUX_MODE_2),
  197. TNETV107X_MUX_CFG(16, 10, MUX_MODE_3),
  198. TNETV107X_MUX_CFG(16, 15, MUX_MODE_1),
  199. TNETV107X_MUX_CFG(16, 15, MUX_MODE_2),
  200. TNETV107X_MUX_CFG(17, 0, MUX_MODE_1),
  201. TNETV107X_MUX_CFG(17, 0, MUX_MODE_2),
  202. TNETV107X_MUX_CFG(17, 0, MUX_MODE_3),
  203. TNETV107X_MUX_CFG(17, 5, MUX_MODE_1),
  204. TNETV107X_MUX_CFG(17, 5, MUX_MODE_2),
  205. TNETV107X_MUX_CFG(17, 5, MUX_MODE_3),
  206. TNETV107X_MUX_CFG(17, 10, MUX_MODE_1),
  207. TNETV107X_MUX_CFG(17, 10, MUX_MODE_2),
  208. TNETV107X_MUX_CFG(17, 10, MUX_MODE_3),
  209. TNETV107X_MUX_CFG(17, 15, MUX_MODE_1),
  210. TNETV107X_MUX_CFG(17, 15, MUX_MODE_2),
  211. TNETV107X_MUX_CFG(17, 15, MUX_MODE_3),
  212. TNETV107X_MUX_CFG(18, 0, MUX_MODE_1),
  213. TNETV107X_MUX_CFG(18, 0, MUX_MODE_2),
  214. TNETV107X_MUX_CFG(18, 0, MUX_MODE_3),
  215. TNETV107X_MUX_CFG(18, 5, MUX_MODE_1),
  216. TNETV107X_MUX_CFG(18, 5, MUX_MODE_2),
  217. TNETV107X_MUX_CFG(18, 5, MUX_MODE_3),
  218. TNETV107X_MUX_CFG(18, 10, MUX_MODE_1),
  219. TNETV107X_MUX_CFG(18, 10, MUX_MODE_2),
  220. TNETV107X_MUX_CFG(18, 10, MUX_MODE_3),
  221. TNETV107X_MUX_CFG(18, 15, MUX_MODE_1),
  222. TNETV107X_MUX_CFG(18, 15, MUX_MODE_2),
  223. TNETV107X_MUX_CFG(18, 15, MUX_MODE_3),
  224. TNETV107X_MUX_CFG(19, 0, MUX_MODE_1),
  225. TNETV107X_MUX_CFG(19, 5, MUX_MODE_1),
  226. TNETV107X_MUX_CFG(19, 10, MUX_MODE_1),
  227. TNETV107X_MUX_CFG(19, 15, MUX_MODE_1),
  228. TNETV107X_MUX_CFG(19, 20, MUX_MODE_1),
  229. TNETV107X_MUX_CFG(19, 25, MUX_MODE_1),
  230. TNETV107X_MUX_CFG(20, 0, MUX_MODE_1),
  231. TNETV107X_MUX_CFG(20, 5, MUX_MODE_1),
  232. TNETV107X_MUX_CFG(20, 10, MUX_MODE_1),
  233. TNETV107X_MUX_CFG(20, 15, MUX_MODE_1),
  234. TNETV107X_MUX_CFG(20, 15, MUX_MODE_3),
  235. TNETV107X_MUX_CFG(20, 20, MUX_MODE_1),
  236. TNETV107X_MUX_CFG(20, 25, MUX_MODE_1),
  237. TNETV107X_MUX_CFG(21, 0, MUX_MODE_1),
  238. TNETV107X_MUX_CFG(21, 5, MUX_MODE_1),
  239. TNETV107X_MUX_CFG(21, 10, MUX_MODE_1),
  240. TNETV107X_MUX_CFG(21, 15, MUX_MODE_1),
  241. TNETV107X_MUX_CFG(21, 20, MUX_MODE_1),
  242. TNETV107X_MUX_CFG(21, 25, MUX_MODE_1),
  243. TNETV107X_MUX_CFG(22, 0, MUX_MODE_1),
  244. TNETV107X_MUX_CFG(22, 5, MUX_MODE_1),
  245. TNETV107X_MUX_CFG(22, 5, MUX_MODE_3),
  246. TNETV107X_MUX_CFG(22, 10, MUX_MODE_1),
  247. TNETV107X_MUX_CFG(22, 10, MUX_MODE_3),
  248. TNETV107X_MUX_CFG(22, 15, MUX_MODE_1),
  249. TNETV107X_MUX_CFG(22, 15, MUX_MODE_2),
  250. TNETV107X_MUX_CFG(22, 15, MUX_MODE_3),
  251. TNETV107X_MUX_CFG(22, 20, MUX_MODE_1),
  252. TNETV107X_MUX_CFG(22, 20, MUX_MODE_3),
  253. TNETV107X_MUX_CFG(22, 25, MUX_MODE_1),
  254. TNETV107X_MUX_CFG(22, 25, MUX_MODE_3),
  255. TNETV107X_MUX_CFG(23, 0, MUX_MODE_1),
  256. TNETV107X_MUX_CFG(23, 0, MUX_MODE_3),
  257. TNETV107X_MUX_CFG(23, 5, MUX_MODE_1),
  258. TNETV107X_MUX_CFG(23, 5, MUX_MODE_3),
  259. TNETV107X_MUX_CFG(23, 10, MUX_MODE_1),
  260. TNETV107X_MUX_CFG(23, 10, MUX_MODE_3),
  261. TNETV107X_MUX_CFG(24, 0, MUX_MODE_1),
  262. TNETV107X_MUX_CFG(24, 0, MUX_MODE_2),
  263. TNETV107X_MUX_CFG(24, 5, MUX_MODE_1),
  264. TNETV107X_MUX_CFG(24, 5, MUX_MODE_2),
  265. TNETV107X_MUX_CFG(24, 10, MUX_MODE_1),
  266. TNETV107X_MUX_CFG(24, 10, MUX_MODE_2),
  267. TNETV107X_MUX_CFG(24, 10, MUX_MODE_3),
  268. TNETV107X_MUX_CFG(24, 15, MUX_MODE_1),
  269. TNETV107X_MUX_CFG(24, 15, MUX_MODE_2),
  270. TNETV107X_MUX_CFG(24, 15, MUX_MODE_3),
  271. TNETV107X_MUX_CFG(24, 20, MUX_MODE_1),
  272. TNETV107X_MUX_CFG(24, 20, MUX_MODE_2),
  273. TNETV107X_MUX_CFG(24, 25, MUX_MODE_1),
  274. TNETV107X_MUX_CFG(24, 25, MUX_MODE_2),
  275. TNETV107X_MUX_CFG(25, 0, MUX_MODE_1),
  276. TNETV107X_MUX_CFG(25, 0, MUX_MODE_2),
  277. TNETV107X_MUX_CFG(25, 0, MUX_MODE_3),
  278. TNETV107X_MUX_CFG(25, 5, MUX_MODE_1),
  279. TNETV107X_MUX_CFG(25, 5, MUX_MODE_2),
  280. TNETV107X_MUX_CFG(25, 5, MUX_MODE_3),
  281. TNETV107X_MUX_CFG(25, 10, MUX_MODE_1),
  282. TNETV107X_MUX_CFG(25, 10, MUX_MODE_2),
  283. TNETV107X_MUX_CFG(25, 10, MUX_MODE_3),
  284. TNETV107X_MUX_CFG(25, 15, MUX_MODE_1),
  285. TNETV107X_MUX_CFG(25, 15, MUX_MODE_2),
  286. TNETV107X_MUX_CFG(25, 15, MUX_MODE_3),
  287. TNETV107X_MUX_CFG(25, 15, MUX_MODE_4),
  288. TNETV107X_MUX_CFG(26, 0, MUX_MODE_1),
  289. TNETV107X_MUX_CFG(26, 5, MUX_MODE_1),
  290. TNETV107X_MUX_CFG(26, 10, MUX_MODE_1),
  291. TNETV107X_MUX_CFG(26, 10, MUX_MODE_2),
  292. TNETV107X_MUX_CFG(26, 15, MUX_MODE_1),
  293. TNETV107X_MUX_CFG(26, 15, MUX_MODE_2),
  294. TNETV107X_MUX_CFG(26, 20, MUX_MODE_1),
  295. TNETV107X_MUX_CFG(26, 20, MUX_MODE_2),
  296. TNETV107X_MUX_CFG(26, 25, MUX_MODE_1),
  297. TNETV107X_MUX_CFG(26, 25, MUX_MODE_2),
  298. };
  299. const int pin_table_size = sizeof(pin_table) / sizeof(pin_table[0]);
  300. int mux_select_pin(short index)
  301. {
  302. const struct pin_config *cfg;
  303. unsigned long mask, mode, reg;
  304. if (index >= pin_table_size)
  305. return 0;
  306. cfg = &pin_table[index];
  307. mask = 0x1f << cfg->mask_offset;
  308. mode = cfg->mode << cfg->mask_offset;
  309. reg = __raw_readl(TNETV107X_PINMUX(cfg->reg_index));
  310. reg = (reg & ~mask) | mode;
  311. __raw_writel(reg, TNETV107X_PINMUX(cfg->reg_index));
  312. return 1;
  313. }
  314. int mux_select_pins(const short *pins)
  315. {
  316. int i, ret = 1;
  317. for (i = 0; pins[i] >= 0; i++)
  318. ret &= mux_select_pin(pins[i]);
  319. return ret;
  320. }