Re: [PATCH 4/4] iio: proximity: vl53l0x-i2c: Use raw I2C access and read full device ID

From: Krzysztof Kozlowski

Date: Tue Jan 20 2026 - 05:42:56 EST


On 19/01/2026 18:19, Petr Hodina via B4 Relay wrote:
> diff --git a/drivers/iio/proximity/vl53l0x-i2c.c b/drivers/iio/proximity/vl53l0x-i2c.c
> index 6901ce7dd835..a2de4cc16a43 100644
> --- a/drivers/iio/proximity/vl53l0x-i2c.c
> +++ b/drivers/iio/proximity/vl53l0x-i2c.c
> @@ -320,11 +320,35 @@ static const struct iio_trigger_ops vl53l0x_trigger_ops = {
> .validate_device = iio_trigger_validate_own_device,
> };
>
> +

Do not introduce stray blank lines.

> +static int vl53l0x_read_word(struct i2c_client *client, u8 reg, u16 *val)
> +{
> + int ret;
> + u8 buf[2];
> +
> + ret = i2c_master_send(client, &reg, 1);
> + if (ret < 0)
> + return ret;
> + if (ret != 1)
> + return -EIO;
> +
> + ret = i2c_master_recv(client, buf, 2);
> + if (ret < 0)
> + return ret;
> + if (ret != 2)
> + return -EIO;
> +
> + *val = (buf[0] << 8) | buf[1];
> +
> + return 0;
> +}
> +
> static int vl53l0x_probe(struct i2c_client *client)
> {
> struct vl53l0x_data *data;
> struct iio_dev *indio_dev;
> int ret;
> + u16 model, rev;
>
> indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
> if (!indio_dev)
> @@ -339,13 +363,6 @@ static int vl53l0x_probe(struct i2c_client *client)
> I2C_FUNC_SMBUS_BYTE_DATA))
> return -EOPNOTSUPP;
>
> - ret = i2c_smbus_read_byte_data(data->client, VL_REG_IDENTIFICATION_MODEL_ID);
> - if (ret < 0)
> - return -EINVAL;
> -
> - if (ret != VL53L0X_MODEL_ID_VAL)
> - dev_info(&client->dev, "Unknown model id: 0x%x", ret);
> -
> data->vdd_supply = devm_regulator_get(&client->dev, "vdd");
> if (IS_ERR(data->vdd_supply))
> return dev_err_probe(&client->dev, PTR_ERR(data->vdd_supply),
> @@ -372,6 +389,20 @@ static int vl53l0x_probe(struct i2c_client *client)
> if (ret)
> return ret;
>
> + ret = vl53l0x_read_word(client, 0xC0, &model);
> + if (ret)
> + return dev_err_probe(&client->dev, ret, "Failed to read model ID\n");
> +
> + ret = vl53l0x_read_word(client, 0xC2, &rev);
> + if (ret)
> + return dev_err_probe(&client->dev, ret, "Failed to read revision ID\n");
> +
> + dev_info(&client->dev, "VL53L0X model=0x%04x rev=0x%04x\n", model, rev);

dev_dbg

This does not look like useful printk message. Drivers should be silent
on success:
https://elixir.bootlin.com/linux/v6.15-rc7/source/Documentation/process/coding-style.rst#L913
https://elixir.bootlin.com/linux/v6.15-rc7/source/Documentation/process/debugging/driver_development_debugging_guide.rst#L79

Best regards,
Krzysztof