Re: [PATCH] iio: accel: bmc150: reset chip at init time

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 30/08/16 20:45, Srinivas Pandruvada wrote:
> On Mon, 2016-08-29 at 18:23 +0100, Jonathan Cameron wrote:
>> 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>
> Reviewed-by: Srinivas Pandruvada <srinivas.pandruvada@xxxxxxxxxxxxxxx>
Applied to the fixes-togreg branch of iio.git and marked for stable.

Thanks,

Jonathan
> 
>> 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
> 

--
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



[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux