Re: [PATCH v2 11/27] iio: adc: ad4695: Stop using iio_device_claim_direct_scoped()

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

 



On 2/16/25 12:19 PM, Jonathan Cameron wrote:
> On Sun,  9 Feb 2025 18:06:08 +0000
> Jonathan Cameron <jic23@xxxxxxxxxx> wrote:
> 
>> From: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx>
>>
>> This complex cleanup.h use case of conditional guards has proved
>> to be more trouble that it is worth in terms of false positive compiler
>> warnings and hard to read code.
>>
>> Move directly to the new claim/release_direct() that allow sparse
>> to check for unbalanced context.  In some cases code is factored
>> out to utility functions that can do a direct return with the
>> claim and release around the call.
>>
>> Reviewed-by: David Lechner <dlechner@xxxxxxxxxxxx>
>> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx>
>> ---
>> v2: Typo in commit description (David).
>> Note there are several sets current in flight that touch this driver.
>> I'll rebase as necessary depending on what order the dependencies resolve.
> I've done this rebase and applied on the testing branch of iio.git.
> 
> Would appreciate a sanity check if anyone has time though!
> 
> New code is as follows.  The one corner I was not sure on was
> that for calibbias reading the direct mode claim was held for a long
> time.  That seems to be unnecessary as we have a copy of osr anyway
> in that function used for other purposes.
> 

...

>  	case IIO_CHAN_INFO_CALIBBIAS:
> -		switch (chan->type) {
> -		case IIO_VOLTAGE:
> -			iio_device_claim_direct_scoped(return -EBUSY, indio_dev) {
> -				ret = regmap_read(st->regmap16,
> -					AD4695_REG_OFFSET_IN(chan->scan_index),
> -					&reg_val);
> -				if (ret)
> -					return ret;
> -
> -				tmp = sign_extend32(reg_val, 15);
> -
> -				switch (cfg->oversampling_ratio) {
> -				case 1:
> -					*val = tmp / 4;
> -					*val2 = abs(tmp) % 4 * MICRO / 4;
> -					break;
> -				case 4:
> -					*val = tmp / 2;
> -					*val2 = abs(tmp) % 2 * MICRO / 2;
> -					break;
> -				case 16:
> -					*val = tmp;
> -					*val2 = 0;
> -					break;
> -				case 64:
> -					*val = tmp * 2;
> -					*val2 = 0;
> -					break;
> -				default:
> -					return -EINVAL;
> -				}
> -
> -				if (tmp < 0 && *val2) {
> -					*val *= -1;
> -					*val2 *= -1;
> -				}
> -
> -				return IIO_VAL_INT_PLUS_MICRO;
> +		switch (chan->type)
> +		case IIO_VOLTAGE: {
> +			if (!iio_device_claim_direct(indio_dev))
> +				return -EBUSY;
> +			ret = regmap_read(st->regmap16,
> +					  AD4695_REG_OFFSET_IN(chan->scan_index),
> +					  &reg_val);
> +			iio_device_release_direct(indio_dev);
> +			if (ret)
> +				return ret;
> ////THIS IS THE BIT I WOuLD LIKE EYES on.

Looks fine to me.

> +
> +			tmp = sign_extend32(reg_val, 15);
> +
> +			switch (osr) {
> +			case 1:
> +				*val = tmp / 4;
> +				*val2 = abs(tmp) % 4 * MICRO / 4;
> +				break;
> +			case 4:
> +				*val = tmp / 2;
> +				*val2 = abs(tmp) % 2 * MICRO / 2;
> +				break;
> +			case 16:
> +				*val = tmp;
> +				*val2 = 0;
> +				break;
> +			case 64:
> +				*val = tmp * 2;
> +				*val2 = 0;
> +				break;
> +			default:
> +				return -EINVAL;
> +			}
> +
> +			if (tmp < 0 && *val2) {
> +				*val *= -1;
> +				*val2 *= -1;
>  			}
> -			unreachable();
> +
> +			return IIO_VAL_INT_PLUS_MICRO;
>  		default:
>  			return -EINVAL;
>  		}




[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