On 25/08/16 17:45, Olof Johansson wrote: > In at least one known setup, the chip comes up in a state where reading > the chip ID returns garbage unless it's been reset, due to noise on the > wires during system boot. > > All supported chips have the same reset method, and based on the > datasheets they all need 1.3 or 1.8ms to recover after reset. So, do > the conservative thing here and always reset the chip. > > Signed-off-by: Olof Johansson <olof@xxxxxxxxx> Looks good to me. Srinivas, it's your driver. Can you take a quick look at this? Thanks, Jonathan > --- > drivers/iio/accel/bmc150-accel-core.c | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > diff --git a/drivers/iio/accel/bmc150-accel-core.c b/drivers/iio/accel/bmc150-accel-core.c > index bf17aae..59b380d 100644 > --- a/drivers/iio/accel/bmc150-accel-core.c > +++ b/drivers/iio/accel/bmc150-accel-core.c > @@ -67,6 +67,9 @@ > #define BMC150_ACCEL_REG_PMU_BW 0x10 > #define BMC150_ACCEL_DEF_BW 125 > > +#define BMC150_ACCEL_REG_RESET 0x14 > +#define BMC150_ACCEL_RESET_VAL 0xB6 > + > #define BMC150_ACCEL_REG_INT_MAP_0 0x19 > #define BMC150_ACCEL_INT_MAP_0_BIT_SLOPE BIT(2) > > @@ -1497,6 +1500,14 @@ static int bmc150_accel_chip_init(struct bmc150_accel_data *data) > int ret, i; > unsigned int val; > > + /* > + * Reset chip to get it in a known good state. A delay of 1.8ms after > + * reset is required according to the data sheets of supported chips. > + */ > + regmap_write(data->regmap, BMC150_ACCEL_REG_RESET, > + BMC150_ACCEL_RESET_VAL); > + usleep_range(1800, 2500); > + > ret = regmap_read(data->regmap, BMC150_ACCEL_REG_CHIP_ID, &val); > if (ret < 0) { > dev_err(dev, "Error: Reading chip id\n"); > -- 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