summaryrefslogtreecommitdiff
path: root/nuttx
diff options
context:
space:
mode:
Diffstat (limited to 'nuttx')
-rw-r--r--nuttx/arch/arm/src/efm32/chip/efm32_usb.h29
-rw-r--r--nuttx/arch/arm/src/efm32/efm32_usbdev.c50
-rw-r--r--nuttx/arch/arm/src/efm32/efm32_usbhost.c2
3 files changed, 47 insertions, 34 deletions
diff --git a/nuttx/arch/arm/src/efm32/chip/efm32_usb.h b/nuttx/arch/arm/src/efm32/chip/efm32_usb.h
index 8844d0d95..6e11318f1 100644
--- a/nuttx/arch/arm/src/efm32/chip/efm32_usb.h
+++ b/nuttx/arch/arm/src/efm32/chip/efm32_usb.h
@@ -96,11 +96,12 @@
#define EFM32_USB_GRXSTSP_OFFSET 0x3c020 /* Receive Status Read and Pop Register */
#define EFM32_USB_GRXFSIZ_OFFSET 0x3c024 /* Receive FIFO Size Register */
#define EFM32_USB_GNPTXFSIZ_OFFSET 0x3c028 /* Non-periodic Transmit FIFO Size Register */
+#define EFM32_USB_DIEPTXF0_OFFSET 0x3c028 /* Endpoint 0 Transmit FIFO size */
#define EFM32_USB_GNPTXSTS_OFFSET 0x3c02c /* Non-periodic Transmit FIFO/Queue Status Register */
#define EFM32_USB_GDFIFOCFG_OFFSET 0x3c05c /* Global DFIFO Configuration Register */
#define EFM32_USB_HPTXFSIZ_OFFSET 0x3c100 /* Host Periodic Transmit FIFO Size Register */
-#define EFM32_USB_DIEPTXF_OFFSET(n) (0x3c104 + ((n) << 2))
+#define EFM32_USB_DIEPTXF_OFFSET(n) (0x3c104 + (((n)-1) << 2))
#define EFM32_USB_DIEPTXF1_OFFSET 0x3c104 /* Device IN Endpoint Transmit FIFO 1 Size Register */
#define EFM32_USB_DIEPTXF2_OFFSET 0x3c108 /* Device IN Endpoint Transmit FIFO 2 Size Register */
#define EFM32_USB_DIEPTXF3_OFFSET 0x3c10c /* Device IN Endpoint Transmit FIFO 3 Size Register */
@@ -299,17 +300,18 @@
#define EFM32_USB_GRXSTSP (EFM32_USB_BASE+EFM32_USB_GRXSTSP_OFFSET)
#define EFM32_USB_GRXFSIZ (EFM32_USB_BASE+EFM32_USB_GRXFSIZ_OFFSET)
#define EFM32_USB_GNPTXFSIZ (EFM32_USB_BASE+EFM32_USB_GNPTXFSIZ_OFFSET)
+#define EFM32_USB_DIEPTXF0 (EFM32_USB_BASE+EFM32_USB_DIEPTXF0_OFFSET)
#define EFM32_USB_GNPTXSTS (EFM32_USB_BASE+EFM32_USB_GNPTXSTS_OFFSET)
#define EFM32_USB_GDFIFOCFG (EFM32_USB_BASE+EFM32_USB_GDFIFOCFG_OFFSET)
#define EFM32_USB_HPTXFSIZ (EFM32_USB_BASE+EFM32_USB_HPTXFSIZ_OFFSET)
-#define EFM32_USB_DIEPTXF_BASE(n) (EFM32_USB_BASE+EFM32_USB_DIEPTXF_OFFSET(n))
-#define EFM32_USB_DIEPTXF1_BASE (EFM32_USB_BASE+EFM32_USB_DIEPTXF1_OFFSET)
-#define EFM32_USB_DIEPTXF2_BASE (EFM32_USB_BASE+EFM32_USB_DIEPTXF2_OFFSET)
-#define EFM32_USB_DIEPTXF3_BASE (EFM32_USB_BASE+EFM32_USB_DIEPTXF3_OFFSET)
-#define EFM32_USB_DIEPTXF4_BASE (EFM32_USB_BASE+EFM32_USB_DIEPTXF4_OFFSET)
-#define EFM32_USB_DIEPTXF5_BASE (EFM32_USB_BASE+EFM32_USB_DIEPTXF5_OFFSET)
-#define EFM32_USB_DIEPTXF6_BASE (EFM32_USB_BASE+EFM32_USB_DIEPTXF6_OFFSET)
+#define EFM32_USB_DIEPTXF(n) (EFM32_USB_BASE+EFM32_USB_DIEPTXF_OFFSET(n))
+#define EFM32_USB_DIEPTXF1 (EFM32_USB_BASE+EFM32_USB_DIEPTXF1_OFFSET)
+#define EFM32_USB_DIEPTXF2 (EFM32_USB_BASE+EFM32_USB_DIEPTXF2_OFFSET)
+#define EFM32_USB_DIEPTXF3 (EFM32_USB_BASE+EFM32_USB_DIEPTXF3_OFFSET)
+#define EFM32_USB_DIEPTXF4 (EFM32_USB_BASE+EFM32_USB_DIEPTXF4_OFFSET)
+#define EFM32_USB_DIEPTXF5 (EFM32_USB_BASE+EFM32_USB_DIEPTXF5_OFFSET)
+#define EFM32_USB_DIEPTXF6 (EFM32_USB_BASE+EFM32_USB_DIEPTXF6_OFFSET)
#define EFM32_USB_HCFG (EFM32_USB_BASE+EFM32_USB_HCFG_OFFSET)
#define EFM32_USB_HFIR (EFM32_USB_BASE+EFM32_USB_HFIR_OFFSET)
@@ -1324,6 +1326,17 @@
#define _USB_GNPTXFSIZ_NPTXFINEPTXF0DEP_DEFAULT 0x00000200UL /* Mode DEFAULT for USB_GNPTXFSIZ */
#define USB_GNPTXFSIZ_NPTXFINEPTXF0DEP_DEFAULT (_USB_GNPTXFSIZ_NPTXFINEPTXF0DEP_DEFAULT << 16) /* Shifted mode DEFAULT for USB_GNPTXFSIZ */
+/* Bit fields for USB DIEPTXF0 */
+
+#define _USB_DIEPTXF0_TXFSTADDR_SHIFT 0 /* Shift value for USB_NPTXFSTADDR */
+#define _USB_DIEPTXF0_TXFSTADDR_MASK 0x3FFUL /* Bit mask for USB_NPTXFSTADDR */
+#define _USB_DIEPTXF0_TXFSTADDR_DEFAULT 0x00000200UL /* Mode DEFAULT for USB_GNPTXFSIZ */
+#define USB_DIEPTXF0_TXFSTADDR_DEFAULT (_USB_DIEPTXF0_TXFSTADDR_DEFAULT << 0) /* Shifted mode DEFAULT for USB_GNPTXFSIZ */
+#define _USB_DIEPTXF0_TXFINEPTXF0DEP_SHIFT 16 /* Shift value for USB_NPTXFINEPTXF0DEP */
+#define _USB_DIEPTXF0_TXFINEPTXF0DEP_MASK 0xFFFF0000UL /* Bit mask for USB_NPTXFINEPTXF0DEP */
+#define _USB_DIEPTXF0_TXFINEPTXF0DEP_DEFAULT 0x00000200UL /* Mode DEFAULT for USB_GNPTXFSIZ */
+#define USB_DIEPTXF0_TXFINEPTXF0DEP_DEFAULT (_USB_DIEPTXF0_TXFINEPTXF0DEP_DEFAULT << 16) /* Shifted mode DEFAULT for USB_GNPTXFSIZ */
+
/* Bit fields for USB GNPTXSTS */
#define _USB_GNPTXSTS_RESETVALUE 0x00080200UL /* Default value for USB_GNPTXSTS */
diff --git a/nuttx/arch/arm/src/efm32/efm32_usbdev.c b/nuttx/arch/arm/src/efm32/efm32_usbdev.c
index 761bf1771..06724ec9a 100644
--- a/nuttx/arch/arm/src/efm32/efm32_usbdev.c
+++ b/nuttx/arch/arm/src/efm32/efm32_usbdev.c
@@ -1,5 +1,5 @@
/*******************************************************************************
- * arch/arm/src/efm32/efm32_otgfsdev.c
+ * arch/arm/src/efm32/efm32_usbdev.c
*
* Copyright (C) 2014 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
@@ -3351,7 +3351,7 @@ static inline void efm32_isocininterrupt(FAR struct efm32_usbdev_s *priv)
*/
efm32_req_complete(privep, -EIO);
-#warning "Will clear USB_DIEPCTL_USBAEP too"
+#warning "Will clear USB_DIEPCTL_USBACTEP too"
efm32_epin_disable(privep);
break;
}
@@ -3433,7 +3433,7 @@ static inline void efm32_isocoutinterrupt(FAR struct efm32_usbdev_s *priv)
*/
efm32_req_complete(privep, -EIO);
-#warning "Will clear USB_DOEPCTL_USBAEP too"
+#warning "Will clear USB_DOEPCTL_USBACTEP too"
efm32_epout_disable(privep);
break;
}
@@ -3816,17 +3816,17 @@ static int efm32_epout_configure(FAR struct efm32_ep_s *privep, uint8_t eptype,
regaddr = EFM32_USB_DOEPCTL(privep->epphy);
regval = efm32_getreg(regaddr);
- if ((regval & USB_DOEPCTL_USBAEP) == 0)
+ if ((regval & USB_DOEPCTL_USBACTEP) == 0)
{
if (regval & USB_DOEPCTL_NAKSTS)
{
regval |= USB_DOEPCTL_CNAK;
}
- regval &= ~(_USB_DOEPCTL_MPS_MASK | _USB_DOEPCTL_EPTYP_MASK);
+ regval &= ~(_USB_DOEPCTL_MPS_MASK | _USB_DOEPCTL_EPTYPE_MASK);
regval |= mpsiz;
- regval |= (eptype << _USB_DOEPCTL_EPTYP_SHIFT);
- regval |= (USB_DOEPCTL_SD0PID | USB_DOEPCTL_USBAEP);
+ regval |= (eptype << _USB_DOEPCTL_EPTYPE_SHIFT);
+ regval |= (USB_DOEPCTL_SETD0PIDEF | USB_DOEPCTL_USBACTEP);
efm32_putreg(regval, regaddr);
/* Save the endpoint configuration */
@@ -3912,18 +3912,18 @@ static int efm32_epin_configure(FAR struct efm32_ep_s *privep, uint8_t eptype,
regaddr = EFM32_USB_DIEPCTL(privep->epphy);
regval = efm32_getreg(regaddr);
- if ((regval & USB_DIEPCTL_USBAEP) == 0)
+ if ((regval & USB_DIEPCTL_USBACTEP) == 0)
{
if (regval & USB_DIEPCTL_NAKSTS)
{
regval |= USB_DIEPCTL_CNAK;
}
- regval &= ~(_USB_DIEPCTL_MPS_MASK | _USB_DIEPCTL_EPTYP_MASK | _USB_DIEPCTL_TXFNUM_MASK);
+ regval &= ~(_USB_DIEPCTL_MPS_MASK | _USB_DIEPCTL_EPTYPE_MASK | _USB_DIEPCTL_TXFNUM_MASK);
regval |= mpsiz;
- regval |= (eptype << _USB_DIEPCTL_EPTYP_SHIFT);
+ regval |= (eptype << _USB_DIEPCTL_EPTYPE_SHIFT);
regval |= (eptype << _USB_DIEPCTL_TXFNUM_SHIFT);
- regval |= (USB_DIEPCTL_SD0PID | USB_DIEPCTL_USBAEP);
+ regval |= (USB_DIEPCTL_SETD0PIDEF | USB_DIEPCTL_USBACTEP);
efm32_putreg(regval, regaddr);
/* Save the endpoint configuration */
@@ -4037,7 +4037,7 @@ static void efm32_epout_disable(FAR struct efm32_ep_s *privep)
regaddr = EFM32_USB_DOEPCTL(privep->epphy);
regval = efm32_getreg(regaddr);
- regval &= ~USB_DOEPCTL_USBAEP;
+ regval &= ~USB_DOEPCTL_USBACTEP;
regval |= (USB_DOEPCTL_EPDIS | USB_DOEPCTL_SNAK);
efm32_putreg(regval, regaddr);
@@ -4098,7 +4098,7 @@ static void efm32_epin_disable(FAR struct efm32_ep_s *privep)
regaddr = EFM32_USB_DIEPCTL(privep->epphy);
regval = efm32_getreg(regaddr);
- if ((regval & USB_DIEPCTL_USBAEP) == 0)
+ if ((regval & USB_DIEPCTL_USBACTEP) == 0)
{
return;
}
@@ -4118,7 +4118,7 @@ static void efm32_epin_disable(FAR struct efm32_ep_s *privep)
regaddr = EFM32_USB_DIEPCTL(privep->epphy);
regval = efm32_getreg(regaddr);
- regval &= ~USB_DIEPCTL_USBAEP;
+ regval &= ~USB_DIEPCTL_USBACTEP;
regval |= (USB_DIEPCTL_EPDIS | USB_DIEPCTL_SNAK);
efm32_putreg(regval, regaddr);
@@ -4139,7 +4139,7 @@ static void efm32_epin_disable(FAR struct efm32_ep_s *privep)
flags = irqsave();
regaddr = EFM32_USB_DIEPCTL(privep->epphy);
regval = efm32_getreg(regaddr);
- regval &= ~USB_DIEPCTL_USBAEP;
+ regval &= ~USB_DIEPCTL_USBACTEP;
regval |= (USB_DIEPCTL_EPDIS | USB_DIEPCTL_SNAK);
efm32_putreg(regval, regaddr);
@@ -4589,7 +4589,7 @@ static int efm32_ep_clrstall(FAR struct efm32_ep_s *privep)
regaddr = EFM32_USB_DIEPCTL(privep->epphy);
stallbit = USB_DIEPCTL_STALL;
- data0bit = USB_DIEPCTL_SD0PID;
+ data0bit = USB_DIEPCTL_SETD0PIDEF;
}
else
{
@@ -4597,7 +4597,7 @@ static int efm32_ep_clrstall(FAR struct efm32_ep_s *privep)
regaddr = EFM32_USB_DOEPCTL(privep->epphy);
stallbit = USB_DOEPCTL_STALL;
- data0bit = USB_DOEPCTL_SD0PID;
+ data0bit = USB_DOEPCTL_SETD0PIDEF;
}
/* Clear the stall bit */
@@ -5272,29 +5272,29 @@ static void efm32_hwinitialize(FAR struct efm32_usbdev_s *priv)
/* EP0 TX */
address = EFM32_RXFIFO_WORDS;
- regval = (address << _USB_DIEPTXF0_TX0FD_SHIFT) |
- (EFM32_EP0_TXFIFO_WORDS << _USB_DIEPTXF0_TX0FSA_SHIFT);
+ regval = (address << _USB_DIEPTXF0_TXFSTADDR_SHIFT) |
+ (EFM32_EP0_TXFIFO_WORDS << _USB_DIEPTXF0_TXFINEPTXF0DEP_SHIFT);
efm32_putreg(regval, EFM32_USB_DIEPTXF0);
/* EP1 TX */
address += EFM32_EP0_TXFIFO_WORDS;
- regval = (address << _USB_DIEPTXF_INEPTXSA_SHIFT) |
- (EFM32_EP1_TXFIFO_WORDS << _USB_DIEPTXF_INEPTXFD_SHIFT);
+ regval = (address << _USB_DIEPTXF1_INEPNTXFSTADDR_SHIFT) |
+ (EFM32_EP1_TXFIFO_WORDS << _USB_DIEPTXF1_INEPNTXFDEP_SHIFT);
efm32_putreg(regval, EFM32_USB_DIEPTXF1);
/* EP2 TX */
address += EFM32_EP1_TXFIFO_WORDS;
- regval = (address << _USB_DIEPTXF_INEPTXSA_SHIFT) |
- (EFM32_EP2_TXFIFO_WORDS << _USB_DIEPTXF_INEPTXFD_SHIFT);
+ regval = (address << _USB_DIEPTXF2_INEPNTXFSTADDR_SHIFT) |
+ (EFM32_EP2_TXFIFO_WORDS << _USB_DIEPTXF2_INEPNTXFDEP_SHIFT);
efm32_putreg(regval, EFM32_USB_DIEPTXF2);
/* EP3 TX */
address += EFM32_EP2_TXFIFO_WORDS;
- regval = (address << _USB_DIEPTXF_INEPTXSA_SHIFT) |
- (EFM32_EP3_TXFIFO_WORDS << _USB_DIEPTXF_INEPTXFD_SHIFT);
+ regval = (address << _USB_DIEPTXF3_INEPNTXFSTADDR_SHIFT) |
+ (EFM32_EP3_TXFIFO_WORDS << _USB_DIEPTXF3_INEPNTXFDEP_SHIFT);
efm32_putreg(regval, EFM32_USB_DIEPTXF3);
/* Flush the FIFOs */
diff --git a/nuttx/arch/arm/src/efm32/efm32_usbhost.c b/nuttx/arch/arm/src/efm32/efm32_usbhost.c
index 9dc68ac2f..3d0a78433 100644
--- a/nuttx/arch/arm/src/efm32/efm32_usbhost.c
+++ b/nuttx/arch/arm/src/efm32/efm32_usbhost.c
@@ -1,5 +1,5 @@
/*******************************************************************************
- * arch/arm/src/efm32/efm32_otgfshost.c
+ * arch/arm/src/efm32/efm32_usbhost.c
*
* Copyright (C) 2014 Gregory Nutt. All rights reserved.
* Authors: Gregory Nutt <gnutt@nuttx.org>