Re: [PATCH 3/9] staging:iio:hmc5843: Implement timeout in read function

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

 



On 07/27/13 16:31, Peter Meerwald wrote:
> avoid polling data ready bit forever; msleep() may be too long
> for high sampling frequencies but the driver interface does not
> support buffering
> 
> Signed-off-by: Peter Meerwald <pmeerw@xxxxxxxxxx>
> Cc: Shubhrajyoti Datta <shubhrajyoti@xxxxxx>
Applied to the togreg branch of iio.git.

Thanks
> ---
>  drivers/staging/iio/magnetometer/hmc5843.c | 18 +++++++++++++++---
>  1 file changed, 15 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/staging/iio/magnetometer/hmc5843.c b/drivers/staging/iio/magnetometer/hmc5843.c
> index c281342..79117ad 100644
> --- a/drivers/staging/iio/magnetometer/hmc5843.c
> +++ b/drivers/staging/iio/magnetometer/hmc5843.c
> @@ -26,6 +26,7 @@
>  #include <linux/types.h>
>  #include <linux/iio/iio.h>
>  #include <linux/iio/sysfs.h>
> +#include <linux/delay.h>
>  
>  #define HMC5843_CONFIG_REG_A			0x00
>  #define HMC5843_CONFIG_REG_B			0x01
> @@ -210,11 +211,22 @@ static int hmc5843_read_measurement(struct iio_dev *indio_dev,
>  	struct i2c_client *client = to_i2c_client(indio_dev->dev.parent);
>  	struct hmc5843_data *data = iio_priv(indio_dev);
>  	s32 result;
> +	int tries = 150;
>  
>  	mutex_lock(&data->lock);
> -	result = i2c_smbus_read_byte_data(client, HMC5843_STATUS_REG);
> -	while (!(result & HMC5843_DATA_READY))
> -		result = i2c_smbus_read_byte_data(client, HMC5843_STATUS_REG);
> +	while (tries-- > 0) {
> +		result = i2c_smbus_read_byte_data(client,
> +			HMC5843_STATUS_REG);
> +		if (result & HMC5843_DATA_READY)
> +			break;
> +		msleep(20);
> +	}
> +
> +	if (tries < 0) {
> +		dev_err(&client->dev, "data not ready\n");
> +		mutex_unlock(&data->lock);
> +		return -EIO;
> +	}
>  
>  	result = i2c_smbus_read_word_data(client, address);
>  	mutex_unlock(&data->lock);
> 
--
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