funcmux.c 1.8 KB

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