diff options
Diffstat (limited to 'drivers/misc/modem_if/modem_link_device_usb.c')
-rw-r--r-- | drivers/misc/modem_if/modem_link_device_usb.c | 16 |
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); + } } } |