From: Jonathan Cameron Date: Sun, 9 Mar 2025 17:06:19 +0000 (+0000) Subject: iio: light: as73211: Use guard() and move mode switch into inner write_raw fucntion X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=8dd92667f0a55ca5b848bae36bbf7ad4a8837ccc;p=users%2Fwilly%2Fxarray.git iio: light: as73211: Use guard() and move mode switch into inner write_raw fucntion By using guard(mutex) and moving code that switches the device to config mode into _as73211_write_raw() the error flow is simplified. Cc: Javier Carrasco Reviewed-by: David Lechner Link: https://patch.msgid.link/20250309170633.1347476-5-jic23@kernel.org Signed-off-by: Jonathan Cameron --- diff --git a/drivers/iio/light/as73211.c b/drivers/iio/light/as73211.c index 37fffce35dd1..09e484589a63 100644 --- a/drivers/iio/light/as73211.c +++ b/drivers/iio/light/as73211.c @@ -16,6 +16,7 @@ */ #include +#include #include #include #include @@ -517,6 +518,16 @@ static int _as73211_write_raw(struct iio_dev *indio_dev, struct as73211_data *data = iio_priv(indio_dev); int ret; + /* Need to switch to config mode ... */ + if ((data->osr & AS73211_OSR_DOS_MASK) != AS73211_OSR_DOS_CONFIG) { + data->osr &= ~AS73211_OSR_DOS_MASK; + data->osr |= AS73211_OSR_DOS_CONFIG; + + ret = i2c_smbus_write_byte_data(data->client, AS73211_REG_OSR, data->osr); + if (ret < 0) + return ret; + } + switch (mask) { case IIO_CHAN_INFO_SAMP_FREQ: { int reg_bits, freq_kHz = val / HZ_PER_KHZ; /* 1024, 2048, ... */ @@ -601,28 +612,15 @@ static int as73211_write_raw(struct iio_dev *indio_dev, struct iio_chan_spec con struct as73211_data *data = iio_priv(indio_dev); int ret; - mutex_lock(&data->mutex); + guard(mutex)(&data->mutex); ret = iio_device_claim_direct_mode(indio_dev); if (ret < 0) - goto error_unlock; - - /* Need to switch to config mode ... */ - if ((data->osr & AS73211_OSR_DOS_MASK) != AS73211_OSR_DOS_CONFIG) { - data->osr &= ~AS73211_OSR_DOS_MASK; - data->osr |= AS73211_OSR_DOS_CONFIG; - - ret = i2c_smbus_write_byte_data(data->client, AS73211_REG_OSR, data->osr); - if (ret < 0) - goto error_release; - } + return ret; ret = _as73211_write_raw(indio_dev, chan, val, val2, mask); - -error_release: iio_device_release_direct_mode(indio_dev); -error_unlock: - mutex_unlock(&data->mutex); + return ret; }