Skip to content

Commit 68cb7b3

Browse files
pawelzadrozniakcarlescufi
authored andcommitted
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 <[email protected]>
1 parent 0a3f6f0 commit 68cb7b3

File tree

7 files changed

+1574
-2319
lines changed

7 files changed

+1574
-2319
lines changed

drivers/clock_control/nrf5_power_clock.c

Lines changed: 6 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -261,9 +261,9 @@ static int _k32src_start(struct device *dev, clock_control_subsys_t sub_system)
261261
#if defined(CONFIG_USB) && defined(CONFIG_SOC_NRF52840)
262262
static inline void power_event_cb(nrf_power_event_t event)
263263
{
264-
extern void nrf5_usbd_power_event_callback(nrf_power_event_t event);
264+
extern void usb_dc_nrfx_power_event_callback(nrf_power_event_t event);
265265

266-
nrf5_usbd_power_event_callback(event);
266+
usb_dc_nrfx_power_event_callback(event);
267267
}
268268
#endif
269269

@@ -414,70 +414,22 @@ DEVICE_AND_API_INIT(clock_nrf5_k32src,
414414
&_k32src_clock_control_api);
415415

416416
#if defined(CONFIG_USB) && defined(CONFIG_SOC_NRF52840)
417-
static void power_int_enable(bool enable)
417+
418+
void nrf5_power_usb_power_int_enable(bool enable)
418419
{
419420
u32_t mask;
420421

422+
421423
mask = NRF_POWER_INT_USBDETECTED_MASK |
422424
NRF_POWER_INT_USBREMOVED_MASK |
423425
NRF_POWER_INT_USBPWRRDY_MASK;
424426

425427
if (enable) {
426428
nrf_power_int_enable(mask);
429+
irq_enable(POWER_CLOCK_IRQn);
427430
} else {
428431
nrf_power_int_disable(mask);
429432
}
430433
}
431434

432-
static bool usbregstatus_vbusdet_get(void)
433-
{
434-
return nrf_power_usbregstatus_vbusdet_get();
435-
}
436-
437-
static bool usbregstatus_outrdy_get(void)
438-
{
439-
return nrf_power_usbregstatus_outrdy_get();
440-
}
441-
442-
static const struct usbd_power_nrf5_api usbd_power_api = {
443-
.usb_power_int_enable = power_int_enable,
444-
.vbusdet_get = usbregstatus_vbusdet_get,
445-
.outrdy_get = usbregstatus_outrdy_get,
446-
};
447-
448-
static int usbd_power_init(struct device *dev)
449-
{
450-
irq_enable(POWER_CLOCK_IRQn);
451-
452-
return 0;
453-
}
454-
455-
void nrf5_power_usb_power_int_enable(struct device *dev, bool enable)
456-
{
457-
const struct usbd_power_nrf5_api *api = dev->driver_api;
458-
459-
api->usb_power_int_enable(enable);
460-
}
461-
462-
bool nrf5_power_clock_usb_vbusdet(struct device *dev)
463-
{
464-
const struct usbd_power_nrf5_api *api = dev->driver_api;
465-
466-
return api->vbusdet_get();
467-
}
468-
469-
bool nrf5_power_clock_usb_outrdy(struct device *dev)
470-
{
471-
const struct usbd_power_nrf5_api *api = dev->driver_api;
472-
473-
return api->outrdy_get();
474-
}
475-
476-
DEVICE_AND_API_INIT(usbd_power_nrf5,
477-
CONFIG_USBD_NRF5_NAME,
478-
usbd_power_init,
479-
NULL, NULL,
480-
PRE_KERNEL_2,
481-
CONFIG_KERNEL_INIT_PRIORITY_DEVICE,
482-
&usbd_power_api);
483435
#endif

drivers/usb/device/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
zephyr_sources_ifdef(CONFIG_USB_DW usb_dc_dw.c)
22
zephyr_sources_ifdef(CONFIG_USB_DC_STM32 usb_dc_stm32.c)
33
zephyr_sources_ifdef(CONFIG_USB_DC_SAM0 usb_dc_sam0.c)
4-
zephyr_sources_ifdef(CONFIG_USB_NRF52840 usb_dc_nrf5.c)
4+
zephyr_sources_ifdef(CONFIG_USB_NRF52840 usb_dc_nrfx.c)
55
zephyr_sources_ifdef(CONFIG_USB_KINETIS usb_dc_kinetis.c)

drivers/usb/device/Kconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ config USB_NRF52840
5353
depends on SOC_NRF52840
5454
select USB_DEVICE_DRIVER
5555
select HAS_DTS_USB
56+
select NRFX_USBD
5657
help
5758
nRF52840 USB Device Controller Driver
5859

0 commit comments

Comments
 (0)