diff --git a/drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c b/drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c
index 5c6c4e6fec9b..9470014936f2 100644
--- a/drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c
+++ b/drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c
@@ -287,89 +287,90 @@ int cros_ec_sensors_core_init(struct platform_device *pdev,
 
 	indio_dev->name = pdev->name;
 
-	if (physical_device) {
-		state->param.cmd = MOTIONSENSE_CMD_INFO;
-		state->param.info.sensor_num = sensor_platform->sensor_num;
-		ret = cros_ec_motion_send_host_cmd(state, 0);
-		if (ret) {
-			dev_warn(dev, "Can not access sensor info\n");
+	if (!physical_device)
+		return 0;
+
+	state->param.cmd = MOTIONSENSE_CMD_INFO;
+	state->param.info.sensor_num = sensor_platform->sensor_num;
+	ret = cros_ec_motion_send_host_cmd(state, 0);
+	if (ret) {
+		dev_warn(dev, "Can not access sensor info\n");
+		return ret;
+	}
+	state->type = state->resp->info.type;
+	state->loc = state->resp->info.location;
+
+	/* Set sign vector, only used for backward compatibility. */
+	memset(state->sign, 1, CROS_EC_SENSOR_MAX_AXIS);
+
+	for (i = CROS_EC_SENSOR_X; i < CROS_EC_SENSOR_MAX_AXIS; i++)
+		state->calib[i].scale = MOTION_SENSE_DEFAULT_SCALE;
+
+	/* 0 is a correct value used to stop the device */
+	if (state->msg->version < 3) {
+		get_default_min_max_freq(state->resp->info.type,
+					 &frequencies[1],
+					 &frequencies[2],
+					 &state->fifo_max_event_count);
+	} else {
+		frequencies[1] = state->resp->info_3.min_frequency;
+		frequencies[2] = state->resp->info_3.max_frequency;
+		state->fifo_max_event_count =
+		    state->resp->info_3.fifo_max_event_count;
+	}
+	for (i = 0; i < ARRAY_SIZE(frequencies); i++) {
+		state->frequencies[2 * i] = frequencies[i] / 1000;
+		state->frequencies[2 * i + 1] =
+			(frequencies[i] % 1000) * 1000;
+	}
+
+	if (cros_ec_check_features(ec, EC_FEATURE_MOTION_SENSE_FIFO)) {
+		/*
+		 * Create a software buffer, feed by the EC FIFO.
+		 * We can not use trigger here, as events are generated
+		 * as soon as sample_frequency is set.
+		 */
+		struct iio_buffer *buffer;
+
+		buffer = devm_iio_kfifo_allocate(dev);
+		if (!buffer)
+			return -ENOMEM;
+
+		iio_device_attach_buffer(indio_dev, buffer);
+		indio_dev->modes = INDIO_BUFFER_SOFTWARE;
+
+		ret = cros_ec_sensorhub_register_push_data(
+				sensor_hub, sensor_platform->sensor_num,
+				indio_dev, push_data);
+		if (ret)
 			return ret;
-		}
-		state->type = state->resp->info.type;
-		state->loc = state->resp->info.location;
 
-		/* Set sign vector, only used for backward compatibility. */
-		memset(state->sign, 1, CROS_EC_SENSOR_MAX_AXIS);
+		ret = devm_add_action_or_reset(
+				dev, cros_ec_sensors_core_clean, pdev);
+		if (ret)
+			return ret;
 
-		for (i = CROS_EC_SENSOR_X; i < CROS_EC_SENSOR_MAX_AXIS; i++)
-			state->calib[i].scale = MOTION_SENSE_DEFAULT_SCALE;
-
-		/* 0 is a correct value used to stop the device */
-		if (state->msg->version < 3) {
-			get_default_min_max_freq(state->resp->info.type,
-						 &frequencies[1],
-						 &frequencies[2],
-						 &state->fifo_max_event_count);
-		} else {
-			frequencies[1] = state->resp->info_3.min_frequency;
-			frequencies[2] = state->resp->info_3.max_frequency;
-			state->fifo_max_event_count =
-			    state->resp->info_3.fifo_max_event_count;
-		}
-		for (i = 0; i < ARRAY_SIZE(frequencies); i++) {
-			state->frequencies[2 * i] = frequencies[i] / 1000;
-			state->frequencies[2 * i + 1] =
-				(frequencies[i] % 1000) * 1000;
-		}
-
-		if (cros_ec_check_features(ec, EC_FEATURE_MOTION_SENSE_FIFO)) {
-			/*
-			 * Create a software buffer, feed by the EC FIFO.
-			 * We can not use trigger here, as events are generated
-			 * as soon as sample_frequency is set.
-			 */
-			struct iio_buffer *buffer;
-
-			buffer = devm_iio_kfifo_allocate(dev);
-			if (!buffer)
-				return -ENOMEM;
-
-			iio_device_attach_buffer(indio_dev, buffer);
-			indio_dev->modes = INDIO_BUFFER_SOFTWARE;
-
-			ret = cros_ec_sensorhub_register_push_data(
-					sensor_hub, sensor_platform->sensor_num,
-					indio_dev, push_data);
-			if (ret)
-				return ret;
-
-			ret = devm_add_action_or_reset(
-					dev, cros_ec_sensors_core_clean, pdev);
-			if (ret)
-				return ret;
-
-			/* Timestamp coming from FIFO are in ns since boot. */
-			ret = iio_device_set_clock(indio_dev, CLOCK_BOOTTIME);
-			if (ret)
-				return ret;
-		} else {
-			const struct attribute **fifo_attrs;
-
-			if (has_hw_fifo)
-				fifo_attrs = cros_ec_sensor_fifo_attributes;
-			else
-				fifo_attrs = NULL;
-
-			/*
-			 * The only way to get samples in buffer is to set a
-			 * software trigger (systrig, hrtimer).
-			 */
-			ret = devm_iio_triggered_buffer_setup_ext(
-					dev, indio_dev, NULL, trigger_capture,
-					NULL, fifo_attrs);
-			if (ret)
-				return ret;
-		}
+		/* Timestamp coming from FIFO are in ns since boot. */
+		ret = iio_device_set_clock(indio_dev, CLOCK_BOOTTIME);
+		if (ret)
+			return ret;
+	} else {
+		const struct attribute **fifo_attrs;
+
+		if (has_hw_fifo)
+			fifo_attrs = cros_ec_sensor_fifo_attributes;
+		else
+			fifo_attrs = NULL;
+
+		/*
+		 * The only way to get samples in buffer is to set a
+		 * software trigger (systrig, hrtimer).
+		 */
+		ret = devm_iio_triggered_buffer_setup_ext(
+				dev, indio_dev, NULL, trigger_capture,
+				NULL, fifo_attrs);
+		if (ret)
+			return ret;
 	}
 
 	return 0;
