RE: [PATCH] iio: accel: mma8452: remove the reset operation during driver probe

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

 



> -----Original Message-----
> From: Jonathan Cameron [mailto:Jonathan.Cameron@xxxxxxxxxx]
> Sent: 2022年2月23日 0:44
> To: Bough Chen <haibo.chen@xxxxxxx>
> Cc: jic23@xxxxxxxxxx; lars@xxxxxxxxxx; linux-iio@xxxxxxxxxxxxxxx;
> pmeerw@xxxxxxxxxx; dl-linux-imx <linux-imx@xxxxxxx>; Wolfram Sang
> <wsa@xxxxxxxxxx>
> Subject: Re: [PATCH] iio: accel: mma8452: remove the reset operation
> during driver probe
> 
> On Tue, 22 Feb 2022 12:45:51 +0800
> <haibo.chen@xxxxxxx> wrote:
> 
> > From: Haibo Chen <haibo.chen@xxxxxxx>
> >
> > Though Sensor Datasheet define this reset bit in it's CTRL_REG2
> > register, but seems the actual hardware behavior do not align with the
> > doc expect. Once the reset bit is set, sensor can’t give back an I2C
> > ack, which will cause the probe fail. So just remove this reset
> > operation.
> >
> > Signed-off-by: Haibo Chen <haibo.chen@xxxxxxx>
> 
> Hi Haibo,
> 
> I'm not really that keen to remove reset on probe as it's normally a good
> way to ensure we get a device into a sane state as we have no idea what has
> run before we load the driver.
> 
> Wolfram is there a standard way to work around missing ACK in cases like
> this?  Would just ignoring the return value be fine or are their i2c masters
> that will get stuck if they don't get the expected ack?

Currently, i2c masters will not get stuck. Only the sensor driver probe failed.
Let me do more test about this, currently I find this issue on fxls8471/mma8452, and this driver cover many sensors
Not sure whether other sensors has the same behavior.


Best Regards
Haibo chen
> 
> Jonathan
> 
> > ---
> >  drivers/iio/accel/mma8452.c | 28 ----------------------------
> >  1 file changed, 28 deletions(-)
> >
> > diff --git a/drivers/iio/accel/mma8452.c b/drivers/iio/accel/mma8452.c
> > index 0016bb947c10..ec9e26fdfb2a 100644
> > --- a/drivers/iio/accel/mma8452.c
> > +++ b/drivers/iio/accel/mma8452.c
> > @@ -1481,30 +1481,6 @@ static void mma8452_trigger_cleanup(struct
> iio_dev *indio_dev)
> >  		iio_trigger_unregister(indio_dev->trig);
> >  }
> >
> > -static int mma8452_reset(struct i2c_client *client) -{
> > -	int i;
> > -	int ret;
> > -
> > -	ret = i2c_smbus_write_byte_data(client,	MMA8452_CTRL_REG2,
> > -					MMA8452_CTRL_REG2_RST);
> > -	if (ret < 0)
> > -		return ret;
> > -
> > -	for (i = 0; i < 10; i++) {
> > -		usleep_range(100, 200);
> > -		ret = i2c_smbus_read_byte_data(client, MMA8452_CTRL_REG2);
> > -		if (ret == -EIO)
> > -			continue; /* I2C comm reset */
> > -		if (ret < 0)
> > -			return ret;
> > -		if (!(ret & MMA8452_CTRL_REG2_RST))
> > -			return 0;
> > -	}
> > -
> > -	return -ETIMEDOUT;
> > -}
> > -
> >  static const struct of_device_id mma8452_dt_ids[] = {
> >  	{ .compatible = "fsl,mma8451", .data =
> &mma_chip_info_table[mma8451] },
> >  	{ .compatible = "fsl,mma8452", .data =
> &mma_chip_info_table[mma8452]
> > }, @@ -1591,10 +1567,6 @@ static int mma8452_probe(struct i2c_client
> *client,
> >  	indio_dev->num_channels = data->chip_info->num_channels;
> >  	indio_dev->available_scan_masks = mma8452_scan_masks;
> >
> > -	ret = mma8452_reset(client);
> > -	if (ret < 0)
> > -		goto disable_regulators;
> > -
> >  	data->data_cfg = MMA8452_DATA_CFG_FS_2G;
> >  	ret = i2c_smbus_write_byte_data(client, MMA8452_DATA_CFG,
> >  					data->data_cfg);

Attachment: smime.p7s
Description: S/MIME cryptographic signature


[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