From 76fcb2e9deea2bb578db7fc897f68312a0dea9a0 Mon Sep 17 00:00:00 2001 From: Curtis Menard Date: Sun, 20 Jan 2013 15:28:07 -0500 Subject: 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 Change-Id: Id602ea291093a8cebbcd5ab7f7687364fab0d029 --- drivers/net/usb/rmnet_usb_ctrl.c | 27 +++++++++++++++++++++++++-- drivers/net/usb/rmnet_usb_data.c | 5 +++++ 2 files changed, 30 insertions(+), 2 deletions(-) (limited to 'drivers/net') 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; } -- cgit v1.1