|
@@ -142,7 +142,7 @@ static int hdc100x_get_measurement(struct hdc100x_data *data,
|
|
struct i2c_client *client = data->client;
|
|
struct i2c_client *client = data->client;
|
|
int delay = data->adc_int_us[chan->address];
|
|
int delay = data->adc_int_us[chan->address];
|
|
int ret;
|
|
int ret;
|
|
- int val;
|
|
|
|
|
|
+ __be16 val;
|
|
|
|
|
|
/* start measurement */
|
|
/* start measurement */
|
|
ret = i2c_smbus_write_byte(client, chan->address);
|
|
ret = i2c_smbus_write_byte(client, chan->address);
|
|
@@ -154,26 +154,13 @@ static int hdc100x_get_measurement(struct hdc100x_data *data,
|
|
/* wait for integration time to pass */
|
|
/* wait for integration time to pass */
|
|
usleep_range(delay, delay + 1000);
|
|
usleep_range(delay, delay + 1000);
|
|
|
|
|
|
- /*
|
|
|
|
- * i2c_smbus_read_word_data cannot() be used here due to the command
|
|
|
|
- * value not being understood and causes NAKs preventing any reading
|
|
|
|
- * from being accessed.
|
|
|
|
- */
|
|
|
|
- ret = i2c_smbus_read_byte(client);
|
|
|
|
|
|
+ /* read measurement */
|
|
|
|
+ ret = i2c_master_recv(data->client, (char *)&val, sizeof(val));
|
|
if (ret < 0) {
|
|
if (ret < 0) {
|
|
- dev_err(&client->dev, "cannot read high byte measurement");
|
|
|
|
|
|
+ dev_err(&client->dev, "cannot read sensor data\n");
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
- val = ret << 8;
|
|
|
|
-
|
|
|
|
- ret = i2c_smbus_read_byte(client);
|
|
|
|
- if (ret < 0) {
|
|
|
|
- dev_err(&client->dev, "cannot read low byte measurement");
|
|
|
|
- return ret;
|
|
|
|
- }
|
|
|
|
- val |= ret;
|
|
|
|
-
|
|
|
|
- return val;
|
|
|
|
|
|
+ return be16_to_cpu(val);
|
|
}
|
|
}
|
|
|
|
|
|
static int hdc100x_get_heater_status(struct hdc100x_data *data)
|
|
static int hdc100x_get_heater_status(struct hdc100x_data *data)
|
|
@@ -272,8 +259,8 @@ static int hdc100x_probe(struct i2c_client *client,
|
|
struct iio_dev *indio_dev;
|
|
struct iio_dev *indio_dev;
|
|
struct hdc100x_data *data;
|
|
struct hdc100x_data *data;
|
|
|
|
|
|
- if (!i2c_check_functionality(client->adapter,
|
|
|
|
- I2C_FUNC_SMBUS_WORD_DATA | I2C_FUNC_SMBUS_BYTE))
|
|
|
|
|
|
+ if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_WORD_DATA |
|
|
|
|
+ I2C_FUNC_SMBUS_BYTE | I2C_FUNC_I2C))
|
|
return -EOPNOTSUPP;
|
|
return -EOPNOTSUPP;
|
|
|
|
|
|
indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
|
|
indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
|