struct cros_ec_sensors_core_state *state = iio_priv(indio_dev);
        struct cros_ec_dev *ec = dev_get_drvdata(pdev->dev.parent);
        struct cros_ec_sensor_platform *sensor_platform = dev_get_platdata(dev);
+       int ret;
 
        platform_set_drvdata(pdev, indio_dev);
 
 
                state->param.cmd = MOTIONSENSE_CMD_INFO;
                state->param.info.sensor_num = sensor_platform->sensor_num;
-               if (cros_ec_motion_send_host_cmd(state, 0)) {
+               ret = cros_ec_motion_send_host_cmd(state, 0);
+               if (ret) {
                        dev_warn(dev, "Can not access sensor info\n");
-                       return -EIO;
+                       return ret;
                }
                state->type = state->resp->info.type;
                state->loc = state->resp->info.location;
 
        ret = cros_ec_cmd_xfer_status(state->ec, state->msg);
        if (ret < 0)
-               return -EIO;
+               return ret;
 
        if (ret &&
            state->resp != (struct ec_response_motion_sense *)state->msg->data)
                          struct iio_chan_spec const *chan,
                          int *val, int *val2, long mask)
 {
-       int ret = IIO_VAL_INT;
+       int ret;
 
        switch (mask) {
        case IIO_CHAN_INFO_SAMP_FREQ:
                st->param.ec_rate.data =
                        EC_MOTION_SENSE_NO_VALUE;
 
-               if (cros_ec_motion_send_host_cmd(st, 0))
-                       ret = -EIO;
-               else
-                       *val = st->resp->ec_rate.ret;
+               ret = cros_ec_motion_send_host_cmd(st, 0);
+               if (ret)
+                       break;
+
+               *val = st->resp->ec_rate.ret;
+               ret = IIO_VAL_INT;
                break;
        case IIO_CHAN_INFO_FREQUENCY:
                st->param.cmd = MOTIONSENSE_CMD_SENSOR_ODR;
                st->param.sensor_odr.data =
                        EC_MOTION_SENSE_NO_VALUE;
 
-               if (cros_ec_motion_send_host_cmd(st, 0))
-                       ret = -EIO;
-               else
-                       *val = st->resp->sensor_odr.ret;
+               ret = cros_ec_motion_send_host_cmd(st, 0);
+               if (ret)
+                       break;
+
+               *val = st->resp->sensor_odr.ret;
+               ret = IIO_VAL_INT;
                break;
        default:
+               ret = -EINVAL;
                break;
        }
 
                               struct iio_chan_spec const *chan,
                               int val, int val2, long mask)
 {
-       int ret = 0;
+       int ret;
 
        switch (mask) {
        case IIO_CHAN_INFO_FREQUENCY:
                /* Always roundup, so caller gets at least what it asks for. */
                st->param.sensor_odr.roundup = 1;
 
-               if (cros_ec_motion_send_host_cmd(st, 0))
-                       ret = -EIO;
+               ret = cros_ec_motion_send_host_cmd(st, 0);
                break;
        case IIO_CHAN_INFO_SAMP_FREQ:
                st->param.cmd = MOTIONSENSE_CMD_EC_RATE;
                st->param.ec_rate.data = val;
 
-               if (cros_ec_motion_send_host_cmd(st, 0))
-                       ret = -EIO;
-               else
-                       st->curr_sampl_freq = val;
+               ret = cros_ec_motion_send_host_cmd(st, 0);
+               if (ret)
+                       break;
+               st->curr_sampl_freq = val;
                break;
        default:
                ret = -EINVAL;
 
        struct cros_ec_light_prox_state *st = iio_priv(indio_dev);
        u16 data = 0;
        s64 val64;
-       int ret = IIO_VAL_INT;
+       int ret;
        int idx = chan->scan_index;
 
        mutex_lock(&st->core.cmd_lock);
        switch (mask) {
        case IIO_CHAN_INFO_RAW:
                if (chan->type == IIO_PROXIMITY) {
-                       if (cros_ec_sensors_read_cmd(indio_dev, 1 << idx,
-                                                    (s16 *)&data) < 0) {
-                               ret = -EIO;
+                       ret = cros_ec_sensors_read_cmd(indio_dev, 1 << idx,
+                                                    (s16 *)&data);
+                       if (ret)
                                break;
-                       }
                        *val = data;
+                       ret = IIO_VAL_INT;
                } else {
                        ret = -EINVAL;
                }
                break;
        case IIO_CHAN_INFO_PROCESSED:
                if (chan->type == IIO_LIGHT) {
-                       if (cros_ec_sensors_read_cmd(indio_dev, 1 << idx,
-                                                    (s16 *)&data) < 0) {
-                               ret = -EIO;
+                       ret = cros_ec_sensors_read_cmd(indio_dev, 1 << idx,
+                                                    (s16 *)&data);
+                       if (ret)
                                break;
-                       }
                        /*
                         * The data coming from the light sensor is
                         * pre-processed and represents the ambient light
                st->core.param.cmd = MOTIONSENSE_CMD_SENSOR_OFFSET;
                st->core.param.sensor_offset.flags = 0;
 
-               if (cros_ec_motion_send_host_cmd(&st->core, 0)) {
-                       ret = -EIO;
+               ret = cros_ec_motion_send_host_cmd(&st->core, 0);
+               if (ret)
                        break;
-               }
 
                /* Save values */
                st->core.calib[0].offset =
                        st->core.resp->sensor_offset.offset[0];
 
                *val = st->core.calib[idx].offset;
+               ret = IIO_VAL_INT;
                break;
        case IIO_CHAN_INFO_CALIBSCALE:
                /*
                st->core.param.cmd = MOTIONSENSE_CMD_SENSOR_RANGE;
                st->core.param.sensor_range.data = EC_MOTION_SENSE_NO_VALUE;
 
-               if (cros_ec_motion_send_host_cmd(&st->core, 0)) {
-                       ret = -EIO;
+               ret = cros_ec_motion_send_host_cmd(&st->core, 0);
+               if (ret)
                        break;
-               }
 
                val64 = st->core.resp->sensor_range.ret;
                *val = val64 >> 16;
                               int val, int val2, long mask)
 {
        struct cros_ec_light_prox_state *st = iio_priv(indio_dev);
-       int ret = 0;
+       int ret;
        int idx = chan->scan_index;
 
        mutex_lock(&st->core.cmd_lock);
                        st->core.calib[0].offset;
                st->core.param.sensor_offset.temp =
                                        EC_MOTION_SENSE_INVALID_CALIB_TEMP;
-               if (cros_ec_motion_send_host_cmd(&st->core, 0))
-                       ret = -EIO;
+               ret = cros_ec_motion_send_host_cmd(&st->core, 0);
                break;
        case IIO_CHAN_INFO_CALIBSCALE:
                st->core.param.cmd = MOTIONSENSE_CMD_SENSOR_RANGE;
                st->core.param.sensor_range.data = (val << 16) | (val2 / 100);
-               if (cros_ec_motion_send_host_cmd(&st->core, 0))
-                       ret = -EIO;
+               ret = cros_ec_motion_send_host_cmd(&st->core, 0);
                break;
        default:
                ret = cros_ec_sensors_core_write(&st->core, chan, val, val2,
 
 {
        struct cros_ec_baro_state *st = iio_priv(indio_dev);
        u16 data = 0;
-       int ret = IIO_VAL_INT;
+       int ret;
        int idx = chan->scan_index;
 
        mutex_lock(&st->core.cmd_lock);
 
        switch (mask) {
        case IIO_CHAN_INFO_RAW:
-               if (cros_ec_sensors_read_cmd(indio_dev, 1 << idx,
-                                            (s16 *)&data) < 0)
-                       ret = -EIO;
+               ret = cros_ec_sensors_read_cmd(indio_dev, 1 << idx,
+                                            (s16 *)&data);
+               if (ret)
+                       break;
+
                *val = data;
+               ret = IIO_VAL_INT;
                break;
        case IIO_CHAN_INFO_SCALE:
                st->core.param.cmd = MOTIONSENSE_CMD_SENSOR_RANGE;
                st->core.param.sensor_range.data = EC_MOTION_SENSE_NO_VALUE;
 
-               if (cros_ec_motion_send_host_cmd(&st->core, 0)) {
-                       ret = -EIO;
+               ret = cros_ec_motion_send_host_cmd(&st->core, 0);
+               if (ret)
                        break;
-               }
+
                *val = st->core.resp->sensor_range.ret;
 
                /* scale * in_pressure_raw --> kPa */