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

iio: adc: mcp3911: simplify code with guard macro

Use the guard(mutex) macro for handle mutex lock/unlocks.

Signed-off-by: Marcus Folkesson <marcus.folkesson@gmail.com>
Link: https://lore.kernel.org/r/20231206-mcp3911-guard-v4-1-30c3c5d4340f@gmail.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

authored by

Marcus Folkesson and committed by
Jonathan Cameron
17819da6 9f4e9ffe

+23 -41
+23 -41
drivers/iio/adc/mcp3911.c
··· 7 7 */ 8 8 #include <linux/bitfield.h> 9 9 #include <linux/bits.h> 10 + #include <linux/cleanup.h> 10 11 #include <linux/clk.h> 11 12 #include <linux/delay.h> 12 13 #include <linux/err.h> ··· 317 316 int *val2, long mask) 318 317 { 319 318 struct mcp3911 *adc = iio_priv(indio_dev); 320 - int ret = -EINVAL; 319 + int ret; 321 320 322 - mutex_lock(&adc->lock); 321 + guard(mutex)(&adc->lock); 323 322 switch (mask) { 324 323 case IIO_CHAN_INFO_RAW: 325 324 ret = mcp3911_read(adc, 326 325 MCP3911_CHANNEL(channel->channel), val, 3); 327 326 if (ret) 328 - goto out; 327 + return ret; 329 328 330 329 *val = sign_extend32(*val, 23); 331 - 332 - ret = IIO_VAL_INT; 333 - break; 334 - 330 + return IIO_VAL_INT; 335 331 case IIO_CHAN_INFO_OFFSET: 336 - 337 332 ret = adc->chip->get_offset(adc, channel->channel, val); 338 333 if (ret) 339 - goto out; 334 + return ret; 340 335 341 - ret = IIO_VAL_INT; 342 - break; 336 + return IIO_VAL_INT; 343 337 case IIO_CHAN_INFO_OVERSAMPLING_RATIO: 344 338 ret = adc->chip->get_osr(adc, val); 345 339 if (ret) 346 - goto out; 340 + return ret; 347 341 348 - ret = IIO_VAL_INT; 349 - break; 350 - 342 + return IIO_VAL_INT; 351 343 case IIO_CHAN_INFO_SCALE: 352 344 *val = mcp3911_scale_table[ilog2(adc->gain[channel->channel])][0]; 353 345 *val2 = mcp3911_scale_table[ilog2(adc->gain[channel->channel])][1]; 354 - ret = IIO_VAL_INT_PLUS_NANO; 355 - break; 346 + return IIO_VAL_INT_PLUS_NANO; 347 + default: 348 + return -EINVAL; 356 349 } 357 - 358 - out: 359 - mutex_unlock(&adc->lock); 360 - return ret; 361 350 } 362 351 363 352 static int mcp3911_write_raw(struct iio_dev *indio_dev, ··· 355 364 int val2, long mask) 356 365 { 357 366 struct mcp3911 *adc = iio_priv(indio_dev); 358 - int ret = -EINVAL; 359 367 360 - mutex_lock(&adc->lock); 368 + guard(mutex)(&adc->lock); 361 369 switch (mask) { 362 370 case IIO_CHAN_INFO_SCALE: 363 371 for (int i = 0; i < MCP3911_NUM_SCALES; i++) { ··· 364 374 val2 == mcp3911_scale_table[i][1]) { 365 375 366 376 adc->gain[channel->channel] = BIT(i); 367 - ret = adc->chip->set_scale(adc, channel->channel, i); 377 + return adc->chip->set_scale(adc, channel->channel, i); 368 378 } 369 379 } 370 - break; 380 + return -EINVAL; 371 381 case IIO_CHAN_INFO_OFFSET: 372 - if (val2 != 0) { 373 - ret = -EINVAL; 374 - goto out; 375 - } 382 + if (val2 != 0) 383 + return -EINVAL; 376 384 377 - ret = adc->chip->set_offset(adc, channel->channel, val); 378 - break; 379 - 385 + return adc->chip->set_offset(adc, channel->channel, val); 380 386 case IIO_CHAN_INFO_OVERSAMPLING_RATIO: 381 387 for (int i = 0; i < ARRAY_SIZE(mcp3911_osr_table); i++) { 382 388 if (val == mcp3911_osr_table[i]) { 383 - ret = adc->chip->set_osr(adc, i); 384 - break; 389 + return adc->chip->set_osr(adc, i); 385 390 } 386 391 } 387 - break; 392 + return -EINVAL; 393 + default: 394 + return -EINVAL; 388 395 } 389 - 390 - out: 391 - mutex_unlock(&adc->lock); 392 - return ret; 393 396 } 394 397 395 398 static int mcp3911_calc_scale_table(struct mcp3911 *adc) ··· 515 532 int i = 0; 516 533 int ret; 517 534 518 - mutex_lock(&adc->lock); 535 + guard(mutex)(&adc->lock); 519 536 adc->tx_buf = MCP3911_REG_READ(MCP3911_CHANNEL(0), adc->dev_addr); 520 537 ret = spi_sync_transfer(adc->spi, xfer, ARRAY_SIZE(xfer)); 521 538 if (ret < 0) { ··· 532 549 iio_push_to_buffers_with_timestamp(indio_dev, &adc->scan, 533 550 iio_get_time_ns(indio_dev)); 534 551 out: 535 - mutex_unlock(&adc->lock); 536 552 iio_trigger_notify_done(indio_dev->trig); 537 553 538 554 return IRQ_HANDLED;