Skip to content

Commit 5b74da8

Browse files
TroyMitchell911Andi Shyti
authored andcommitted
i2c: spacemit: move i2c_xfer_msg()
The upcoming PIO support requires a wait_pio_xfer() helper, which is invoked from xfer_msg(). Since wait_pio_xfer() depends on err_check(), move the definition of xfer_msg() after err_check() to avoid a forward declaration of err_check(). Reviewed-by: Aurelien Jarno <aurelien@aurel32.net> Reviewed-by: Alex Elder <elder@riscstar.com> Signed-off-by: Troy Mitchell <troy.mitchell@linux.spacemit.com> Tested-by: Aurelien Jarno <aurelien@aurel32.net> Signed-off-by: Andi Shyti <andi.shyti@kernel.org> Link: https://lore.kernel.org/r/20260207-b4-k3-i2c-pio-v7-1-626942d94d91@linux.spacemit.com
1 parent dd0422e commit 5b74da8

1 file changed

Lines changed: 31 additions & 31 deletions

File tree

drivers/i2c/busses/i2c-k1.c

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -305,37 +305,6 @@ static void spacemit_i2c_start(struct spacemit_i2c_dev *i2c)
305305
writel(val, i2c->base + SPACEMIT_ICR);
306306
}
307307

308-
static int spacemit_i2c_xfer_msg(struct spacemit_i2c_dev *i2c)
309-
{
310-
unsigned long time_left;
311-
struct i2c_msg *msg;
312-
313-
for (i2c->msg_idx = 0; i2c->msg_idx < i2c->msg_num; i2c->msg_idx++) {
314-
msg = &i2c->msgs[i2c->msg_idx];
315-
i2c->msg_buf = msg->buf;
316-
i2c->unprocessed = msg->len;
317-
i2c->status = 0;
318-
319-
reinit_completion(&i2c->complete);
320-
321-
spacemit_i2c_start(i2c);
322-
323-
time_left = wait_for_completion_timeout(&i2c->complete,
324-
i2c->adapt.timeout);
325-
if (!time_left) {
326-
dev_err(i2c->dev, "msg completion timeout\n");
327-
spacemit_i2c_conditionally_reset_bus(i2c);
328-
spacemit_i2c_reset(i2c);
329-
return -ETIMEDOUT;
330-
}
331-
332-
if (i2c->status & SPACEMIT_SR_ERR)
333-
return spacemit_i2c_handle_err(i2c);
334-
}
335-
336-
return 0;
337-
}
338-
339308
static bool spacemit_i2c_is_last_msg(struct spacemit_i2c_dev *i2c)
340309
{
341310
if (i2c->msg_idx != i2c->msg_num - 1)
@@ -419,6 +388,37 @@ static void spacemit_i2c_err_check(struct spacemit_i2c_dev *i2c)
419388
complete(&i2c->complete);
420389
}
421390

391+
static int spacemit_i2c_xfer_msg(struct spacemit_i2c_dev *i2c)
392+
{
393+
unsigned long time_left;
394+
struct i2c_msg *msg;
395+
396+
for (i2c->msg_idx = 0; i2c->msg_idx < i2c->msg_num; i2c->msg_idx++) {
397+
msg = &i2c->msgs[i2c->msg_idx];
398+
i2c->msg_buf = msg->buf;
399+
i2c->unprocessed = msg->len;
400+
i2c->status = 0;
401+
402+
reinit_completion(&i2c->complete);
403+
404+
spacemit_i2c_start(i2c);
405+
406+
time_left = wait_for_completion_timeout(&i2c->complete,
407+
i2c->adapt.timeout);
408+
if (!time_left) {
409+
dev_err(i2c->dev, "msg completion timeout\n");
410+
spacemit_i2c_conditionally_reset_bus(i2c);
411+
spacemit_i2c_reset(i2c);
412+
return -ETIMEDOUT;
413+
}
414+
415+
if (i2c->status & SPACEMIT_SR_ERR)
416+
return spacemit_i2c_handle_err(i2c);
417+
}
418+
419+
return 0;
420+
}
421+
422422
static irqreturn_t spacemit_i2c_irq_handler(int irq, void *devid)
423423
{
424424
struct spacemit_i2c_dev *i2c = devid;

0 commit comments

Comments
 (0)