All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] platform/chrome: cros_ec: Import Type C control command
@ 2021-02-03  1:49 Prashant Malani
  2021-02-03  1:49 ` [PATCH 2/2] platform/chrome: cros_ec_typec: Clear Type C disc events Prashant Malani
  2021-02-03  2:12 ` [PATCH 1/2] platform/chrome: cros_ec: Import Type C control command Prashant Malani
  0 siblings, 2 replies; 3+ messages in thread
From: Prashant Malani @ 2021-02-03  1:49 UTC (permalink / raw)
  To: linux-kernel
  Cc: bleung, Prashant Malani, Enric Balletbo i Serra, Guenter Roeck,
	Gustavo A. R. Silva, Mark Brown, Pi-Hsun Shih, Utkarsh Patel

This command is used to communicate with the Chrome Embedded Controller
(EC) regarding USB Type C events and state.

These header updates are included in the latest Chrome OS EC headers [1]

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

Signed-off-by: Prashant Malani <pmalani@chromium.org>
---
 .../linux/platform_data/cros_ec_commands.h    | 26 +++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/include/linux/platform_data/cros_ec_commands.h b/include/linux/platform_data/cros_ec_commands.h
index d3c40220b281..a95dc22a5463 100644
--- a/include/linux/platform_data/cros_ec_commands.h
+++ b/include/linux/platform_data/cros_ec_commands.h
@@ -5578,6 +5578,32 @@ struct ec_response_typec_discovery {
 	struct svid_mode_info svids[0];
 } __ec_align1;
 
+
+/* USB Type-C commands for AP-controlled device policy. */
+#define EC_CMD_TYPEC_CONTROL 0x0132
+
+enum typec_control_command {
+	TYPEC_CONTROL_COMMAND_EXIT_MODES,
+	TYPEC_CONTROL_COMMAND_CLEAR_EVENTS,
+	TYPEC_CONTROL_COMMAND_ENTER_MODE,
+};
+
+struct ec_params_typec_control {
+	uint8_t port;
+	uint8_t command;	/* enum typec_control_command */
+	uint16_t reserved;
+
+	/*
+	 * This section will be interpreted based on |command|. Define a
+	 * placeholder structure to avoid having to increase the size and bump
+	 * the command version when adding new sub-commands.
+	 */
+	union {
+		uint32_t clear_events_mask;
+		uint8_t mode_to_enter;      /* enum typec_mode */
+		uint8_t placeholder[128];
+	};
+} __ec_align1;
 /*
  * Gather all status information for a port.
  *
-- 
2.30.0.365.g02bc693789-goog


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

* [PATCH 2/2] platform/chrome: cros_ec_typec: Clear Type C disc events
  2021-02-03  1:49 [PATCH 1/2] platform/chrome: cros_ec: Import Type C control command Prashant Malani
@ 2021-02-03  1:49 ` Prashant Malani
  2021-02-03  2:12 ` [PATCH 1/2] platform/chrome: cros_ec: Import Type C control command Prashant Malani
  1 sibling, 0 replies; 3+ messages in thread
From: Prashant Malani @ 2021-02-03  1:49 UTC (permalink / raw)
  To: linux-kernel
  Cc: bleung, Prashant Malani, Enric Balletbo i Serra, Guenter Roeck,
	Gustavo A. R. Silva, Mark Brown, Pi-Hsun Shih, Utkarsh Patel

Clear USB Type C discovery events from the Chrome EC once they've been
successfully handled.

Signed-off-by: Prashant Malani <pmalani@chromium.org>
---
 drivers/platform/chrome/cros_ec_typec.c | 28 +++++++++++++++++++++++--
 1 file changed, 26 insertions(+), 2 deletions(-)

diff --git a/drivers/platform/chrome/cros_ec_typec.c b/drivers/platform/chrome/cros_ec_typec.c
index e724a5eaef1c..f3bdb87d6dce 100644
--- a/drivers/platform/chrome/cros_ec_typec.c
+++ b/drivers/platform/chrome/cros_ec_typec.c
@@ -867,6 +867,18 @@ static int cros_typec_handle_sop_disc(struct cros_typec_data *typec, int port_nu
 	return ret;
 }
 
+static int cros_typec_send_clear_event(struct cros_typec_data *typec, 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_typec_ec_command(typec, 0, EC_CMD_TYPEC_CONTROL, &req,
+				     sizeof(req), NULL, 0);
+}
+
 static void cros_typec_handle_status(struct cros_typec_data *typec, int port_num)
 {
 	struct ec_response_typec_status resp;
@@ -887,8 +899,14 @@ static void cros_typec_handle_status(struct cros_typec_data *typec, int port_num
 		ret = cros_typec_handle_sop_disc(typec, port_num);
 		if (ret < 0)
 			dev_err(typec->dev, "Couldn't parse SOP Disc data, port: %d\n", port_num);
-		else
+		else {
 			typec->ports[port_num]->sop_disc_done = true;
+			ret = cros_typec_send_clear_event(typec, port_num,
+							  PD_STATUS_EVENT_SOP_DISC_DONE);
+			if (ret < 0)
+				dev_warn(typec->dev,
+					 "Failed SOP Disc event clear, port: %d\n", port_num);
+		}
 	}
 
 	if (resp.events & PD_STATUS_EVENT_SOP_PRIME_DISC_DONE &&
@@ -896,8 +914,14 @@ static void cros_typec_handle_status(struct cros_typec_data *typec, int port_num
 		ret = cros_typec_handle_sop_prime_disc(typec, port_num);
 		if (ret < 0)
 			dev_err(typec->dev, "Couldn't parse SOP' Disc data, port: %d\n", port_num);
-		else
+		else {
 			typec->ports[port_num]->sop_prime_disc_done = true;
+			ret = cros_typec_send_clear_event(typec, port_num,
+							  PD_STATUS_EVENT_SOP_PRIME_DISC_DONE);
+			if (ret < 0)
+				dev_warn(typec->dev,
+					 "Failed SOP Disc event clear, port: %d\n", port_num);
+		}
 	}
 }
 
-- 
2.30.0.365.g02bc693789-goog


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

* Re: [PATCH 1/2] platform/chrome: cros_ec: Import Type C control command
  2021-02-03  1:49 [PATCH 1/2] platform/chrome: cros_ec: Import Type C control command Prashant Malani
  2021-02-03  1:49 ` [PATCH 2/2] platform/chrome: cros_ec_typec: Clear Type C disc events Prashant Malani
@ 2021-02-03  2:12 ` Prashant Malani
  1 sibling, 0 replies; 3+ messages in thread
From: Prashant Malani @ 2021-02-03  2:12 UTC (permalink / raw)
  To: Linux Kernel Mailing List
  Cc: Benson Leung, Enric Balletbo i Serra, Guenter Roeck,
	Gustavo A. R. Silva, Mark Brown, Pi-Hsun Shih, Utkarsh Patel

On Tue, Feb 2, 2021 at 5:49 PM Prashant Malani <pmalani@chromium.org> wrote:
>
> This command is used to communicate with the Chrome Embedded Controller
> (EC) regarding USB Type C events and state.
>
> These header updates are included in the latest Chrome OS EC headers [1]
>
> [1]
> https://chromium.googlesource.com/chromiumos/platform/ec/+/refs/heads/main/include/ec_commands.h
>
> Signed-off-by: Prashant Malani <pmalani@chromium.org>
> ---
>  .../linux/platform_data/cros_ec_commands.h    | 26 +++++++++++++++++++
>  1 file changed, 26 insertions(+)
>
> diff --git a/include/linux/platform_data/cros_ec_commands.h b/include/linux/platform_data/cros_ec_commands.h
> index d3c40220b281..a95dc22a5463 100644
> --- a/include/linux/platform_data/cros_ec_commands.h
> +++ b/include/linux/platform_data/cros_ec_commands.h
> @@ -5578,6 +5578,32 @@ struct ec_response_typec_discovery {
>         struct svid_mode_info svids[0];
>  } __ec_align1;
>
> +
> +/* USB Type-C commands for AP-controlled device policy. */
> +#define EC_CMD_TYPEC_CONTROL 0x0132
> +
> +enum typec_control_command {
> +       TYPEC_CONTROL_COMMAND_EXIT_MODES,
> +       TYPEC_CONTROL_COMMAND_CLEAR_EVENTS,
> +       TYPEC_CONTROL_COMMAND_ENTER_MODE,
> +};
> +
> +struct ec_params_typec_control {
> +       uint8_t port;
> +       uint8_t command;        /* enum typec_control_command */
> +       uint16_t reserved;
> +
> +       /*
> +        * This section will be interpreted based on |command|. Define a
> +        * placeholder structure to avoid having to increase the size and bump
> +        * the command version when adding new sub-commands.
> +        */
> +       union {
> +               uint32_t clear_events_mask;
> +               uint8_t mode_to_enter;      /* enum typec_mode */
> +               uint8_t placeholder[128];
> +       };
> +} __ec_align1;
Looks like I got the newlines incorrect while porting the structs. I
will send another version.

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

end of thread, other threads:[~2021-02-03  2:13 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-03  1:49 [PATCH 1/2] platform/chrome: cros_ec: Import Type C control command Prashant Malani
2021-02-03  1:49 ` [PATCH 2/2] platform/chrome: cros_ec_typec: Clear Type C disc events Prashant Malani
2021-02-03  2:12 ` [PATCH 1/2] platform/chrome: cros_ec: Import Type C control command Prashant Malani

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.