}
        if (!clkrdy) {
                ERR("Clock not ready after 20ms\n");
+               /* After sw_reset the clock won't report to be ready, if
+                  H_WAKEUP pin is high. */
+               if (!isp116x->board || !isp116x->board->reset)
+                       ERR("The driver does not support hardware wakeup.\n");
+                       ERR("Please make sure that the H_WAKEUP pin "
+                               "is pulled low!\n");
                ret = -ENODEV;
        }
        return ret;
 static int __init_or_module isp116x_remove(struct device *dev)
 {
        struct usb_hcd *hcd = dev_get_drvdata(dev);
-       struct isp116x *isp116x = hcd_to_isp116x(hcd);
+       struct isp116x *isp116x;
        struct platform_device *pdev;
        struct resource *res;
 
+       if(!hcd)
+               return 0;
+       isp116x = hcd_to_isp116x(hcd);
        pdev = container_of(dev, struct platform_device, dev);
        remove_debug_file(isp116x);
        usb_remove_hcd(hcd);