Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

iio: adc: max1027: Move claim of direct mode up one level and use guard()

Move iio_device_claim_direct_mode() into the read_raw() callback
and use guard() to release a mutex. This enables simpler error
handling via direct returns.

Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://patch.msgid.link/20250217141630.897334-24-jic23@kernel.org
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

+13 -25
+13 -25
drivers/iio/adc/max1027.c
··· 336 336 int ret; 337 337 struct max1027_state *st = iio_priv(indio_dev); 338 338 339 - ret = iio_device_claim_direct_mode(indio_dev); 340 - if (ret) 341 - return ret; 342 - 343 339 /* Configure conversion register with the requested chan */ 344 340 st->reg = MAX1027_CONV_REG | MAX1027_CHAN(chan->channel) | 345 341 MAX1027_NOSCAN; ··· 345 349 if (ret < 0) { 346 350 dev_err(&indio_dev->dev, 347 351 "Failed to configure conversion register\n"); 348 - goto release; 352 + return ret; 349 353 } 350 354 351 355 /* ··· 355 359 */ 356 360 ret = max1027_wait_eoc(indio_dev); 357 361 if (ret) 358 - goto release; 362 + return ret; 359 363 360 364 /* Read result */ 361 365 ret = spi_read(st->spi, st->buffer, (chan->type == IIO_TEMP) ? 4 : 2); 362 - 363 - release: 364 - iio_device_release_direct_mode(indio_dev); 365 - 366 366 if (ret < 0) 367 367 return ret; 368 368 ··· 374 382 int ret = 0; 375 383 struct max1027_state *st = iio_priv(indio_dev); 376 384 377 - mutex_lock(&st->lock); 385 + guard(mutex)(&st->lock); 378 386 379 387 switch (mask) { 380 388 case IIO_CHAN_INFO_RAW: 389 + ret = iio_device_claim_direct_mode(indio_dev); 390 + if (ret) 391 + return ret; 392 + 381 393 ret = max1027_read_single_value(indio_dev, chan, val); 382 - break; 394 + iio_device_release_direct_mode(indio_dev); 395 + return ret; 383 396 case IIO_CHAN_INFO_SCALE: 384 397 switch (chan->type) { 385 398 case IIO_TEMP: 386 399 *val = 1; 387 400 *val2 = 8; 388 - ret = IIO_VAL_FRACTIONAL; 389 - break; 401 + return IIO_VAL_FRACTIONAL; 390 402 case IIO_VOLTAGE: 391 403 *val = 2500; 392 404 *val2 = chan->scan_type.realbits; 393 - ret = IIO_VAL_FRACTIONAL_LOG2; 394 - break; 405 + return IIO_VAL_FRACTIONAL_LOG2; 395 406 default: 396 - ret = -EINVAL; 397 - break; 407 + return -EINVAL; 398 408 } 399 - break; 400 409 default: 401 - ret = -EINVAL; 402 - break; 410 + return -EINVAL; 403 411 } 404 - 405 - mutex_unlock(&st->lock); 406 - 407 - return ret; 408 412 } 409 413 410 414 static int max1027_debugfs_reg_access(struct iio_dev *indio_dev,