Files
99_7018_lmx/include_lib/driver/device/usb/otg.h
2025-10-29 13:10:02 +08:00

141 lines
4.0 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**@file otg.h
* @brief otg驱动头文件
* @details 结构体声明,功能函数声明
* @author jieli
* @date 2021-7-22
* @version V1.0
* @copyright Copyright(c)2010-2021 珠海市杰理科技股份有限公司
*********************************************************************
* @attention
* 硬件平台AC632N
* SDK版本AC632N_V1.0.0_SDK
* @修改日志:
* <table>
* <tr><th>Date <th>Version <th>Author <th>Description
* <tr><td>2021-7-22 <td>1.0 <td>jieli <td>创建初始版本
* </table>
*
*********************************************************************
*/
#ifndef __OTG_H__
#define __OTG_H__
#include "asm/usb.h"
/**@enum usb_hotplug.state 或 usb_hotplug.last_state
* @brief otg当前所处模式 或 上一次所处模式
*/
enum {
IDLE_MODE = 0, ///<空闲模式
DISCONN_MODE = 1, ///<断连模式
HOST_MODE = 2, ///<主机模式
PRE_SLAVE_MODE, ///<成为从机模式前的一个中间模式
SLAVE_MODE_WAIT_CONFIRMATION, ///<从机模式还需等待再次确认
SLAVE_MODE, ///<从机模式
CHARGE_MODE, ///<充电模式
OTG_USER_MODE, ///<用户模式,暂时未具体定义
};
/**@enum 空
* @brief otg挂起时所选操作模式
*/
enum {
OTG_OP_NULL = 0, ///< ///<空,无意义
OTG_UNINSTALL = 1, ///<OTG卸载
OTG_KEEP_STATE, ///<OTG保持
OTG_SUSPEND, ///< OTG挂起
OTG_RESUME, ///< OTG恢复
};
#define OTG_HOST_MODE BIT(0)
#define OTG_SLAVE_MODE BIT(1)
#define OTG_CHARGE_MODE BIT(2)
#define OTG_DET_DP_ONLY BIT(3)
#define OTG_DET_DM_ONLY BIT(4)
/**@struct otg_dev_data
* @brief otg_dev_data信息结构体 \n
* 自定义的存储otg设备相关数据信息
*/
struct otg_dev_data {
u8 usb_dev_en; ///<有哪几个otg设备使能如USB0USB1。
u8 slave_online_cnt; ///<从机上线阈值
u8 slave_offline_cnt; ///<从机下线阈值
u8 host_online_cnt; ///<主机上线阈值
u8 host_offline_cnt; ///<主机下线阈值
u8 detect_mode; ///<otg可用模式配置
u8 detect_time_interval; ///<检测时间间隔,单位 ms
void *otg1; //需要使用双USB口独立配置时在板级.c文件用户自定义一个otg信息的结构体并指向它。
};
/**@brief USB设备当前模式获取
* @param[in] usb_id USB接口的id号
* @return 函数的执行结果
* - IDLE_MODE
* - DISCONN_MODE
* - HOST_MODE
* - PRE_SLAVE_MODE
* - SLAVE_MODE_WAIT_CONFIRMATION
* - SLAVE_MODE
* - CHARGE_MODE
* - OTG_USER_MODE
* @par 示例:
* @code
* usb_otg_online(0); 获取USB0当前模式
* @encode
*/
u32 usb_otg_online(const usb_dev usb_id);
// u32 usb_otg_init(u32 mode);
/**@brief 将DP/DM脚设为高阻
* @param[in] usb_id USB接口的id号
* @return 无
* @par 示例:
* @code
* usb_otg_io_suspend(0); 将USB0的DP/DM脚设为高阻状态
* @encode
*/
void usb_otg_io_suspend(usb_dev usb_id);
/**@brief 恢复DP/DM引脚的USB功能并发起usb reset
* @param[in] usb_id USB接口的id号
* @return 无
* @par 示例:
* @code
* usb_otg_io_resume(0); 将USB0的IO口功能恢复
* @encode
*/
void usb_otg_io_resume(usb_dev usb_id);
/**@brief 将usb_otg设备挂起
* @param[in] usb_id USB接口的id号
* @param[in] op_mode 选择挂起模式
* @ref OTG_UNINSTALL OTG卸载
* @ref OTG_KEEP_STATE OTG保持原模式
* @return 无
* @par 示例:
* @code
* usb_otg_suspend(0,OTG_KEEP_STATE); USB0保持原来的模式
* @encode
*/
void usb_otg_suspend(usb_dev usb_id, u8 op_mode);
/**@brief 将usb_otg设备恢复
* @param[in] usb_id USB接口的id号
* @return 无
* @par 示例:
* @code
* usb_otg_resume(0); USB0恢复
* @encode
*/
void usb_otg_resume(usb_dev usb_id);
void usb_otg_sof_check_register_hooks(void (*before)(), void (*after)());
extern const struct device_operations usb_dev_ops;
#endif /*OTG_H*/