Re: [PATCH 1/2] i2c: qcom-geni: Add shutdown callback to quiesce hardware on reboot

From: Mukesh Savaliya

Date: Mon Oct 26 2026 - 14:47:07 EST




On 8/18/2026 10:31 AM, Praveen Talari wrote:
[...]> ---
drivers/i2c/busses/i2c-qcom-geni.c | 51 ++++++++++++++++++++++++++++++++++++--
1 file changed, 49 insertions(+), 2 deletions(-)

diff --git a/drivers/i2c/busses/i2c-qcom-geni.c b/drivers/i2c/busses/i2c-qcom-geni.c
index 658636c1ee0e..10c6a4b0b825 100644
--- a/drivers/i2c/busses/i2c-qcom-geni.c
+++ b/drivers/i2c/busses/i2c-qcom-geni.c

[...]

+ geni_se_abort_m_cmd(&gi2c->se);
+
+ if (!readl_poll_timeout_atomic(base + SE_GENI_M_IRQ_STATUS, val,
+ val & M_CMD_ABORT_EN, 10, 200000))
+ writel_relaxed(M_CMD_ABORT_EN, base + SE_GENI_M_IRQ_CLEAR);
+
+ if (readl_relaxed(base + SE_GENI_DMA_MODE_EN)) {
+ writel_relaxed(1, base + SE_DMA_TX_FSM_RST);
+ readl_poll_timeout_atomic(base + SE_DMA_TX_IRQ_STAT, val,
+ val & TX_RESET_DONE, 10, 50000);
Any error log to print if times out ?

if (ret)
dev_err(gi2c->se.dev, "Timeout resetting TX DMA FSM\n");
else
writel_relaxed(TX_RESET_DONE, base + SE_DMA_TX_IRQ_CLR);

+ writel_relaxed(val, base + SE_DMA_TX_IRQ_CLR);
+
+ writel_relaxed(1, base + SE_DMA_RX_FSM_RST);
+ readl_poll_timeout_atomic(base + SE_DMA_RX_IRQ_STAT, val,
+ val & RX_RESET_DONE, 10, 50000);
Any error log to print if times out ?

+ writel_relaxed(val, base + SE_DMA_RX_IRQ_CLR);
+ }
+}
+
static int geni_i2c_init(struct geni_i2c_dev *gi2c)
{
u32 proto, tx_depth;
@@ -1209,8 +1257,7 @@ static void geni_i2c_shutdown(struct platform_device *pdev)
{
struct geni_i2c_dev *gi2c = platform_get_drvdata(pdev);
- /* Make client i2c transfers start failing */
- i2c_mark_adapter_suspended(&gi2c->adap);
+ geni_i2c_quiesce(gi2c);
}
static int __maybe_unused geni_i2c_runtime_suspend(struct device *dev)