otg.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. /**@file otg.h
  2. * @brief otg驱动头文件
  3. * @details 结构体声明,功能函数声明
  4. * @author jieli
  5. * @date 2021-7-22
  6. * @version V1.0
  7. * @copyright Copyright(c)2010-2021 珠海市杰理科技股份有限公司
  8. *********************************************************************
  9. * @attention
  10. * 硬件平台:AC632N
  11. * SDK版本:AC632N_V1.0.0_SDK
  12. * @修改日志:
  13. * <table>
  14. * <tr><th>Date <th>Version <th>Author <th>Description
  15. * <tr><td>2021-7-22 <td>1.0 <td>jieli <td>创建初始版本
  16. * </table>
  17. *
  18. *********************************************************************
  19. */
  20. #ifndef __OTG_H__
  21. #define __OTG_H__
  22. #include "asm/usb.h"
  23. /**@enum usb_hotplug.state 或 usb_hotplug.last_state
  24. * @brief otg当前所处模式 或 上一次所处模式
  25. */
  26. enum {
  27. IDLE_MODE = 0, ///<空闲模式
  28. DISCONN_MODE = 1, ///<断连模式
  29. HOST_MODE = 2, ///<主机模式
  30. PRE_SLAVE_MODE, ///<成为从机模式前的一个中间模式
  31. SLAVE_MODE_WAIT_CONFIRMATION, ///<从机模式还需等待再次确认
  32. SLAVE_MODE, ///<从机模式
  33. CHARGE_MODE, ///<充电模式
  34. OTG_USER_MODE, ///<用户模式,暂时未具体定义
  35. };
  36. /**@enum 空
  37. * @brief otg挂起时,所选操作模式
  38. */
  39. enum {
  40. OTG_OP_NULL = 0, ///< ///<空,无意义
  41. OTG_UNINSTALL = 1, ///<OTG卸载
  42. OTG_KEEP_STATE, ///<OTG保持
  43. OTG_SUSPEND, ///< OTG挂起
  44. OTG_RESUME, ///< OTG恢复
  45. };
  46. #define OTG_HOST_MODE BIT(0)
  47. #define OTG_SLAVE_MODE BIT(1)
  48. #define OTG_CHARGE_MODE BIT(2)
  49. #define OTG_DET_DP_ONLY BIT(3)
  50. /**@struct otg_dev_data
  51. * @brief otg_dev_data信息结构体 \n
  52. * 自定义的存储otg设备相关数据信息
  53. */
  54. struct otg_dev_data {
  55. u8 usb_dev_en; ///<有哪几个otg设备使能,如USB0,USB1。
  56. u8 slave_online_cnt; ///<从机上线阈值
  57. u8 slave_offline_cnt; ///<从机下线阈值
  58. u8 host_online_cnt; ///<主机上线阈值
  59. u8 host_offline_cnt; ///<主机下线阈值
  60. u8 detect_mode; ///<otg可用模式配置
  61. u8 detect_time_interval; ///<检测时间间隔,单位 ms
  62. void *otg1; //需要使用双USB口独立配置时,在板级.c文件用户自定义一个otg信息的结构体,并指向它。
  63. };
  64. /**@brief USB设备当前模式获取
  65. * @param[in] usb_id USB接口的id号
  66. * @return 函数的执行结果
  67. * - IDLE_MODE
  68. * - DISCONN_MODE
  69. * - HOST_MODE
  70. * - PRE_SLAVE_MODE
  71. * - SLAVE_MODE_WAIT_CONFIRMATION
  72. * - SLAVE_MODE
  73. * - CHARGE_MODE
  74. * - OTG_USER_MODE
  75. * @par 示例:
  76. * @code
  77. * usb_otg_online(0); 获取USB0当前模式
  78. * @encode
  79. */
  80. u32 usb_otg_online(const usb_dev usb_id);
  81. // u32 usb_otg_init(u32 mode);
  82. /**@brief 将DP/DM脚设为高阻
  83. * @param[in] usb_id USB接口的id号
  84. * @return 无
  85. * @par 示例:
  86. * @code
  87. * usb_otg_io_suspend(0); 将USB0的DP/DM脚设为高阻状态
  88. * @encode
  89. */
  90. void usb_otg_io_suspend(usb_dev usb_id);
  91. /**@brief 恢复DP/DM引脚的USB功能,并发起usb reset
  92. * @param[in] usb_id USB接口的id号
  93. * @return 无
  94. * @par 示例:
  95. * @code
  96. * usb_otg_io_resume(0); 将USB0的IO口功能恢复
  97. * @encode
  98. */
  99. void usb_otg_io_resume(usb_dev usb_id);
  100. /**@brief 将usb_otg设备挂起
  101. * @param[in] usb_id USB接口的id号
  102. * @param[in] op_mode 选择挂起模式
  103. * @ref OTG_UNINSTALL OTG卸载
  104. * @ref OTG_KEEP_STATE OTG保持原模式
  105. * @return 无
  106. * @par 示例:
  107. * @code
  108. * usb_otg_suspend(0,OTG_KEEP_STATE); USB0保持原来的模式
  109. * @encode
  110. */
  111. void usb_otg_suspend(usb_dev usb_id, u8 op_mode);
  112. /**@brief 将usb_otg设备恢复
  113. * @param[in] usb_id USB接口的id号
  114. * @return 无
  115. * @par 示例:
  116. * @code
  117. * usb_otg_resume(0); USB0恢复
  118. * @encode
  119. */
  120. void usb_otg_resume(usb_dev usb_id);
  121. extern const struct device_operations usb_dev_ops;
  122. #endif /*OTG_H*/