On 03/04/17 21:02, Lorenzo Bianconi wrote: >> On 03/04/17 18:27, Lorenzo Bianconi wrote: >>> Use the correct chip name (e.g. lsm6dsm) as suffix for iio_dev name >>> instead of a generic one (lsm6dsx) >>> >>> Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@xxxxxx> >> Hmm. Always a fun one. Technically this is changing a userspace >> ABI so is a problem unless we think no one will notice... >> > > Right. > >> The question is whether the gain is worth the potential risk? > > In this way we can support multiple chips at the same time (e.g. > lsm6dsm_accel and lsm6ds3h_gyro). > I needed that change when I had to support two different devices at > the same time, in particular lsm6dsm + lsm6ds3h. > What do you think? Does it worth? Fine if you think it does not :) There are lots of other ways of identifying devices, this one is just a convenience really.... Lets leave it a few days and see if anyone else chips in. Jonathan > > Regards, > Lorenzo > >> >> What do people think? >> >> J >>> --- >>> drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h | 4 +++- >>> drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c | 14 +++++++++----- >>> drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_i2c.c | 2 +- >>> drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_spi.c | 2 +- >>> 4 files changed, 14 insertions(+), 8 deletions(-) >>> >>> diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h >>> index 6a9849e..4839db7 100644 >>> --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h >>> +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h >>> @@ -71,6 +71,7 @@ enum st_lsm6dsx_fifo_mode { >>> >>> /** >>> * struct st_lsm6dsx_sensor - ST IMU sensor instance >>> + * @name: Sensor name. >>> * @id: Sensor identifier. >>> * @hw: Pointer to instance of struct st_lsm6dsx_hw. >>> * @gain: Configured sensor sensitivity. >>> @@ -83,6 +84,7 @@ enum st_lsm6dsx_fifo_mode { >>> * @ts: Latest timestamp from the interrupt handler. >>> */ >>> struct st_lsm6dsx_sensor { >>> + char name[32]; >>> enum st_lsm6dsx_sensor_id id; >>> struct st_lsm6dsx_hw *hw; >>> >>> @@ -133,7 +135,7 @@ struct st_lsm6dsx_hw { >>> #endif /* CONFIG_SPI_MASTER */ >>> }; >>> >>> -int st_lsm6dsx_probe(struct device *dev, int irq, int hw_id, >>> +int st_lsm6dsx_probe(struct device *dev, int irq, int hw_id, const char *name, >>> const struct st_lsm6dsx_transfer_function *tf_ops); >>> int st_lsm6dsx_sensor_enable(struct st_lsm6dsx_sensor *sensor); >>> int st_lsm6dsx_sensor_disable(struct st_lsm6dsx_sensor *sensor); >>> diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c >>> index f80a3d4..98b51d7 100644 >>> --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c >>> +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c >>> @@ -642,7 +642,8 @@ static int st_lsm6dsx_init_device(struct st_lsm6dsx_hw *hw) >>> } >>> >>> static struct iio_dev *st_lsm6dsx_alloc_iiodev(struct st_lsm6dsx_hw *hw, >>> - enum st_lsm6dsx_sensor_id id) >>> + enum st_lsm6dsx_sensor_id id, >>> + const char *name) >>> { >>> struct st_lsm6dsx_sensor *sensor; >>> struct iio_dev *iio_dev; >>> @@ -666,27 +667,30 @@ static struct iio_dev *st_lsm6dsx_alloc_iiodev(struct st_lsm6dsx_hw *hw, >>> case ST_LSM6DSX_ID_ACC: >>> iio_dev->channels = st_lsm6dsx_acc_channels; >>> iio_dev->num_channels = ARRAY_SIZE(st_lsm6dsx_acc_channels); >>> - iio_dev->name = "lsm6dsx_accel"; >>> iio_dev->info = &st_lsm6dsx_acc_info; >>> >>> sensor->decimator_mask = ST_LSM6DSX_REG_ACC_DEC_MASK; >>> + scnprintf(sensor->name, sizeof(sensor->name), "%s_accel", >>> + name); >>> break; >>> case ST_LSM6DSX_ID_GYRO: >>> iio_dev->channels = st_lsm6dsx_gyro_channels; >>> iio_dev->num_channels = ARRAY_SIZE(st_lsm6dsx_gyro_channels); >>> - iio_dev->name = "lsm6dsx_gyro"; >>> iio_dev->info = &st_lsm6dsx_gyro_info; >>> >>> sensor->decimator_mask = ST_LSM6DSX_REG_GYRO_DEC_MASK; >>> + scnprintf(sensor->name, sizeof(sensor->name), "%s_gyro", >>> + name); >>> break; >>> default: >>> return NULL; >>> } >>> + iio_dev->name = sensor->name; >>> >>> return iio_dev; >>> } >>> >>> -int st_lsm6dsx_probe(struct device *dev, int irq, int hw_id, >>> +int st_lsm6dsx_probe(struct device *dev, int irq, int hw_id, const char *name, >>> const struct st_lsm6dsx_transfer_function *tf_ops) >>> { >>> struct st_lsm6dsx_hw *hw; >>> @@ -710,7 +714,7 @@ int st_lsm6dsx_probe(struct device *dev, int irq, int hw_id, >>> return err; >>> >>> for (i = 0; i < ST_LSM6DSX_ID_MAX; i++) { >>> - hw->iio_devs[i] = st_lsm6dsx_alloc_iiodev(hw, i); >>> + hw->iio_devs[i] = st_lsm6dsx_alloc_iiodev(hw, i, name); >>> if (!hw->iio_devs[i]) >>> return -ENOMEM; >>> } >>> diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_i2c.c b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_i2c.c >>> index 2e4ed26..09a51cf 100644 >>> --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_i2c.c >>> +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_i2c.c >>> @@ -61,7 +61,7 @@ static int st_lsm6dsx_i2c_probe(struct i2c_client *client, >>> const struct i2c_device_id *id) >>> { >>> return st_lsm6dsx_probe(&client->dev, client->irq, >>> - (int)id->driver_data, >>> + (int)id->driver_data, id->name, >>> &st_lsm6dsx_transfer_fn); >>> } >>> >>> diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_spi.c b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_spi.c >>> index 1bf4a58..f765a50 100644 >>> --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_spi.c >>> +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_spi.c >>> @@ -78,7 +78,7 @@ static int st_lsm6dsx_spi_probe(struct spi_device *spi) >>> const struct spi_device_id *id = spi_get_device_id(spi); >>> >>> return st_lsm6dsx_probe(&spi->dev, spi->irq, >>> - (int)id->driver_data, >>> + (int)id->driver_data, id->name, >>> &st_lsm6dsx_transfer_fn); >>> } >>> >>> >> > > > -- To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html