const char *guid,
                struct input_dev **idev)
 {
+       acpi_status status;
+       int err;
+
        *idev = devm_input_allocate_device(dev);
        if (!*idev)
                return -ENOMEM;
        (*idev)->id.bustype = BUS_HOST;
        (*idev)->dev.parent = dev;
 
-       return sparse_keymap_setup(*idev, huawei_wmi_keymap, NULL) ||
-               input_register_device(*idev) ||
-               wmi_install_notify_handler(guid, huawei_wmi_input_notify,
-                               *idev);
+       err = sparse_keymap_setup(*idev, huawei_wmi_keymap, NULL);
+       if (err)
+               return err;
+
+       err = input_register_device(*idev);
+       if (err)
+               return err;
+
+       status = wmi_install_notify_handler(guid, huawei_wmi_input_notify, *idev);
+       if (ACPI_FAILURE(status))
+               return -EIO;
+
+       return 0;
 }
 
 static void huawei_wmi_input_exit(struct device *dev, const char *guid)