aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/usb
diff options
context:
space:
mode:
authorCurtis Menard <curtis.menard@gmail.com>2013-01-20 15:28:07 -0500
committercodeworkx <codeworkx@cyanogenmod.org>2013-01-21 16:16:57 +0000
commit76fcb2e9deea2bb578db7fc897f68312a0dea9a0 (patch)
tree744e3a1ae3f474a3f840f8a81fb395e227e549e0 /drivers/net/usb
parent10b2523bd76efada8f212f55b5b36889091b991a (diff)
downloadkernel_samsung_smdk4412-76fcb2e9deea2bb578db7fc897f68312a0dea9a0.zip
kernel_samsung_smdk4412-76fcb2e9deea2bb578db7fc897f68312a0dea9a0.tar.gz
kernel_samsung_smdk4412-76fcb2e9deea2bb578db7fc897f68312a0dea9a0.tar.bz2
mdm: Update mdm
This update produces less wakelocs for mdm_hsic. It also allows building without CONFIG_USB_ANDROID_SAMSUNG_COMPOSITE. USB tethering works well this way on t0lte. Patch Set 1: Fixed typo in defconfig that was breaking the build Signed-off-by: Curtis Menard <curtis.menard@gmail.com> Change-Id: Id602ea291093a8cebbcd5ab7f7687364fab0d029
Diffstat (limited to 'drivers/net/usb')
-rw-r--r--drivers/net/usb/rmnet_usb_ctrl.c27
-rw-r--r--drivers/net/usb/rmnet_usb_data.c5
2 files changed, 30 insertions, 2 deletions
diff --git a/drivers/net/usb/rmnet_usb_ctrl.c b/drivers/net/usb/rmnet_usb_ctrl.c
index 83638a7..9fd6c74 100644
--- a/drivers/net/usb/rmnet_usb_ctrl.c
+++ b/drivers/net/usb/rmnet_usb_ctrl.c
@@ -424,6 +424,23 @@ static void ctrl_write_callback(struct urb *urb)
usb_autopm_put_interface_async(dev->intf);
}
+static int usb_anchor_len(struct usb_anchor *anchor)
+{
+ unsigned long flags;
+ struct urb *urb;
+ int len = 0;
+
+ spin_lock_irqsave(&anchor->lock, flags);
+ list_for_each_entry(urb, &anchor->urb_list, anchor_list) {
+ len++;
+ }
+ spin_unlock_irqrestore(&anchor->lock, flags);
+
+ pr_debug("%s:%d", __func__, len);
+
+ return len;
+}
+
static int rmnet_usb_ctrl_write(struct rmnet_ctrl_dev *dev, char *buf,
size_t size)
{
@@ -889,6 +906,9 @@ int rmnet_usb_ctrl_probe(struct usb_interface *intf,
dev->tx_ctrl_in_req_cnt = 0;
dev->tx_block = false;
+ /* give margin before send DTR high */
+ msleep(20);
+ pr_info("%s: send DTR high to Modem\n", __func__);
ret = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
USB_CDC_REQ_SET_CONTROL_LINE_STATE,
(USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE),
@@ -941,9 +961,12 @@ int rmnet_usb_ctrl_probe(struct usb_interface *intf,
ctl_msg_dbg_mask = MSM_USB_CTL_DUMP_BUFFER;
- dev->reset_notifier_block.notifier_call = rmnet_ctrl_reset_notifier;
- blocking_notifier_chain_register(&mdm_reset_notifier_list,
+ if (!ret) {
+ dev->reset_notifier_block.notifier_call =
+ rmnet_ctrl_reset_notifier;
+ blocking_notifier_chain_register(&mdm_reset_notifier_list,
&dev->reset_notifier_block);
+ }
return ret;
}
diff --git a/drivers/net/usb/rmnet_usb_data.c b/drivers/net/usb/rmnet_usb_data.c
index 6333dd0..0b30618 100644
--- a/drivers/net/usb/rmnet_usb_data.c
+++ b/drivers/net/usb/rmnet_usb_data.c
@@ -575,6 +575,11 @@ static int rmnet_usb_probe(struct usb_interface *iface,
/* allow modem to wake up suspended system */
device_set_wakeup_enable(&udev->dev, 1);
out:
+#ifdef CONFIG_MDM_HSIC_PM
+ /* make reset or dump at 2nd enumeration fail */
+ if (status < 0)
+ mdm_force_fatal();
+#endif
return status;
}