of_property_read_bool(cdev->dev->of_node, "ti,nwkrq-voltage-vio");
 }
 
-static int tcan4x5x_get_gpios(struct m_can_classdev *cdev,
-                             const struct tcan4x5x_version_info *version_info)
+static int tcan4x5x_get_gpios(struct m_can_classdev *cdev)
 {
        struct tcan4x5x_priv *tcan4x5x = cdev_to_priv(cdev);
        int ret;
 
-       if (version_info->has_wake_pin) {
-               tcan4x5x->device_wake_gpio = devm_gpiod_get(cdev->dev, "device-wake",
-                                                           GPIOD_OUT_HIGH);
-               if (IS_ERR(tcan4x5x->device_wake_gpio)) {
-                       if (PTR_ERR(tcan4x5x->device_wake_gpio) == -EPROBE_DEFER)
-                               return -EPROBE_DEFER;
+       tcan4x5x->device_wake_gpio = devm_gpiod_get_optional(cdev->dev,
+                                                            "device-wake",
+                                                            GPIOD_OUT_HIGH);
+       if (IS_ERR(tcan4x5x->device_wake_gpio)) {
+               if (PTR_ERR(tcan4x5x->device_wake_gpio) == -EPROBE_DEFER)
+                       return -EPROBE_DEFER;
 
-                       tcan4x5x_disable_wake(cdev);
-               }
+               tcan4x5x->device_wake_gpio = NULL;
        }
 
        tcan4x5x->reset_gpio = devm_gpiod_get_optional(cdev->dev, "reset",
        if (ret)
                return ret;
 
-       if (version_info->has_state_pin) {
-               tcan4x5x->device_state_gpio = devm_gpiod_get_optional(cdev->dev,
-                                                                     "device-state",
-                                                                     GPIOD_IN);
-               if (IS_ERR(tcan4x5x->device_state_gpio)) {
-                       tcan4x5x->device_state_gpio = NULL;
-                       tcan4x5x_disable_state(cdev);
-               }
+       tcan4x5x->device_state_gpio = devm_gpiod_get_optional(cdev->dev,
+                                                             "device-state",
+                                                             GPIOD_IN);
+       if (IS_ERR(tcan4x5x->device_state_gpio))
+               tcan4x5x->device_state_gpio = NULL;
+
+       return 0;
+}
+
+static int tcan4x5x_check_gpios(struct m_can_classdev *cdev,
+                               const struct tcan4x5x_version_info *version_info)
+{
+       struct tcan4x5x_priv *tcan4x5x = cdev_to_priv(cdev);
+       int ret;
+
+       if (version_info->has_wake_pin && !tcan4x5x->device_wake_gpio) {
+               ret = tcan4x5x_disable_wake(cdev);
+               if (ret)
+                       return ret;
+       }
+
+       if (version_info->has_state_pin && !tcan4x5x->device_state_gpio) {
+               ret = tcan4x5x_disable_state(cdev);
+               if (ret)
+                       return ret;
        }
 
        return 0;
                goto out_m_can_class_free_dev;
        }
 
+       ret = tcan4x5x_get_gpios(mcan_class);
+       if (ret) {
+               dev_err(&spi->dev, "Getting gpios failed %pe\n", ERR_PTR(ret));
+               goto out_power;
+       }
+
        version_info = tcan4x5x_find_version(priv);
        if (IS_ERR(version_info)) {
                ret = PTR_ERR(version_info);
                goto out_power;
        }
 
-       ret = tcan4x5x_get_gpios(mcan_class, version_info);
+       ret = tcan4x5x_check_gpios(mcan_class, version_info);
        if (ret) {
-               dev_err(&spi->dev, "Getting gpios failed %pe\n", ERR_PTR(ret));
+               dev_err(&spi->dev, "Checking gpios failed %pe\n", ERR_PTR(ret));
                goto out_power;
        }