Re: [PATCH 3/7] iio:accel:stk8312: improve error handling

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

 



Breana, Tiberiu A schrieb am 28.07.2015 um 15:38:
>> -----Original Message-----
>> From: Hartmut Knaack [mailto:knaack.h@xxxxxx]
>> Sent: Tuesday, July 28, 2015 1:49 AM
>> To: linux-iio@xxxxxxxxxxxxxxx
>> Cc: Jonathan Cameron; Lars-Peter Clausen; Peter Meerwald; Breana, Tiberiu
>> A
>> Subject: [PATCH 3/7] iio:accel:stk8312: improve error handling
>>
>> Improve error handling in the following ways:
>>   - set return value on error condition to an appropriate error code
>>   - return error code immediately in case of an error (slightly changes
>>     code structure)
>>   - pass up real error code
>>   - add missing error handling
>>   - return 0 when error have been caught already
>>
>> Signed-off-by: Hartmut Knaack <knaack.h@xxxxxx>
> 
> Comments inline.
> 

Hi,

<...>
>> +267,12 @@ static int stk8312_set_sample_rate(struct stk8312_data *data,
>> int rate)
>>  	masked_reg = (ret & (~STK8312_SR_MASK)) | rate;
>>
>>  	ret = i2c_smbus_write_byte_data(client, STK8312_REG_SR,
>> masked_reg);
>> -	if (ret < 0)
>> +	if (ret < 0) {
>>  		dev_err(&client->dev, "failed to set sampling rate\n");
>> -	else
>> -		data->sample_rate_idx = rate;
>> +		return ret;
> 
> We can't just return here. Bear in mind that earlier in the function we set the
> sensor's operation mode to standby. Return to active mode before returning.
> This should be added @258 as well.
> 

OK, I will respin with a common error path to put the device back in active mode.

>> +	}
>> +
>> +	data->sample_rate_idx = rate;
>>
>>  	return stk8312_set_mode(data, mode);
>>  }
>> @@ -299,10 +305,12 @@ static int stk8312_set_range(struct stk8312_data
>> *data, u8 range)
>>  	masked_reg |= range << STK8312_RNG_SHIFT;
>>
>>  	ret = i2c_smbus_write_byte_data(client, STK8312_REG_STH,
>> masked_reg);
>> -	if (ret < 0)
>> +	if (ret < 0) {
>>  		dev_err(&client->dev, "failed to change sensor range\n");
>> -	else
>> -		data->range = range;
>> +		return ret;
>> +	}
>> +
>> +	data->range = range;
>>
>>  	return stk8312_set_mode(data, mode);
>>  }
>> @@ -337,18 +345,21 @@ static int stk8312_read_raw(struct iio_dev
>> *indio_dev,
>>  		ret = stk8312_set_mode(data, data->mode |
>> STK8312_MODE_ACTIVE);
>>  		if (ret < 0) {
>>  			mutex_unlock(&data->lock);
>> -			return -EINVAL;
>> +			return ret;
>>  		}
>>  		ret = stk8312_read_accel(data, chan->address);
>>  		if (ret < 0) {
>>  			stk8312_set_mode(data,
>>  					 data->mode &
>> (~STK8312_MODE_ACTIVE));
>>  			mutex_unlock(&data->lock);
>> -			return -EINVAL;
>> +			return ret;
>>  		}
>>  		*val = sign_extend32(ret, 7);
>> -		stk8312_set_mode(data, data->mode &
>> (~STK8312_MODE_ACTIVE));
>> +		ret = stk8312_set_mode(data,
>> +				       data->mode &
>> (~STK8312_MODE_ACTIVE));
>>  		mutex_unlock(&data->lock);
>> +		if (ret < 0)
>> +			return ret;
> 
> I don't agree with this. We've succesfully read the data, we shouldn't return an
> error if the sensor couldn't be put back to standby. I suggest leaving it as it is.
> 

Well, encountering an error should be an exceptional case, which should not happen
in normal operation (and thus do no harm). But something goes wrong, then better
report it, even a data sample has been read successfully.
Thanks,

Hartmut

>>  		return IIO_VAL_INT;
>>  	case IIO_CHAN_INFO_SCALE:
>>  		*val = stk8312_scale_table[data->range - 1][0]; @@ -608,7
>> +619,7 @@ static int stk8312_probe(struct i2c_client *client,
>>  		goto err_buffer_cleanup;
>>  	}
>>
>> -	return ret;
>> +	return 0;
>>
>>  err_buffer_cleanup:
>>  	iio_triggered_buffer_cleanup(indio_dev);
>> --
>> 2.4.6
> 
> --
> 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