aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/misc/modem_if/modem_link_device_usb.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/misc/modem_if/modem_link_device_usb.c')
-rw-r--r--drivers/misc/modem_if/modem_link_device_usb.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/drivers/misc/modem_if/modem_link_device_usb.c b/drivers/misc/modem_if/modem_link_device_usb.c
index 14aee9f..9e6cbea 100644
--- a/drivers/misc/modem_if/modem_link_device_usb.c
+++ b/drivers/misc/modem_if/modem_link_device_usb.c
@@ -13,7 +13,7 @@
*
*/
-/* #define DEBUG */
+#define DEBUG
#include <linux/init.h>
#include <linux/module.h>
@@ -26,7 +26,7 @@
#include <linux/platform_device.h>
#include <linux/suspend.h>
-#include <linux/platform_data/modem.h>
+#include "modem.h"
#include "modem_prj.h"
#include "modem_link_device_usb.h"
#include "modem_utils.h"
@@ -297,10 +297,15 @@ static void
usb_change_modem_state(struct usb_link_device *usb_ld, enum modem_state state)
{
struct io_device *iod;
+ struct io_device *bootd;
iod = link_get_iod_with_format(&usb_ld->ld, IPC_FMT);
if (iod)
iod->modem_state_changed(iod, state);
+
+ bootd = usb_ld->ld.mc->bootd;
+ if (bootd)
+ bootd->modem_state_changed(bootd, state);
}
static int usb_tx_urb_with_skb(struct usb_link_device *usb_ld,
@@ -624,7 +629,12 @@ static void if_usb_disconnect(struct usb_interface *intf)
cancel_delayed_work_sync(&usb_ld->ld.tx_delayed_work);
usb_put_dev(usbdev);
usb_ld->usbdev = NULL;
- pm_runtime_forbid(pm_data->root_hub);
+ if (!has_hub(usb_ld)) {
+ if (pm_data->root_hub)
+ pm_runtime_forbid(pm_data->root_hub);
+ schedule_delayed_work(&usb_ld->wait_enumeration,
+ WAIT_ENUMURATION_TIMEOUT_JIFFIES);
+ }
}
}