funcmux.c 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * (C) Copyright 2013
  4. * NVIDIA Corporation <www.nvidia.com>
  5. */
  6. /* Tegra124 high-level function multiplexing */
  7. #include <common.h>
  8. #include <asm/arch/clock.h>
  9. #include <asm/arch/funcmux.h>
  10. #include <asm/arch/pinmux.h>
  11. int funcmux_select(enum periph_id id, int config)
  12. {
  13. int bad_config = config != FUNCMUX_DEFAULT;
  14. switch (id) {
  15. case PERIPH_ID_UART4:
  16. switch (config) {
  17. case FUNCMUX_UART4_GPIO: /* TXD,RXD,CTS,RTS */
  18. pinmux_set_func(PMUX_PINGRP_PJ7, PMUX_FUNC_UARTD);
  19. pinmux_set_func(PMUX_PINGRP_PB0, PMUX_FUNC_UARTD);
  20. pinmux_set_func(PMUX_PINGRP_PB1, PMUX_FUNC_UARTD);
  21. pinmux_set_func(PMUX_PINGRP_PK7, PMUX_FUNC_UARTD);
  22. pinmux_set_io(PMUX_PINGRP_PJ7, PMUX_PIN_OUTPUT);
  23. pinmux_set_io(PMUX_PINGRP_PB0, PMUX_PIN_INPUT);
  24. pinmux_set_io(PMUX_PINGRP_PB1, PMUX_PIN_INPUT);
  25. pinmux_set_io(PMUX_PINGRP_PK7, PMUX_PIN_OUTPUT);
  26. pinmux_tristate_disable(PMUX_PINGRP_PJ7);
  27. pinmux_tristate_disable(PMUX_PINGRP_PB0);
  28. pinmux_tristate_disable(PMUX_PINGRP_PB1);
  29. pinmux_tristate_disable(PMUX_PINGRP_PK7);
  30. break;
  31. }
  32. break;
  33. case PERIPH_ID_UART1:
  34. switch (config) {
  35. case FUNCMUX_UART1_KBC:
  36. pinmux_set_func(PMUX_PINGRP_KB_ROW9_PS1,
  37. PMUX_FUNC_UARTA);
  38. pinmux_set_func(PMUX_PINGRP_KB_ROW10_PS2,
  39. PMUX_FUNC_UARTA);
  40. pinmux_set_io(PMUX_PINGRP_KB_ROW9_PS1, PMUX_PIN_OUTPUT);
  41. pinmux_set_io(PMUX_PINGRP_KB_ROW10_PS2, PMUX_PIN_INPUT);
  42. pinmux_tristate_disable(PMUX_PINGRP_KB_ROW9_PS1);
  43. pinmux_tristate_disable(PMUX_PINGRP_KB_ROW10_PS2);
  44. break;
  45. }
  46. break;
  47. /* Add other periph IDs here as needed */
  48. default:
  49. debug("%s: invalid periph_id %d", __func__, id);
  50. return -1;
  51. }
  52. if (bad_config) {
  53. debug("%s: invalid config %d for periph_id %d", __func__,
  54. config, id);
  55. return -1;
  56. }
  57. return 0;
  58. }