mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
125ff0050e
Until now, only usb_phy signals for external PHY were defined. This is now extended with all OTG signals.
181 lines
6.6 KiB
C
181 lines
6.6 KiB
C
/*
|
|
* SPDX-FileCopyrightText: 2015-2022 Espressif Systems (Shanghai) CO LTD
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <stdint.h>
|
|
#include <stdbool.h>
|
|
#include "soc/soc_caps.h"
|
|
#include "hal/usb_phy_types.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* @brief Initialization for usb_phy_otg_io_conf_t: Self-powered device
|
|
*/
|
|
#define USB_PHY_SELF_POWERED_DEVICE(vbus_monitor_io) \
|
|
{ \
|
|
.iddig_io_num = -1, \
|
|
.avalid_io_num = -1, \
|
|
.vbusvalid_io_num = -1, \
|
|
.idpullup_io_num = -1, \
|
|
.dppulldown_io_num = -1, \
|
|
.dmpulldown_io_num = -1, \
|
|
.drvvbus_io_num = -1, \
|
|
.bvalid_io_num = vbus_monitor_io, \
|
|
.sessend_io_num = -1, \
|
|
.chrgvbus_io_num = -1, \
|
|
.dischrgvbus_io_num = -1, \
|
|
};
|
|
|
|
/**
|
|
* @brief USB PHY status
|
|
*/
|
|
typedef enum {
|
|
USB_PHY_STATUS_FREE, /**< PHY is not being used */
|
|
USB_PHY_STATUS_IN_USE, /**< PHY is in use */
|
|
} usb_phy_status_t;
|
|
|
|
/**
|
|
* @brief USB PHY available actions
|
|
*/
|
|
typedef enum {
|
|
USB_PHY_ACTION_HOST_ALLOW_CONN, /**< Enable physical connection when operating as an OTG Host */
|
|
USB_PHY_ACTION_HOST_FORCE_DISCONN, /**< Disable physical connection when operating as an OTG Host */
|
|
USB_PHY_ACTION_MAX,
|
|
} usb_phy_action_t;
|
|
|
|
/**
|
|
* @brief USB external PHY IO pins configuration structure
|
|
*/
|
|
typedef struct {
|
|
int vp_io_num; /**< GPIO pin to USB_EXTPHY_VP_IDX */
|
|
int vm_io_num; /**< GPIO pin to USB_EXTPHY_VM_IDX */
|
|
int rcv_io_num; /**< GPIO pin to USB_EXTPHY_RCV_IDX */
|
|
int oen_io_num; /**< GPIO pin to USB_EXTPHY_OEN_IDX */
|
|
int vpo_io_num; /**< GPIO pin to USB_EXTPHY_VPO_IDX */
|
|
int vmo_io_num; /**< GPIO pin to USB_EXTPHY_VMO_IDX */
|
|
} usb_phy_ext_io_conf_t;
|
|
|
|
/**
|
|
* @brief USB OTG IO pins configuration structure
|
|
*/
|
|
typedef struct {
|
|
int iddig_io_num; /**< GPIO pin to USB_OTG_IDDIG_IN_IDX */
|
|
int avalid_io_num; /**< GPIO pin to USB_OTG_AVALID_IN_IDX */
|
|
int vbusvalid_io_num; /**< GPIO pin to USB_OTG_VBUSVALID_IN_IDX */
|
|
int idpullup_io_num; /**< GPIO pin to USB_OTG_IDPULLUP_IDX */
|
|
int dppulldown_io_num; /**< GPIO pin to USB_OTG_DPPULLDOWN_IDX */
|
|
int dmpulldown_io_num; /**< GPIO pin to USB_OTG_DMPULLDOWN_IDX */
|
|
int drvvbus_io_num; /**< GPIO pin to USB_OTG_DRVVBUS_IDX */
|
|
int bvalid_io_num; /**< GPIO pin to USB_SRP_BVALID_IN_IDX */
|
|
int sessend_io_num; /**< GPIO pin to USB_SRP_SESSEND_IN_IDX */
|
|
int chrgvbus_io_num; /**< GPIO pin to USB_SRP_CHRGVBUS_IDX */
|
|
int dischrgvbus_io_num; /**< GPIO pin to USB_SRP_DISCHRGVBUS_IDX */
|
|
} usb_phy_otg_io_conf_t;
|
|
|
|
/**
|
|
* @brief USB PHY configure struct
|
|
*
|
|
* At minimum the PHY controller and PHY target must be initialized.
|
|
*/
|
|
typedef struct {
|
|
usb_phy_controller_t controller; /**< USB PHY controller */
|
|
usb_phy_target_t target; /**< USB PHY target INT/EXT */
|
|
usb_otg_mode_t otg_mode; /**< USB OTG mode */
|
|
usb_phy_speed_t otg_speed; /**< USB OTG speed */
|
|
const usb_phy_ext_io_conf_t *ext_io_conf; /**< USB external PHY IO pins configuration */
|
|
const usb_phy_otg_io_conf_t *otg_io_conf; /**< USB OTG IO pins configuration */
|
|
} usb_phy_config_t;
|
|
|
|
typedef struct phy_context_t *usb_phy_handle_t; /**< USB PHY context handle */
|
|
|
|
/**
|
|
* @brief Initialize a new USB PHY
|
|
* Configure at least PHY source.
|
|
*
|
|
* This function will enable the OTG Controller
|
|
*
|
|
* @param[in] config USB PHY configurtion struct
|
|
* @param[out] handle_ret USB PHY context handle
|
|
*
|
|
* @return
|
|
* - ESP_OK Success
|
|
* - ESP_FAIL USB PHY init error.
|
|
* - ESP_ERR_INVALID_STATE USB PHY not installed.
|
|
* - ESP_ERR_NO_MEM USB_OTG installation failed due to no mem.
|
|
*/
|
|
esp_err_t usb_new_phy(const usb_phy_config_t *config, usb_phy_handle_t *handle_ret);
|
|
|
|
/**
|
|
* @brief Configure OTG mode for a USB PHY
|
|
*
|
|
* @param handle Pointer of USB PHY context handle
|
|
* @param mode USB OTG mode
|
|
*
|
|
* @return
|
|
* - ESP_OK Success
|
|
* - ESP_ERR_INVALID_ARG Parameter error.
|
|
* - ESP_FAIL OTG set mode fail.
|
|
*/
|
|
esp_err_t usb_phy_otg_set_mode(usb_phy_handle_t handle, usb_otg_mode_t mode);
|
|
|
|
/**
|
|
* @brief Configure USB speed for a USB PHY that is operating as an OTG Device
|
|
*
|
|
* @param handle Pointer of USB PHY context handle
|
|
* @param mode USB speed
|
|
*
|
|
* @return
|
|
* - ESP_OK Success
|
|
* - ESP_ERR_INVALID_ARG Parameter error.
|
|
* - ESP_FAIL OTG set speed fail.
|
|
*/
|
|
esp_err_t usb_phy_otg_dev_set_speed(usb_phy_handle_t handle, usb_phy_speed_t speed);
|
|
|
|
/**
|
|
* @brief Take a action for a USB PHY
|
|
*
|
|
* @param handle Pointer of USB PHY context handle
|
|
* @param action USB PHY action
|
|
*
|
|
* @return
|
|
* - ESP_OK Success
|
|
* - ESP_ERR_INVALID_ARG Parameter error.
|
|
* - ESP_FAIL Action cannot be performed.
|
|
*/
|
|
esp_err_t usb_phy_action(usb_phy_handle_t handle, usb_phy_action_t action);
|
|
|
|
/**
|
|
* @brief Delete a USB PHY
|
|
*
|
|
* @param handle Pointer of USB PHY context handle
|
|
*
|
|
* @return
|
|
* - ESP_OK Success
|
|
* - ESP_ERR_INVALID_ARG Parameter error.
|
|
*/
|
|
esp_err_t usb_del_phy(usb_phy_handle_t handle);
|
|
|
|
/**
|
|
* @brief Get status of a USB PHY
|
|
*
|
|
* @param[in] target The specific PHY target to check
|
|
* @param[out] status Status of the PHY
|
|
*
|
|
* @return
|
|
* - ESP_OK Success
|
|
* - ESP_ERR_INVALID_ARG Parameter error.
|
|
* - ESP_ERR_INVALID_STATE USB PHY not installed.
|
|
*/
|
|
esp_err_t usb_phy_get_phy_status(usb_phy_target_t target, usb_phy_status_t *status);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|