summaryrefslogtreecommitdiff
path: root/nuttx/arch
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2015-03-27 10:47:03 -0600
committerGregory Nutt <gnutt@nuttx.org>2015-03-27 10:47:03 -0600
commit995317acc23b22d72562d72dadf2cee0a6aeba5e (patch)
tree885d7eb7fc487c2cb325ffb7f6587d4c4bafe22e /nuttx/arch
parent00d8ac3ba4966f96483d6d971aba88ffd97bb3d4 (diff)
downloadpx4-nuttx-995317acc23b22d72562d72dadf2cee0a6aeba5e.tar.gz
px4-nuttx-995317acc23b22d72562d72dadf2cee0a6aeba5e.tar.bz2
px4-nuttx-995317acc23b22d72562d72dadf2cee0a6aeba5e.zip
SAMV7 Ethernet+USB Updates
Diffstat (limited to 'nuttx/arch')
-rw-r--r--nuttx/arch/arm/src/samv7/sam_emac.c5
-rw-r--r--nuttx/arch/arm/src/samv7/sam_usbdevhs.c15
2 files changed, 14 insertions, 6 deletions
diff --git a/nuttx/arch/arm/src/samv7/sam_emac.c b/nuttx/arch/arm/src/samv7/sam_emac.c
index f1955f14c..4a34bb6d8 100644
--- a/nuttx/arch/arm/src/samv7/sam_emac.c
+++ b/nuttx/arch/arm/src/samv7/sam_emac.c
@@ -1041,7 +1041,7 @@ static int sam_buffer_allocate(struct sam_emac_s *priv)
priv->xfrq[0].txdesc = priv->attr->tx0desc;
priv->xfrq[0].ntxbuffers = priv->attr->ntxbuffers;
priv->xfrq[0].rxdesc = priv->attr->rx0desc;
- priv->xfrq[0].nrxbuffers = priv->attr->rtxbuffers;
+ priv->xfrq[0].nrxbuffers = priv->attr->nrxbuffers;
priv->xfrq[0].txbuffer = priv->attr->tx0buffer;
priv->xfrq[0].txbufsize = EMAC_TX_UNITSIZE;
@@ -1602,7 +1602,7 @@ static int sam_recvframe(struct sam_emac_s *priv, int qid)
{
if (rxndx == priv->xfrq[qid].rxndx)
{
- nllvdbg("ERROR: No EOF (Invalid of buffers too small)\n");
+ nllvdbg("ERROR: No EOF (Invalid or buffers too small)\n");
do
{
/* Give ownership back to the EMAC */
@@ -1624,6 +1624,7 @@ static int sam_recvframe(struct sam_emac_s *priv, int qid)
}
}
while (rxndx != priv->xfrq[qid].rxndx);
+
return -EIO;
}
diff --git a/nuttx/arch/arm/src/samv7/sam_usbdevhs.c b/nuttx/arch/arm/src/samv7/sam_usbdevhs.c
index 7dc7c9a1b..a957b3fa2 100644
--- a/nuttx/arch/arm/src/samv7/sam_usbdevhs.c
+++ b/nuttx/arch/arm/src/samv7/sam_usbdevhs.c
@@ -4209,7 +4209,7 @@ static int sam_pullup(FAR struct usbdev_s *dev, bool enable)
{
/* DETACH=1: USBHS is detached, UTMI transceiver is suspended. */
- regval = sam_getreg(SAM_USBHS_DEVCTRL);
+ regval = sam_getreg(SAM_USBHS_DEVCTRL);
regval |= USBHS_DEVCTRL_DETACH;
sam_putreg(regval, SAM_USBHS_DEVCTRL);
@@ -4533,13 +4533,20 @@ static void sam_hw_shutdown(struct sam_usbdev_s *priv)
sam_putreg(USBHS_DEVINT_ALL, SAM_USBHS_DEVICR);
- /* Disconnect the device */
+ /* DETACH=1: USBHS is detached, UTMI transceiver is suspended. */
- sam_pullup(&priv->usbdev, false);
+ regval = sam_getreg(SAM_USBHS_DEVCTRL);
+ regval |= USBHS_DEVCTRL_DETACH;
+ sam_putreg(regval, SAM_USBHS_DEVCTRL);
+
+ /* Freeze clocking */
+
+ regval = sam_getreg(SAM_USBHS_CTRL);
+ regval |= USBHS_CTRL_FRZCLK;
+ sam_putreg(regval, SAM_USBHS_CTRL);
/* Disable USB hardware */
- regval = sam_getreg(SAM_USBHS_CTRL);
regval &= ~USBHS_CTRL_USBE;
sam_putreg(regval, SAM_USBHS_CTRL);