if (ret < 0) {
                dev_err(&data->client->dev,
                        "Failed: kxcjk1013_set_power_state for %d\n", on);
+               if (on)
+                       pm_runtime_put_noidle(&data->client->dev);
                return ret;
        }
 #endif
 
        ret =  kxcjk1013_setup_any_motion_interrupt(data, state);
        if (ret < 0) {
+               kxcjk1013_set_power_state(data, false);
+               data->ev_enable_state = 0;
                mutex_unlock(&data->mutex);
                return ret;
        }
        else
                ret = kxcjk1013_setup_new_data_interrupt(data, state);
        if (ret < 0) {
+               kxcjk1013_set_power_state(data, false);
                mutex_unlock(&data->mutex);
                return ret;
        }
 {
        struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev));
        struct kxcjk1013_data *data = iio_priv(indio_dev);
+       int ret;
 
-       return kxcjk1013_set_mode(data, STANDBY);
+       ret = kxcjk1013_set_mode(data, STANDBY);
+       if (ret < 0) {
+               dev_err(&data->client->dev, "powering off device failed\n");
+               return -EAGAIN;
+       }
+       return 0;
 }
 
 static int kxcjk1013_runtime_resume(struct device *dev)