diff --git a/arch/arm/src/samdl/chip/samd_gclk.h b/arch/arm/src/samdl/chip/samd_gclk.h index 6c337d8bd75..5426dc394d3 100644 --- a/arch/arm/src/samdl/chip/samd_gclk.h +++ b/arch/arm/src/samdl/chip/samd_gclk.h @@ -127,10 +127,11 @@ # define GCLK_CLKCTRL_ID_WDT (3 << GCLK_CLKCTRL_ID_SHIFT) /* WDT */ # define GCLK_CLKCTRL_ID_RTC (4 << GCLK_CLKCTRL_ID_SHIFT) /* RTC */ # define GCLK_CLKCTRL_ID_EIC (5 << GCLK_CLKCTRL_ID_SHIFT) /* EIC */ +# define GCLK_CLKCTRL_ID_USB (6 << GCLK_CLKCTRL_ID_SHIFT) /* USB */ # define GCLK_CLKCTRL_ID_EVSYS(n) (((n)+7) << GCLK_CLKCTRL_ID_SHIFT) # define GCLK_CLKCTRL_ID_EVSYS0 (7 << GCLK_CLKCTRL_ID_SHIFT) /* EVSYS_CHANNEL_0 */ # define GCLK_CLKCTRL_ID_EVSYS1 (8 << GCLK_CLKCTRL_ID_SHIFT) /* EVSYS_CHANNEL_1 */ -# define GCLK_CLKCTRL_ID_EVSYS2 (9 << GCLK_CLKCTRL_ID_SHIFT) /* EVSYS_CHANNEL_2 */ +# define GCLK_CLKCTRL_ID_EVSYS2 (9 << GCLK_CLKCTRL_ID_SHIFT) /* EVSYS_CHANNEL_2 */ # define GCLK_CLKCTRL_ID_EVSYS3 (10 << GCLK_CLKCTRL_ID_SHIFT) /* EVSYS_CHANNEL_3 */ # define GCLK_CLKCTRL_ID_EVSYS4 (11 << GCLK_CLKCTRL_ID_SHIFT) /* EVSYS_CHANNEL_4 */ # define GCLK_CLKCTRL_ID_EVSYS5 (12 << GCLK_CLKCTRL_ID_SHIFT) /* EVSYS_CHANNEL_5 */ diff --git a/arch/arm/src/samdl/chip/samd_i2c_master.h b/arch/arm/src/samdl/chip/samd_i2c_master.h index 5b674729f35..0f459cd307b 100644 --- a/arch/arm/src/samdl/chip/samd_i2c_master.h +++ b/arch/arm/src/samdl/chip/samd_i2c_master.h @@ -235,10 +235,10 @@ #define I2C_BAUD_SHIFT (0) /* Bits 0-7: Master baud rate */ #define I2C_BAUD_MASK (0xff << I2C_BAUD_SHIFT) -# define I2C_BAUD(n) ((uint16)(n) << I2C_BAUD_SHIFT) +# define I2C_BAUD(n) ((uint16_t)(n) << I2C_BAUD_SHIFT) #define I2C_BAUDLOW_SHIFT (8) /* Bits 8-15: Master baud rate low */ #define I2C_BAUDLOW_MASK (0xff << I2C_BAUDLOW_SHIFT) -# define I2C_BAUDLOW(n) (uint16)(n) << I2C_BAUDLOW_SHIFT) +# define I2C_BAUDLOW(n) (uint16_t)(n) << I2C_BAUDLOW_SHIFT #ifdef CONFIG_ARCH_FAMILY_SAMD21 # define I2C_HSBAUD_SHIFT (16) /* Bits 16-23: High speed master baud rate */ @@ -246,7 +246,7 @@ # define I2C_HSBAUD(n) ((uint16)(n) << I2C_HSBAUD_SHIFT) # define I2C_HSBAUDLOW_SHIFT (24) /* Bits 24-31: High speed master baud rate low */ # define I2C_HSBAUDLOW_MASK (0xff << I2C_HSBAUDLOW_SHIFT) -# define I2C_HSBAUDLOW(n) (uint16)(n) << I2C_HSBAUDLOW_SHIFT) +# define I2C_HSBAUDLOW(n) (uint16)(n) << I2C_HSBAUDLOW_SHIFT #endif /* Interrupt enable clear, interrupt enable set, interrupt enable set, interrupt flag and diff --git a/arch/arm/src/samdl/chip/saml_usb.h b/arch/arm/src/samdl/chip/saml_usb.h index 29ffadde9ae..fd2d733fe59 100644 --- a/arch/arm/src/samdl/chip/saml_usb.h +++ b/arch/arm/src/samdl/chip/saml_usb.h @@ -49,7 +49,7 @@ #include "chip.h" -#ifdef CONFIG_ARCH_FAMILY_SAML21 +#if defined(CONFIG_ARCH_FAMILY_SAML21) || defined(CONFIG_ARCH_FAMILY_SAMD21) /******************************************************************************************** * Pre-processor Definitions diff --git a/arch/arm/src/samdl/sam_usb.c b/arch/arm/src/samdl/sam_usb.c index 175e486a38a..02521250738 100644 --- a/arch/arm/src/samdl/sam_usb.c +++ b/arch/arm/src/samdl/sam_usb.c @@ -106,7 +106,13 @@ #include "up_arch.h" #include "up_internal.h" -#include "saml_periphclks.h" + +#if defined(CONFIG_ARCH_FAMILY_SAMD20) || defined(CONFIG_ARCH_FAMILY_SAMD21) + #include "samd_periphclks.h" +#elif defined(CONFIG_ARCH_FAMILY_SAML21) + #include "saml_periphclks.h" +#endif + #include "sam_gclk.h" #include "chip.h" #include "sam_port.h" @@ -133,7 +139,7 @@ * enabled. */ -#ifndef CONFIG_DEBUG +#ifndef CONFIG_DEBUG_USB # undef CONFIG_SAMDL_USB_REGDEBUG #endif @@ -891,7 +897,7 @@ static inline void sam_putreg8(uint8_t regval, uint32_t regaddr) * Name: sam_dumpep ****************************************************************************/ -#if defined(CONFIG_SAMDL_USB_REGDEBUG) && defined(CONFIG_DEBUG) +#if defined(CONFIG_SAMDL_USB_REGDEBUG) && defined(CONFIG_DEBUG_USB) static void sam_dumpep(struct sam_usbdev_s *priv, uint8_t epno) { /* Global Registers */ @@ -1620,7 +1626,7 @@ static int sam_ep_configure(struct usbdev_ep_s *ep, /* Verify parameters. Endpoint 0 is not available at this interface */ -#if defined(CONFIG_DEBUG) || defined(CONFIG_USBDEV_TRACE) +#if defined(CONFIG_DEBUG_USB) || defined(CONFIG_USBDEV_TRACE) uint8_t epno = USB_EPNO(desc->addr); usbtrace(TRACE_EPCONFIGURE, (uint16_t)epno); @@ -1666,7 +1672,7 @@ static int sam_ep_disable(struct usbdev_ep_s *ep) irqstate_t flags; uint8_t epno; -#ifdef CONFIG_DEBUG +#ifdef CONFIG_DEBUG_USB if (!ep) { usbtrace(TRACE_DEVERROR(SAM_TRACEERR_INVALIDPARMS), 0); @@ -1703,7 +1709,7 @@ static struct usbdev_req_s *sam_ep_allocreq(struct usbdev_ep_s *ep) { struct sam_req_s *privreq; -#ifdef CONFIG_DEBUG +#ifdef CONFIG_DEBUG_USB if (!ep) { usbtrace(TRACE_DEVERROR(SAM_TRACEERR_INVALIDPARMS), 0); @@ -1736,7 +1742,7 @@ static void sam_ep_freereq(struct usbdev_ep_s *ep, struct usbdev_req_s *req) { struct sam_req_s *privreq = (struct sam_req_s*)req; -#ifdef CONFIG_DEBUG +#ifdef CONFIG_DEBUG_USB if (!ep || !req) { usbtrace(TRACE_DEVERROR(SAM_TRACEERR_INVALIDPARMS), 0); @@ -1803,7 +1809,7 @@ static int sam_ep_submit(struct usbdev_ep_s *ep, struct usbdev_req_s *req) uint8_t epno; int ret = OK; -#ifdef CONFIG_DEBUG +#ifdef CONFIG_DEBUG_USB if (!req || !req->callback || !req->buf || !ep) { usbtrace(TRACE_DEVERROR(SAM_TRACEERR_INVALIDPARMS), 0); @@ -1816,7 +1822,7 @@ static int sam_ep_submit(struct usbdev_ep_s *ep, struct usbdev_req_s *req) usbtrace(TRACE_EPSUBMIT, USB_EPNO(ep->eplog)); priv = privep->dev; -#ifdef CONFIG_DEBUG +#ifdef CONFIG_DEBUG_USB if (!priv->driver) { usbtrace(TRACE_DEVERROR(SAM_TRACEERR_NOTCONFIGURED), priv->usbdev.speed); @@ -1914,7 +1920,7 @@ static int sam_ep_cancel(struct usbdev_ep_s *ep, struct usbdev_req_s *req) struct sam_ep_s *privep = (struct sam_ep_s *)ep; irqstate_t flags; -#ifdef CONFIG_DEBUG +#ifdef CONFIG_DEBUG_USB if (!ep || !req) { usbtrace(TRACE_DEVERROR(SAM_TRACEERR_INVALIDPARMS), 0); @@ -1940,7 +1946,7 @@ static int sam_ep_stallresume(struct usbdev_ep_s *ep, bool resume) irqstate_t flags; int ret; -#ifdef CONFIG_DEBUG +#ifdef CONFIG_DEBUG_USB if (!ep) { usbtrace(TRACE_DEVERROR(SAM_TRACEERR_INVALIDPARMS), 0); @@ -2015,7 +2021,7 @@ static struct usbdev_ep_s *sam_allocep(struct usbdev_s *dev, uint8_t epno, uint16_t epset = SAM_EPSET_NOTEP0; usbtrace(TRACE_DEVALLOCEP, (uint16_t)epno); -#ifdef CONFIG_DEBUG +#ifdef CONFIG_DEBUG_USB if (!dev) { usbtrace(TRACE_DEVERROR(SAM_TRACEERR_INVALIDPARMS), 0); @@ -2077,7 +2083,7 @@ static void sam_freeep(struct usbdev_s *dev, struct usbdev_ep_s *ep) struct sam_usbdev_s *priv; struct sam_ep_s *privep; -#ifdef CONFIG_DEBUG +#ifdef CONFIG_DEBUG_USB if (!dev || !ep) { usbtrace(TRACE_DEVERROR(SAM_TRACEERR_INVALIDPARMS), 0); @@ -2109,7 +2115,7 @@ static int sam_getframe(struct usbdev_s *dev) uint32_t regval; uint16_t frameno; -#ifdef CONFIG_DEBUG +#ifdef CONFIG_DEBUG_USB if (!dev) { usbtrace(TRACE_DEVERROR(SAM_TRACEERR_INVALIDPARMS), 0); @@ -2141,7 +2147,7 @@ static int sam_wakeup(struct usbdev_s *dev) uint16_t regval; usbtrace(TRACE_DEVWAKEUP, 0); -#ifdef CONFIG_DEBUG +#ifdef CONFIG_DEBUG_USB if (!dev) { usbtrace(TRACE_DEVERROR(SAM_TRACEERR_INVALIDPARMS), 0); @@ -2188,7 +2194,7 @@ static int sam_selfpowered(struct usbdev_s *dev, bool selfpowered) usbtrace(TRACE_DEVSELFPOWERED, (uint16_t)selfpowered); -#ifdef CONFIG_DEBUG +#ifdef CONFIG_DEBUG_USB if (!dev) { usbtrace(TRACE_DEVERROR(SAM_TRACEERR_INVALIDPARMS), 0); @@ -3720,7 +3726,36 @@ static int sam_pullup(struct usbdev_s *dev, bool enable) static void sam_enableclks(void) { sam_usb_enableperiph(); + +#if defined(CONFIG_ARCH_FAMILY_SAMD20) || defined(CONFIG_ARCH_FAMILY_SAMD21) + uint16_t regval; + + /* Enable GCLK specified by BOARD_USB_GCLKGEN */ + + regval = GCLK_CLKCTRL_ID_USB; + putreg16(regval, SAM_GCLK_CLKCTRL); + + /* Wait for clock to become disabled */ + + while ((getreg16(SAM_GCLK_CLKCTRL) & GCLK_CLKCTRL_CLKEN) != 0); + + /* Select the USB source clock generator */ + + regval |= (uint16_t)BOARD_USB_GCLKGEN << GCLK_CLKCTRL_GEN_SHIFT; + + /* Write the new configuration */ + + putreg16(regval, SAM_GCLK_CLKCTRL); + + regval |= GCLK_CLKCTRL_CLKEN; + putreg16(regval, SAM_GCLK_CLKCTRL); + + while ((getreg16(SAM_GCLK_CLKCTRL) & GCLK_CLKCTRL_CLKEN) == 0); + +#elif defined(CONFIG_ARCH_FAMILY_SAML21) sam_gclk_chan_enable(GCLK_CHAN_USB, BOARD_USB_GCLKGEN); + +#endif } /**************************************************************************** @@ -3729,9 +3764,12 @@ static void sam_enableclks(void) static void sam_disableclks(void) { - sam_gclk_chan_disable(GCLK_CHAN_USB); - sam_usb_disableperiph(); +#if defined(CONFIG_ARCH_FAMILY_SAMD20) || defined(CONFIG_ARCH_FAMILY_SAMD21) +#elif defined(CONFIG_ARCH_FAMILY_SAML21) + sam_gclk_chan_disable(GCLK_CHAN_USB); +#endif + sam_usb_disableperiph(); } /**************************************************************************** @@ -3901,7 +3939,8 @@ static void sam_sw_setup(struct sam_usbdev_s *priv) /* Select a smaller endpoint size for EP0 */ -#if SAM_EP0_MAXPACKET < SAM_USB_MAXPACKETSIZE(0) +//#if SAM_EP0_MAXPACKET < SAM_USB_MAXPACKETSIZE(0) +#if SAM_EP0_MAXPACKET < 64 priv->eplist[EP0].ep.maxpacket = SAM_EP0_MAXPACKET; #endif } @@ -3940,7 +3979,7 @@ int usbdev_register(struct usbdevclass_driver_s *driver) usbtrace(TRACE_DEVREGISTER, 0); -#ifdef CONFIG_DEBUG +#ifdef CONFIG_DEBUG_USB if (!driver || !driver->ops->bind || !driver->ops->unbind || !driver->ops->disconnect || !driver->ops->setup) { @@ -4013,7 +4052,7 @@ int usbdev_unregister(struct usbdevclass_driver_s *driver) usbtrace(TRACE_DEVUNREGISTER, 0); -#ifdef CONFIG_DEBUG +#ifdef CONFIG_DEBUG_USB if (driver != priv->driver) { usbtrace(TRACE_DEVERROR(SAM_TRACEERR_INVALIDPARMS), 0); diff --git a/arch/arm/src/samdl/sam_usb.h b/arch/arm/src/samdl/sam_usb.h index 278f8e88ebf..bbc10e7caa5 100644 --- a/arch/arm/src/samdl/sam_usb.h +++ b/arch/arm/src/samdl/sam_usb.h @@ -88,7 +88,7 @@ extern "C" * *****************************************************************************/ -void sam_udp_suspend(FAR struct usbdev_s *dev, bool resume); +void sam_usb_suspend(FAR struct usbdev_s *dev, bool resume); #undef EXTERN #if defined(__cplusplus)