mirror of
https://github.com/espressif/esp-idf.git
synced 2026-10-02 11:10:54 +03:00
refactor(usb): Make usb hal layer independent
This commit is contained in:
@@ -158,10 +158,6 @@ if(CONFIG_SOC_IEEE802154_SUPPORTED)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(CONFIG_SOC_USB_OTG_SUPPORTED)
|
||||
list(APPEND srcs "${target_folder}/usb_dwc_periph.c")
|
||||
endif()
|
||||
|
||||
if(CONFIG_SOC_DAC_SUPPORTED)
|
||||
list(APPEND srcs "${target_folder}/dac_periph.c")
|
||||
endif()
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include <stddef.h>
|
||||
#include "soc/gpio_sig_map.h"
|
||||
#include "soc/interrupts.h"
|
||||
#include "soc/usb_periph.h"
|
||||
|
||||
/* -------------------------------- Private --------------------------------- */
|
||||
|
||||
static const usb_otg_signal_conn_t otg_signals = {
|
||||
// Inputs
|
||||
.iddig = USB_OTG_IDDIG_IN_IDX,
|
||||
.avalid = USB_OTG_AVALID_IN_IDX,
|
||||
.bvalid = USB_SRP_BVALID_IN_IDX,
|
||||
.vbusvalid = USB_OTG_VBUSVALID_IN_IDX,
|
||||
.sessend = USB_SRP_SESSEND_IN_IDX,
|
||||
// Outputs
|
||||
.idpullup = USB_OTG_IDPULLUP_OUT_IDX,
|
||||
.dppulldown = USB_OTG_DPPULLDOWN_OUT_IDX,
|
||||
.dmpulldown = USB_OTG_DMPULLDOWN_OUT_IDX,
|
||||
.drvvbus = USB_OTG_DRVVBUS_OUT_IDX,
|
||||
.chrgvbus = USB_SRP_CHRGVBUS_OUT_IDX,
|
||||
.dischrgvbus = USB_SRP_DISCHRGVBUS_OUT_IDX,
|
||||
};
|
||||
|
||||
static const usb_internal_phy_io_t internal_phy_io = {
|
||||
.dp = 21,
|
||||
.dm = 22,
|
||||
};
|
||||
|
||||
/* --------------------------------- Public --------------------------------- */
|
||||
|
||||
const usb_dwc_info_t usb_dwc_info = {
|
||||
.controllers = {
|
||||
[0] = {
|
||||
.fsls_signals = NULL,
|
||||
.otg_signals = &otg_signals,
|
||||
.internal_phy_io = &internal_phy_io,
|
||||
.supported_phys = USB_PHY_INST_FSLS_INTERN_0,
|
||||
.irq = ETS_USB_OTG11_INTR_SOURCE,
|
||||
.irq_2nd_cpu = -1,
|
||||
},
|
||||
},
|
||||
};
|
||||
@@ -1,59 +0,0 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include <stddef.h>
|
||||
#include "soc/interrupts.h"
|
||||
#include "soc/gpio_sig_map.h"
|
||||
#include "soc/usb_periph.h"
|
||||
#include "soc/usb_dwc_struct.h"
|
||||
|
||||
/* -------------------------------- Private --------------------------------- */
|
||||
|
||||
static const usb_otg_signal_conn_t dwc_fs_otg_signals = {
|
||||
// Inputs
|
||||
.iddig = USB_OTG11_IDDIG_PAD_IN_IDX,
|
||||
.avalid = USB_OTG11_AVALID_PAD_IN_IDX,
|
||||
.bvalid = USB_SRP_BVALID_PAD_IN_IDX,
|
||||
.vbusvalid = USB_OTG11_VBUSVALID_PAD_IN_IDX,
|
||||
.sessend = USB_SRP_SESSEND_PAD_IN_IDX,
|
||||
// Outputs
|
||||
.idpullup = USB_OTG11_IDPULLUP_PAD_OUT_IDX,
|
||||
.dppulldown = USB_OTG11_DPPULLDOWN_PAD_OUT_IDX,
|
||||
.dmpulldown = USB_OTG11_DMPULLDOWN_PAD_OUT_IDX,
|
||||
.drvvbus = USB_OTG11_DRVVBUS_PAD_OUT_IDX,
|
||||
.chrgvbus = USB_SRP_CHRGVBUS_PAD_OUT_IDX,
|
||||
.dischrgvbus = USB_SRP_DISCHRGVBUS_PAD_OUT_IDX,
|
||||
};
|
||||
|
||||
static const usb_internal_phy_io_t internal_phy_io = {
|
||||
.dp = 27,
|
||||
.dm = 26,
|
||||
};
|
||||
|
||||
/* --------------------------------- Public --------------------------------- */
|
||||
|
||||
const usb_dwc_info_t usb_dwc_info = {
|
||||
.controllers = {
|
||||
// High-Speed USB-DWC
|
||||
[0] = {
|
||||
.fsls_signals = NULL,
|
||||
.otg_signals = NULL,
|
||||
.internal_phy_io = NULL, // HS PHY is not mapped to any GPIO
|
||||
.supported_phys = USB_PHY_INST_UTMI_0,
|
||||
.irq = ETS_USB_OTG_INTR_SOURCE,
|
||||
.irq_2nd_cpu = ETS_USB_OTG_ENDP_MULTI_PROC_INTR_SOURCE,
|
||||
},
|
||||
// Full-Speed USB-DWC
|
||||
[1] = {
|
||||
.fsls_signals = NULL,
|
||||
.otg_signals = &dwc_fs_otg_signals,
|
||||
.internal_phy_io = &internal_phy_io,
|
||||
.supported_phys = USB_PHY_INST_FSLS_INTERN_0,
|
||||
.irq = ETS_USB_OTG11_CH0_INTR_SOURCE,
|
||||
.irq_2nd_cpu = -1,
|
||||
},
|
||||
},
|
||||
};
|
||||
@@ -1,60 +0,0 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include "soc/gpio_sig_map.h"
|
||||
#include "soc/interrupts.h"
|
||||
#include "soc/usb_periph.h"
|
||||
|
||||
/* -------------------------------- Private --------------------------------- */
|
||||
|
||||
static const usb_fsls_serial_signal_conn_t fsls_signals = {
|
||||
// Inputs
|
||||
.rx_dp = USB_EXTPHY_VP_IDX,
|
||||
.rx_dm = USB_EXTPHY_VM_IDX,
|
||||
.rx_rcv = USB_EXTPHY_RCV_IDX,
|
||||
// Outputs
|
||||
.suspend_n = USB_EXTPHY_SUSPND_IDX,
|
||||
.tx_enable_n = USB_EXTPHY_OEN_IDX,
|
||||
.tx_dp = USB_EXTPHY_VPO_IDX,
|
||||
.tx_dm = USB_EXTPHY_VMO_IDX,
|
||||
.fs_edge_sel = USB_EXTPHY_SPEED_IDX,
|
||||
};
|
||||
|
||||
static const usb_otg_signal_conn_t otg_signals = {
|
||||
// Inputs
|
||||
.iddig = USB_OTG_IDDIG_IN_IDX,
|
||||
.avalid = USB_OTG_AVALID_IN_IDX,
|
||||
.bvalid = USB_SRP_BVALID_IN_IDX,
|
||||
.vbusvalid = USB_OTG_VBUSVALID_IN_IDX,
|
||||
.sessend = USB_SRP_SESSEND_IN_IDX,
|
||||
// Outputs
|
||||
.idpullup = USB_OTG_IDPULLUP_IDX,
|
||||
.dppulldown = USB_OTG_DPPULLDOWN_IDX,
|
||||
.dmpulldown = USB_OTG_DMPULLDOWN_IDX,
|
||||
.drvvbus = USB_OTG_DRVVBUS_IDX,
|
||||
.chrgvbus = USB_SRP_CHRGVBUS_IDX,
|
||||
.dischrgvbus = USB_SRP_DISCHRGVBUS_IDX,
|
||||
};
|
||||
|
||||
static const usb_internal_phy_io_t internal_phy_io = {
|
||||
.dp = 20,
|
||||
.dm = 19,
|
||||
};
|
||||
|
||||
/* --------------------------------- Public --------------------------------- */
|
||||
|
||||
const usb_dwc_info_t usb_dwc_info = {
|
||||
.controllers = {
|
||||
[0] = {
|
||||
.fsls_signals = &fsls_signals,
|
||||
.otg_signals = &otg_signals,
|
||||
.internal_phy_io = &internal_phy_io,
|
||||
.supported_phys = USB_PHY_INST_FSLS_INTERN_0,
|
||||
.irq = ETS_USB_INTR_SOURCE,
|
||||
.irq_2nd_cpu = -1,
|
||||
},
|
||||
},
|
||||
};
|
||||
@@ -1,60 +0,0 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include "soc/gpio_sig_map.h"
|
||||
#include "soc/interrupts.h"
|
||||
#include "soc/usb_periph.h"
|
||||
|
||||
/* -------------------------------- Private --------------------------------- */
|
||||
|
||||
static const usb_fsls_serial_signal_conn_t fsls_signals = {
|
||||
// Inputs
|
||||
.rx_dp = USB_EXTPHY_VP_IDX,
|
||||
.rx_dm = USB_EXTPHY_VM_IDX,
|
||||
.rx_rcv = USB_EXTPHY_RCV_IDX,
|
||||
// Outputs
|
||||
.suspend_n = USB_EXTPHY_SUSPND_IDX,
|
||||
.tx_enable_n = USB_EXTPHY_OEN_IDX,
|
||||
.tx_dp = USB_EXTPHY_VPO_IDX,
|
||||
.tx_dm = USB_EXTPHY_VMO_IDX,
|
||||
.fs_edge_sel = USB_EXTPHY_SPEED_IDX,
|
||||
};
|
||||
|
||||
static const usb_otg_signal_conn_t otg_signals = {
|
||||
// Inputs
|
||||
.iddig = USB_OTG_IDDIG_IN_IDX,
|
||||
.avalid = USB_OTG_AVALID_IN_IDX,
|
||||
.bvalid = USB_SRP_BVALID_IN_IDX,
|
||||
.vbusvalid = USB_OTG_VBUSVALID_IN_IDX,
|
||||
.sessend = USB_SRP_SESSEND_IN_IDX,
|
||||
// Outputs
|
||||
.idpullup = USB_OTG_IDPULLUP_IDX,
|
||||
.dppulldown = USB_OTG_DPPULLDOWN_IDX,
|
||||
.dmpulldown = USB_OTG_DMPULLDOWN_IDX,
|
||||
.drvvbus = USB_OTG_DRVVBUS_IDX,
|
||||
.chrgvbus = USB_SRP_CHRGVBUS_IDX,
|
||||
.dischrgvbus = USB_SRP_DISCHRGVBUS_IDX,
|
||||
};
|
||||
|
||||
static const usb_internal_phy_io_t internal_phy_io = {
|
||||
.dp = 20,
|
||||
.dm = 19,
|
||||
};
|
||||
|
||||
/* --------------------------------- Public --------------------------------- */
|
||||
|
||||
const usb_dwc_info_t usb_dwc_info = {
|
||||
.controllers = {
|
||||
[0] = {
|
||||
.fsls_signals = &fsls_signals,
|
||||
.otg_signals = &otg_signals,
|
||||
.internal_phy_io = &internal_phy_io,
|
||||
.supported_phys = USB_PHY_INST_FSLS_INTERN_0,
|
||||
.irq = ETS_USB_INTR_SOURCE,
|
||||
.irq_2nd_cpu = -1,
|
||||
},
|
||||
},
|
||||
};
|
||||
@@ -1,112 +0,0 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2020-2025 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include "soc/soc_pins.h"
|
||||
#include "soc/soc_caps.h"
|
||||
#include "soc/gpio_sig_map.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#if SOC_USB_OTG_SUPPORTED
|
||||
|
||||
/* ---------------------------------- Types --------------------------------- */
|
||||
|
||||
/**
|
||||
* @brief USB PHY Instance Type
|
||||
*/
|
||||
typedef enum {
|
||||
USB_PHY_INST_FSLS_INTERN_0 = (1 << 0),
|
||||
USB_PHY_INST_FSLS_INTERN_1 = (1 << 1),
|
||||
USB_PHY_INST_UTMI_0 = (1 << 2),
|
||||
USB_PHY_INST_EXTERN = (1 << 3),
|
||||
} usb_phy_inst_t;
|
||||
|
||||
/**
|
||||
* @brief USB PHY FSLS Serial Interface Signals
|
||||
*
|
||||
* Structure to store the GPIO matrix signal indexes for a USB PHY FSLS Serial
|
||||
* interface's signals.
|
||||
*
|
||||
* @note Refer to section "2.2.1.13 FsLsSerialMode" of the UTMI+ for more
|
||||
* details regarding the FSLS Serial Interface.
|
||||
*/
|
||||
typedef struct {
|
||||
// Inputs
|
||||
int rx_dp;
|
||||
int rx_dm;
|
||||
int rx_rcv;
|
||||
// Outputs
|
||||
int suspend_n;
|
||||
int tx_enable_n;
|
||||
int tx_dp;
|
||||
int tx_dm;
|
||||
int fs_edge_sel;
|
||||
} usb_fsls_serial_signal_conn_t;
|
||||
|
||||
/**
|
||||
* @brief USB PHY UTMI OTG Interface Signal Index Type
|
||||
*
|
||||
* Structure to store the GPIO matrix signal indexes for a UTMI PHY interface's
|
||||
* OTG signals.
|
||||
*/
|
||||
typedef struct {
|
||||
// Inputs
|
||||
int iddig;
|
||||
int avalid;
|
||||
int bvalid;
|
||||
int vbusvalid;
|
||||
int sessend;
|
||||
// Outputs
|
||||
int idpullup;
|
||||
int dppulldown;
|
||||
int dmpulldown;
|
||||
int drvvbus;
|
||||
int chrgvbus;
|
||||
int dischrgvbus;
|
||||
} usb_otg_signal_conn_t;
|
||||
|
||||
/**
|
||||
* @brief Internal USB PHY IO
|
||||
*
|
||||
* Structure to store the IO numbers for a particular internal USB PHY
|
||||
*/
|
||||
typedef struct {
|
||||
int dp;
|
||||
int dm;
|
||||
} usb_internal_phy_io_t;
|
||||
|
||||
/**
|
||||
* @brief USB Controller Information
|
||||
*
|
||||
* Structure to store information for all USB-DWC instances
|
||||
*
|
||||
* For targets with multiple USB controllers, we support only fixed mapping of the PHYs.
|
||||
* This is a software limitation; the hardware supports swapping Controllers and PHYs.
|
||||
*/
|
||||
typedef struct {
|
||||
struct {
|
||||
const usb_fsls_serial_signal_conn_t * const fsls_signals; // Must be set if external PHY is supported by controller
|
||||
const usb_otg_signal_conn_t * const otg_signals;
|
||||
const usb_internal_phy_io_t * const internal_phy_io; // Must be set for internal FSLS PHY(s)
|
||||
const usb_phy_inst_t supported_phys; // Bitmap of supported PHYs by this controller
|
||||
const int irq;
|
||||
const int irq_2nd_cpu; // The USB-DWC can provide 2nd interrupt so each CPU can have its own interrupt line. Set to -1 if not supported
|
||||
} controllers [SOC_USB_OTG_PERIPH_NUM];
|
||||
} usb_dwc_info_t;
|
||||
|
||||
extern const usb_dwc_info_t usb_dwc_info;
|
||||
|
||||
#endif // SOC_USB_OTG_SUPPORTED
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user