mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-07-24 03:56:59 +08:00
54 lines
1.5 KiB
Diff
54 lines
1.5 KiB
Diff
From 0324791a3cdc3e93df57f6293e2cfaaadc264aeb Mon Sep 17 00:00:00 2001
|
|
From: Hector Martin <marcan@marcan.st>
|
|
Date: Sat, 2 Jul 2022 00:24:15 +0900
|
|
Subject: [PATCH 155/171] spmi: apple: Properly wait for status data after
|
|
write
|
|
|
|
Signed-off-by: Hector Martin <marcan@marcan.st>
|
|
---
|
|
drivers/spmi/spmi-apple-controller.c | 20 +++++++++++++++-----
|
|
1 file changed, 15 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/drivers/spmi/spmi-apple-controller.c b/drivers/spmi/spmi-apple-controller.c
|
|
index 3b6de8069396..5b49d6c609f5 100644
|
|
--- a/drivers/spmi/spmi-apple-controller.c
|
|
+++ b/drivers/spmi/spmi-apple-controller.c
|
|
@@ -96,6 +96,7 @@ static int spmi_write_cmd(struct spmi_controller *ctrl,
|
|
struct apple_spmi *spmi;
|
|
u32 spmi_cmd = opc|slave_id<<8|slave_addr<<16|(bc-1)|(1<<15);
|
|
volatile u32 rsp;
|
|
+ volatile u32 status;
|
|
size_t i=0,j;
|
|
|
|
spmi = spmi_controller_get_drvdata(ctrl);
|
|
@@ -111,12 +112,21 @@ static int spmi_write_cmd(struct spmi_controller *ctrl,
|
|
write_reg(spmi_cmd, spmi, SPMI_CMD_REG);
|
|
}
|
|
|
|
- /* Read SPMI reply status */
|
|
- /* do we need this while loop ?
|
|
- if yes what for ? */
|
|
+ /* Wait for Rx FIFO to have something */
|
|
+ /* Quite ugly msleep, need to find a better way to do it */
|
|
+ i=0;
|
|
do {
|
|
- rsp=read_reg(spmi, SPMI_RSP_REG);
|
|
- } while (rsp==0);
|
|
+ status=read_reg(spmi, SPMI_STATUS_REG);
|
|
+ msleep(10);
|
|
+ i+=1;
|
|
+ } while ((status & SPMI_RX_FIFO_EMPTY) && i<5);
|
|
+
|
|
+ if(i>=5){
|
|
+ dev_err(&ctrl->dev,"spmi_write_cmd:took to long to get the status");
|
|
+ return -1;
|
|
+ }
|
|
+
|
|
+ rsp = read_reg(spmi, SPMI_RSP_REG);
|
|
|
|
return 0;
|
|
}
|
|
--
|
|
2.34.1
|
|
|