On 03/11/16 12:56, Brian Masney wrote:
> taos_probe() queries the all of the sensor's registers and loads all of
> the values into a buffer stored on the stack. Only the chip ID register
> was actually used. Change the probe function to just query the chip ID
> register on the device.
> 
> Verified that the driver still functions correctly using a TSL2581
> hooked up to a Raspberry Pi 2.
> 
> Signed-off-by: Brian Masney <masn...@onstation.org>
Huh. I'm embarrassed that I didn't notice this bit of silliness in the
original reviews :)

Applied to the togreg branch of iio.git

Thanks,

Jonathan
> ---
>  drivers/staging/iio/light/tsl2583.c | 37 
> +++++++++++++------------------------
>  1 file changed, 13 insertions(+), 24 deletions(-)
> 
> diff --git a/drivers/staging/iio/light/tsl2583.c 
> b/drivers/staging/iio/light/tsl2583.c
> index a3a9095..388440b 100644
> --- a/drivers/staging/iio/light/tsl2583.c
> +++ b/drivers/staging/iio/light/tsl2583.c
> @@ -31,8 +31,6 @@
>  #include <linux/iio/iio.h>
>  #include <linux/iio/sysfs.h>
>  
> -#define TSL258X_MAX_DEVICE_REGS              32
> -
>  /* Triton register offsets */
>  #define      TSL258X_REG_MAX         8
>  
> @@ -66,6 +64,9 @@
>  /* Lux calculation constants */
>  #define      TSL258X_LUX_CALC_OVER_FLOW              65535
>  
> +#define TSL2583_CHIP_ID                      0x90
> +#define TSL2583_CHIP_ID_MASK         0xf0
> +
>  enum {
>       TSL258X_CHIP_UNKNOWN = 0,
>       TSL258X_CHIP_WORKING = 1,
> @@ -607,12 +608,6 @@ static const struct attribute_group 
> tsl2583_attribute_group = {
>       .attrs = sysfs_attrs_ctrl,
>  };
>  
> -/* Use the default register values to identify the Taos device */
> -static int taos_tsl258x_device(unsigned char *bufp)
> -{
> -     return ((bufp[TSL258X_CHIPID] & 0xf0) == 0x90);
> -}
> -
>  static const struct iio_chan_spec tsl2583_channels[] = {
>       {
>               .type = IIO_LIGHT,
> @@ -777,8 +772,7 @@ static const struct iio_info tsl2583_info = {
>  static int taos_probe(struct i2c_client *clientp,
>                     const struct i2c_device_id *idp)
>  {
> -     int i, ret;
> -     unsigned char buf[TSL258X_MAX_DEVICE_REGS];
> +     int ret;
>       struct tsl2583_chip *chip;
>       struct iio_dev *indio_dev;
>  
> @@ -799,22 +793,17 @@ static int taos_probe(struct i2c_client *clientp,
>       chip->taos_chip_status = TSL258X_CHIP_UNKNOWN;
>       memcpy(chip->taos_config, taos_config, sizeof(chip->taos_config));
>  
> -     for (i = 0; i < TSL258X_MAX_DEVICE_REGS; i++) {
> -             ret = i2c_smbus_read_byte_data(clientp,
> -                                            (TSL258X_CMD_REG |
> -                                             (TSL258X_CNTRL + i)));
> -             if (ret < 0) {
> -                     dev_err(&clientp->dev,
> -                             "i2c_smbus_read_byte from reg failed in 
> taos_probe(), err = %d\n",
> -                             ret);
> -                     return ret;
> -             }
> -             buf[i] = ret;
> +     ret = i2c_smbus_read_byte_data(clientp,
> +                                    TSL258X_CMD_REG | TSL258X_CHIPID);
> +     if (ret < 0) {
> +             dev_err(&clientp->dev,
> +                     "%s failed to read the chip ID register\n", __func__);
> +             return ret;
>       }
>  
> -     if (!taos_tsl258x_device(buf)) {
> -             dev_info(&clientp->dev,
> -                      "i2c device found but does not match expected id in 
> taos_probe()\n");
> +     if ((ret & TSL2583_CHIP_ID_MASK) != TSL2583_CHIP_ID) {
> +             dev_info(&clientp->dev, "%s received an unknown chip ID %x\n",
> +                      __func__, ret);
>               return -EINVAL;
>       }
>  
> 

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to