Lines Matching +full:u +full:- +full:blox

1 // SPDX-License-Identifier: GPL-2.0-only
6 * Copyright (C) 2003-2005 by David Brownell
22 #include <linux/usb/cdc-wdm.h>
26 * specific management protocol called Qualcomm MSM Interface (QMI) -
31 * control ("master") interface of a two-interface CDC Union
41 * It is exported as a character device using the cdc-wdm driver as
82 struct net_device *real_dev = priv->real_dev; in qmimux_open()
84 if (!(priv->real_dev->flags & IFF_UP)) in qmimux_open()
85 return -ENETDOWN; in qmimux_open()
101 unsigned int len = skb->len; in qmimux_start_xmit()
106 hdr->pad = 0; in qmimux_start_xmit()
107 hdr->mux_id = priv->mux_id; in qmimux_start_xmit()
108 hdr->pkt_len = cpu_to_be16(len); in qmimux_start_xmit()
109 skb->dev = priv->real_dev; in qmimux_start_xmit()
115 dev->stats.tx_dropped++; in qmimux_start_xmit()
128 dev->header_ops = NULL; /* No header */ in qmimux_setup()
129 dev->type = ARPHRD_NONE; in qmimux_setup()
130 dev->hard_header_len = 0; in qmimux_setup()
131 dev->addr_len = 0; in qmimux_setup()
132 dev->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST; in qmimux_setup()
133 dev->netdev_ops = &qmimux_netdev_ops; in qmimux_setup()
134 dev->mtu = 1500; in qmimux_setup()
135 dev->pcpu_stat_type = NETDEV_PCPU_STAT_TSTATS; in qmimux_setup()
136 dev->needs_free_netdev = true; in qmimux_setup()
146 netdev_for_each_upper_dev_rcu(dev->net, ldev, iter) { in qmimux_find_dev()
148 if (priv->mux_id == mux_id) { in qmimux_find_dev()
159 return !list_empty(&dev->net->adj_list.upper); in qmimux_has_slaves()
170 while (offset + qmimux_hdr_sz < skb->len) { in qmimux_rx_fixup()
171 hdr = (struct qmimux_hdr *)(skb->data + offset); in qmimux_rx_fixup()
172 len = be16_to_cpu(hdr->pkt_len); in qmimux_rx_fixup()
175 if (offset + len + qmimux_hdr_sz > skb->len) in qmimux_rx_fixup()
179 if (hdr->pad & 0x80) in qmimux_rx_fixup()
183 pad_len = hdr->pad & 0x3f; in qmimux_rx_fixup()
186 pkt_len = len - pad_len; in qmimux_rx_fixup()
188 net = qmimux_find_dev(dev, hdr->mux_id); in qmimux_rx_fixup()
195 switch (skb->data[offset + qmimux_hdr_sz] & 0xf0) { in qmimux_rx_fixup()
197 skbn->protocol = htons(ETH_P_IP); in qmimux_rx_fixup()
200 skbn->protocol = htons(ETH_P_IPV6); in qmimux_rx_fixup()
203 /* not ip - do not know what to do */ in qmimux_rx_fixup()
209 skb_put_data(skbn, skb->data + offset + qmimux_hdr_sz, pkt_len); in qmimux_rx_fixup()
211 net->stats.rx_errors++; in qmimux_rx_fixup()
230 return sysfs_emit(buf, "0x%02x\n", priv->mux_id); in mux_id_show()
254 return -ENOBUFS; in qmimux_register_device()
258 priv->mux_id = mux_id; in qmimux_register_device()
259 priv->real_dev = real_dev; in qmimux_register_device()
261 new_dev->sysfs_groups[0] = &qmi_wwan_sysfs_qmimux_attr_group; in qmimux_register_device()
291 struct net_device *real_dev = priv->real_dev; in qmimux_unregister_device()
303 struct qmi_wwan_state *info = (void *)&dev->data; in qmi_wwan_netdev_setup()
305 if (info->flags & QMI_WWAN_FLAG_RAWIP) { in qmi_wwan_netdev_setup()
306 net->header_ops = NULL; /* No header */ in qmi_wwan_netdev_setup()
307 net->type = ARPHRD_NONE; in qmi_wwan_netdev_setup()
308 net->hard_header_len = 0; in qmi_wwan_netdev_setup()
309 net->addr_len = 0; in qmi_wwan_netdev_setup()
310 net->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST; in qmi_wwan_netdev_setup()
311 set_bit(EVENT_NO_IP_ALIGN, &dev->flags); in qmi_wwan_netdev_setup()
313 } else if (!net->header_ops) { /* don't bother if already set */ in qmi_wwan_netdev_setup()
316 net->min_mtu = 0; in qmi_wwan_netdev_setup()
317 net->max_mtu = ETH_MAX_MTU; in qmi_wwan_netdev_setup()
318 clear_bit(EVENT_NO_IP_ALIGN, &dev->flags); in qmi_wwan_netdev_setup()
323 usbnet_change_mtu(net, net->mtu); in qmi_wwan_netdev_setup()
329 struct qmi_wwan_state *info = (void *)&dev->data; in raw_ip_show()
331 return sprintf(buf, "%c\n", info->flags & QMI_WWAN_FLAG_RAWIP ? 'Y' : 'N'); in raw_ip_show()
337 struct qmi_wwan_state *info = (void *)&dev->data; in raw_ip_store()
342 return -EINVAL; in raw_ip_store()
345 if (enable == (info->flags & QMI_WWAN_FLAG_RAWIP)) in raw_ip_store()
349 if (!enable && (info->flags & QMI_WWAN_FLAG_PASS_THROUGH)) { in raw_ip_store()
350 netdev_err(dev->net, in raw_ip_store()
352 return -EINVAL; in raw_ip_store()
359 if (netif_running(dev->net)) { in raw_ip_store()
360 netdev_err(dev->net, "Cannot change a running device\n"); in raw_ip_store()
361 ret = -EBUSY; in raw_ip_store()
366 ret = call_netdevice_notifiers(NETDEV_PRE_TYPE_CHANGE, dev->net); in raw_ip_store()
369 netdev_err(dev->net, "Type change was refused\n"); in raw_ip_store()
374 info->flags |= QMI_WWAN_FLAG_RAWIP; in raw_ip_store()
376 info->flags &= ~QMI_WWAN_FLAG_RAWIP; in raw_ip_store()
377 qmi_wwan_netdev_setup(dev->net); in raw_ip_store()
378 call_netdevice_notifiers(NETDEV_POST_TYPE_CHANGE, dev->net); in raw_ip_store()
396 count += scnprintf(&buf[count], PAGE_SIZE - count, in add_mux_show()
397 "0x%02x\n", priv->mux_id); in add_mux_show()
406 struct qmi_wwan_state *info = (void *)&dev->data; in add_mux_store()
411 return -EINVAL; in add_mux_store()
413 /* mux_id [1 - 254] for compatibility with ip(8) and the rmnet driver */ in add_mux_store()
415 return -EINVAL; in add_mux_store()
421 netdev_err(dev->net, "mux_id already present\n"); in add_mux_store()
422 ret = -EINVAL; in add_mux_store()
426 ret = qmimux_register_device(dev->net, mux_id); in add_mux_store()
428 info->flags |= QMI_WWAN_FLAG_MUX; in add_mux_store()
444 struct qmi_wwan_state *info = (void *)&dev->data; in del_mux_store()
450 return -EINVAL; in del_mux_store()
457 netdev_err(dev->net, "mux_id not present\n"); in del_mux_store()
458 ret = -EINVAL; in del_mux_store()
464 info->flags &= ~QMI_WWAN_FLAG_MUX; in del_mux_store()
477 info = (void *)&dev->data; in pass_through_show()
479 info->flags & QMI_WWAN_FLAG_PASS_THROUGH ? 'Y' : 'N'); in pass_through_show()
491 return -EINVAL; in pass_through_store()
493 info = (void *)&dev->data; in pass_through_store()
496 if (enable == (info->flags & QMI_WWAN_FLAG_PASS_THROUGH)) in pass_through_store()
500 if (!(info->flags & QMI_WWAN_FLAG_RAWIP)) { in pass_through_store()
501 netdev_err(dev->net, in pass_through_store()
503 return -EINVAL; in pass_through_store()
507 info->flags |= QMI_WWAN_FLAG_PASS_THROUGH; in pass_through_store()
509 info->flags &= ~QMI_WWAN_FLAG_PASS_THROUGH; in pass_through_store()
545 * ARP packets on a point-to-point link. Any packet with an ethernet
559 struct qmi_wwan_state *info = (void *)&dev->data; in qmi_wwan_rx_fixup()
560 bool rawip = info->flags & QMI_WWAN_FLAG_RAWIP; in qmi_wwan_rx_fixup()
564 if (skb->len < dev->net->hard_header_len) in qmi_wwan_rx_fixup()
567 if (info->flags & QMI_WWAN_FLAG_MUX) in qmi_wwan_rx_fixup()
570 if (info->flags & QMI_WWAN_FLAG_PASS_THROUGH) { in qmi_wwan_rx_fixup()
571 skb->protocol = htons(ETH_P_MAP); in qmi_wwan_rx_fixup()
575 switch (skb->data[0] & 0xf0) { in qmi_wwan_rx_fixup()
585 if (is_multicast_ether_addr(skb->data)) in qmi_wwan_rx_fixup()
587 /* possibly bogus destination - rewrite just in case */ in qmi_wwan_rx_fixup()
598 skb->dev = dev->net; /* normally set by eth_type_trans */ in qmi_wwan_rx_fixup()
599 skb->protocol = proto; in qmi_wwan_rx_fixup()
607 eth_hdr(skb)->h_proto = proto; in qmi_wwan_rx_fixup()
608 eth_zero_addr(eth_hdr(skb)->h_source); in qmi_wwan_rx_fixup()
610 memcpy(eth_hdr(skb)->h_dest, dev->net->dev_addr, ETH_ALEN); in qmi_wwan_rx_fixup()
629 if (possibly_iphdr(addr->sa_data)) in qmi_wwan_mac_addr()
630 return -EADDRNOTAVAIL; in qmi_wwan_mac_addr()
650 struct qmi_wwan_state *info = (void *)&dev->data; in qmi_wwan_manage_power()
653 dev_dbg(&dev->intf->dev, "%s() pmcount=%d, on=%d\n", __func__, in qmi_wwan_manage_power()
654 atomic_read(&info->pmcount), on); in qmi_wwan_manage_power()
656 if ((on && atomic_add_return(1, &info->pmcount) == 1) || in qmi_wwan_manage_power()
657 (!on && atomic_dec_and_test(&info->pmcount))) { in qmi_wwan_manage_power()
661 rv = usb_autopm_get_interface(dev->intf); in qmi_wwan_manage_power()
662 dev->intf->needs_remote_wakeup = on; in qmi_wwan_manage_power()
664 usb_autopm_put_interface(dev->intf); in qmi_wwan_manage_power()
684 struct qmi_wwan_state *info = (void *)&dev->data; in qmi_wwan_register_subdriver()
687 rv = usbnet_get_endpoints(dev, info->data); in qmi_wwan_register_subdriver()
692 if (info->control != info->data) in qmi_wwan_register_subdriver()
693 dev->status = &info->control->cur_altsetting->endpoint[0]; in qmi_wwan_register_subdriver()
696 if (!dev->status) { in qmi_wwan_register_subdriver()
697 rv = -EINVAL; in qmi_wwan_register_subdriver()
702 atomic_set(&info->pmcount, 0); in qmi_wwan_register_subdriver()
705 subdriver = usb_cdc_wdm_register(info->control, &dev->status->desc, in qmi_wwan_register_subdriver()
709 dev_err(&info->control->dev, "subdriver registration failed\n"); in qmi_wwan_register_subdriver()
715 dev->status = NULL; in qmi_wwan_register_subdriver()
718 info->subdriver = subdriver; in qmi_wwan_register_subdriver()
731 u8 intf = dev->intf->cur_altsetting->desc.bInterfaceNumber; in qmi_wwan_change_dtr()
741 u8 *buf = intf->cur_altsetting->extra; in qmi_wwan_bind()
742 int len = intf->cur_altsetting->extralen; in qmi_wwan_bind()
743 struct usb_interface_descriptor *desc = &intf->cur_altsetting->desc; in qmi_wwan_bind()
747 struct qmi_wwan_state *info = (void *)&dev->data; in qmi_wwan_bind()
750 BUILD_BUG_ON((sizeof(((struct usbnet *)0)->data) < in qmi_wwan_bind()
754 info->control = intf; in qmi_wwan_bind()
755 info->data = intf; in qmi_wwan_bind()
764 info->data = usb_ifnum_to_if(dev->udev, in qmi_wwan_bind()
765 cdc_union->bSlaveInterface0); in qmi_wwan_bind()
766 if (desc->bInterfaceNumber != cdc_union->bMasterInterface0 || in qmi_wwan_bind()
767 !info->data) { in qmi_wwan_bind()
768 dev_err(&intf->dev, in qmi_wwan_bind()
769 "bogus CDC Union: master=%u, slave=%u\n", in qmi_wwan_bind()
770 cdc_union->bMasterInterface0, in qmi_wwan_bind()
771 cdc_union->bSlaveInterface0); in qmi_wwan_bind()
775 info->data = intf; in qmi_wwan_bind()
779 /* errors aren't fatal - we can live with the dynamic address */ in qmi_wwan_bind()
780 if (cdc_ether && cdc_ether->wMaxSegmentSize) { in qmi_wwan_bind()
781 dev->hard_mtu = le16_to_cpu(cdc_ether->wMaxSegmentSize); in qmi_wwan_bind()
782 usbnet_get_ethernet_addr(dev, cdc_ether->iMACAddress); in qmi_wwan_bind()
786 if (info->control != info->data) { in qmi_wwan_bind()
787 status = usb_driver_claim_interface(driver, info->data, dev); in qmi_wwan_bind()
793 if (status < 0 && info->control != info->data) { in qmi_wwan_bind()
794 usb_set_intfdata(info->data, NULL); in qmi_wwan_bind()
795 usb_driver_release_interface(driver, info->data); in qmi_wwan_bind()
815 if (dev->driver_info->data & QMI_WWAN_QUIRK_DTR || in qmi_wwan_bind()
816 le16_to_cpu(dev->udev->descriptor.bcdUSB) >= 0x0201) { in qmi_wwan_bind()
822 * buggy firmware told us to. Or, if device is assigned the well-known in qmi_wwan_bind()
825 if (ether_addr_equal(dev->net->dev_addr, default_modem_addr) || in qmi_wwan_bind()
826 ether_addr_equal(dev->net->dev_addr, buggy_fw_addr)) in qmi_wwan_bind()
827 eth_hw_addr_random(dev->net); in qmi_wwan_bind()
830 if (possibly_iphdr(dev->net->dev_addr)) { in qmi_wwan_bind()
831 u8 addr = dev->net->dev_addr[0]; in qmi_wwan_bind()
835 dev_addr_mod(dev->net, 0, &addr, 1); in qmi_wwan_bind()
837 dev->net->netdev_ops = &qmi_wwan_netdev_ops; in qmi_wwan_bind()
838 dev->net->sysfs_groups[0] = &qmi_wwan_sysfs_attr_group; in qmi_wwan_bind()
845 struct qmi_wwan_state *info = (void *)&dev->data; in qmi_wwan_unbind()
849 if (info->subdriver && info->subdriver->disconnect) in qmi_wwan_unbind()
850 info->subdriver->disconnect(info->control); in qmi_wwan_unbind()
853 if (le16_to_cpu(dev->udev->descriptor.bcdUSB) >= 0x0201) { in qmi_wwan_unbind()
859 if (intf == info->control) in qmi_wwan_unbind()
860 other = info->data; in qmi_wwan_unbind()
862 other = info->control; in qmi_wwan_unbind()
870 info->subdriver = NULL; in qmi_wwan_unbind()
871 info->data = NULL; in qmi_wwan_unbind()
872 info->control = NULL; in qmi_wwan_unbind()
875 /* suspend/resume wrappers calling both usbnet and the cdc-wdm
878 * NOTE: cdc-wdm also supports pre/post_reset, but we cannot provide
884 struct qmi_wwan_state *info = (void *)&dev->data; in qmi_wwan_suspend()
887 /* Both usbnet_suspend() and subdriver->suspend() MUST return 0 in qmi_wwan_suspend()
895 if (intf == info->control && info->subdriver && in qmi_wwan_suspend()
896 info->subdriver->suspend) in qmi_wwan_suspend()
897 ret = info->subdriver->suspend(intf, message); in qmi_wwan_suspend()
907 struct qmi_wwan_state *info = (void *)&dev->data; in qmi_wwan_resume()
909 bool callsub = (intf == info->control && info->subdriver && in qmi_wwan_resume()
910 info->subdriver->resume); in qmi_wwan_resume()
913 ret = info->subdriver->resume(intf); in qmi_wwan_resume()
918 info->subdriver->suspend(intf, PMSG_SUSPEND); in qmi_wwan_resume()
1015 { /* Pantech UML290 - newer firmware */
1083 {QMI_MATCH_FF_FF_FF(0x2c7c, 0x0620)}, /* Quectel EM160R-GL */
1084 {QMI_MATCH_FF_FF_FF(0x2c7c, 0x0800)}, /* Quectel RM500Q-GL */
1088 {QMI_FIXED_INTF(0x0408, 0xea42, 4)}, /* Yota / Megafon M100-1 */
1089 {QMI_FIXED_INTF(0x05c6, 0x6001, 3)}, /* 4G LTE usb-modem U901 */
1119 {QMI_QUIRK_SET_DTR(0x05c6, 0x9025, 4)}, /* Alcatel-sbell ASB TL131 TDD LTE (China Mobile) */
1217 {QMI_QUIRK_SET_DTR(0x05c6, 0x9091, 2)}, /* Compal RXM-G1 */
1219 {QMI_QUIRK_SET_DTR(0x05c6, 0x90db, 2)}, /* Compal RXM-G1 */
1222 {QMI_QUIRK_SET_DTR(0x05c6, 0x9625, 4)}, /* YUGA CLM920-NC5 */
1231 {QMI_FIXED_INTF(0x1435, 0xd111, 4)}, /* M9615A DM11-1 D51QC */
1241 {QMI_FIXED_INTF(0x16d8, 0x6007, 0)}, /* CMOTech CHE-628S */
1242 {QMI_FIXED_INTF(0x16d8, 0x6008, 0)}, /* CMOTech CMU-301 */
1243 {QMI_FIXED_INTF(0x16d8, 0x6280, 0)}, /* CMOTech CHU-628 */
1244 {QMI_FIXED_INTF(0x16d8, 0x7001, 0)}, /* CMOTech CHU-720S */
1246 {QMI_FIXED_INTF(0x16d8, 0x7003, 4)}, /* CMOTech CHU-629K */
1248 {QMI_FIXED_INTF(0x16d8, 0x7006, 5)}, /* CMOTech CGU-629 */
1249 {QMI_FIXED_INTF(0x16d8, 0x700a, 4)}, /* CMOTech CHU-629S */
1250 {QMI_FIXED_INTF(0x16d8, 0x7211, 0)}, /* CMOTech CHU-720I */
1266 {QMI_FIXED_INTF(0x19d2, 0x0055, 1)}, /* ZTE (Vodafone) K3520-Z */
1268 {QMI_FIXED_INTF(0x19d2, 0x0063, 4)}, /* ZTE (Vodafone) K3565-Z */
1269 {QMI_FIXED_INTF(0x19d2, 0x0104, 4)}, /* ZTE (Vodafone) K4505-Z */
1295 {QMI_FIXED_INTF(0x19d2, 0x0412, 4)}, /* Telewell TW-LTE 4G */
1296 {QMI_FIXED_INTF(0x19d2, 0x1008, 4)}, /* ZTE (Vodafone) K3570-Z */
1297 {QMI_FIXED_INTF(0x19d2, 0x1010, 4)}, /* ZTE (Vodafone) K3571-Z */
1299 {QMI_FIXED_INTF(0x19d2, 0x1018, 3)}, /* ZTE (Vodafone) K5006-Z */
1315 {QMI_FIXED_INTF(0x19d2, 0x1428, 2)}, /* Telewell TW-LTE 4G v2 */
1318 {QMI_FIXED_INTF(0x19d2, 0x2002, 4)}, /* ZTE (Vodafone) K3765-Z */
1319 {QMI_FIXED_INTF(0x2001, 0x7e16, 3)}, /* D-Link DWM-221 */
1320 {QMI_FIXED_INTF(0x2001, 0x7e19, 4)}, /* D-Link DWM-221 B1 */
1321 {QMI_FIXED_INTF(0x2001, 0x7e35, 4)}, /* D-Link DWM-222 */
1322 {QMI_FIXED_INTF(0x2001, 0x7e3d, 4)}, /* D-Link DWM-222 A2 */
1336 {QMI_FIXED_INTF(0x1199, 0x9051, 8)}, /* Netgear AirCard 340U */
1339 {QMI_FIXED_INTF(0x1199, 0x9055, 8)}, /* Netgear AirCard 341U */
1355 {QMI_FIXED_INTF(0x2357, 0x0201, 4)}, /* TP-LINK HSUPA Modem MA180 */
1356 {QMI_FIXED_INTF(0x2357, 0x9000, 4)}, /* TP-LINK MA260 */
1357 {QMI_QUIRK_SET_DTR(0x1bc7, 0x1031, 3)}, /* Telit LE910C1-EUX */
1358 {QMI_QUIRK_SET_DTR(0x1bc7, 0x103a, 0)}, /* Telit LE910C4-WWX */
1379 {QMI_FIXED_INTF(0x1c9e, 0x9801, 3)}, /* Telewell TW-3G HSPA+ */
1380 {QMI_FIXED_INTF(0x1c9e, 0x9803, 4)}, /* Telewell TW-3G HSPA+ */
1381 {QMI_FIXED_INTF(0x1c9e, 0x9b01, 3)}, /* XS Stick W100-2 from 4G Systems */
1401 {QMI_FIXED_INTF(0x1e2d, 0x00f3, 0)}, /* Cinterion MV32-W-A RmNet */
1402 {QMI_FIXED_INTF(0x1e2d, 0x00f4, 0)}, /* Cinterion MV32-W-B RmNet */
1419 {QMI_FIXED_INTF(0x03f0, 0x4e1d, 8)}, /* HP lt4111 LTE/EV-DO/HSPA+ Gobi 4G Module */
1421 {QMI_QUIRK_SET_DTR(0x22de, 0x9051, 2)}, /* Hucom Wireless HM-211S/K */
1422 {QMI_FIXED_INTF(0x22de, 0x9061, 3)}, /* WeTelecom WPD-600N */
1434 {QMI_QUIRK_SET_DTR(0x1546, 0x1312, 4)}, /* u-blox LARA-R6 01B */
1435 {QMI_QUIRK_SET_DTR(0x1546, 0x1342, 4)}, /* u-blox LARA-L6 */
1444 {QMI_GOBI1K_DEVICE(0x1410, 0xa001)}, /* Novatel/Verizon USB-1000 */
1504 if (dev->actconfig && in quectel_ec20_detected()
1505 le16_to_cpu(dev->descriptor.idVendor) == 0x05c6 && in quectel_ec20_detected()
1506 le16_to_cpu(dev->descriptor.idProduct) == 0x9215 && in quectel_ec20_detected()
1507 dev->actconfig->desc.bNumInterfaces == 5) in quectel_ec20_detected()
1517 struct usb_interface_descriptor *desc = &intf->cur_altsetting->desc; in qmi_wwan_probe()
1524 if (!id->driver_info) { in qmi_wwan_probe()
1525 dev_dbg(&intf->dev, "setting defaults for dynamic device id\n"); in qmi_wwan_probe()
1526 id->driver_info = (unsigned long)&qmi_wwan_info; in qmi_wwan_probe()
1533 if (id->match_flags & USB_DEVICE_ID_MATCH_INT_NUMBER && in qmi_wwan_probe()
1534 desc->bInterfaceClass != USB_CLASS_VENDOR_SPEC) { in qmi_wwan_probe()
1535 dev_dbg(&intf->dev, in qmi_wwan_probe()
1537 desc->bInterfaceClass); in qmi_wwan_probe()
1538 return -ENODEV; in qmi_wwan_probe()
1542 if (quectel_ec20_detected(intf) && desc->bInterfaceNumber == 0) { in qmi_wwan_probe()
1543 dev_dbg(&intf->dev, "Quectel EC20 quirk, skipping interface 0\n"); in qmi_wwan_probe()
1544 return -ENODEV; in qmi_wwan_probe()
1549 * identical for the diagnostic- and QMI-interface, but bNumEndpoints is in qmi_wwan_probe()
1553 if (desc->bNumEndpoints == 2) in qmi_wwan_probe()
1554 return -ENODEV; in qmi_wwan_probe()
1570 info = (void *)&dev->data; in qmi_wwan_disconnect()
1571 if (info->flags & QMI_WWAN_FLAG_MUX) { in qmi_wwan_disconnect()
1577 netdev_for_each_upper_dev_rcu(dev->net, ldev, iter) in qmi_wwan_disconnect()
1582 info->flags &= ~QMI_WWAN_FLAG_MUX; in qmi_wwan_disconnect()