> 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. Fine, regards, Lorenzo > > 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); >>>> } >>>> >>>> >>> >> >> >> > -- UNIX is Sexy: who | grep -i blonde | talk; cd ~; wine; talk; touch; unzip; touch; strip; gasp; finger; gasp; mount; fsck; more; yes; gasp; umount; make clean; sleep -- 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