Skip to content

Commit 6bc7751

Browse files
committed
usb: device_next: usbd_cdc_ncm: correct net_if_carrier use
net_if_carrier is to be used independently of the administrative state (start and stop of the ethernet_api). This seem to work, including plugging the usb out and in again. Signed-off-by: Fin Maaß <[email protected]>
1 parent 7fb1fa2 commit 6bc7751

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

subsys/usb/device_next/class/usbd_cdc_ncm.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -815,6 +815,8 @@ static void send_notification_work(struct k_work *work)
815815
dev = usbd_class_get_private(data->c_data);
816816

817817
if (atomic_test_bit(&data->state, CDC_NCM_IFACE_UP)) {
818+
net_if_carrier_on(data->iface);
819+
818820
ret = ncm_send_notification_sequence(dev);
819821
} else {
820822
data->if_state = IF_STATE_INIT;
@@ -840,6 +842,7 @@ static void usbd_cdc_ncm_update(struct usbd_class_data *const c_data,
840842

841843
if (data_iface == iface && alternate == 0) {
842844
atomic_clear_bit(&data->state, CDC_NCM_DATA_IFACE_ENABLED);
845+
net_if_carrier_off(data->iface);
843846
data->tx_seq = 0;
844847
data->rx_seq = 0;
845848
}
@@ -868,6 +871,8 @@ static void usbd_cdc_ncm_disable(struct usbd_class_data *const c_data)
868871
atomic_clear_bit(&data->state, CDC_NCM_DATA_IFACE_ENABLED);
869872
atomic_clear_bit(&data->state, CDC_NCM_CLASS_SUSPENDED);
870873

874+
net_if_carrier_off(data->iface);
875+
871876
LOG_INF("Disabled %s", c_data->name);
872877
}
873878

@@ -877,6 +882,8 @@ static void usbd_cdc_ncm_suspended(struct usbd_class_data *const c_data)
877882
struct cdc_ncm_eth_data *data = dev->data;
878883

879884
atomic_set_bit(&data->state, CDC_NCM_CLASS_SUSPENDED);
885+
886+
net_if_carrier_off(data->iface);
880887
}
881888

882889
static void usbd_cdc_ncm_resumed(struct usbd_class_data *const c_data)
@@ -1123,7 +1130,6 @@ static int cdc_ncm_iface_start(const struct device *dev)
11231130
LOG_DBG("Start interface %d", net_if_get_by_iface(data->iface));
11241131

11251132
atomic_set_bit(&data->state, CDC_NCM_IFACE_UP);
1126-
net_if_carrier_on(data->iface);
11271133

11281134
if (atomic_test_bit(&data->state, CDC_NCM_DATA_IFACE_ENABLED)) {
11291135
(void)k_work_reschedule(&data->notif_work, K_MSEC(1));

0 commit comments

Comments
 (0)