dpio.c 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * Copyright 2013-2016 Freescale Semiconductor, Inc.
  4. * Copyright 2017 NXP
  5. */
  6. #include <fsl-mc/fsl_mc_sys.h>
  7. #include <fsl-mc/fsl_mc_cmd.h>
  8. #include <fsl-mc/fsl_dpio.h>
  9. int dpio_open(struct fsl_mc_io *mc_io,
  10. uint32_t cmd_flags,
  11. uint32_t dpio_id,
  12. uint16_t *token)
  13. {
  14. struct mc_command cmd = { 0 };
  15. int err;
  16. /* prepare command */
  17. cmd.header = mc_encode_cmd_header(DPIO_CMDID_OPEN,
  18. cmd_flags,
  19. 0);
  20. DPIO_CMD_OPEN(cmd, dpio_id);
  21. /* send command to mc*/
  22. err = mc_send_command(mc_io, &cmd);
  23. if (err)
  24. return err;
  25. /* retrieve response parameters */
  26. *token = MC_CMD_HDR_READ_TOKEN(cmd.header);
  27. return 0;
  28. }
  29. int dpio_close(struct fsl_mc_io *mc_io,
  30. uint32_t cmd_flags,
  31. uint16_t token)
  32. {
  33. struct mc_command cmd = { 0 };
  34. /* prepare command */
  35. cmd.header = mc_encode_cmd_header(DPIO_CMDID_CLOSE,
  36. cmd_flags,
  37. token);
  38. /* send command to mc*/
  39. return mc_send_command(mc_io, &cmd);
  40. }
  41. int dpio_create(struct fsl_mc_io *mc_io,
  42. uint16_t dprc_token,
  43. uint32_t cmd_flags,
  44. const struct dpio_cfg *cfg,
  45. uint32_t *obj_id)
  46. {
  47. struct mc_command cmd = { 0 };
  48. int err;
  49. /* prepare command */
  50. cmd.header = mc_encode_cmd_header(DPIO_CMDID_CREATE,
  51. cmd_flags,
  52. dprc_token);
  53. DPIO_CMD_CREATE(cmd, cfg);
  54. /* send command to mc*/
  55. err = mc_send_command(mc_io, &cmd);
  56. if (err)
  57. return err;
  58. /* retrieve response parameters */
  59. MC_CMD_READ_OBJ_ID(cmd, *obj_id);
  60. return 0;
  61. }
  62. int dpio_destroy(struct fsl_mc_io *mc_io,
  63. uint16_t dprc_token,
  64. uint32_t cmd_flags,
  65. uint32_t obj_id)
  66. {
  67. struct mc_command cmd = { 0 };
  68. /* prepare command */
  69. cmd.header = mc_encode_cmd_header(DPIO_CMDID_DESTROY,
  70. cmd_flags,
  71. dprc_token);
  72. /* set object id to destroy */
  73. CMD_DESTROY_SET_OBJ_ID_PARAM0(cmd, obj_id);
  74. /* send command to mc*/
  75. return mc_send_command(mc_io, &cmd);
  76. }
  77. int dpio_enable(struct fsl_mc_io *mc_io,
  78. uint32_t cmd_flags,
  79. uint16_t token)
  80. {
  81. struct mc_command cmd = { 0 };
  82. /* prepare command */
  83. cmd.header = mc_encode_cmd_header(DPIO_CMDID_ENABLE,
  84. cmd_flags,
  85. token);
  86. /* send command to mc*/
  87. return mc_send_command(mc_io, &cmd);
  88. }
  89. int dpio_disable(struct fsl_mc_io *mc_io,
  90. uint32_t cmd_flags,
  91. uint16_t token)
  92. {
  93. struct mc_command cmd = { 0 };
  94. /* prepare command */
  95. cmd.header = mc_encode_cmd_header(DPIO_CMDID_DISABLE,
  96. cmd_flags,
  97. token);
  98. /* send command to mc*/
  99. return mc_send_command(mc_io, &cmd);
  100. }
  101. int dpio_reset(struct fsl_mc_io *mc_io,
  102. uint32_t cmd_flags,
  103. uint16_t token)
  104. {
  105. struct mc_command cmd = { 0 };
  106. /* prepare command */
  107. cmd.header = mc_encode_cmd_header(DPIO_CMDID_RESET,
  108. cmd_flags,
  109. token);
  110. /* send command to mc*/
  111. return mc_send_command(mc_io, &cmd);
  112. }
  113. int dpio_get_attributes(struct fsl_mc_io *mc_io,
  114. uint32_t cmd_flags,
  115. uint16_t token,
  116. struct dpio_attr *attr)
  117. {
  118. struct mc_command cmd = { 0 };
  119. int err;
  120. /* prepare command */
  121. cmd.header = mc_encode_cmd_header(DPIO_CMDID_GET_ATTR,
  122. cmd_flags,
  123. token);
  124. /* send command to mc*/
  125. err = mc_send_command(mc_io, &cmd);
  126. if (err)
  127. return err;
  128. /* retrieve response parameters */
  129. DPIO_RSP_GET_ATTR(cmd, attr);
  130. return 0;
  131. }
  132. int dpio_get_api_version(struct fsl_mc_io *mc_io,
  133. u32 cmd_flags,
  134. u16 *major_ver,
  135. u16 *minor_ver)
  136. {
  137. struct mc_command cmd = { 0 };
  138. int err;
  139. /* prepare command */
  140. cmd.header = mc_encode_cmd_header(DPIO_CMDID_GET_API_VERSION,
  141. cmd_flags, 0);
  142. /* send command to mc */
  143. err = mc_send_command(mc_io, &cmd);
  144. if (err)
  145. return err;
  146. /* retrieve response parameters */
  147. mc_cmd_read_api_version(&cmd, major_ver, minor_ver);
  148. return 0;
  149. }