All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Christian A. Ehrhardt" <lk@c--e.de>
To: Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	linux-usb@vger.kernel.org
Cc: "Christian A. Ehrhardt" <lk@c--e.de>,
	Dell.Client.Kernel@dell.com,
	"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	"Neil Armstrong" <neil.armstrong@linaro.org>,
	"Hans de Goede" <hdegoede@redhat.com>,
	"Jack Pham" <quic_jackp@quicinc.com>,
	"Fabrice Gasnier" <fabrice.gasnier@foss.st.com>,
	"Samuel Čavoj" <samuel@cavoj.net>,
	linux-kernel@vger.kernel.org
Subject: [PATCH 4/4] usb: ucsi: Apply UCSI_ACK_CONNECTOR_CHANGE_ACK_CMD to Dell systems
Date: Sun,  7 Jan 2024 01:17:01 +0100	[thread overview]
Message-ID: <20240107001701.130535-5-lk@c--e.de> (raw)
In-Reply-To: <20240107001701.130535-1-lk@c--e.de>

Apply the UCSI_ACK_CONNECTOR_CHANGE_ACK_CMD to all Dell systems.

There are various reports that ucsi does not work on Dell systems
with "GET_CONNECTOR_STATUS failed". At least some of these are
most likely due to the need for this quirk.

If the logic is wrong users can still use the new quirk override
for the typec_ucsi module to disable the quirk.

Signed-off-by: Christian A. Ehrhardt <lk@c--e.de>
---
 drivers/usb/typec/ucsi/ucsi_acpi.c | 36 +++++++++++++++++++++++++-----
 1 file changed, 31 insertions(+), 5 deletions(-)

diff --git a/drivers/usb/typec/ucsi/ucsi_acpi.c b/drivers/usb/typec/ucsi/ucsi_acpi.c
index 78a0d13584ad..690d5e55bdc4 100644
--- a/drivers/usb/typec/ucsi/ucsi_acpi.c
+++ b/drivers/usb/typec/ucsi/ucsi_acpi.c
@@ -27,6 +27,11 @@ struct ucsi_acpi {
 	u64 cmd;
 };
 
+struct ucsi_acpi_attach_data {
+	const struct ucsi_operations *ops;
+	unsigned int quirks;
+};
+
 static int ucsi_acpi_dsm(struct ucsi_acpi *ua, int func)
 {
 	union acpi_object *obj;
@@ -121,12 +126,30 @@ static const struct ucsi_operations ucsi_zenbook_ops = {
 	.async_write = ucsi_acpi_async_write
 };
 
-static const struct dmi_system_id zenbook_dmi_id[] = {
+static const struct ucsi_acpi_attach_data ucsi_acpi_default_attach_data = {
+	.ops = &ucsi_acpi_ops,
+	.quirks = 0
+};
+
+static const struct dmi_system_id ucsi_acpi_quirks[] = {
 	{
 		.matches = {
 			DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
 			DMI_MATCH(DMI_PRODUCT_NAME, "ZenBook UX325UA_UM325UA"),
 		},
+		.driver_data = &(struct ucsi_acpi_attach_data) {
+			.ops = &ucsi_zenbook_ops,
+			.quirks = 0
+		},
+	},
+	{
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+		},
+		.driver_data = &(struct ucsi_acpi_attach_data) {
+			.ops = &ucsi_acpi_ops,
+			.quirks = UCSI_ACK_CONNECTOR_CHANGE_ACK_CMD
+		},
 	},
 	{ }
 };
@@ -152,7 +175,8 @@ static void ucsi_acpi_notify(acpi_handle handle, u32 event, void *data)
 static int ucsi_acpi_probe(struct platform_device *pdev)
 {
 	struct acpi_device *adev = ACPI_COMPANION(&pdev->dev);
-	const struct ucsi_operations *ops = &ucsi_acpi_ops;
+	const struct dmi_system_id *id;
+	const struct ucsi_acpi_attach_data *attach;
 	struct ucsi_acpi *ua;
 	struct resource *res;
 	acpi_status status;
@@ -182,10 +206,12 @@ static int ucsi_acpi_probe(struct platform_device *pdev)
 	init_completion(&ua->complete);
 	ua->dev = &pdev->dev;
 
-	if (dmi_check_system(zenbook_dmi_id))
-		ops = &ucsi_zenbook_ops;
+	attach = &ucsi_acpi_default_attach_data;
+	id = dmi_first_match(ucsi_acpi_quirks);
+	if (id)
+		attach = id->driver_data;
 
-	ua->ucsi = ucsi_create(&pdev->dev, ops, 0);
+	ua->ucsi = ucsi_create(&pdev->dev, attach->ops, attach->quirks);
 	if (IS_ERR(ua->ucsi))
 		return PTR_ERR(ua->ucsi);
 
-- 
2.40.1


  parent reply	other threads:[~2024-01-07  0:17 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-07  0:16 [PATCH 0/4] Make UCSI on Dell Latitude work Christian A. Ehrhardt
2024-01-07  0:16 ` [PATCH 1/4] usb: ucsi: Add missing ppm_lock Christian A. Ehrhardt
2024-01-07  0:16 ` [PATCH 2/4] usb: ucsi: Add quirk infrastructure Christian A. Ehrhardt
2024-01-15  7:53   ` Heikki Krogerus
2024-01-07  0:17 ` [PATCH 3/4] usb: ucsi: Quirk to ack a connector change ack cmd Christian A. Ehrhardt
2024-01-07  0:17 ` Christian A. Ehrhardt [this message]
2024-01-15  9:05   ` [PATCH 4/4] usb: ucsi: Apply UCSI_ACK_CONNECTOR_CHANGE_ACK_CMD to Dell systems Heikki Krogerus
2024-01-15 11:57     ` Christian A. Ehrhardt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240107001701.130535-5-lk@c--e.de \
    --to=lk@c--e.de \
    --cc=Dell.Client.Kernel@dell.com \
    --cc=fabrice.gasnier@foss.st.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=hdegoede@redhat.com \
    --cc=heikki.krogerus@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=neil.armstrong@linaro.org \
    --cc=quic_jackp@quicinc.com \
    --cc=samuel@cavoj.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.