summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJerzy Kasenberg <[email protected]>2021-08-11 14:45:47 +0200
committerJerzy Kasenberg <[email protected]>2021-08-12 09:12:25 +0200
commitcde607338d723e3d62fba6cfb9ea4b07eb89a55d (patch)
tree446c99db2da1a78f2f43e1127fdd69e113422224 /src
parent63f7dfeb8ed006b0c0b252b26109cd68aabc7e25 (diff)
da1469x: Fix no VBUS startup
For self powered device if device started without VBUS present it would not be correctly attached to USB bus even if tusb_vbus_changed() was later called. This modifies dcd_init() so it starts USB state machine without checking if VBUS is present or not, like all others drivers do. tusb_vbus_changed() function is also removed its content was moved to dcd_init.
Diffstat (limited to 'src')
-rw-r--r--src/portable/dialog/da146xx/dcd_da146xx.c38
1 files changed, 10 insertions, 28 deletions
diff --git a/src/portable/dialog/da146xx/dcd_da146xx.c b/src/portable/dialog/da146xx/dcd_da146xx.c
index d209b152d..5fcf3bc5b 100644
--- a/src/portable/dialog/da146xx/dcd_da146xx.c
+++ b/src/portable/dialog/da146xx/dcd_da146xx.c
@@ -258,33 +258,6 @@ static const tusb_desc_endpoint_t ep0IN_desc =
#define XFER_CTL_BASE(_ep, _dir) &_dcd.xfer_status[_ep][_dir]
-// Function could be called when VBUS change was detected.
-void tusb_vbus_changed(bool present)
-{
- if (present != _dcd.vbus_present)
- {
- _dcd.vbus_present = present;
- if (present)
- {
- USB->USB_MCTRL_REG = USB_USB_MCTRL_REG_USBEN_Msk;
- USB->USB_NFSR_REG = 0;
- USB->USB_FAR_REG = 0x80;
- USB->USB_NFSR_REG = NFSR_NODE_RESET;
- USB->USB_TXMSK_REG = 0;
- USB->USB_RXMSK_REG = 0;
-
- USB->USB_MAMSK_REG = USB_USB_MAMSK_REG_USB_M_INTR_Msk |
- USB_USB_MAMSK_REG_USB_M_ALT_Msk |
- USB_USB_MAMSK_REG_USB_M_WARN_Msk;
- USB->USB_ALTMSK_REG = USB_USB_ALTMSK_REG_USB_M_RESET_Msk;
- }
- else
- {
- USB->USB_MCTRL_REG = 0;
- }
- }
-}
-
static void fill_tx_fifo(xfer_ctl_t * xfer)
{
int left_to_send;
@@ -763,7 +736,16 @@ static void handle_ep0_nak(void)
void dcd_init(uint8_t rhport)
{
USB->USB_MCTRL_REG = USB_USB_MCTRL_REG_USBEN_Msk;
- tusb_vbus_changed((CRG_TOP->ANA_STATUS_REG & CRG_TOP_ANA_STATUS_REG_VBUS_AVAILABLE_Msk) != 0);
+ USB->USB_NFSR_REG = 0;
+ USB->USB_FAR_REG = 0x80;
+ USB->USB_NFSR_REG = NFSR_NODE_RESET;
+ USB->USB_TXMSK_REG = 0;
+ USB->USB_RXMSK_REG = 0;
+
+ USB->USB_MAMSK_REG = USB_USB_MAMSK_REG_USB_M_INTR_Msk |
+ USB_USB_MAMSK_REG_USB_M_ALT_Msk |
+ USB_USB_MAMSK_REG_USB_M_WARN_Msk;
+ USB->USB_ALTMSK_REG = USB_USB_ALTMSK_REG_USB_M_RESET_Msk;
dcd_connect(rhport);
}