[PATCH v5 3/5] iio: ssp_sensors: factor out pending list add/remove helpers

Sanjay Chitroda
2026-04-06T08:09:08Z

From: Sanjay Chitroda <sanjayembeddedse@gmail.com>

The SSP SPI transfer path manipulates the pending message list in
multiple places, each time open-coding the same locking and list
operations.

Re-factor the pending list add and delete logic into small helper
functions to avoid duplication and simplify transfer flow to follow.

No functional change intended.

Signed-off-by: Sanjay Chitroda <sanjayembeddedse@gmail.com>
---
drivers/iio/common/ssp_sensors/ssp_spi.c | 34 +++++++++++++++---------
1 file changed, 21 insertions(+), 13 deletions(-)

diff --git a/drivers/iio/common/ssp_sensors/ssp_spi.c b/drivers/iio/common/ssp_sensors/ssp_spi.c
index 08ed92859be0..7c1780e15acf 100644
--- a/drivers/iio/common/ssp_sensors/ssp_spi.c
+++ b/drivers/iio/common/ssp_sensors/ssp_spi.c
@@ -174,6 +174,22 @@ static int ssp_check_lines(struct ssp_data *data, bool state)
return 0;
}

+static inline void ssp_pending_add(struct ssp_data *data,
+ struct ssp_msg *msg)
+{
+ mutex_lock(&data->pending_lock);
+ list_add_tail(&msg->list, &data->pending_list);
+ mutex_unlock(&data->pending_lock);
+}
+
+static inline void ssp_pending_del(struct ssp_data *data,
+ struct ssp_msg *msg)
+{
+ mutex_lock(&data->pending_lock);
+ list_del(&msg->list);
+ mutex_unlock(&data->pending_lock);
+}
+
static int ssp_do_transfer(struct ssp_data *data, struct ssp_msg *msg,
struct completion *done, int timeout)
{
@@ -202,19 +218,13 @@ static int ssp_do_transfer(struct ssp_data *data, struct ssp_msg *msg,
goto _error_locked;
}

- if (!use_no_irq) {
- mutex_lock(&data->pending_lock);
- list_add_tail(&msg->list, &data->pending_list);
- mutex_unlock(&data->pending_lock);
- }
+ if (!use_no_irq)
+ ssp_pending_add(data, msg);

status = ssp_check_lines(data, true);
if (status < 0) {
- if (!use_no_irq) {
- mutex_lock(&data->pending_lock);
- list_del(&msg->list);
- mutex_unlock(&data->pending_lock);
- }
+ if (!use_no_irq)
+ ssp_pending_del(data, msg);
goto _error_locked;
}

@@ -224,9 +234,7 @@ static int ssp_do_transfer(struct ssp_data *data, struct ssp_msg *msg,
if (wait_for_completion_timeout(done,
msecs_to_jiffies(timeout)) ==
0) {
- mutex_lock(&data->pending_lock);
- list_del(&msg->list);
- mutex_unlock(&data->pending_lock);
+ ssp_pending_del(data, msg);

data->timeout_cnt++;
return -ETIMEDOUT;
--
2.34.1