From 5bd693c00e6f604d018353f9adcacb9b9a674479 Mon Sep 17 00:00:00 2001 From: Ksawlii Date: Sun, 24 Nov 2024 00:23:12 +0100 Subject: [PATCH] Revert "i2c: xiic: Fix broken locking on tx_msg" This reverts commit e058cb79b63cc8eaa35c6fc841ca0e115edaef48. --- drivers/i2c/busses/i2c-xiic.c | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/drivers/i2c/busses/i2c-xiic.c b/drivers/i2c/busses/i2c-xiic.c index ae9ef3f72..568e97c38 100755 --- a/drivers/i2c/busses/i2c-xiic.c +++ b/drivers/i2c/busses/i2c-xiic.c @@ -170,7 +170,7 @@ struct xiic_i2c { #define xiic_tx_space(i2c) ((i2c)->tx_msg->len - (i2c)->tx_pos) #define xiic_rx_space(i2c) ((i2c)->rx_msg->len - (i2c)->rx_pos) -static int xiic_start_xfer(struct xiic_i2c *i2c, struct i2c_msg *msgs, int num); +static int xiic_start_xfer(struct xiic_i2c *i2c); static void __xiic_start_xfer(struct xiic_i2c *i2c); /* @@ -701,25 +701,15 @@ static void __xiic_start_xfer(struct xiic_i2c *i2c) } -static int xiic_start_xfer(struct xiic_i2c *i2c, struct i2c_msg *msgs, int num) +static int xiic_start_xfer(struct xiic_i2c *i2c) { int ret; - mutex_lock(&i2c->lock); - ret = xiic_busy(i2c); - if (ret) - goto out; - - i2c->tx_msg = msgs; - i2c->rx_msg = NULL; - i2c->nmsgs = num; - ret = xiic_reinit(i2c); if (!ret) __xiic_start_xfer(i2c); -out: mutex_unlock(&i2c->lock); return ret; @@ -737,7 +727,14 @@ static int xiic_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) if (err < 0) return err; - err = xiic_start_xfer(i2c, msgs, num); + err = xiic_busy(i2c); + if (err) + goto out; + + i2c->tx_msg = msgs; + i2c->nmsgs = num; + + err = xiic_start_xfer(i2c); if (err < 0) { dev_err(adap->dev.parent, "Error xiic_start_xfer\n"); goto out; @@ -745,11 +742,9 @@ static int xiic_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) if (wait_event_timeout(i2c->wait, (i2c->state == STATE_ERROR) || (i2c->state == STATE_DONE), HZ)) { - mutex_lock(&i2c->lock); err = (i2c->state == STATE_DONE) ? num : -EIO; goto out; } else { - mutex_lock(&i2c->lock); i2c->tx_msg = NULL; i2c->rx_msg = NULL; i2c->nmsgs = 0; @@ -757,7 +752,6 @@ static int xiic_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) goto out; } out: - mutex_unlock(&i2c->lock); pm_runtime_mark_last_busy(i2c->dev); pm_runtime_put_autosuspend(i2c->dev); return err;