linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v6 0/7] platform/chrome: Type-C switch driver
@ 2022-08-16 21:48 Prashant Malani
  2022-08-16 21:48 ` [PATCH v6 1/7] platform/chrome: Add Type-C mux set command definitions Prashant Malani
                   ` (8 more replies)
  0 siblings, 9 replies; 14+ messages in thread
From: Prashant Malani @ 2022-08-16 21:48 UTC (permalink / raw)
  To: linux-kernel, chrome-platform
  Cc: bleung, Prashant Malani, Daisuke Nojiri, Dustin L. Howett,
	Greg Kroah-Hartman, Guenter Roeck, Gustavo A. R. Silva,
	Kees Cook, Tinghan Shen, Tzung-Bi Shih, Xiang wangx

v4 of this series was originally merged to the USB maintainer tree, but
there were dependencies from the chrome-platform tree which caused
conflicts in the merge tree, so the chrome specific parts were
reverted [1].

v5 is a resubmission of the series with the Chrome-only parts (since the
USB framework parts were merged successfully).

[1] https://lore.kernel.org/lkml/YtadE201j+dt5jJx@kroah.com/

Original cover letter (with parts relating to USB patches removed):

This series introduces a retimer class to the USB Type-C framework,
It also introduces a ChromeOS EC (Embedded Controller) switch driver which
registers the aforementioned retimer switches as well as mode-switches.

v5: https://lore.kernel.org/chrome-platform/20220815063555.1384505-1-pmalani@chromium.org/

Changes in v6:
- Changed "Chrome OS" to "ChromeOS" and "Type C" to "Type-C" in various
  commit messages and comments.
- Added Reviewed-by tags received in v5.
- Fit some cros_ec_cmd() calls into 1 line (Patch 3/7 and patch 4/7).
- Inlined struct initialization (Patch 3/7).
- Use device_property_present (Patch 5/7).
- Misc. other minor cleanup.

Prashant Malani (7):
  platform/chrome: Add Type-C mux set command definitions
  platform/chrome: cros_typec_switch: Add switch driver
  platform/chrome: cros_typec_switch: Set EC retimer
  platform/chrome: cros_typec_switch: Add event check
  platform/chrome: cros_typec_switch: Register mode switches
  platform/chrome: cros_ec_typec: Cleanup switch handle return paths
  platform/chrome: cros_ec_typec: Get retimer handle

 MAINTAINERS                                   |   1 +
 drivers/platform/chrome/Kconfig               |  11 +
 drivers/platform/chrome/Makefile              |   1 +
 drivers/platform/chrome/cros_ec_typec.c       |  50 ++-
 drivers/platform/chrome/cros_typec_switch.c   | 327 ++++++++++++++++++
 .../linux/platform_data/cros_ec_commands.h    |  18 +
 6 files changed, 401 insertions(+), 7 deletions(-)
 create mode 100644 drivers/platform/chrome/cros_typec_switch.c

-- 
2.37.1.595.g718a3a8f04-goog


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH v6 1/7] platform/chrome: Add Type-C mux set command definitions
  2022-08-16 21:48 [PATCH v6 0/7] platform/chrome: Type-C switch driver Prashant Malani
@ 2022-08-16 21:48 ` Prashant Malani
  2022-08-16 21:48 ` [PATCH v6 2/7] platform/chrome: cros_typec_switch: Add switch driver Prashant Malani
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 14+ messages in thread
From: Prashant Malani @ 2022-08-16 21:48 UTC (permalink / raw)
  To: linux-kernel, chrome-platform
  Cc: bleung, Prashant Malani, Tzung-Bi Shih, Daisuke Nojiri,
	Dustin L. Howett, Greg Kroah-Hartman, Guenter Roeck,
	Gustavo A. R. Silva, Sebastian Reichel, Tinghan Shen,
	Xiang wangx

Copy EC header definitions for the USB Type-C Mux control command from
the EC code base. Also pull in "TBT_UFP_REPLY" definitions, since that
is the prior entry in the enum.

These headers are already present in the EC code base. [1]

[1] https://chromium.googlesource.com/chromiumos/platform/ec/+/b80f85a94a423273c1638ef7b662c56931a138dd/include/ec_commands.h

Signed-off-by: Prashant Malani <pmalani@chromium.org>
Reviewed-by: Tzung-Bi Shih <tzungbi@kernel.org>
---

Changes since v5:
- Picked by Reviewed-by tag.
- No functional changes.

Changes since v4:
- No changes.

Changes since v3:
- No changes.

Changes since v2:
- No changes.

Changes since v1:
- No changes.

 include/linux/platform_data/cros_ec_commands.h | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/include/linux/platform_data/cros_ec_commands.h b/include/linux/platform_data/cros_ec_commands.h
index 8b1b795867a1..5744a2d746aa 100644
--- a/include/linux/platform_data/cros_ec_commands.h
+++ b/include/linux/platform_data/cros_ec_commands.h
@@ -5724,8 +5724,21 @@ enum typec_control_command {
 	TYPEC_CONTROL_COMMAND_EXIT_MODES,
 	TYPEC_CONTROL_COMMAND_CLEAR_EVENTS,
 	TYPEC_CONTROL_COMMAND_ENTER_MODE,
+	TYPEC_CONTROL_COMMAND_TBT_UFP_REPLY,
+	TYPEC_CONTROL_COMMAND_USB_MUX_SET,
 };
 
+/* Replies the AP may specify to the TBT EnterMode command as a UFP */
+enum typec_tbt_ufp_reply {
+	TYPEC_TBT_UFP_REPLY_NAK,
+	TYPEC_TBT_UFP_REPLY_ACK,
+};
+
+struct typec_usb_mux_set {
+	uint8_t mux_index;	/* Index of the mux to set in the chain */
+	uint8_t mux_flags;	/* USB_PD_MUX_*-encoded USB mux state to set */
+} __ec_align1;
+
 struct ec_params_typec_control {
 	uint8_t port;
 	uint8_t command;	/* enum typec_control_command */
@@ -5739,6 +5752,8 @@ struct ec_params_typec_control {
 	union {
 		uint32_t clear_events_mask;
 		uint8_t mode_to_enter;      /* enum typec_mode */
+		uint8_t tbt_ufp_reply;      /* enum typec_tbt_ufp_reply */
+		struct typec_usb_mux_set mux_params;
 		uint8_t placeholder[128];
 	};
 } __ec_align1;
@@ -5817,6 +5832,9 @@ enum tcpc_cc_polarity {
 #define PD_STATUS_EVENT_SOP_DISC_DONE		BIT(0)
 #define PD_STATUS_EVENT_SOP_PRIME_DISC_DONE	BIT(1)
 #define PD_STATUS_EVENT_HARD_RESET		BIT(2)
+#define PD_STATUS_EVENT_DISCONNECTED		BIT(3)
+#define PD_STATUS_EVENT_MUX_0_SET_DONE		BIT(4)
+#define PD_STATUS_EVENT_MUX_1_SET_DONE		BIT(5)
 
 struct ec_params_typec_status {
 	uint8_t port;
-- 
2.37.1.595.g718a3a8f04-goog


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v6 2/7] platform/chrome: cros_typec_switch: Add switch driver
  2022-08-16 21:48 [PATCH v6 0/7] platform/chrome: Type-C switch driver Prashant Malani
  2022-08-16 21:48 ` [PATCH v6 1/7] platform/chrome: Add Type-C mux set command definitions Prashant Malani
@ 2022-08-16 21:48 ` Prashant Malani
  2022-08-17  1:48   ` Tzung-Bi Shih
  2022-08-16 21:48 ` [PATCH v6 3/7] platform/chrome: cros_typec_switch: Set EC retimer Prashant Malani
                   ` (6 subsequent siblings)
  8 siblings, 1 reply; 14+ messages in thread
From: Prashant Malani @ 2022-08-16 21:48 UTC (permalink / raw)
  To: linux-kernel, chrome-platform
  Cc: bleung, Prashant Malani, Daisuke Nojiri, Dustin L. Howett,
	Greg Kroah-Hartman, Guenter Roeck, Gustavo A. R. Silva,
	Lee Jones, Tinghan Shen, Tzung-Bi Shih, Xiang wangx

Introduce a driver to configure USB Type-C mode switches and retimers
which are controlled by the ChromeOS EC (Embedded Controller).
This allows Type-C port drivers, as well as alternate mode drivers to
configure their relevant mode switches and retimers according to the
Type-C state they want to achieve.

ACPI devices with ID GOOG001A will bind to this driver.

Currently, we only register a retimer switch with a stub set function.
Subsequent patches will implement the host command set functionality,
and introduce mode switches.

Signed-off-by: Prashant Malani <pmalani@chromium.org>
---

Changes since v5:
- Change "Chrome OS -> "ChromeOS".
- Change "Type C" -> "Type-C".
- Remove unnecessary variable init in cros_typec_register_switches().

Changes since v4:
- Add ACPI dependency to Kconfig.

Changes since v3:
- No changes.

Changes since v2:
- Fixed missing "static" identifier.
- Removed unnecessary new line for function signature.

Changes since v1:
- No changes.

 MAINTAINERS                                 |   1 +
 drivers/platform/chrome/Kconfig             |  11 ++
 drivers/platform/chrome/Makefile            |   1 +
 drivers/platform/chrome/cros_typec_switch.c | 169 ++++++++++++++++++++
 4 files changed, 182 insertions(+)
 create mode 100644 drivers/platform/chrome/cros_typec_switch.c

diff --git a/MAINTAINERS b/MAINTAINERS
index 8a5012ba6ff9..c1e4977cb1c3 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -4894,6 +4894,7 @@ M:	Prashant Malani <pmalani@chromium.org>
 L:	chrome-platform@lists.linux.dev
 S:	Maintained
 F:	drivers/platform/chrome/cros_ec_typec.c
+F:	drivers/platform/chrome/cros_typec_switch.c
 
 CHROMEOS EC USB PD NOTIFY DRIVER
 M:	Prashant Malani <pmalani@chromium.org>
diff --git a/drivers/platform/chrome/Kconfig b/drivers/platform/chrome/Kconfig
index c45fb376d653..6b954c5acadb 100644
--- a/drivers/platform/chrome/Kconfig
+++ b/drivers/platform/chrome/Kconfig
@@ -265,6 +265,17 @@ config CHROMEOS_PRIVACY_SCREEN
 	  this should probably always be built into the kernel to avoid or
 	  minimize drm probe deferral.
 
+config CROS_TYPEC_SWITCH
+	tristate "ChromeOS EC Type-C Switch Control"
+	depends on MFD_CROS_EC_DEV && TYPEC && ACPI
+	default MFD_CROS_EC_DEV
+	help
+	  If you say Y here, you get support for configuring the ChromeOS EC Type-C
+	  muxes and retimers.
+
+	  To compile this driver as a module, choose M here: the module will be
+	  called cros_typec_switch.
+
 source "drivers/platform/chrome/wilco_ec/Kconfig"
 
 # Kunit test cases
diff --git a/drivers/platform/chrome/Makefile b/drivers/platform/chrome/Makefile
index f7e74a845afc..2950610101f1 100644
--- a/drivers/platform/chrome/Makefile
+++ b/drivers/platform/chrome/Makefile
@@ -12,6 +12,7 @@ obj-$(CONFIG_CHROMEOS_TBMC)		+= chromeos_tbmc.o
 obj-$(CONFIG_CROS_EC)			+= cros_ec.o
 obj-$(CONFIG_CROS_EC_I2C)		+= cros_ec_i2c.o
 obj-$(CONFIG_CROS_EC_ISHTP)		+= cros_ec_ishtp.o
+obj-$(CONFIG_CROS_TYPEC_SWITCH)		+= cros_typec_switch.o
 obj-$(CONFIG_CROS_EC_RPMSG)		+= cros_ec_rpmsg.o
 obj-$(CONFIG_CROS_EC_SPI)		+= cros_ec_spi.o
 cros_ec_lpcs-objs			:= cros_ec_lpc.o cros_ec_lpc_mec.o
diff --git a/drivers/platform/chrome/cros_typec_switch.c b/drivers/platform/chrome/cros_typec_switch.c
new file mode 100644
index 000000000000..db773bf57899
--- /dev/null
+++ b/drivers/platform/chrome/cros_typec_switch.c
@@ -0,0 +1,169 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright 2022 Google LLC
+ *
+ * This driver provides the ability to configure Type-C muxes and retimers which are controlled by
+ * the ChromeOS EC.
+ */
+
+#include <linux/acpi.h>
+#include <linux/module.h>
+#include <linux/platform_data/cros_ec_commands.h>
+#include <linux/platform_device.h>
+#include <linux/usb/typec_retimer.h>
+
+#define DRV_NAME "cros-typec-switch"
+
+/* Handles and other relevant data required for each port's switches. */
+struct cros_typec_port {
+	int port_num;
+	struct typec_retimer *retimer;
+	struct cros_typec_switch_data *sdata;
+};
+
+/* Driver-specific data. */
+struct cros_typec_switch_data {
+	struct device *dev;
+	struct cros_ec_device *ec;
+	struct cros_typec_port *ports[EC_USB_PD_MAX_PORTS];
+};
+
+static int cros_typec_retimer_set(struct typec_retimer *retimer, struct typec_retimer_state *state)
+{
+	return 0;
+}
+
+static void cros_typec_unregister_switches(struct cros_typec_switch_data *sdata)
+{
+	int i;
+
+	for (i = 0; i < EC_USB_PD_MAX_PORTS; i++) {
+		if (!sdata->ports[i])
+			continue;
+		typec_retimer_unregister(sdata->ports[i]->retimer);
+	}
+}
+
+static int cros_typec_register_retimer(struct cros_typec_port *port, struct fwnode_handle *fwnode)
+{
+	struct typec_retimer_desc retimer_desc = {
+		.fwnode = fwnode,
+		.drvdata = port,
+		.name = fwnode_get_name(fwnode),
+		.set = cros_typec_retimer_set,
+	};
+
+	port->retimer = typec_retimer_register(port->sdata->dev, &retimer_desc);
+	if (IS_ERR(port->retimer))
+		return PTR_ERR(port->retimer);
+
+	return 0;
+}
+
+static int cros_typec_register_switches(struct cros_typec_switch_data *sdata)
+{
+	struct cros_typec_port *port;
+	struct device *dev = sdata->dev;
+	struct fwnode_handle *fwnode;
+	struct acpi_device *adev;
+	unsigned long long index;
+	int nports, ret;
+
+	nports = device_get_child_node_count(dev);
+	if (nports == 0) {
+		dev_err(dev, "No switch devices found.\n");
+		return -ENODEV;
+	}
+
+	device_for_each_child_node(dev, fwnode) {
+		port = devm_kzalloc(dev, sizeof(*port), GFP_KERNEL);
+		if (!port) {
+			ret = -ENOMEM;
+			goto err_switch;
+		}
+
+		adev = to_acpi_device_node(fwnode);
+		if (!adev) {
+			dev_err(fwnode->dev, "Couldn't get ACPI device handle\n");
+			ret = -ENODEV;
+			goto err_switch;
+		}
+
+		ret = acpi_evaluate_integer(adev->handle, "_ADR", NULL, &index);
+		if (ACPI_FAILURE(ret)) {
+			dev_err(fwnode->dev, "_ADR wasn't evaluated\n");
+			ret = -ENODATA;
+			goto err_switch;
+		}
+
+		if (index < 0 || index >= EC_USB_PD_MAX_PORTS) {
+			dev_err(fwnode->dev, "Invalid port index number: %llu", index);
+			ret = -EINVAL;
+			goto err_switch;
+		}
+		port->sdata = sdata;
+		port->port_num = index;
+		sdata->ports[index] = port;
+
+		ret = cros_typec_register_retimer(port, fwnode);
+		if (ret) {
+			dev_err(dev, "Retimer switch register failed\n");
+			goto err_switch;
+		}
+
+		dev_dbg(dev, "Retimer switch registered for index %llu\n", index);
+	}
+
+	return 0;
+err_switch:
+	cros_typec_unregister_switches(sdata);
+	return ret;
+}
+
+static int cros_typec_switch_probe(struct platform_device *pdev)
+{
+	struct device *dev = &pdev->dev;
+	struct cros_typec_switch_data *sdata;
+
+	sdata = devm_kzalloc(dev, sizeof(*sdata), GFP_KERNEL);
+	if (!sdata)
+		return -ENOMEM;
+
+	sdata->dev = dev;
+	sdata->ec = dev_get_drvdata(pdev->dev.parent);
+
+	platform_set_drvdata(pdev, sdata);
+
+	return cros_typec_register_switches(sdata);
+}
+
+static int cros_typec_switch_remove(struct platform_device *pdev)
+{
+	struct cros_typec_switch_data *sdata = platform_get_drvdata(pdev);
+
+	cros_typec_unregister_switches(sdata);
+	return 0;
+}
+
+#ifdef CONFIG_ACPI
+static const struct acpi_device_id cros_typec_switch_acpi_id[] = {
+	{ "GOOG001A", 0 },
+	{}
+};
+MODULE_DEVICE_TABLE(acpi, cros_typec_switch_acpi_id);
+#endif
+
+static struct platform_driver cros_typec_switch_driver = {
+	.driver	= {
+		.name = DRV_NAME,
+		.acpi_match_table = ACPI_PTR(cros_typec_switch_acpi_id),
+	},
+	.probe = cros_typec_switch_probe,
+	.remove = cros_typec_switch_remove,
+};
+
+module_platform_driver(cros_typec_switch_driver);
+
+MODULE_AUTHOR("Prashant Malani <pmalani@chromium.org>");
+MODULE_DESCRIPTION("ChromeOS EC Type-C Switch control");
+MODULE_LICENSE("GPL");
-- 
2.37.1.595.g718a3a8f04-goog


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v6 3/7] platform/chrome: cros_typec_switch: Set EC retimer
  2022-08-16 21:48 [PATCH v6 0/7] platform/chrome: Type-C switch driver Prashant Malani
  2022-08-16 21:48 ` [PATCH v6 1/7] platform/chrome: Add Type-C mux set command definitions Prashant Malani
  2022-08-16 21:48 ` [PATCH v6 2/7] platform/chrome: cros_typec_switch: Add switch driver Prashant Malani
@ 2022-08-16 21:48 ` Prashant Malani
  2022-08-17  1:48   ` Tzung-Bi Shih
  2022-08-16 21:48 ` [PATCH v6 4/7] platform/chrome: cros_typec_switch: Add event check Prashant Malani
                   ` (5 subsequent siblings)
  8 siblings, 1 reply; 14+ messages in thread
From: Prashant Malani @ 2022-08-16 21:48 UTC (permalink / raw)
  To: linux-kernel, chrome-platform
  Cc: bleung, Prashant Malani, Daisuke Nojiri, Dustin L. Howett,
	Greg Kroah-Hartman, Guenter Roeck, Gustavo A. R. Silva,
	Kees Cook, Sebastian Reichel, Tinghan Shen, Tzung-Bi Shih,
	Xiang wangx

Invoke ChromeOS EC host commands to set EC-controlled retimer switches
to the state the Type-C framework instructs.

Signed-off-by: Prashant Malani <pmalani@chromium.org>
---

Changes since v5:
- Change "Chrome OS" -> "ChromeOS".
- Change "Type C" -> "Type-C".
- Inline mux_params struct initialization.
- Make cros_ec_cmd() invocation fit on 1 line.

Changes since v4:
- Update cros_ec_command() to cros_ec_cmd().

Changes since v3:
- No changes.

Changes since v2:
- No changes.

Changes since v1:
- No changes.

 drivers/platform/chrome/cros_typec_switch.c | 53 ++++++++++++++++++++-
 1 file changed, 52 insertions(+), 1 deletion(-)

diff --git a/drivers/platform/chrome/cros_typec_switch.c b/drivers/platform/chrome/cros_typec_switch.c
index db773bf57899..eae7d26416aa 100644
--- a/drivers/platform/chrome/cros_typec_switch.c
+++ b/drivers/platform/chrome/cros_typec_switch.c
@@ -9,7 +9,10 @@
 #include <linux/acpi.h>
 #include <linux/module.h>
 #include <linux/platform_data/cros_ec_commands.h>
+#include <linux/platform_data/cros_ec_proto.h>
 #include <linux/platform_device.h>
+#include <linux/usb/typec_altmode.h>
+#include <linux/usb/typec_dp.h>
 #include <linux/usb/typec_retimer.h>
 
 #define DRV_NAME "cros-typec-switch"
@@ -28,9 +31,57 @@ struct cros_typec_switch_data {
 	struct cros_typec_port *ports[EC_USB_PD_MAX_PORTS];
 };
 
+static int cros_typec_cmd_mux_set(struct cros_typec_switch_data *sdata, int port_num, u8 index,
+				  u8 state)
+{
+	struct ec_params_typec_control req = {
+		.port = port_num,
+		.command = TYPEC_CONTROL_COMMAND_USB_MUX_SET,
+		.mux_params = {
+			.mux_index = index,
+			.mux_flags = state,
+		},
+	};
+
+	return cros_ec_cmd(sdata->ec, 0, EC_CMD_TYPEC_CONTROL, &req, sizeof(req), NULL, 0);
+}
+
+static int cros_typec_get_mux_state(unsigned long mode, struct typec_altmode *alt)
+{
+	int ret = -EOPNOTSUPP;
+
+	if (mode == TYPEC_STATE_SAFE)
+		ret = USB_PD_MUX_SAFE_MODE;
+	else if (mode == TYPEC_STATE_USB)
+		ret = USB_PD_MUX_USB_ENABLED;
+	else if (alt && alt->svid == USB_TYPEC_DP_SID)
+		ret = USB_PD_MUX_DP_ENABLED;
+
+	return ret;
+}
+
+/*
+ * The ChromeOS EC treats both mode-switches and retimers as "muxes" for the purposes of the
+ * host command API. This common function configures and verifies the retimer/mode-switch
+ * according to the provided setting.
+ */
+static int cros_typec_configure_mux(struct cros_typec_switch_data *sdata, int port_num, int index,
+				    unsigned long mode, struct typec_altmode *alt)
+{
+	int ret = cros_typec_get_mux_state(mode, alt);
+
+	if (ret < 0)
+		return ret;
+
+	return cros_typec_cmd_mux_set(sdata, port_num, index, (u8)ret);
+}
+
 static int cros_typec_retimer_set(struct typec_retimer *retimer, struct typec_retimer_state *state)
 {
-	return 0;
+	struct cros_typec_port *port = typec_retimer_get_drvdata(retimer);
+
+	/* Retimers have index 1. */
+	return cros_typec_configure_mux(port->sdata, port->port_num, 1, state->mode, state->alt);
 }
 
 static void cros_typec_unregister_switches(struct cros_typec_switch_data *sdata)
-- 
2.37.1.595.g718a3a8f04-goog


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v6 4/7] platform/chrome: cros_typec_switch: Add event check
  2022-08-16 21:48 [PATCH v6 0/7] platform/chrome: Type-C switch driver Prashant Malani
                   ` (2 preceding siblings ...)
  2022-08-16 21:48 ` [PATCH v6 3/7] platform/chrome: cros_typec_switch: Set EC retimer Prashant Malani
@ 2022-08-16 21:48 ` Prashant Malani
  2022-08-17  1:48   ` Tzung-Bi Shih
  2022-08-16 21:48 ` [PATCH v6 5/7] platform/chrome: cros_typec_switch: Register mode switches Prashant Malani
                   ` (4 subsequent siblings)
  8 siblings, 1 reply; 14+ messages in thread
From: Prashant Malani @ 2022-08-16 21:48 UTC (permalink / raw)
  To: linux-kernel, chrome-platform
  Cc: bleung, Prashant Malani, Daisuke Nojiri, Dustin L. Howett,
	Greg Kroah-Hartman, Guenter Roeck, Gustavo A. R. Silva,
	Kees Cook, Lee Jones, Tinghan Shen, Tzung-Bi Shih, Xiang wangx

The ChromeOS EC updates Type-C status events when mux set requests from
the Application Processor (AP) are completed. Add a check to the
flow of configuring muxes to look for this status done bit, so that
the driver is aware that the mux set completed successfully or not.

Signed-off-by: Prashant Malani <pmalani@chromium.org>
---

Changes since v5:
- Change "Chrome OS" -> "ChromeOS".
- Make cros_ec_cmd() invocation fit on 1 line.

Changes since v4:
- Update cros_ec_command() to cros_ec_cmd().
- Dropped unnecessary Reported-by tag (since this patch is not a
  bug fix).

Changes since v3:
- No changes.

Changes since v2:
- Fixed missing "static" identifier.

Changes since v1:
- No changes.

 drivers/platform/chrome/cros_typec_switch.c | 71 ++++++++++++++++++++-
 1 file changed, 69 insertions(+), 2 deletions(-)

diff --git a/drivers/platform/chrome/cros_typec_switch.c b/drivers/platform/chrome/cros_typec_switch.c
index eae7d26416aa..dc84cdec8f7f 100644
--- a/drivers/platform/chrome/cros_typec_switch.c
+++ b/drivers/platform/chrome/cros_typec_switch.c
@@ -7,6 +7,8 @@
  */
 
 #include <linux/acpi.h>
+#include <linux/delay.h>
+#include <linux/jiffies.h>
 #include <linux/module.h>
 #include <linux/platform_data/cros_ec_commands.h>
 #include <linux/platform_data/cros_ec_proto.h>
@@ -60,6 +62,39 @@ static int cros_typec_get_mux_state(unsigned long mode, struct typec_altmode *al
 	return ret;
 }
 
+static int cros_typec_send_clear_event(struct cros_typec_switch_data *sdata, int port_num,
+				       u32 events_mask)
+{
+	struct ec_params_typec_control req = {
+		.port = port_num,
+		.command = TYPEC_CONTROL_COMMAND_CLEAR_EVENTS,
+		.clear_events_mask = events_mask,
+	};
+
+	return cros_ec_cmd(sdata->ec, 0, EC_CMD_TYPEC_CONTROL, &req, sizeof(req), NULL, 0);
+}
+
+static bool cros_typec_check_event(struct cros_typec_switch_data *sdata, int port_num, u32 mask)
+{
+	struct ec_response_typec_status resp;
+	struct ec_params_typec_status req = {
+		.port = port_num,
+	};
+	int ret;
+
+	ret = cros_ec_cmd(sdata->ec, 0, EC_CMD_TYPEC_STATUS, &req, sizeof(req),
+			  &resp, sizeof(resp));
+	if (ret < 0) {
+		dev_warn(sdata->dev, "EC_CMD_TYPEC_STATUS failed for port: %d\n", port_num);
+		return false;
+	}
+
+	if (resp.events & mask)
+		return true;
+
+	return false;
+}
+
 /*
  * The ChromeOS EC treats both mode-switches and retimers as "muxes" for the purposes of the
  * host command API. This common function configures and verifies the retimer/mode-switch
@@ -68,12 +103,44 @@ static int cros_typec_get_mux_state(unsigned long mode, struct typec_altmode *al
 static int cros_typec_configure_mux(struct cros_typec_switch_data *sdata, int port_num, int index,
 				    unsigned long mode, struct typec_altmode *alt)
 {
-	int ret = cros_typec_get_mux_state(mode, alt);
+	unsigned long end;
+	u32 event_mask;
+	u8 mux_state;
+	int ret;
+
+	ret = cros_typec_get_mux_state(mode, alt);
+	if (ret < 0)
+		return ret;
+	mux_state = (u8)ret;
+
+	/* Clear any old mux set done event. */
+	if (index == 0)
+		event_mask = PD_STATUS_EVENT_MUX_0_SET_DONE;
+	else
+		event_mask = PD_STATUS_EVENT_MUX_1_SET_DONE;
 
+	ret = cros_typec_send_clear_event(sdata, port_num, event_mask);
 	if (ret < 0)
 		return ret;
 
-	return cros_typec_cmd_mux_set(sdata, port_num, index, (u8)ret);
+	/* Send the set command. */
+	ret = cros_typec_cmd_mux_set(sdata, port_num, index, mux_state);
+	if (ret < 0)
+		return ret;
+
+	/* Check for the mux set done event. */
+	end = jiffies + msecs_to_jiffies(1000);
+	do {
+		if (cros_typec_check_event(sdata, port_num, event_mask))
+			return 0;
+
+		usleep_range(500, 1000);
+	} while (time_before(jiffies, end));
+
+	dev_err(sdata->dev, "Timed out waiting for mux set done on index: %d, state: %d\n",
+		index, mux_state);
+
+	return -ETIMEDOUT;
 }
 
 static int cros_typec_retimer_set(struct typec_retimer *retimer, struct typec_retimer_state *state)
-- 
2.37.1.595.g718a3a8f04-goog


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v6 5/7] platform/chrome: cros_typec_switch: Register mode switches
  2022-08-16 21:48 [PATCH v6 0/7] platform/chrome: Type-C switch driver Prashant Malani
                   ` (3 preceding siblings ...)
  2022-08-16 21:48 ` [PATCH v6 4/7] platform/chrome: cros_typec_switch: Add event check Prashant Malani
@ 2022-08-16 21:48 ` Prashant Malani
  2022-08-17  1:49   ` Tzung-Bi Shih
  2022-08-16 21:48 ` [PATCH v6 6/7] platform/chrome: cros_ec_typec: Cleanup switch handle return paths Prashant Malani
                   ` (3 subsequent siblings)
  8 siblings, 1 reply; 14+ messages in thread
From: Prashant Malani @ 2022-08-16 21:48 UTC (permalink / raw)
  To: linux-kernel, chrome-platform
  Cc: bleung, Prashant Malani, Daisuke Nojiri, Dustin L. Howett,
	Greg Kroah-Hartman, Guenter Roeck, Gustavo A. R. Silva,
	Tinghan Shen, Tzung-Bi Shih, Xiang wangx

Register mode switch devices for Type-C connectors, when they are
specified by firmware. These control Type-C configuration for any USB
Type-C mode switches (sometimes known as "muxes") which are controlled
by the ChromeOS EC.

Signed-off-by: Prashant Malani <pmalani@chromium.org>
---

Changes since v5:
- Change "Chrome OS" -> "ChromeOS".
- Change "Type C" -> "Type-C".
- Use device_property_present instead of fwnode_property_read_bool.

Changes since v4:
- No changes.

Changes since v3:
- No changes.

Changes since v2:
- Fixed missing "static" identifier.

Changes since v1:
- No changes.

 drivers/platform/chrome/cros_typec_switch.c | 40 +++++++++++++++++++++
 1 file changed, 40 insertions(+)

diff --git a/drivers/platform/chrome/cros_typec_switch.c b/drivers/platform/chrome/cros_typec_switch.c
index dc84cdec8f7f..f85687adb594 100644
--- a/drivers/platform/chrome/cros_typec_switch.c
+++ b/drivers/platform/chrome/cros_typec_switch.c
@@ -15,6 +15,7 @@
 #include <linux/platform_device.h>
 #include <linux/usb/typec_altmode.h>
 #include <linux/usb/typec_dp.h>
+#include <linux/usb/typec_mux.h>
 #include <linux/usb/typec_retimer.h>
 
 #define DRV_NAME "cros-typec-switch"
@@ -22,6 +23,7 @@
 /* Handles and other relevant data required for each port's switches. */
 struct cros_typec_port {
 	int port_num;
+	struct typec_mux_dev *mode_switch;
 	struct typec_retimer *retimer;
 	struct cros_typec_switch_data *sdata;
 };
@@ -143,6 +145,15 @@ static int cros_typec_configure_mux(struct cros_typec_switch_data *sdata, int po
 	return -ETIMEDOUT;
 }
 
+static int cros_typec_mode_switch_set(struct typec_mux_dev *mode_switch,
+				      struct typec_mux_state *state)
+{
+	struct cros_typec_port *port = typec_mux_get_drvdata(mode_switch);
+
+	/* Mode switches have index 0. */
+	return cros_typec_configure_mux(port->sdata, port->port_num, 0, state->mode, state->alt);
+}
+
 static int cros_typec_retimer_set(struct typec_retimer *retimer, struct typec_retimer_state *state)
 {
 	struct cros_typec_port *port = typec_retimer_get_drvdata(retimer);
@@ -159,9 +170,27 @@ static void cros_typec_unregister_switches(struct cros_typec_switch_data *sdata)
 		if (!sdata->ports[i])
 			continue;
 		typec_retimer_unregister(sdata->ports[i]->retimer);
+		typec_mux_unregister(sdata->ports[i]->mode_switch);
 	}
 }
 
+static int cros_typec_register_mode_switch(struct cros_typec_port *port,
+					   struct fwnode_handle *fwnode)
+{
+	struct typec_mux_desc mode_switch_desc = {
+		.fwnode = fwnode,
+		.drvdata = port,
+		.name = fwnode_get_name(fwnode),
+		.set = cros_typec_mode_switch_set,
+	};
+
+	port->mode_switch = typec_mux_register(port->sdata->dev, &mode_switch_desc);
+	if (IS_ERR(port->mode_switch))
+		return PTR_ERR(port->mode_switch);
+
+	return 0;
+}
+
 static int cros_typec_register_retimer(struct cros_typec_port *port, struct fwnode_handle *fwnode)
 {
 	struct typec_retimer_desc retimer_desc = {
@@ -230,6 +259,17 @@ static int cros_typec_register_switches(struct cros_typec_switch_data *sdata)
 		}
 
 		dev_dbg(dev, "Retimer switch registered for index %llu\n", index);
+
+		if (!device_property_present(fwnode->dev, "mode-switch"))
+			continue;
+
+		ret = cros_typec_register_mode_switch(port, fwnode);
+		if (ret) {
+			dev_err(dev, "Mode switch register failed\n");
+			goto err_switch;
+		}
+
+		dev_dbg(dev, "Mode switch registered for index %llu\n", index);
 	}
 
 	return 0;
-- 
2.37.1.595.g718a3a8f04-goog


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v6 6/7] platform/chrome: cros_ec_typec: Cleanup switch handle return paths
  2022-08-16 21:48 [PATCH v6 0/7] platform/chrome: Type-C switch driver Prashant Malani
                   ` (4 preceding siblings ...)
  2022-08-16 21:48 ` [PATCH v6 5/7] platform/chrome: cros_typec_switch: Register mode switches Prashant Malani
@ 2022-08-16 21:48 ` Prashant Malani
  2022-08-16 21:48 ` [PATCH v6 7/7] platform/chrome: cros_ec_typec: Get retimer handle Prashant Malani
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 14+ messages in thread
From: Prashant Malani @ 2022-08-16 21:48 UTC (permalink / raw)
  To: linux-kernel, chrome-platform
  Cc: bleung, Prashant Malani, Tzung-Bi Shih, Daisuke Nojiri,
	Dustin L. Howett, Greg Kroah-Hartman, Guenter Roeck,
	Gustavo A. R. Silva, Lee Jones, Sebastian Reichel, Tinghan Shen

Some of the return paths for the cros_typec_get_switch_handles()
aren't necessary. Clean up the return paths to only undo the handle
get's which succeeded.

Signed-off-by: Prashant Malani <pmalani@chromium.org>
Reviewed-by: Tzung-Bi Shih <tzungbi@kernel.org>
---

Changes since v5:
- Picked up Reviewed-by tags.

Changes since v4:
- No changes.

Changes since v3:
- No changes.

Changes since v2:
- No changes.

Changes since v1:
- No changes.

 drivers/platform/chrome/cros_ec_typec.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/platform/chrome/cros_ec_typec.c b/drivers/platform/chrome/cros_ec_typec.c
index de6ee0f926a6..ee54add992db 100644
--- a/drivers/platform/chrome/cros_ec_typec.c
+++ b/drivers/platform/chrome/cros_ec_typec.c
@@ -158,12 +158,10 @@ static int cros_typec_get_switch_handles(struct cros_typec_port *port,
 	return 0;
 
 role_sw_err:
-	usb_role_switch_put(port->role_sw);
-ori_sw_err:
 	typec_switch_put(port->ori_sw);
-mux_err:
+ori_sw_err:
 	typec_mux_put(port->mux);
-
+mux_err:
 	return -ENODEV;
 }
 
-- 
2.37.1.595.g718a3a8f04-goog


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v6 7/7] platform/chrome: cros_ec_typec: Get retimer handle
  2022-08-16 21:48 [PATCH v6 0/7] platform/chrome: Type-C switch driver Prashant Malani
                   ` (5 preceding siblings ...)
  2022-08-16 21:48 ` [PATCH v6 6/7] platform/chrome: cros_ec_typec: Cleanup switch handle return paths Prashant Malani
@ 2022-08-16 21:48 ` Prashant Malani
  2022-08-18 22:36 ` [PATCH v6 0/7] platform/chrome: Type-C switch driver patchwork-bot+chrome-platform
  2022-08-23 21:20 ` patchwork-bot+chrome-platform
  8 siblings, 0 replies; 14+ messages in thread
From: Prashant Malani @ 2022-08-16 21:48 UTC (permalink / raw)
  To: linux-kernel, chrome-platform
  Cc: bleung, Prashant Malani, Tzung-Bi Shih, Daisuke Nojiri,
	Dustin L. Howett, Greg Kroah-Hartman, Guenter Roeck, Kees Cook,
	Lee Jones, Sebastian Reichel, Tinghan Shen, Xiang wangx

Where available, obtain the handle to retimer switch specified via
firmware, and update the mux configuration callsites to add retimer
support for supported modes.

Signed-off-by: Prashant Malani <pmalani@chromium.org>
Reviewed-by: Tzung-Bi Shih <tzungbi@kernel.org>
---

Changes since v5:
- Picked up Reviewed-by tag.
- Removed double space.

Changes since v4:
- No changes.

Changes since v3:
- No changes.

Changes since v2:
- No changes.

Changes since v1:
- No changes.

 drivers/platform/chrome/cros_ec_typec.c | 44 +++++++++++++++++++++++--
 1 file changed, 41 insertions(+), 3 deletions(-)

diff --git a/drivers/platform/chrome/cros_ec_typec.c b/drivers/platform/chrome/cros_ec_typec.c
index ee54add992db..3ffe3c082ea2 100644
--- a/drivers/platform/chrome/cros_ec_typec.c
+++ b/drivers/platform/chrome/cros_ec_typec.c
@@ -20,6 +20,7 @@
 #include <linux/usb/typec_altmode.h>
 #include <linux/usb/typec_dp.h>
 #include <linux/usb/typec_mux.h>
+#include <linux/usb/typec_retimer.h>
 #include <linux/usb/typec_tbt.h>
 #include <linux/usb/role.h>
 
@@ -55,6 +56,7 @@ struct cros_typec_port {
 	struct usb_pd_identity c_identity;
 	struct typec_switch *ori_sw;
 	struct typec_mux *mux;
+	struct typec_retimer *retimer;
 	struct usb_role_switch *role_sw;
 
 	/* Variables keeping track of switch state. */
@@ -143,6 +145,12 @@ static int cros_typec_get_switch_handles(struct cros_typec_port *port,
 		goto mux_err;
 	}
 
+	port->retimer = fwnode_typec_retimer_get(fwnode);
+	if (IS_ERR(port->retimer)) {
+		dev_dbg(dev, "Retimer handle not found.\n");
+		goto retimer_sw_err;
+	}
+
 	port->ori_sw = fwnode_typec_switch_get(fwnode);
 	if (IS_ERR(port->ori_sw)) {
 		dev_dbg(dev, "Orientation switch handle not found.\n");
@@ -160,6 +168,8 @@ static int cros_typec_get_switch_handles(struct cros_typec_port *port,
 role_sw_err:
 	typec_switch_put(port->ori_sw);
 ori_sw_err:
+	typec_retimer_put(port->retimer);
+retimer_sw_err:
 	typec_mux_put(port->mux);
 mux_err:
 	return -ENODEV;
@@ -204,6 +214,21 @@ static void cros_typec_unregister_altmodes(struct cros_typec_data *typec, int po
 	}
 }
 
+/*
+ * Map the Type-C Mux state to retimer state and call the retimer set function. We need this
+ * because we re-use the Type-C mux state for retimers.
+ */
+static int cros_typec_retimer_set(struct typec_retimer *retimer, struct typec_mux_state state)
+{
+	struct typec_retimer_state rstate = {
+		.alt = state.alt,
+		.mode = state.mode,
+		.data = state.data,
+	};
+
+	return typec_retimer_set(retimer, &rstate);
+}
+
 static int cros_typec_usb_disconnect_state(struct cros_typec_port *port)
 {
 	port->state.alt = NULL;
@@ -212,6 +237,7 @@ static int cros_typec_usb_disconnect_state(struct cros_typec_port *port)
 
 	usb_role_switch_set_role(port->role_sw, USB_ROLE_NONE);
 	typec_switch_set(port->ori_sw, TYPEC_ORIENTATION_NONE);
+	cros_typec_retimer_set(port->retimer, port->state);
 
 	return typec_mux_set(port->mux, &port->state);
 }
@@ -409,9 +435,14 @@ static int cros_typec_init_ports(struct cros_typec_data *typec)
 
 static int cros_typec_usb_safe_state(struct cros_typec_port *port)
 {
+	int ret;
 	port->state.mode = TYPEC_STATE_SAFE;
 
-	return typec_mux_set(port->mux, &port->state);
+	ret = cros_typec_retimer_set(port->retimer, port->state);
+	if (!ret)
+		ret = typec_mux_set(port->mux, &port->state);
+
+	return ret;
 }
 
 /*
@@ -508,7 +539,11 @@ static int cros_typec_enable_dp(struct cros_typec_data *typec,
 	port->state.data = &dp_data;
 	port->state.mode = TYPEC_MODAL_STATE(ffs(pd_ctrl->dp_mode));
 
-	return typec_mux_set(port->mux, &port->state);
+	ret = cros_typec_retimer_set(port->retimer, port->state);
+	if (!ret)
+		ret = typec_mux_set(port->mux, &port->state);
+
+	return ret;
 }
 
 static int cros_typec_enable_usb4(struct cros_typec_data *typec,
@@ -597,7 +632,10 @@ static int cros_typec_configure_mux(struct cros_typec_data *typec, int port_num,
 	} else if (port->mux_flags & USB_PD_MUX_USB_ENABLED) {
 		port->state.alt = NULL;
 		port->state.mode = TYPEC_STATE_USB;
-		ret = typec_mux_set(port->mux, &port->state);
+
+		ret = cros_typec_retimer_set(port->retimer, port->state);
+		if (!ret)
+			ret = typec_mux_set(port->mux, &port->state);
 	} else {
 		dev_dbg(typec->dev,
 			"Unrecognized mode requested, mux flags: %x\n",
-- 
2.37.1.595.g718a3a8f04-goog


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: [PATCH v6 2/7] platform/chrome: cros_typec_switch: Add switch driver
  2022-08-16 21:48 ` [PATCH v6 2/7] platform/chrome: cros_typec_switch: Add switch driver Prashant Malani
@ 2022-08-17  1:48   ` Tzung-Bi Shih
  0 siblings, 0 replies; 14+ messages in thread
From: Tzung-Bi Shih @ 2022-08-17  1:48 UTC (permalink / raw)
  To: Prashant Malani
  Cc: linux-kernel, chrome-platform, bleung, Daisuke Nojiri,
	Dustin L. Howett, Greg Kroah-Hartman, Guenter Roeck,
	Gustavo A. R. Silva, Lee Jones, Tinghan Shen, Xiang wangx

On Tue, Aug 16, 2022 at 09:48:30PM +0000, Prashant Malani wrote:
> Introduce a driver to configure USB Type-C mode switches and retimers
> which are controlled by the ChromeOS EC (Embedded Controller).
> This allows Type-C port drivers, as well as alternate mode drivers to
> configure their relevant mode switches and retimers according to the
> Type-C state they want to achieve.
> 
> ACPI devices with ID GOOG001A will bind to this driver.
> 
> Currently, we only register a retimer switch with a stub set function.
> Subsequent patches will implement the host command set functionality,
> and introduce mode switches.
> 
> Signed-off-by: Prashant Malani <pmalani@chromium.org>

Reviewed-by: Tzung-Bi Shih <tzungbi@kernel.org>

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v6 3/7] platform/chrome: cros_typec_switch: Set EC retimer
  2022-08-16 21:48 ` [PATCH v6 3/7] platform/chrome: cros_typec_switch: Set EC retimer Prashant Malani
@ 2022-08-17  1:48   ` Tzung-Bi Shih
  0 siblings, 0 replies; 14+ messages in thread
From: Tzung-Bi Shih @ 2022-08-17  1:48 UTC (permalink / raw)
  To: Prashant Malani
  Cc: linux-kernel, chrome-platform, bleung, Daisuke Nojiri,
	Dustin L. Howett, Greg Kroah-Hartman, Guenter Roeck,
	Gustavo A. R. Silva, Kees Cook, Sebastian Reichel, Tinghan Shen,
	Xiang wangx

On Tue, Aug 16, 2022 at 09:48:31PM +0000, Prashant Malani wrote:
> Invoke ChromeOS EC host commands to set EC-controlled retimer switches
> to the state the Type-C framework instructs.
> 
> Signed-off-by: Prashant Malani <pmalani@chromium.org>

Reviewed-by: Tzung-Bi Shih <tzungbi@kernel.org>

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v6 4/7] platform/chrome: cros_typec_switch: Add event check
  2022-08-16 21:48 ` [PATCH v6 4/7] platform/chrome: cros_typec_switch: Add event check Prashant Malani
@ 2022-08-17  1:48   ` Tzung-Bi Shih
  0 siblings, 0 replies; 14+ messages in thread
From: Tzung-Bi Shih @ 2022-08-17  1:48 UTC (permalink / raw)
  To: Prashant Malani
  Cc: linux-kernel, chrome-platform, bleung, Daisuke Nojiri,
	Dustin L. Howett, Greg Kroah-Hartman, Guenter Roeck,
	Gustavo A. R. Silva, Kees Cook, Lee Jones, Tinghan Shen,
	Xiang wangx

On Tue, Aug 16, 2022 at 09:48:32PM +0000, Prashant Malani wrote:
> The ChromeOS EC updates Type-C status events when mux set requests from
> the Application Processor (AP) are completed. Add a check to the
> flow of configuring muxes to look for this status done bit, so that
> the driver is aware that the mux set completed successfully or not.
> 
> Signed-off-by: Prashant Malani <pmalani@chromium.org>

Reviewed-by: Tzung-Bi Shih <tzungbi@kernel.org>

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v6 5/7] platform/chrome: cros_typec_switch: Register mode switches
  2022-08-16 21:48 ` [PATCH v6 5/7] platform/chrome: cros_typec_switch: Register mode switches Prashant Malani
@ 2022-08-17  1:49   ` Tzung-Bi Shih
  0 siblings, 0 replies; 14+ messages in thread
From: Tzung-Bi Shih @ 2022-08-17  1:49 UTC (permalink / raw)
  To: Prashant Malani
  Cc: linux-kernel, chrome-platform, bleung, Daisuke Nojiri,
	Dustin L. Howett, Greg Kroah-Hartman, Guenter Roeck,
	Gustavo A. R. Silva, Tinghan Shen, Xiang wangx

On Tue, Aug 16, 2022 at 09:48:33PM +0000, Prashant Malani wrote:
> Register mode switch devices for Type-C connectors, when they are
> specified by firmware. These control Type-C configuration for any USB
> Type-C mode switches (sometimes known as "muxes") which are controlled
> by the ChromeOS EC.
> 
> Signed-off-by: Prashant Malani <pmalani@chromium.org>

Reviewed-by: Tzung-Bi Shih <tzungbi@kernel.org>

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v6 0/7] platform/chrome: Type-C switch driver
  2022-08-16 21:48 [PATCH v6 0/7] platform/chrome: Type-C switch driver Prashant Malani
                   ` (6 preceding siblings ...)
  2022-08-16 21:48 ` [PATCH v6 7/7] platform/chrome: cros_ec_typec: Get retimer handle Prashant Malani
@ 2022-08-18 22:36 ` patchwork-bot+chrome-platform
  2022-08-23 21:20 ` patchwork-bot+chrome-platform
  8 siblings, 0 replies; 14+ messages in thread
From: patchwork-bot+chrome-platform @ 2022-08-18 22:36 UTC (permalink / raw)
  To: Prashant Malani
  Cc: linux-kernel, chrome-platform, bleung, dnojiri, dustin, gregkh,
	groeck, gustavoars, keescook, tinghan.shen, tzungbi, wangxiang

Hello:

This series was applied to chrome-platform/linux.git (for-kernelci)
by Prashant Malani <pmalani@chromium.org>:

On Tue, 16 Aug 2022 21:48:28 +0000 you wrote:
> v4 of this series was originally merged to the USB maintainer tree, but
> there were dependencies from the chrome-platform tree which caused
> conflicts in the merge tree, so the chrome specific parts were
> reverted [1].
> 
> v5 is a resubmission of the series with the Chrome-only parts (since the
> USB framework parts were merged successfully).
> 
> [...]

Here is the summary with links:
  - [v6,1/7] platform/chrome: Add Type-C mux set command definitions
    https://git.kernel.org/chrome-platform/c/77947238dad3
  - [v6,2/7] platform/chrome: cros_typec_switch: Add switch driver
    https://git.kernel.org/chrome-platform/c/affc804c44c8
  - [v6,3/7] platform/chrome: cros_typec_switch: Set EC retimer
    https://git.kernel.org/chrome-platform/c/d4536a216c3f
  - [v6,4/7] platform/chrome: cros_typec_switch: Add event check
    https://git.kernel.org/chrome-platform/c/cf6c767244ed
  - [v6,5/7] platform/chrome: cros_typec_switch: Register mode switches
    https://git.kernel.org/chrome-platform/c/9e6e05169980
  - [v6,6/7] platform/chrome: cros_ec_typec: Cleanup switch handle return paths
    https://git.kernel.org/chrome-platform/c/d5f66527db9e
  - [v6,7/7] platform/chrome: cros_ec_typec: Get retimer handle
    https://git.kernel.org/chrome-platform/c/1a8912caba02

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v6 0/7] platform/chrome: Type-C switch driver
  2022-08-16 21:48 [PATCH v6 0/7] platform/chrome: Type-C switch driver Prashant Malani
                   ` (7 preceding siblings ...)
  2022-08-18 22:36 ` [PATCH v6 0/7] platform/chrome: Type-C switch driver patchwork-bot+chrome-platform
@ 2022-08-23 21:20 ` patchwork-bot+chrome-platform
  8 siblings, 0 replies; 14+ messages in thread
From: patchwork-bot+chrome-platform @ 2022-08-23 21:20 UTC (permalink / raw)
  To: Prashant Malani
  Cc: linux-kernel, chrome-platform, bleung, dnojiri, dustin, gregkh,
	groeck, gustavoars, keescook, tinghan.shen, tzungbi, wangxiang

Hello:

This series was applied to chrome-platform/linux.git (for-next)
by Prashant Malani <pmalani@chromium.org>:

On Tue, 16 Aug 2022 21:48:28 +0000 you wrote:
> v4 of this series was originally merged to the USB maintainer tree, but
> there were dependencies from the chrome-platform tree which caused
> conflicts in the merge tree, so the chrome specific parts were
> reverted [1].
> 
> v5 is a resubmission of the series with the Chrome-only parts (since the
> USB framework parts were merged successfully).
> 
> [...]

Here is the summary with links:
  - [v6,1/7] platform/chrome: Add Type-C mux set command definitions
    https://git.kernel.org/chrome-platform/c/77947238dad3
  - [v6,2/7] platform/chrome: cros_typec_switch: Add switch driver
    https://git.kernel.org/chrome-platform/c/affc804c44c8
  - [v6,3/7] platform/chrome: cros_typec_switch: Set EC retimer
    https://git.kernel.org/chrome-platform/c/d4536a216c3f
  - [v6,4/7] platform/chrome: cros_typec_switch: Add event check
    https://git.kernel.org/chrome-platform/c/cf6c767244ed
  - [v6,5/7] platform/chrome: cros_typec_switch: Register mode switches
    https://git.kernel.org/chrome-platform/c/9e6e05169980
  - [v6,6/7] platform/chrome: cros_ec_typec: Cleanup switch handle return paths
    https://git.kernel.org/chrome-platform/c/d5f66527db9e
  - [v6,7/7] platform/chrome: cros_ec_typec: Get retimer handle
    https://git.kernel.org/chrome-platform/c/1a8912caba02

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2022-08-23 21:20 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-16 21:48 [PATCH v6 0/7] platform/chrome: Type-C switch driver Prashant Malani
2022-08-16 21:48 ` [PATCH v6 1/7] platform/chrome: Add Type-C mux set command definitions Prashant Malani
2022-08-16 21:48 ` [PATCH v6 2/7] platform/chrome: cros_typec_switch: Add switch driver Prashant Malani
2022-08-17  1:48   ` Tzung-Bi Shih
2022-08-16 21:48 ` [PATCH v6 3/7] platform/chrome: cros_typec_switch: Set EC retimer Prashant Malani
2022-08-17  1:48   ` Tzung-Bi Shih
2022-08-16 21:48 ` [PATCH v6 4/7] platform/chrome: cros_typec_switch: Add event check Prashant Malani
2022-08-17  1:48   ` Tzung-Bi Shih
2022-08-16 21:48 ` [PATCH v6 5/7] platform/chrome: cros_typec_switch: Register mode switches Prashant Malani
2022-08-17  1:49   ` Tzung-Bi Shih
2022-08-16 21:48 ` [PATCH v6 6/7] platform/chrome: cros_ec_typec: Cleanup switch handle return paths Prashant Malani
2022-08-16 21:48 ` [PATCH v6 7/7] platform/chrome: cros_ec_typec: Get retimer handle Prashant Malani
2022-08-18 22:36 ` [PATCH v6 0/7] platform/chrome: Type-C switch driver patchwork-bot+chrome-platform
2022-08-23 21:20 ` patchwork-bot+chrome-platform

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).