diff mbox series

[2/2] ucsi_ccg: Do not hardcode interrupt polarity and type

Message ID 20220510052437.3212186-3-Sanket.Goswami@amd.com
State New
Headers show
Series Updates to ucsi_ccg driver | expand

Commit Message

Sanket Goswami May 10, 2022, 5:24 a.m. UTC
The current implementation supports only Level trigger with ACTIVE HIGH.
Some of the AMD platforms have different PD firmware implementation which
needs different polarity. This patch checks the polarity and type based
on the device properties set and registers the interrupt handler
accordingly.

Signed-off-by: Sanket Goswami <Sanket.Goswami@amd.com>
---
 drivers/usb/typec/ucsi/ucsi_ccg.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)
diff mbox series

Patch

diff --git a/drivers/usb/typec/ucsi/ucsi_ccg.c b/drivers/usb/typec/ucsi/ucsi_ccg.c
index 7585599bacfd..0db935bd8473 100644
--- a/drivers/usb/typec/ucsi/ucsi_ccg.c
+++ b/drivers/usb/typec/ucsi/ucsi_ccg.c
@@ -20,6 +20,7 @@ 
 
 #include <asm/unaligned.h>
 #include "ucsi.h"
+#define INTR_POL_TYPE	BIT(0)
 
 enum enum_fw_mode {
 	BOOT,   /* bootloader */
@@ -1324,6 +1325,8 @@  static int ucsi_ccg_probe(struct i2c_client *client,
 	struct device *dev = &client->dev;
 	struct ucsi_ccg *uc;
 	int status;
+	/* Keep the IRQ type and polarity default as Level trigger Active High */
+	int irqtype = IRQF_TRIGGER_HIGH;
 
 	uc = devm_kzalloc(dev, sizeof(*uc), GFP_KERNEL);
 	if (!uc)
@@ -1366,8 +1369,12 @@  static int ucsi_ccg_probe(struct i2c_client *client,
 
 	ucsi_set_drvdata(uc->ucsi, uc);
 
+	status = (uintptr_t)device_get_match_data(dev);
+	if (status & INTR_POL_TYPE)
+		irqtype = IRQF_TRIGGER_FALLING;
+
 	status = request_threaded_irq(client->irq, NULL, ccg_irq_handler,
-				      IRQF_ONESHOT | IRQF_TRIGGER_HIGH,
+				      IRQF_ONESHOT | irqtype,
 				      dev_name(dev), uc);
 	if (status < 0) {
 		dev_err(uc->dev, "request_threaded_irq failed - %d\n", status);
@@ -1419,7 +1426,7 @@  static const struct i2c_device_id ucsi_ccg_device_id[] = {
 MODULE_DEVICE_TABLE(i2c, ucsi_ccg_device_id);
 
 static const struct acpi_device_id amd_i2c_ucsi_match[] = {
-	{"AMDI0042"},
+	{"AMDI0042", INTR_POL_TYPE},
 	{}
 };
 MODULE_DEVICE_TABLE(acpi, amd_i2c_ucsi_match);