{
        struct i2c_gpio_private_data *priv = data;
 
-       gpiod_set_value(priv->sda, state);
+       gpiod_set_value_cansleep(priv->sda, state);
 }
 
 /*
 {
        struct i2c_gpio_private_data *priv = data;
 
-       gpiod_set_value(priv->scl, state);
+       gpiod_set_value_cansleep(priv->scl, state);
 }
 
 static int i2c_gpio_getsda(void *data)
 {
        struct i2c_gpio_private_data *priv = data;
 
-       return gpiod_get_value(priv->sda);
+       return gpiod_get_value_cansleep(priv->sda);
 }
 
 static int i2c_gpio_getscl(void *data)
 {
        struct i2c_gpio_private_data *priv = data;
 
-       return gpiod_get_value(priv->scl);
+       return gpiod_get_value_cansleep(priv->scl);
 }
 
 #ifdef CONFIG_I2C_GPIO_FAULT_INJECTOR
        if (IS_ERR(priv->scl))
                return PTR_ERR(priv->scl);
 
+       if (gpiod_cansleep(priv->sda) || gpiod_cansleep(priv->scl))
+               dev_warn(dev, "Slow GPIO pins might wreak havoc into I2C/SMBus bus timing");
+
        bit_data->setsda = i2c_gpio_setsda_val;
        bit_data->setscl = i2c_gpio_setscl_val;