Skip to contentSkip to conversation

i2c: qup: Add shutdown method

PATCH In review Austin Christ 3 participants 4 messages Jan 16, 2018 – Feb 2, 2018

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 i2c: qup: Add shutdown method

This shutdown method disables I2C to avoid corrupting a new kernel started with kexec.

---
 drivers/i2c/busses/i2c-qup.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
drivers/i2c/busses/i2c-qup.c +6 -1
index 08f8e01..b96f01a 100644
@@ -1651,12 +1651,16 @@ static int qup_i2c_remove(struct platform_device *pdev)
 	return 0;
 }
 
+static void qup_i2c_shutdown(struct platform_device *pdev)
+{
+	qup_i2c_remove(pdev);
+}
+
 #ifdef CONFIG_PM
 static int qup_i2c_pm_suspend_runtime(struct device *device)
 {
 	struct qup_i2c_dev *qup = dev_get_drvdata(device);
 
-	dev_dbg(device, "pm_runtime: suspending...\n");
 	qup_i2c_disable_clocks(qup);
 	return 0;
 }
@@ -1717,6 +1721,7 @@ static int qup_i2c_resume(struct device *device)
 static struct platform_driver qup_i2c_driver = {
 	.probe  = qup_i2c_probe,
 	.remove = qup_i2c_remove,
+	.shutdown = qup_i2c_shutdown,
 	.driver = {
 		.name = "i2c_qup",
 		.pm = &qup_i2c_qup_pm_ops,
Signature · 3 lines
Qualcomm Datacenter Technologies as an affiliate of Qualcomm Technologies, Inc.
Qualcomm Technologies, Inc. is a member of the
Code Aurora Forum, a Linux Foundation Collaborative Project.
#1 lore raw

PATCH 1/1 i2c-qup: reduce verbosity on DMA channel not found messages

From: Sinan Kaya <[email protected]>

QDF2400 product doesn't have any BAM DMA attached to the I2C channel. This causes code to spit an unnecessary error message during boot.

---
 drivers/i2c/busses/i2c-qup.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/i2c/busses/i2c-qup.c +2 -2
index 08f8e01..c28d267 100644
@@ -666,7 +666,7 @@ static int qup_i2c_req_dma(struct qup_i2c_dev *qup)
 		if (IS_ERR(qup->btx.dma)) {
 			err = PTR_ERR(qup->btx.dma);
 			qup->btx.dma = NULL;
-			dev_err(qup->dev, "\n tx channel not available");
+			dev_info(qup->dev, "\n tx channel not available");
 			return err;
 		}
 	}
@@ -674,7 +674,7 @@ static int qup_i2c_req_dma(struct qup_i2c_dev *qup)
 	if (!qup->brx.dma) {
 		qup->brx.dma = dma_request_slave_channel_reason(qup->dev, "rx");
 		if (IS_ERR(qup->brx.dma)) {
-			dev_err(qup->dev, "\n rx channel not available");
+			dev_info(qup->dev, "\n rx channel not available");
 			err = PTR_ERR(qup->brx.dma);
 			qup->brx.dma = NULL;
 			qup_i2c_rel_dma(qup);
Signature · 4 lines
1.9.1
Qualcomm Datacenter Technologies as an affiliate of Qualcomm Technologies, Inc.
Qualcomm Technologies, Inc. is a member of the
Code Aurora Forum, a Linux Foundation Collaborative Project.
#2 lore raw

Re: [PATCH] i2c-qup: reduce verbosity on DMA channel not found messages

Quoted 4 lines · Austin Christ

From: Sinan Kaya <[email protected]>

QDF2400 product doesn't have any BAM DMA attached to the I2C channel. This causes code to spit an unnecessary error message during boot.

If that's the case, then qup->is_dma should be false, and then this code should never be executed.

Wouldn't it be better if qup_i2c_probe() is modified to detect a QDF2400 and not even try to enable DMA? There's already code like that for device tree:

    if (of_device_is_compatible(pdev->dev.of_node, "qcom,i2c-qup-v1.1.1")) {
        qup->adap.algo = &qup_i2c_algo;
        qup->adap.quirks = &qup_i2c_quirks;
    else
    ...
        qup->adap.algo = &qup_i2c_algo_v2;
        ret = qup_i2c_req_dma(qup);

On QDF2400, you should never be calling qup_i2c_req_dma() in the first place.

#3 lore raw
In reply to Austin Christ
Quoted 3 lines · Austin Christ

This shutdown method disables I2C to avoid corrupting a new kernel started with kexec.

Can you elaborate on the issue you're seeing here? In what way is the i2c-qup driver special, will there be similar patches for all other drivers in the system?

Regards,
Bjorn