SAMD/L21 USB: Remove all commented out logic.
This commit is contained in:
parent
76ea6f09ec
commit
10fbb2b089
@ -537,7 +537,6 @@ static const struct usb_epdesc_s g_ep0desc =
|
||||
.type = USB_DESC_TYPE_ENDPOINT,
|
||||
.addr = EP0,
|
||||
.attr = USB_EP_ATTR_XFER_CONTROL,
|
||||
// REVISIT:
|
||||
.mxpacketsize = {64, 0},
|
||||
.interval = 0
|
||||
};
|
||||
@ -582,7 +581,6 @@ const struct trace_msg_t g_usb_trace_strings_deverror[] =
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
/* Interrupt event strings that may be enabled for more desciptive USB trace
|
||||
* output.
|
||||
*/
|
||||
@ -637,46 +635,10 @@ const struct trace_msg_t g_usb_trace_strings_intdecode[] =
|
||||
TRACE_STR(SAM_TRACEINTID_EP0WRSTATUS),
|
||||
TRACE_STR(SAM_TRACEINTID_EPTRCPT0_LEN),
|
||||
|
||||
/*
|
||||
TRACE_STR(SAM_TRACEINTID_ADDRESSED),
|
||||
TRACE_STR(SAM_TRACEINTID_CLEARFEATURE),
|
||||
TRACE_STR(SAM_TRACEINTID_RXSUSP),
|
||||
TRACE_STR(SAM_TRACEINTID_DEVGETSTATUS),
|
||||
TRACE_STR(SAM_TRACEINTID_DISPATCH),
|
||||
TRACE_STR(SAM_TRACEINTID_ENDBUSRES),
|
||||
TRACE_STR(SAM_TRACEINTID_EP),
|
||||
TRACE_STR(SAM_TRACEINTID_EP0SETUPIN),
|
||||
TRACE_STR(SAM_TRACEINTID_EP0SETUPOUT),
|
||||
TRACE_STR(SAM_TRACEINTID_EP0SETUPSETADDRESS),
|
||||
TRACE_STR(SAM_TRACEINTID_EPGETSTATUS),
|
||||
TRACE_STR(SAM_TRACEINTID_EPINQEMPTY),
|
||||
TRACE_STR(SAM_TRACEINTID_EPOUTQEMPTY),
|
||||
TRACE_STR(SAM_TRACEINTID_GETCONFIG),
|
||||
TRACE_STR(SAM_TRACEINTID_GETSETDESC),
|
||||
TRACE_STR(SAM_TRACEINTID_GETSETIF),
|
||||
TRACE_STR(SAM_TRACEINTID_GETSTATUS),
|
||||
TRACE_STR(SAM_TRACEINTID_IFGETSTATUS),
|
||||
TRACE_STR(SAM_TRACEINTID_SOF),
|
||||
TRACE_STR(SAM_TRACEINTID_NOSTDREQ),
|
||||
TRACE_STR(SAM_TRACEINTID_RXDATABK0),
|
||||
TRACE_STR(SAM_TRACEINTID_RXDATABK1),
|
||||
TRACE_STR(SAM_TRACEINTID_RXSETUP),
|
||||
TRACE_STR(SAM_TRACEINTID_SETCONFIG),
|
||||
TRACE_STR(SAM_TRACEINTID_SETFEATURE),
|
||||
TRACE_STR(SAM_TRACEINTID_STALLSNT),
|
||||
TRACE_STR(SAM_TRACEINTID_SYNCHFRAME),
|
||||
TRACE_STR(SAM_TRACEINTID_TXCOMP),
|
||||
TRACE_STR(SAM_TRACEINTID_UPSTRRES),
|
||||
TRACE_STR(SAM_TRACEINTID_WAKEUP),
|
||||
*/
|
||||
TRACE_STR_END
|
||||
};
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Public Data
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Private Private Functions
|
||||
****************************************************************************/
|
||||
@ -1213,7 +1175,7 @@ static int sam_req_write(struct sam_usbdev_s *priv, struct sam_ep_s *privep)
|
||||
|
||||
/* setup 0 length TX transfer */
|
||||
|
||||
priv->eplist[0].descb[1]->addr = (uint32_t) &priv->ep0out[0];
|
||||
priv->eplist[0].descb[1]->addr = (uint32_t) &priv->ep0out[0];
|
||||
priv->eplist[0].descb[1]->pktsize &= ~USBDEV_PKTSIZE_BCNT_MASK;
|
||||
priv->eplist[0].descb[1]->pktsize &= ~USBDEV_PKTSIZE_MPKTSIZE_MASK;
|
||||
priv->eplist[0].descb[1]->pktsize |= USBDEV_PKTSIZE_BCNT(0);
|
||||
@ -1354,14 +1316,14 @@ static int sam_req_read(struct sam_usbdev_s *priv, struct sam_ep_s *privep,
|
||||
|
||||
/* activate new read request from queue */
|
||||
|
||||
privep->rxactive = true;
|
||||
privep->rxactive = true;
|
||||
privreq->req.xfrd = 0;
|
||||
privreq->inflight = privreq->req.len;
|
||||
priv->eplist[epno].descb[0]->addr = (uint32_t) privreq->req.buf;
|
||||
packetsize = priv->eplist[epno].descb[0]->pktsize;
|
||||
packetsize &= ~USBDEV_PKTSIZE_BCNT_MASK;
|
||||
packetsize &= ~USBDEV_PKTSIZE_MPKTSIZE_MASK;
|
||||
packetsize |= USBDEV_PKTSIZE_MPKTSIZE(privreq->inflight);
|
||||
packetsize = priv->eplist[epno].descb[0]->pktsize;
|
||||
packetsize &= ~USBDEV_PKTSIZE_BCNT_MASK;
|
||||
packetsize &= ~USBDEV_PKTSIZE_MPKTSIZE_MASK;
|
||||
packetsize |= USBDEV_PKTSIZE_MPKTSIZE(privreq->inflight);
|
||||
sam_putreg8(USBDEV_EPSTATUS_BK0RDY, SAM_USBDEV_EPSTATUSCLR(epno));
|
||||
|
||||
return OK;
|
||||
@ -1464,7 +1426,7 @@ static int sam_ep_configure_internal(struct sam_ep_s *privep,
|
||||
|
||||
/* Initialize the endpoint structure */
|
||||
|
||||
privep->ep.eplog = desc->addr; /* Includes direction */
|
||||
privep->ep.eplog = desc->addr; /* Includes direction */
|
||||
privep->ep.maxpacket = maxpacket;
|
||||
privep->epstate = USB_EPSTATE_IDLE;
|
||||
|
||||
@ -1472,34 +1434,27 @@ static int sam_ep_configure_internal(struct sam_ep_s *privep,
|
||||
|
||||
epconf = 0x00;
|
||||
sam_putreg8(0x00, SAM_USBDEV_EPCFG(epno));
|
||||
//epconf = sam_getreg8(SAM_USBDEV_EPCFG(epno));
|
||||
//uinfo("BEFORE: epconf=0x%X\n", epconf);
|
||||
|
||||
if (dirin)
|
||||
{
|
||||
/* disable bank1 (IN) */
|
||||
/* Disable bank1 (IN) */
|
||||
|
||||
//epconf &= ~USBDEV_EPCFG_EPTYPE1_MASK;
|
||||
intflags = USBDEV_EPINT_TRCPT1 | /*USBDEV_EPINT_TRFAIL1 |*/ USBDEV_EPINT_STALL1;
|
||||
intflags = USBDEV_EPINT_TRCPT1 | USBDEV_EPINT_STALL1;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* disable bank0 (OUT) */
|
||||
//epconf &= ~USBDEV_EPCFG_EPTYPE0_MASK;
|
||||
intflags = USBDEV_EPINT_TRCPT0 | /*USBDEV_EPINT_TRFAIL0 |*/ USBDEV_EPINT_STALL0;
|
||||
/* Disable bank0 (OUT) */
|
||||
|
||||
intflags = USBDEV_EPINT_TRCPT0 | USBDEV_EPINT_STALL0;
|
||||
}
|
||||
|
||||
/* write back disabled config */
|
||||
|
||||
//sam_putreg8(epconf, SAM_USBDEV_EPCFG(epno));
|
||||
sam_putreg8(0x7e, SAM_USBDEV_EPINTENCLR(epno));
|
||||
sam_putreg8(0x7e, SAM_USBDEV_EPINTFLAG(epno));
|
||||
//sam_putreg8(intflags, SAM_USBDEV_EPINTENCLR(epno));
|
||||
//sam_putreg8(intflags, SAM_USBDEV_EPINTFLAG(epno));
|
||||
|
||||
/* re-configure and enable the endpoint */
|
||||
/* Re-configure and enable the endpoint */
|
||||
|
||||
//epconf = SAM_USBDEV_EPCFG(epno);
|
||||
switch (eptype)
|
||||
{
|
||||
case USB_EP_ATTR_XFER_CONTROL:
|
||||
@ -1508,10 +1463,8 @@ static int sam_ep_configure_internal(struct sam_ep_s *privep,
|
||||
|
||||
/* Also enable IN interrupts */
|
||||
|
||||
intflags = USBDEV_EPINT_TRCPT0 | /* USBDEV_EPINT_TRFAIL1 |*/
|
||||
USBDEV_EPINT_STALL0;
|
||||
intflags |= USBDEV_EPINT_TRCPT1 | /* USBDEV_EPINT_TRFAIL0 |*/
|
||||
USBDEV_EPINT_STALL1;
|
||||
intflags = USBDEV_EPINT_TRCPT0 | USBDEV_EPINT_STALL0;
|
||||
intflags |= USBDEV_EPINT_TRCPT1 | USBDEV_EPINT_STALL1;
|
||||
intflags |= USBDEV_EPINT_RXSTP;
|
||||
sam_putreg8(USBDEV_EPSTATUS_BK0RDY, SAM_USBDEV_EPSTATUSSET(0));
|
||||
sam_putreg8(USBDEV_EPSTATUS_BK1RDY, SAM_USBDEV_EPSTATUSCLR(0));
|
||||
@ -1795,7 +1748,7 @@ static void sam_ep_freereq(struct usbdev_ep_s *ep, struct usbdev_req_s *req)
|
||||
kmm_free(privreq);
|
||||
}
|
||||
|
||||
#if 0 // FIXME, not required, check...
|
||||
#if 0 /* FIXME, not required, check... */
|
||||
|
||||
/****************************************************************************
|
||||
* Name: sam_ep_allocbuffer
|
||||
@ -2247,10 +2200,10 @@ static int sam_selfpowered(struct usbdev_s *dev, bool selfpowered)
|
||||
return OK;
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
* Suspend/Resume Helpers
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Name: sam_suspend
|
||||
****************************************************************************/
|
||||
@ -3009,9 +2962,6 @@ static void sam_ep0_setup(struct sam_usbdev_s *priv)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
* Name: sam_ctrla_write
|
||||
*
|
||||
@ -3026,7 +2976,6 @@ static void sam_ctrla_write(uint8_t value)
|
||||
|
||||
if (value & USB_CTRLA_SWRST)
|
||||
{
|
||||
|
||||
/* Due to synchronization there is a delay from writing CTRLA.SWRST
|
||||
* until the reset is complete. CTRLA.SWRST and SYNCBUSY.SWRST will
|
||||
* both be cleared when the reset is complete.
|
||||
@ -3041,7 +2990,6 @@ static void sam_ctrla_write(uint8_t value)
|
||||
|
||||
if (value & USB_CTRLA_ENABLE)
|
||||
{
|
||||
|
||||
/* Due to synchronization there is delay from writing CTRLA.ENABLE
|
||||
* until the peripheral is enabled/disabled.
|
||||
* SYNCBUSY.ENABLE will be cleared when the operation is complete.
|
||||
@ -3271,17 +3219,16 @@ static void sam_ep_interrupt(struct sam_usbdev_s *priv, int epno)
|
||||
}
|
||||
}
|
||||
|
||||
// FIXME: Transmit FAIL!
|
||||
/* Transmit FAIL! */
|
||||
|
||||
if ((flags & USBDEV_EPINT_TRFAIL0) != 0)
|
||||
{
|
||||
//uerr("ERROR: OUT TRFAIL0!\n");
|
||||
sam_putreg8(USBDEV_EPINT_TRFAIL0, SAM_USBDEV_EPINTFLAG(epno));
|
||||
privep->descb[0]->stausbk &= ~USBDEV_STATUSBK_ERRORFLOW;
|
||||
usbtrace(TRACE_INTDECODE(SAM_TRACEINTID_EPTRFAIL0), flags);
|
||||
}
|
||||
if ((flags & USBDEV_EPINT_TRFAIL1) != 0)
|
||||
{
|
||||
//uerr("ERROR: IN TRFAIL1!\n");
|
||||
sam_putreg8(USBDEV_EPINT_TRFAIL1, SAM_USBDEV_EPINTFLAG(epno));
|
||||
privep->descb[1]->stausbk &= ~USBDEV_STATUSBK_ERRORFLOW;
|
||||
usbtrace(TRACE_INTDECODE(SAM_TRACEINTID_EPTRFAIL1), flags);
|
||||
@ -3319,8 +3266,6 @@ static void sam_ep_interrupt(struct sam_usbdev_s *priv, int epno)
|
||||
usbtrace(TRACE_INTDECODE(SAM_TRACEINTID_EP0SETUPOUT), priv->ctrl.req);
|
||||
privep->epstate = USB_EPSTATE_EP0DATAOUT;
|
||||
|
||||
//sam_ep0_ctrlread(priv);
|
||||
|
||||
/* Clear the RXSTP indication. */
|
||||
|
||||
sam_putreg8(USBDEV_EPINT_RXSTP, SAM_USBDEV_EPINTFLAG(epno));
|
||||
@ -3368,10 +3313,7 @@ static int sam_usb_interrupt(int irq, void *context, void *arg)
|
||||
|
||||
/* Get the set of pending device interrupts */
|
||||
|
||||
isr = sam_getreg16(SAM_USBDEV_INTFLAG);
|
||||
|
||||
//usbtrace(TRACE_INTENTRY(SAM_TRACEINTID_INTERRUPT), irq);
|
||||
|
||||
isr = sam_getreg16(SAM_USBDEV_INTFLAG);
|
||||
regval = sam_getreg16(SAM_USBDEV_INTENSET);
|
||||
pending = isr & regval;
|
||||
|
||||
@ -3379,119 +3321,98 @@ static int sam_usb_interrupt(int irq, void *context, void *arg)
|
||||
|
||||
pendingep = sam_getreg16(SAM_USBDEV_EPINTSMRY);
|
||||
|
||||
/* Handle all pending USB interrupts (and new interrupts that become
|
||||
* pending)
|
||||
*/
|
||||
/* Handle all pending USB interrupts */
|
||||
/* Serve Endpoint Interrupts first */
|
||||
|
||||
//while (pending || pendingep)
|
||||
if (pendingep)
|
||||
{
|
||||
//usbtrace(TRACE_INTDECODE(SAM_TRACEINTID_PENDING), pending);
|
||||
usbtrace(TRACE_INTDECODE(SAM_TRACEINTID_PENDING_EP), pendingep);
|
||||
|
||||
/* serve Endpoint Interrupts first */
|
||||
|
||||
if (pendingep)
|
||||
for (i = 0; i < SAM_USB_NENDPOINTS; i++)
|
||||
{
|
||||
usbtrace(TRACE_INTDECODE(SAM_TRACEINTID_PENDING_EP), pendingep);
|
||||
|
||||
for (i = 0; i < SAM_USB_NENDPOINTS; i++)
|
||||
if ((pendingep & USBDEV_EPINTSMRY_EPINT(i)))
|
||||
{
|
||||
if ((pendingep & USBDEV_EPINTSMRY_EPINT(i)))
|
||||
{
|
||||
usbtrace(TRACE_INTDECODE(SAM_TRACEINTID_EPNO), (uint16_t)i);
|
||||
sam_ep_interrupt(priv, i);
|
||||
}
|
||||
usbtrace(TRACE_INTDECODE(SAM_TRACEINTID_EPNO), (uint16_t)i);
|
||||
sam_ep_interrupt(priv, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Suspend, treated last */
|
||||
/* Suspend, treated last */
|
||||
|
||||
if (pending == USBDEV_INT_SUSPEND)
|
||||
{
|
||||
usbtrace(TRACE_INTDECODE(SAM_TRACEINTID_SUSPEND), pending);
|
||||
if (pending == USBDEV_INT_SUSPEND)
|
||||
{
|
||||
usbtrace(TRACE_INTDECODE(SAM_TRACEINTID_SUSPEND), pending);
|
||||
|
||||
/* Enable wakeup interrupts */
|
||||
/* Enable wakeup interrupts */
|
||||
|
||||
sam_putreg16(USBDEV_INT_SUSPEND, SAM_USBDEV_INTENCLR);
|
||||
// REVISIT: Check USBDEV_INT_UPRSM
|
||||
sam_putreg16(USBDEV_INT_UPRSM | USBDEV_INT_WAKEUP | USBDEV_INT_EORSM,
|
||||
SAM_USBDEV_INTENSET);
|
||||
sam_putreg16(USBDEV_INT_SUSPEND, SAM_USBDEV_INTENCLR);
|
||||
sam_putreg16(USBDEV_INT_UPRSM | USBDEV_INT_WAKEUP | USBDEV_INT_EORSM,
|
||||
SAM_USBDEV_INTENSET);
|
||||
|
||||
/* Clear the pending suspend (and any wakeup) interrupts */
|
||||
/* Clear the pending suspend (and any wakeup) interrupts */
|
||||
|
||||
sam_putreg16(USBDEV_INT_SUSPEND | USBDEV_INT_WAKEUP,
|
||||
SAM_USBDEV_INTFLAG);
|
||||
sam_putreg16(USBDEV_INT_SUSPEND | USBDEV_INT_WAKEUP,
|
||||
SAM_USBDEV_INTFLAG);
|
||||
|
||||
/* Perform board-specific suspend operations.
|
||||
* REVISIT: is the following true?
|
||||
* The USB device peripheral clocks can be switched off.
|
||||
* Resume event is asynchronously detected. MCK and USBCK can be
|
||||
* switched off in the Power Management controller and
|
||||
* Other board-specific operations could also be performed.
|
||||
*/
|
||||
|
||||
// FIXME: fix suspend...
|
||||
//sam_suspend(priv);
|
||||
}
|
||||
|
||||
/* SOF interrupt*/
|
||||
|
||||
else if ((pending & USBDEV_INT_SOF) != 0)
|
||||
{
|
||||
/* Clear the pending SOF interrupt */
|
||||
|
||||
//usbtrace(TRACE_INTDECODE(SAM_TRACEINTID_SOF), pending);
|
||||
sam_putreg16(SAM_TRACEINTID_SOF, SAM_USBDEV_INTFLAG);
|
||||
|
||||
/* TODO: do we need check frame errors FNUM.FNCERR */
|
||||
}
|
||||
|
||||
/* Resume or wakeup. REVISIT: Treat the same? */
|
||||
|
||||
else if ((pending & (USBDEV_INT_WAKEUP | USBDEV_INT_EORSM)) != 0)
|
||||
{
|
||||
usbtrace(TRACE_INTDECODE(SAM_TRACEINTID_WAKEUP), (uint16_t)pending);
|
||||
sam_resume(priv);
|
||||
|
||||
/* Clear the pending wakeup, resume, (and any suspend) interrupts */
|
||||
|
||||
sam_putreg16(USBDEV_INT_WAKEUP | USBDEV_INT_EORSM |
|
||||
USBDEV_INT_SUSPEND, SAM_USBDEV_INTFLAG);
|
||||
|
||||
/* Disable wakup and endofresume Enable suspend interrupt */
|
||||
|
||||
sam_putreg16(USBDEV_INT_WAKEUP | USBDEV_INT_EORSM, SAM_USBDEV_INTENCLR);
|
||||
sam_putreg16(USBDEV_INT_SUSPEND, SAM_USBDEV_INTENSET);
|
||||
}
|
||||
|
||||
/* End of Reset. Set by hardware when an End Of Reset has been
|
||||
* detected by the USB controller.
|
||||
/* Perform board-specific suspend operations.
|
||||
*
|
||||
* The USB device peripheral clocks can be switched off.
|
||||
* Resume event is asynchronously detected. MCK and USBCK can be
|
||||
* switched off in the Power Management controller and
|
||||
* Other board-specific operations could also be performed.
|
||||
*/
|
||||
}
|
||||
|
||||
if ((pending & USBDEV_INT_EORST) != 0)
|
||||
{
|
||||
usbtrace(TRACE_INTDECODE(SAM_TRACEINTID_EORST), pending);
|
||||
/* SOF interrupt*/
|
||||
|
||||
/* Clear the end-of-reset interrupt */
|
||||
else if ((pending & USBDEV_INT_SOF) != 0)
|
||||
{
|
||||
/* Clear the pending SOF interrupt */
|
||||
|
||||
sam_putreg16(USBDEV_INT_EORST, SAM_USBDEV_INTFLAG);
|
||||
sam_putreg16(SAM_TRACEINTID_SOF, SAM_USBDEV_INTFLAG);
|
||||
|
||||
/* Handle the reset */
|
||||
/* TODO: do we need check frame errors FNUM.FNCERR */
|
||||
}
|
||||
|
||||
sam_reset(priv);
|
||||
/* Resume or wakeup. REVISIT: Treat the same? */
|
||||
|
||||
/* REVISIT: Set the device speed Why here ?? */
|
||||
else if ((pending & (USBDEV_INT_WAKEUP | USBDEV_INT_EORSM)) != 0)
|
||||
{
|
||||
usbtrace(TRACE_INTDECODE(SAM_TRACEINTID_WAKEUP), (uint16_t)pending);
|
||||
sam_resume(priv);
|
||||
|
||||
priv->usbdev.speed = USB_SPEED_FULL;
|
||||
}
|
||||
/* Clear the pending wakeup, resume, (and any suspend) interrupts */
|
||||
|
||||
/* Re-sample the set of pending interrupts */
|
||||
sam_putreg16(USBDEV_INT_WAKEUP | USBDEV_INT_EORSM |
|
||||
USBDEV_INT_SUSPEND, SAM_USBDEV_INTFLAG);
|
||||
|
||||
isr = sam_getreg16(SAM_USBDEV_INTFLAG);
|
||||
regval = sam_getreg16(SAM_USBDEV_INTENSET);
|
||||
pending = isr & regval;
|
||||
pendingep = sam_getreg16(SAM_USBDEV_EPINTSMRY);
|
||||
/* Disable wakup and endofresume Enable suspend interrupt */
|
||||
|
||||
} /* while (pending) */
|
||||
sam_putreg16(USBDEV_INT_WAKEUP | USBDEV_INT_EORSM, SAM_USBDEV_INTENCLR);
|
||||
sam_putreg16(USBDEV_INT_SUSPEND, SAM_USBDEV_INTENSET);
|
||||
}
|
||||
|
||||
/* End of Reset. Set by hardware when an End Of Reset has been
|
||||
* detected by the USB controller.
|
||||
*/
|
||||
|
||||
if ((pending & USBDEV_INT_EORST) != 0)
|
||||
{
|
||||
usbtrace(TRACE_INTDECODE(SAM_TRACEINTID_EORST), pending);
|
||||
|
||||
/* Clear the end-of-reset interrupt */
|
||||
|
||||
sam_putreg16(USBDEV_INT_EORST, SAM_USBDEV_INTFLAG);
|
||||
|
||||
/* Handle the reset */
|
||||
|
||||
sam_reset(priv);
|
||||
|
||||
/* REVISIT: Set the device speed Why here ?? */
|
||||
|
||||
priv->usbdev.speed = USB_SPEED_FULL;
|
||||
}
|
||||
|
||||
#if 0
|
||||
/* for DEBUG help: check for pending unhandled irq's */
|
||||
@ -3508,14 +3429,11 @@ static int sam_usb_interrupt(int irq, void *context, void *arg)
|
||||
uwarn("WARNING: Unhandled_EP:0x%X\n", pendingep);
|
||||
}
|
||||
#endif
|
||||
|
||||
//usbtrace(TRACE_INTEXIT(SAM_TRACEINTID_INTERRUPT), irq);
|
||||
}
|
||||
|
||||
void up_usbuninitialize(void)
|
||||
{
|
||||
uinfo("up_usbuninitialize()\n");
|
||||
// FIXME:
|
||||
}
|
||||
|
||||
void up_usbinitialize(void)
|
||||
@ -3997,6 +3915,10 @@ static void sam_sw_shutdown(struct sam_usbdev_s *priv)
|
||||
(void)priv;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Public Functions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Name: usbdev_register
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user