drivers: usb: Add nRF52840 USBD driver
* Add usbd_dc_nrfx shim The shim is based on the previous one usbd_dc_nrf5. For handling the USBD hardware, tested nrfx_usbd driver from nRF SDK was used. Briefly tested examples: * usb/cdc_acm * usb/dfu (USB communication only due to flash handling issues) * usb/hid-mouse * bluetooth/hci_usb Signed-off-by: Paweł Zadrożniak <pawel.zadrozniak@nordicsemi.no>
This commit is contained in:
parent
0a3f6f0a58
commit
68cb7b3e38
7 changed files with 1574 additions and 2319 deletions
|
@ -261,9 +261,9 @@ lf_already_started:
|
|||
#if defined(CONFIG_USB) && defined(CONFIG_SOC_NRF52840)
|
||||
static inline void power_event_cb(nrf_power_event_t event)
|
||||
{
|
||||
extern void nrf5_usbd_power_event_callback(nrf_power_event_t event);
|
||||
extern void usb_dc_nrfx_power_event_callback(nrf_power_event_t event);
|
||||
|
||||
nrf5_usbd_power_event_callback(event);
|
||||
usb_dc_nrfx_power_event_callback(event);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -414,70 +414,22 @@ DEVICE_AND_API_INIT(clock_nrf5_k32src,
|
|||
&_k32src_clock_control_api);
|
||||
|
||||
#if defined(CONFIG_USB) && defined(CONFIG_SOC_NRF52840)
|
||||
static void power_int_enable(bool enable)
|
||||
|
||||
void nrf5_power_usb_power_int_enable(bool enable)
|
||||
{
|
||||
u32_t mask;
|
||||
|
||||
|
||||
mask = NRF_POWER_INT_USBDETECTED_MASK |
|
||||
NRF_POWER_INT_USBREMOVED_MASK |
|
||||
NRF_POWER_INT_USBPWRRDY_MASK;
|
||||
|
||||
if (enable) {
|
||||
nrf_power_int_enable(mask);
|
||||
irq_enable(POWER_CLOCK_IRQn);
|
||||
} else {
|
||||
nrf_power_int_disable(mask);
|
||||
}
|
||||
}
|
||||
|
||||
static bool usbregstatus_vbusdet_get(void)
|
||||
{
|
||||
return nrf_power_usbregstatus_vbusdet_get();
|
||||
}
|
||||
|
||||
static bool usbregstatus_outrdy_get(void)
|
||||
{
|
||||
return nrf_power_usbregstatus_outrdy_get();
|
||||
}
|
||||
|
||||
static const struct usbd_power_nrf5_api usbd_power_api = {
|
||||
.usb_power_int_enable = power_int_enable,
|
||||
.vbusdet_get = usbregstatus_vbusdet_get,
|
||||
.outrdy_get = usbregstatus_outrdy_get,
|
||||
};
|
||||
|
||||
static int usbd_power_init(struct device *dev)
|
||||
{
|
||||
irq_enable(POWER_CLOCK_IRQn);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void nrf5_power_usb_power_int_enable(struct device *dev, bool enable)
|
||||
{
|
||||
const struct usbd_power_nrf5_api *api = dev->driver_api;
|
||||
|
||||
api->usb_power_int_enable(enable);
|
||||
}
|
||||
|
||||
bool nrf5_power_clock_usb_vbusdet(struct device *dev)
|
||||
{
|
||||
const struct usbd_power_nrf5_api *api = dev->driver_api;
|
||||
|
||||
return api->vbusdet_get();
|
||||
}
|
||||
|
||||
bool nrf5_power_clock_usb_outrdy(struct device *dev)
|
||||
{
|
||||
const struct usbd_power_nrf5_api *api = dev->driver_api;
|
||||
|
||||
return api->outrdy_get();
|
||||
}
|
||||
|
||||
DEVICE_AND_API_INIT(usbd_power_nrf5,
|
||||
CONFIG_USBD_NRF5_NAME,
|
||||
usbd_power_init,
|
||||
NULL, NULL,
|
||||
PRE_KERNEL_2,
|
||||
CONFIG_KERNEL_INIT_PRIORITY_DEVICE,
|
||||
&usbd_power_api);
|
||||
#endif
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
zephyr_sources_ifdef(CONFIG_USB_DW usb_dc_dw.c)
|
||||
zephyr_sources_ifdef(CONFIG_USB_DC_STM32 usb_dc_stm32.c)
|
||||
zephyr_sources_ifdef(CONFIG_USB_DC_SAM0 usb_dc_sam0.c)
|
||||
zephyr_sources_ifdef(CONFIG_USB_NRF52840 usb_dc_nrf5.c)
|
||||
zephyr_sources_ifdef(CONFIG_USB_NRF52840 usb_dc_nrfx.c)
|
||||
zephyr_sources_ifdef(CONFIG_USB_KINETIS usb_dc_kinetis.c)
|
||||
|
|
|
@ -53,6 +53,7 @@ config USB_NRF52840
|
|||
depends on SOC_NRF52840
|
||||
select USB_DEVICE_DRIVER
|
||||
select HAS_DTS_USB
|
||||
select NRFX_USBD
|
||||
help
|
||||
nRF52840 USB Device Controller Driver
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
1557
drivers/usb/device/usb_dc_nrfx.c
Normal file
1557
drivers/usb/device/usb_dc_nrfx.c
Normal file
File diff suppressed because it is too large
Load diff
|
@ -48,15 +48,7 @@
|
|||
#endif
|
||||
|
||||
#if defined(CONFIG_USB) && defined(CONFIG_SOC_NRF52840)
|
||||
struct usbd_power_nrf5_api {
|
||||
void (*usb_power_int_enable)(bool enable);
|
||||
bool (*vbusdet_get)(void);
|
||||
bool (*outrdy_get)(void);
|
||||
};
|
||||
|
||||
void nrf5_power_usb_power_int_enable(struct device *dev, bool enable);
|
||||
bool nrf5_power_clock_usb_vbusdet(struct device *dev);
|
||||
bool nrf5_power_clock_usb_outrdy(struct device *dev);
|
||||
void nrf5_power_usb_power_int_enable(bool enable);
|
||||
#endif
|
||||
|
||||
#endif /* ZEPHYR_INCLUDE_DRIVERS_CLOCK_CONTROL_NRF5_CLOCK_CONTROL_H_ */
|
||||
|
|
|
@ -111,14 +111,14 @@
|
|||
#define CONFIG_SPI_3_NRF_MISO_PIN NORDIC_NRF_SPI_4002B000_MISO_PIN
|
||||
#define CONFIG_SPI_3_NRF_CSN_PIN NORDIC_NRF_SPI_4002B000_CSN_PIN
|
||||
|
||||
#define CONFIG_USBD_NRF5_IRQ NORDIC_NRF_USBD_40027000_IRQ_USBD
|
||||
#define CONFIG_USBD_NRF5_IRQ_PRI NORDIC_NRF_USBD_40027000_IRQ_USBD_PRIORITY
|
||||
#define CONFIG_USBD_NRF5_NUM_BIDIR_EP NORDIC_NRF_USBD_40027000_NUM_BIDIR_ENDPOINTS
|
||||
#define CONFIG_USBD_NRF5_NUM_IN_EP NORDIC_NRF_USBD_40027000_NUM_IN_ENDPOINTS
|
||||
#define CONFIG_USBD_NRF5_NUM_OUT_EP NORDIC_NRF_USBD_40027000_NUM_OUT_ENDPOINTS
|
||||
#define CONFIG_USBD_NRF5_NUM_ISOIN_EP NORDIC_NRF_USBD_40027000_NUM_ISOIN_ENDPOINTS
|
||||
#define CONFIG_USBD_NRF5_NUM_ISOOUT_EP NORDIC_NRF_USBD_40027000_NUM_ISOOUT_ENDPOINTS
|
||||
#define CONFIG_USBD_NRF5_NAME NORDIC_NRF_USBD_40027000_LABEL
|
||||
#define CONFIG_USBD_NRF_IRQ NORDIC_NRF_USBD_40027000_IRQ_USBD
|
||||
#define CONFIG_USBD_NRF_IRQ_PRI NORDIC_NRF_USBD_40027000_IRQ_USBD_PRIORITY
|
||||
#define CONFIG_USBD_NRF_NUM_BIDIR_EP NORDIC_NRF_USBD_40027000_NUM_BIDIR_ENDPOINTS
|
||||
#define CONFIG_USBD_NRF_NUM_IN_EP NORDIC_NRF_USBD_40027000_NUM_IN_ENDPOINTS
|
||||
#define CONFIG_USBD_NRF_NUM_OUT_EP NORDIC_NRF_USBD_40027000_NUM_OUT_ENDPOINTS
|
||||
#define CONFIG_USBD_NRF_NUM_ISOIN_EP NORDIC_NRF_USBD_40027000_NUM_ISOIN_ENDPOINTS
|
||||
#define CONFIG_USBD_NRF_NUM_ISOOUT_EP NORDIC_NRF_USBD_40027000_NUM_ISOOUT_ENDPOINTS
|
||||
#define CONFIG_USBD_NRF_NAME NORDIC_NRF_USBD_40027000_LABEL
|
||||
|
||||
#define CONFIG_WDT_0_NAME NORDIC_NRF_WATCHDOG_40010000_LABEL
|
||||
#define CONFIG_WDT_NRF_IRQ NORDIC_NRF_WATCHDOG_40010000_IRQ_WDT
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue