diff --git a/182d8e9257094f0bf4da021386c9261913b2ac3a8a9c4f1fd3dbf7f1.patch b/182d8e9257094f0bf4da021386c9261913b2ac3a8a9c4f1fd3dbf7f1.patch
index 2df4f3c..2f58547 100644
--- a/182d8e9257094f0bf4da021386c9261913b2ac3a8a9c4f1fd3dbf7f1.patch
+++ b/182d8e9257094f0bf4da021386c9261913b2ac3a8a9c4f1fd3dbf7f1.patch
@@ -1,4 +1,4 @@
-From f5b043f0d5576f1a5127e15f7446eef90909e50e Mon Sep 17 00:00:00 2001
+From 55a938421217d4b42880136418005be0464a7444 Mon Sep 17 00:00:00 2001
 From: Fenglin Wu <fenglinw@codeaurora.org>
 Date: Mon, 4 Dec 2017 09:56:51 +0800
 Subject: [PATCH] BACKPORT: FROMLIST: pwm: Add support for different PWM output
@@ -21,40 +21,41 @@
 param to read-only, reworded commit message]
 Signed-off-by: Guru Das Srinagesh <gurus@codeaurora.org>
 Kcr-patch: 0622211c88a55d017f48378c3847736dfe945efa385c3c6feda5a853.patch
+Kcr-patch: 182d8e9257094f0bf4da021386c9261913b2ac3a8a9c4f1fd3dbf7f1.patch
 ---
  drivers/pwm/core.c  | 26 +++++++++++++++++++++++++
  include/linux/pwm.h | 47 +++++++++++++++++++++++++++++++++++++++++++++
  2 files changed, 73 insertions(+)
 
 diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c
-index 8acbcf5b66739f13be83026aea37b1d4d573bc89..36ae6186b216255eb5e1f3149758513203814683 100644
+index 6e752e148b98ccad653798c817f973ce532df066..a5aa1252c027fd4fc53e00c2274defc5793c035b 100644
 --- a/drivers/pwm/core.c
 +++ b/drivers/pwm/core.c
-@@ -691,11 +691,35 @@ static ssize_t capture_show(struct device *pwm_dev,
+@@ -690,11 +690,35 @@ static ssize_t capture_show(struct device *pwm_dev,
  	return sysfs_emit(buf, "%u %u\n", result.period, result.duty_cycle);
  }
  
 +static ssize_t output_type_show(struct device *child,
-+                            struct device_attribute *attr,
-+                            char *buf)
++			    struct device_attribute *attr,
++			    char *buf)
 +{
-+       const struct pwm_device *pwm = pwm_from_device(child);
-+       const char *output_type = "unknown";
-+       struct pwm_state state;
++	const struct pwm_device *pwm = pwm_from_device(child);
++	const char *output_type = "unknown";
++	struct pwm_state state;
 +
-+       pwm_get_state(pwm, &state);
-+       switch (state.output_type) {
-+       case PWM_OUTPUT_FIXED:
-+               output_type = "fixed";
-+               break;
-+       case PWM_OUTPUT_MODULATED:
-+               output_type = "modulated";
-+               break;
-+       default:
-+               break;
-+       }
++	pwm_get_state(pwm, &state);
++	switch (state.output_type) {
++	case PWM_OUTPUT_FIXED:
++		output_type = "fixed";
++		break;
++	case PWM_OUTPUT_MODULATED:
++		output_type = "modulated";
++		break;
++	default:
++		break;
++	}
 +
-+       return snprintf(buf, PAGE_SIZE, "%s\n", output_type);
++	return snprintf(buf, PAGE_SIZE, "%s\n", output_type);
 +}
 +
  static DEVICE_ATTR_RW(period);
@@ -66,15 +67,15 @@
  
  static struct attribute *pwm_attrs[] = {
  	&dev_attr_period.attr,
-@@ -703,6 +727,7 @@ static struct attribute *pwm_attrs[] = {
+@@ -702,6 +726,7 @@ static struct attribute *pwm_attrs[] = {
  	&dev_attr_enable.attr,
  	&dev_attr_polarity.attr,
  	&dev_attr_capture.attr,
-+        &dev_attr_output_type.attr,
++	&dev_attr_output_type.attr,
  	NULL
  };
  ATTRIBUTE_GROUPS(pwm);
-@@ -1034,6 +1059,7 @@ struct pwm_chip *pwmchip_alloc(struct device *parent, unsigned int npwm, size_t
+@@ -1033,6 +1058,7 @@ struct pwm_chip *pwmchip_alloc(struct device *parent, unsigned int npwm, size_t
  		struct pwm_device *pwm = &chip->pwms[i];
  		pwm->chip = chip;
  		pwm->hwpwm = i;
@@ -83,7 +84,7 @@
  
  	return chip;
 diff --git a/include/linux/pwm.h b/include/linux/pwm.h
-index f8c2dc12dbd37fd907975142abd900083fe32a9d..fe0d4d06fa640cc3465bc66b1df3f67c686602d1 100644
+index 8acd60b53f58fc6eef6c509f7bc45f2849a48216..d9c6aad920f87c7351289b26c2c3cc47ac80d367 100644
 --- a/include/linux/pwm.h
 +++ b/include/linux/pwm.h
 @@ -49,6 +49,16 @@ enum {
@@ -170,7 +171,7 @@
  /**
   * pwm_config() - change a PWM device configuration
   * @pwm: PWM device
-@@ -444,6 +486,11 @@ static inline int pwm_adjust_config(struct pwm_device *pwm)
+@@ -441,6 +483,11 @@ static inline int pwm_adjust_config(struct pwm_device *pwm)
  	return -EOPNOTSUPP;
  }
  
@@ -183,5 +184,5 @@
  			     int period_ns)
  {
 -- 
-2.46.0.rc2.264.g509ed76dc8-goog
+2.47.0.277.g8800431eea-goog
 
diff --git a/3c9f08de7f8f62174be9dd50bc7e244818bfaf3030dcbac4e6f10b60.patch b/3c9f08de7f8f62174be9dd50bc7e244818bfaf3030dcbac4e6f10b60.patch
new file mode 100644
index 0000000..c128780
--- /dev/null
+++ b/3c9f08de7f8f62174be9dd50bc7e244818bfaf3030dcbac4e6f10b60.patch
@@ -0,0 +1,172 @@
+From d71e4ca819b48079fca0b06222f6d96e4ab2f5c5 Mon Sep 17 00:00:00 2001
+From: Jameson Thies <jthies@google.com>
+Date: Wed, 17 Jul 2024 00:49:48 +0000
+Subject: [PATCH] CHROMIUM: usb: typec: ucsi: Set sink path based on UCSI
+ charge control
+
+Add POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX as a property to the UCSI
+power supply driver. When set to a positive value, enable the
+connector's sink path. When set to a negative value, disable the
+connector's sink path.
+
+BUG=b:351778077
+UPSTREAM-TASK=b:353605100
+TEST=emerge-brox chromeos-kernel-6_6, writing to
+charge_control_limit_max causes a PR_Swap and sends SET_SINK_PATH when
+expected.
+
+Change-Id: If8b55834f3a37ac58002dc0c91af0b320b98448f
+Signed-off-by: Jameson Thies <jthies@google.com>
+Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/kernel/+/5713892
+Reviewed-by: Benson Leung <bleung@google.com>
+Kcr-patch: 3c9f08de7f8f62174be9dd50bc7e244818bfaf3030dcbac4e6f10b60.patch
+---
+ drivers/usb/typec/ucsi/psy.c  | 52 +++++++++++++++++++++++++++++++++++
+ drivers/usb/typec/ucsi/ucsi.c | 18 ++++++++++++
+ drivers/usb/typec/ucsi/ucsi.h |  5 ++++
+ 3 files changed, 75 insertions(+)
+
+diff --git a/drivers/usb/typec/ucsi/psy.c b/drivers/usb/typec/ucsi/psy.c
+index 37414b119f6567f99cb1b7a32024d27b8e9d6721..b351839c8bf33fbc7b05649654ca10e1752a8898 100644
+--- a/drivers/usb/typec/ucsi/psy.c
++++ b/drivers/usb/typec/ucsi/psy.c
+@@ -30,6 +30,7 @@ static enum power_supply_property ucsi_psy_props[] = {
+ 	POWER_SUPPLY_PROP_CURRENT_NOW,
+ 	POWER_SUPPLY_PROP_SCOPE,
+ 	POWER_SUPPLY_PROP_STATUS,
++	POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX,
+ };
+ 
+ static int ucsi_psy_get_scope(struct ucsi_connector *con,
+@@ -276,11 +277,60 @@ static int ucsi_psy_get_prop(struct power_supply *psy,
+ 		return ucsi_psy_get_scope(con, val);
+ 	case POWER_SUPPLY_PROP_STATUS:
+ 		return ucsi_psy_get_status(con, val);
++	case POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX:
++		val->intval = 0;
++		return 0;
++	default:
++		return -EINVAL;
++	}
++}
++
++static int ucsi_psy_set_charge_control_limit_max(struct ucsi_connector *con,
++				 const union power_supply_propval *val)
++{
++	/*
++	 * Writing a negative value to the charge control limit max implies the
++	 * port should not accept charge. Disable the sink path for a negative
++	 * charge control limit, and enable the sink path for a positive charge
++	 * control limit. If the requested charge port is a source, update the
++	 * power role.
++	 */
++	int ret;
++	bool sink_path = false;
++
++	if (val->intval >= 0) {
++		sink_path = true;
++		if (!con->typec_cap.ops || !con->typec_cap.ops->pr_set)
++			return -EINVAL;
++
++		ret = con->typec_cap.ops->pr_set(con->port, TYPEC_SINK);
++		if (ret < 0)
++			return ret;
++	}
++
++	return ucsi_set_sink_path(con, sink_path);
++}
++
++static int ucsi_psy_set_prop(struct power_supply *psy,
++			     enum power_supply_property psp,
++			     const union power_supply_propval *val)
++{
++	struct ucsi_connector *con = power_supply_get_drvdata(psy);
++
++	switch (psp) {
++	case POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX:
++		return ucsi_psy_set_charge_control_limit_max(con, val);
+ 	default:
+ 		return -EINVAL;
+ 	}
+ }
+ 
++static int ucsi_psy_prop_is_writeable(struct power_supply *psy,
++			     enum power_supply_property psp)
++{
++	return psp == POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX;
++}
++
+ int ucsi_register_port_psy(struct ucsi_connector *con)
+ {
+ 	struct power_supply_config psy_cfg = {};
+@@ -303,6 +353,8 @@ int ucsi_register_port_psy(struct ucsi_connector *con)
+ 	con->psy_desc.properties = ucsi_psy_props;
+ 	con->psy_desc.num_properties = ARRAY_SIZE(ucsi_psy_props);
+ 	con->psy_desc.get_property = ucsi_psy_get_prop;
++	con->psy_desc.set_property = ucsi_psy_set_prop;
++	con->psy_desc.property_is_writeable = ucsi_psy_prop_is_writeable;
+ 
+ 	con->psy = power_supply_register(dev, &con->psy_desc, &psy_cfg);
+ 
+diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c
+index e0f3925e401b3d6acf794754a0255c32fe8f01b9..2f0202b3b30239e40e1ac901a3f4fef996ec0d33 100644
+--- a/drivers/usb/typec/ucsi/ucsi.c
++++ b/drivers/usb/typec/ucsi/ucsi.c
+@@ -1511,6 +1511,24 @@ static const struct typec_operations ucsi_ops = {
+ 	.pr_set = ucsi_pr_swap
+ };
+ 
++int ucsi_set_sink_path(struct ucsi_connector *con, bool sink_path)
++{
++	struct ucsi *ucsi = con->ucsi;
++	u64 command;
++	int ret;
++
++	if (ucsi->version < UCSI_VERSION_2_0)
++		return -EOPNOTSUPP;
++
++	command = UCSI_SET_SINK_PATH | UCSI_CONNECTOR_NUMBER(con->num);
++	command |= UCSI_SET_SINK_PATH_SINK_PATH(sink_path);
++	ret = ucsi_send_command(ucsi, command, NULL, 0);
++	if (ret < 0)
++		dev_err(con->ucsi->dev, "SET_SINK_PATH failed (%d)\n", ret);
++
++	return ret;
++}
++
+ /* Caller must call fwnode_handle_put() after use */
+ static struct fwnode_handle *ucsi_find_fwnode(struct ucsi_connector *con)
+ {
+diff --git a/drivers/usb/typec/ucsi/ucsi.h b/drivers/usb/typec/ucsi/ucsi.h
+index 2a72c618f5090463e92e3a6a58c2dd69f0e349c9..a21a3c90729494dc6e9f59808f97719892f57617 100644
+--- a/drivers/usb/typec/ucsi/ucsi.h
++++ b/drivers/usb/typec/ucsi/ucsi.h
+@@ -115,6 +115,7 @@ void ucsi_connector_change(struct ucsi *ucsi, u8 num);
+ #define UCSI_GET_CONNECTOR_STATUS	0x12
+ #define UCSI_GET_ERROR_STATUS		0x13
+ #define UCSI_GET_PD_MESSAGE		0x15
++#define UCSI_SET_SINK_PATH		0x1c
+ 
+ #define UCSI_CONNECTOR_NUMBER(_num_)		((u64)(_num_) << 16)
+ #define UCSI_COMMAND(_cmd_)			((_cmd_) & 0xff)
+@@ -190,6 +191,9 @@ void ucsi_connector_change(struct ucsi *ucsi, u8 num);
+ #define   UCSI_GET_PD_MESSAGE_TYPE_IDENTITY	4
+ #define   UCSI_GET_PD_MESSAGE_TYPE_REVISION	5
+ 
++/* SET_SINK_PATH command bits */
++#define UCSI_SET_SINK_PATH_SINK_PATH(_r_)	(((_r_) ? 1 : 0) << 23)
++
+ /* -------------------------------------------------------------------------- */
+ 
+ /* Error information returned by PPM in response to GET_ERROR_STATUS command. */
+@@ -461,6 +465,7 @@ int ucsi_send_command(struct ucsi *ucsi, u64 command,
+ 
+ void ucsi_altmode_update_active(struct ucsi_connector *con);
+ int ucsi_resume(struct ucsi *ucsi);
++int ucsi_set_sink_path(struct ucsi_connector *con, bool sink_path);
+ 
+ void ucsi_notify_common(struct ucsi *ucsi, u32 cci);
+ int ucsi_sync_control_common(struct ucsi *ucsi, u64 command);
+-- 
+2.47.0.277.g8800431eea-goog
+
diff --git a/5a34abcf2d7c5460318ff95ea64f9565304e91b08f64b9f7ea331018.patch b/5a34abcf2d7c5460318ff95ea64f9565304e91b08f64b9f7ea331018.patch
new file mode 100644
index 0000000..0e50955
--- /dev/null
+++ b/5a34abcf2d7c5460318ff95ea64f9565304e91b08f64b9f7ea331018.patch
@@ -0,0 +1,71 @@
+From 102f99be1b053a5743b8f165a779787484c90b70 Mon Sep 17 00:00:00 2001
+From: Jameson Thies <jthies@google.com>
+Date: Wed, 17 Jul 2024 00:49:47 +0000
+Subject: [PATCH] FROMLIST: usb: typec: ucsi: Add USB PD DRP to USB type
+
+Add POWER_SUPPLY_USB_TYPE_PD_DRP as a USB type in the UCSI power supply
+driver. The DRP type is set when the partner supports USB PD and offers
+both source and sink PDOs.
+
+Signed-off-by: Jameson Thies <jthies@google.com>
+(am from https://patchwork.kernel.org/patch/13741318/)
+(also found at https://lore.kernel.org/r/20240724201116.2094059-3-jthies@google.com)
+
+BUG=b:351778077
+UPSTREAM-TASK=b:353605100
+TEST=emerge-brox chromeos-kernel-6_6, usb_type is PD_DRP for partners
+with source and sink PDOs.
+
+Change-Id: I06e7d0cb45059b99550396867e62895598198429
+Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/kernel/+/5713891
+Reviewed-by: Sean Paul <sean@poorly.run>
+Commit-Queue: Jameson Thies <jthies@google.com>
+Reviewed-by: Benson Leung <bleung@google.com>
+Tested-by: Jameson Thies <jthies@google.com>
+Kcr-patch: 5a34abcf2d7c5460318ff95ea64f9565304e91b08f64b9f7ea331018.patch
+---
+ drivers/usb/typec/ucsi/psy.c | 16 +++++++++++++---
+ 1 file changed, 13 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/usb/typec/ucsi/psy.c b/drivers/usb/typec/ucsi/psy.c
+index 78ef76561ee1a59410104f9a1e19ce5f64e093dd..37414b119f6567f99cb1b7a32024d27b8e9d6721 100644
+--- a/drivers/usb/typec/ucsi/psy.c
++++ b/drivers/usb/typec/ucsi/psy.c
+@@ -204,13 +204,23 @@ static int ucsi_psy_get_usb_type(struct ucsi_connector *con,
+ 
+ 	val->intval = POWER_SUPPLY_USB_TYPE_C;
+ 	if (flags & UCSI_CONSTAT_CONNECTED &&
+-	    UCSI_CONSTAT_PWR_OPMODE(flags) == UCSI_CONSTAT_PWR_OPMODE_PD)
++	    UCSI_CONSTAT_PWR_OPMODE(flags) == UCSI_CONSTAT_PWR_OPMODE_PD) {
++		for (int i = 0; i < con->num_pdos; i++) {
++			if (pdo_type(con->src_pdos[i]) == PDO_TYPE_FIXED &&
++			    con->src_pdos[i] & PDO_FIXED_DUAL_ROLE) {
++				val->intval = POWER_SUPPLY_USB_TYPE_PD_DRP;
++				return 0;
++			}
++		}
++
+ 		val->intval = POWER_SUPPLY_USB_TYPE_PD;
++	}
+ 
+ 	return 0;
+ }
+ 
+-static int ucsi_psy_get_charge_type(struct ucsi_connector *con, union power_supply_propval *val)
++static int ucsi_psy_get_charge_type(struct ucsi_connector *con,
++				    union power_supply_propval *val)
+ {
+ 	if (!(con->status.flags & UCSI_CONSTAT_CONNECTED)) {
+ 		val->intval = POWER_SUPPLY_CHARGE_TYPE_NONE;
+@@ -287,7 +297,7 @@ int ucsi_register_port_psy(struct ucsi_connector *con)
+ 
+ 	con->psy_desc.name = psy_name;
+ 	con->psy_desc.type = POWER_SUPPLY_TYPE_USB;
+-	con->psy_desc.usb_types = BIT(POWER_SUPPLY_USB_TYPE_C)  |
++	con->psy_desc.usb_types = BIT(POWER_SUPPLY_USB_TYPE_C) |
+ 				  BIT(POWER_SUPPLY_USB_TYPE_PD) |
+ 				  BIT(POWER_SUPPLY_USB_TYPE_PD_PPS);
+ 	con->psy_desc.properties = ucsi_psy_props;
+-- 
+2.47.0.277.g8800431eea-goog
+
diff --git a/9aaeaa5d00f44418e0d474d9b6828f1d2bce891fb06837846774d656.patch b/9aaeaa5d00f44418e0d474d9b6828f1d2bce891fb06837846774d656.patch
new file mode 100644
index 0000000..2cdbd05
--- /dev/null
+++ b/9aaeaa5d00f44418e0d474d9b6828f1d2bce891fb06837846774d656.patch
@@ -0,0 +1,115 @@
+From c175e82be256b1ff9a13d8ec432cd2188d99c93b Mon Sep 17 00:00:00 2001
+From: Lee Jones <joneslee@google.com>
+Date: Wed, 18 Jan 2023 15:49:24 +0000
+Subject: [PATCH] FROMGIT: ANDROID: usb: f_accessory: Check buffer size when
+ initialised via composite
+
+When communicating with accessory devices via USBFS, the initialisation
+call-stack looks like:
+
+  ConfigFS > Gadget ConfigFS > UDC > Gadget ConfigFS > Composite
+
+Eventually ending up in composite_dev_prepare() where memory for the
+data buffer is allocated and initialised.  The default size used for the
+allocation is USB_COMP_EP0_BUFSIZ (4k).  When handling bulk transfers,
+acc_ctrlrequest() needs to be able to handle buffers up to
+BULK_BUFFER_SIZE (16k).  Instead of adding new generic attributes to
+'struct usb_request' to track the size of the allocated buffer, we can
+simply split off the affected thread of execution to travel via a
+knowledgeable abstracted function acc_ctrlrequest_composite() where we
+can complete the necessary specific checks.
+
+Bug: 264029575
+Signed-off-by: Lee Jones <joneslee@google.com>
+Signed-off-by: Lee Jones <joneslee@google.com>
+(cherry picked from commit 9a8dcea6abcf74b5f463e0d2cb9ffc0d739a6a0d
+ https://android.googlesource.com/kernel/common android13-5.15)
+
+BUG=b:271919375
+TEST=CQ
+
+Change-Id: I263b69453069541cf3a0c19a9e7d786f37a58a17
+Disallow-Recycled-Builds: test-failures
+Signed-off-by: Guenter Roeck <groeck@chromium.org>
+Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/kernel/+/4313625
+Reviewed-by: Sean Paul <sean@poorly.run>
+Reviewed-by: Zubin Mithra <zsm@chromium.org>
+
+[rebase66(tzungbi):
+ Squashed:
+   FIXUP: FROMGIT: ANDROID: usb: f_accessory: Check buffer size when initialised via composite
+     (https://crrev.com/c/4805766)
+]
+Signed-off-by: Tzung-Bi Shih <tzungbi@chromium.org>
+---
+ drivers/usb/gadget/configfs.c             |  6 +++---
+ drivers/usb/gadget/function/f_accessory.c | 22 +++++++++++++++++++++-
+ 2 files changed, 24 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/usb/gadget/configfs.c b/drivers/usb/gadget/configfs.c
+index cd18217bc29b0c56f39d3e7ecebb99ba11b4e3a9..505f85924a20ba828329d446f5cdcff88ae51488 100644
+--- a/drivers/usb/gadget/configfs.c
++++ b/drivers/usb/gadget/configfs.c
+@@ -18,8 +18,8 @@
+ #include <linux/usb/ch9.h>
+ 
+ #ifdef CONFIG_USB_CONFIGFS_F_ACC
+-extern int acc_ctrlrequest(struct usb_composite_dev *cdev,
+-				const struct usb_ctrlrequest *ctrl);
++extern int acc_ctrlrequest_composite(struct usb_composite_dev *cdev,
++				     const struct usb_ctrlrequest *ctrl);
+ void acc_disconnect(void);
+ #endif
+ static struct class *android_class;
+@@ -1958,7 +1958,7 @@ static int android_setup(struct usb_gadget *gadget,
+ 
+ #ifdef CONFIG_USB_CONFIGFS_F_ACC
+ 	if (value < 0)
+-		value = acc_ctrlrequest(cdev, c);
++		value = acc_ctrlrequest_composite(cdev, c);
+ #endif
+ 
+ 	if (value < 0)
+diff --git a/drivers/usb/gadget/function/f_accessory.c b/drivers/usb/gadget/function/f_accessory.c
+index a9bd9061298603f9fa269d3030d9ef6c25006fe2..32fa3480c765ca8931295e2d1831221ae26454fd 100644
+--- a/drivers/usb/gadget/function/f_accessory.c
++++ b/drivers/usb/gadget/function/f_accessory.c
+@@ -1075,6 +1075,26 @@ int acc_ctrlrequest(struct usb_composite_dev *cdev,
+ }
+ EXPORT_SYMBOL_GPL(acc_ctrlrequest);
+ 
++int acc_ctrlrequest_composite(struct usb_composite_dev *cdev,
++			      const struct usb_ctrlrequest *ctrl)
++{
++	u16 w_length = le16_to_cpu(ctrl->wLength);
++
++	if (w_length > USB_COMP_EP0_BUFSIZ) {
++		if (ctrl->bRequestType & USB_DIR_IN) {
++			/* Cast away the const, we are going to overwrite on purpose. */
++			__le16 *temp = (__le16 *)&ctrl->wLength;
++
++			*temp = cpu_to_le16(USB_COMP_EP0_BUFSIZ);
++			w_length = USB_COMP_EP0_BUFSIZ;
++		} else {
++			return -EINVAL;
++		}
++	}
++	return acc_ctrlrequest(cdev, ctrl);
++}
++EXPORT_SYMBOL_GPL(acc_ctrlrequest_composite);
++
+ static int
+ __acc_function_bind(struct usb_configuration *c,
+ 			struct usb_function *f, bool configfs)
+@@ -1501,7 +1521,7 @@ static void acc_free(struct usb_function *f)
+ 	put_acc_dev(dev);
+ }
+ 
+-int acc_ctrlrequest_configfs(struct usb_function *f,
++static int acc_ctrlrequest_configfs(struct usb_function *f,
+ 			const struct usb_ctrlrequest *ctrl) {
+ 	if (f->config != NULL && f->config->cdev != NULL)
+ 		return acc_ctrlrequest(f->config->cdev, ctrl);
+-- 
+2.47.0.277.g8800431eea-goog
+
diff --git a/e1e6491f65fe499531fbd76758d0c6b8a87f74f52b72a6b84a5d2642.patch b/e1e6491f65fe499531fbd76758d0c6b8a87f74f52b72a6b84a5d2642.patch
new file mode 100644
index 0000000..feddec3
--- /dev/null
+++ b/e1e6491f65fe499531fbd76758d0c6b8a87f74f52b72a6b84a5d2642.patch
@@ -0,0 +1,448 @@
+From 1269dee369a7cc133ad4e06743329e38f6e27775 Mon Sep 17 00:00:00 2001
+From: Badhri Jagan Sridharan <Badhri@google.com>
+Date: Mon, 15 Dec 2014 10:44:47 -0800
+Subject: [PATCH] NOUPSTREAM: ANDROID: usb: gadget: configfs: Add Uevent to
+ notify userspace
+
+Android userspace UsbDeviceManager relies on the
+uevents generated by the composition driver to
+generate user notifications. This CL adds uevents
+to be generated whenever USB changes its state
+i.e. connected, disconnected, configured.
+
+This CL also intercepts the setup requests from
+the usb_core anb routes it to the specific
+usb function if required.
+
+[CPNOTE: 19/07/21] Lee: Should be re-written to use upstream APIs - pinged Badhri
+
+Bug: 68755607
+Bug: 120441124
+Change-Id: Ib3d3a78255a532f7449dac286f776c2966caf8c1
+[badhri: Migrate to using udc uevents from upstream sysfs.]
+Signed-off-by: Badhri Jagan Sridharan <badhri@google.com>
+[AmitP: Folded following android-4.9 commit changes into this patch
+        9214c899f730 ("ANDROID: usb: gadget: configfs: handle gadget reset request for android")]
+Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
+[adelva: Folded change 5c899c9fd75d ("ANDROID: usb: gadget: configfs:
+         fix null ptr in android_disconnect") into this patch]
+Signed-off-by: Alistair Delva <adelva@google.com>
+[maennich: Folded change 43e98b082f9e ("ANDROID: usb: gadget: configfs:
+           fix compiler warning") into this patch]
+Signed-off-by: Matthias Maennich <maennich@google.com>
+
+[rebase61(tzungbi):
+    Squashed:
+	FIXUP: NOUPSTREAM: ANDROID: usb: gadget: configfs: Add Uevent to notify userspace
+]
+Signed-off-by: Tzung-Bi Shih <tzungbi@chromium.org>
+
+Kcr-patch: 25fedb58e84f321bfa47e338d5ab394861b0cd960a260cffbe836ec5.patch
+Change-Id: Ie68bbf60b26d3dd019de04fc2cae94f822f9fd33
+
+[rebase66(tzungbi):
+ Squashed:
+   FIXUP: NOUPSTREAM: ANDROID: usb: gadget: configfs: Add Uevent to notify userspace
+]
+Signed-off-by: Tzung-Bi Shih <tzungbi@chromium.org>
+---
+ drivers/usb/gadget/Kconfig    |   8 ++
+ drivers/usb/gadget/configfs.c | 256 +++++++++++++++++++++++++++++++++-
+ include/linux/usb/composite.h |   1 +
+ 3 files changed, 263 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig
+index 566ff0b1282a82950b0af3c020261d83a6d21579..c742d1c628bfe6543f4aff594ac1075f844191f4 100644
+--- a/drivers/usb/gadget/Kconfig
++++ b/drivers/usb/gadget/Kconfig
+@@ -235,6 +235,14 @@ config USB_CONFIGFS
+ 	  appropriate symbolic links.
+ 	  For more information see Documentation/usb/gadget_configfs.rst.
+ 
++config USB_CONFIGFS_UEVENT
++	bool "Uevent notification of Gadget state"
++	depends on USB_CONFIGFS
++	help
++	  Enable uevent notifications to userspace when the gadget
++	  state changes. The gadget can be in any of the following
++	  three states: "CONNECTED/DISCONNECTED/CONFIGURED"
++
+ config USB_CONFIGFS_SERIAL
+ 	bool "Generic serial bulk in/out"
+ 	depends on USB_CONFIGFS
+diff --git a/drivers/usb/gadget/configfs.c b/drivers/usb/gadget/configfs.c
+index c82a6a0fba93ddc34a93c56aa2104241fbac2bdb..cd18217bc29b0c56f39d3e7ecebb99ba11b4e3a9 100644
+--- a/drivers/usb/gadget/configfs.c
++++ b/drivers/usb/gadget/configfs.c
+@@ -12,6 +12,36 @@
+ #include "configfs.h"
+ #include "u_os_desc.h"
+ 
++#ifdef CONFIG_USB_CONFIGFS_UEVENT
++#include <linux/platform_device.h>
++#include <linux/kdev_t.h>
++#include <linux/usb/ch9.h>
++
++#ifdef CONFIG_USB_CONFIGFS_F_ACC
++extern int acc_ctrlrequest(struct usb_composite_dev *cdev,
++				const struct usb_ctrlrequest *ctrl);
++void acc_disconnect(void);
++#endif
++static struct class *android_class;
++static struct device *android_device;
++static int index;
++static int gadget_index;
++
++struct device *create_function_device(char *name)
++{
++	if (android_device && !IS_ERR(android_device))
++		return device_create(android_class, android_device,
++			MKDEV(0, index++), NULL, name);
++	else
++		return ERR_PTR(-EINVAL);
++}
++EXPORT_SYMBOL_GPL(create_function_device);
++#else
++#ifdef CONFIG_USB_CONFIGFS_F_ACC
++static inline void acc_disconnect(void) {}
++#endif
++#endif
++
+ static int check_user_usb_string(const char *name,
+ 		struct usb_gadget_strings *stringtab_dev)
+ {
+@@ -59,6 +89,12 @@ struct gadget_info {
+ 
+ 	spinlock_t spinlock;
+ 	bool unbind;
++#ifdef CONFIG_USB_CONFIGFS_UEVENT
++	bool connected;
++	bool sw_connected;
++	struct work_struct work;
++	struct device *dev;
++#endif
+ };
+ 
+ static inline struct gadget_info *to_gadget_info(struct config_item *item)
+@@ -286,7 +322,7 @@ static ssize_t gadget_dev_desc_UDC_store(struct config_item *item,
+ 
+ 	mutex_lock(&gi->lock);
+ 
+-	if (!strlen(name)) {
++	if (!strlen(name) || strcmp(name, "none") == 0) {
+ 		ret = unregister_gadget(gi);
+ 		if (ret)
+ 			goto err;
+@@ -1818,6 +1854,57 @@ static int configfs_composite_bind(struct usb_gadget *gadget,
+ 	return ret;
+ }
+ 
++#ifdef CONFIG_USB_CONFIGFS_UEVENT
++static void android_work(struct work_struct *data)
++{
++	struct gadget_info *gi = container_of(data, struct gadget_info, work);
++	struct usb_composite_dev *cdev = &gi->cdev;
++	char *disconnected[2] = { "USB_STATE=DISCONNECTED", NULL };
++	char *connected[2]    = { "USB_STATE=CONNECTED", NULL };
++	char *configured[2]   = { "USB_STATE=CONFIGURED", NULL };
++	/* 0-connected 1-configured 2-disconnected*/
++	bool status[3] = { false, false, false };
++	unsigned long flags;
++	bool uevent_sent = false;
++
++	spin_lock_irqsave(&cdev->lock, flags);
++	if (cdev->config)
++		status[1] = true;
++
++	if (gi->connected != gi->sw_connected) {
++		if (gi->connected)
++			status[0] = true;
++		else
++			status[2] = true;
++		gi->sw_connected = gi->connected;
++	}
++	spin_unlock_irqrestore(&cdev->lock, flags);
++
++	if (status[0]) {
++		kobject_uevent_env(&gi->dev->kobj, KOBJ_CHANGE, connected);
++		pr_info("%s: sent uevent %s\n", __func__, connected[0]);
++		uevent_sent = true;
++	}
++
++	if (status[1]) {
++		kobject_uevent_env(&gi->dev->kobj, KOBJ_CHANGE, configured);
++		pr_info("%s: sent uevent %s\n", __func__, configured[0]);
++		uevent_sent = true;
++	}
++
++	if (status[2]) {
++		kobject_uevent_env(&gi->dev->kobj, KOBJ_CHANGE, disconnected);
++		pr_info("%s: sent uevent %s\n", __func__, disconnected[0]);
++		uevent_sent = true;
++	}
++
++	if (!uevent_sent) {
++		pr_info("%s: did not send uevent (%d %d %p)\n", __func__,
++			gi->connected, gi->sw_connected, cdev->config);
++	}
++}
++#endif
++
+ static void configfs_composite_unbind(struct usb_gadget *gadget)
+ {
+ 	struct usb_composite_dev	*cdev;
+@@ -1845,6 +1932,50 @@ static void configfs_composite_unbind(struct usb_gadget *gadget)
+ 	spin_unlock_irqrestore(&gi->spinlock, flags);
+ }
+ 
++#ifdef CONFIG_USB_CONFIGFS_UEVENT
++static int android_setup(struct usb_gadget *gadget,
++			const struct usb_ctrlrequest *c)
++{
++	struct usb_composite_dev *cdev = get_gadget_data(gadget);
++	unsigned long flags;
++	struct gadget_info *gi = container_of(cdev, struct gadget_info, cdev);
++	int value = -EOPNOTSUPP;
++	struct usb_function_instance *fi;
++
++	spin_lock_irqsave(&cdev->lock, flags);
++	if (!gi->connected) {
++		gi->connected = 1;
++		schedule_work(&gi->work);
++	}
++	spin_unlock_irqrestore(&cdev->lock, flags);
++	list_for_each_entry(fi, &gi->available_func, cfs_list) {
++		if (fi != NULL && fi->f != NULL && fi->f->setup != NULL) {
++			value = fi->f->setup(fi->f, c);
++			if (value >= 0)
++				break;
++		}
++	}
++
++#ifdef CONFIG_USB_CONFIGFS_F_ACC
++	if (value < 0)
++		value = acc_ctrlrequest(cdev, c);
++#endif
++
++	if (value < 0)
++		value = composite_setup(gadget, c);
++
++	spin_lock_irqsave(&cdev->lock, flags);
++	if (c->bRequest == USB_REQ_SET_CONFIGURATION &&
++						cdev->config) {
++		schedule_work(&gi->work);
++	}
++	spin_unlock_irqrestore(&cdev->lock, flags);
++
++	return value;
++}
++
++#else // CONFIG_USB_CONFIGFS_UEVENT
++
+ static int configfs_composite_setup(struct usb_gadget *gadget,
+ 		const struct usb_ctrlrequest *ctrl)
+ {
+@@ -1870,6 +2001,8 @@ static int configfs_composite_setup(struct usb_gadget *gadget,
+ 	return ret;
+ }
+ 
++#endif // CONFIG_USB_CONFIGFS_UEVENT
++
+ static void configfs_composite_disconnect(struct usb_gadget *gadget)
+ {
+ 	struct usb_composite_dev *cdev;
+@@ -1880,6 +2013,14 @@ static void configfs_composite_disconnect(struct usb_gadget *gadget)
+ 	if (!cdev)
+ 		return;
+ 
++#ifdef CONFIG_USB_CONFIGFS_F_ACC
++	/*
++	 * accessory HID support can be active while the
++	 * accessory function is not actually enabled,
++	 * so we need to inform it when we are disconnected.
++	 */
++	acc_disconnect();
++#endif
+ 	gi = container_of(cdev, struct gadget_info, cdev);
+ 	spin_lock_irqsave(&gi->spinlock, flags);
+ 	cdev = get_gadget_data(gadget);
+@@ -1888,6 +2029,10 @@ static void configfs_composite_disconnect(struct usb_gadget *gadget)
+ 		return;
+ 	}
+ 
++#ifdef CONFIG_USB_CONFIGFS_UEVENT
++	gi->connected = 0;
++	schedule_work(&gi->work);
++#endif
+ 	composite_disconnect(gadget);
+ 	spin_unlock_irqrestore(&gi->spinlock, flags);
+ }
+@@ -1962,10 +2107,13 @@ static const struct usb_gadget_driver configfs_driver_template = {
+ 	.bind           = configfs_composite_bind,
+ 	.unbind         = configfs_composite_unbind,
+ 
++#ifdef CONFIG_USB_CONFIGFS_UEVENT
++	.setup          = android_setup,
++#else
+ 	.setup          = configfs_composite_setup,
++#endif
+ 	.reset          = configfs_composite_reset,
+ 	.disconnect     = configfs_composite_disconnect,
+-
+ 	.suspend	= configfs_composite_suspend,
+ 	.resume		= configfs_composite_resume,
+ 
+@@ -1976,6 +2124,91 @@ static const struct usb_gadget_driver configfs_driver_template = {
+ 	.match_existing_only = 1,
+ };
+ 
++#ifdef CONFIG_USB_CONFIGFS_UEVENT
++static ssize_t state_show(struct device *pdev, struct device_attribute *attr,
++			char *buf)
++{
++	struct gadget_info *dev = dev_get_drvdata(pdev);
++	struct usb_composite_dev *cdev;
++	char *state = "DISCONNECTED";
++	unsigned long flags;
++
++	if (!dev)
++		goto out;
++
++	cdev = &dev->cdev;
++
++	if (!cdev)
++		goto out;
++
++	spin_lock_irqsave(&cdev->lock, flags);
++	if (cdev->config)
++		state = "CONFIGURED";
++	else if (dev->connected)
++		state = "CONNECTED";
++	spin_unlock_irqrestore(&cdev->lock, flags);
++out:
++	return sprintf(buf, "%s\n", state);
++}
++
++static DEVICE_ATTR(state, S_IRUGO, state_show, NULL);
++
++static struct device_attribute *android_usb_attributes[] = {
++	&dev_attr_state,
++	NULL
++};
++
++static int android_device_create(struct gadget_info *gi)
++{
++	struct device_attribute **attrs;
++	struct device_attribute *attr;
++
++	INIT_WORK(&gi->work, android_work);
++	gi->dev = device_create(android_class, NULL,
++			MKDEV(0, 0), NULL, "android%d", gadget_index++);
++	if (IS_ERR(gi->dev))
++		return PTR_ERR(gi->dev);
++
++	dev_set_drvdata(gi->dev, gi);
++	if (!android_device)
++		android_device = gi->dev;
++
++	attrs = android_usb_attributes;
++	while ((attr = *attrs++)) {
++		int err;
++
++		err = device_create_file(gi->dev, attr);
++		if (err) {
++			device_destroy(gi->dev->class,
++				       gi->dev->devt);
++			return err;
++		}
++	}
++
++	return 0;
++}
++
++static void android_device_destroy(struct gadget_info *gi)
++{
++	struct device_attribute **attrs;
++	struct device_attribute *attr;
++
++	attrs = android_usb_attributes;
++	while ((attr = *attrs++))
++		device_remove_file(gi->dev, attr);
++	device_destroy(gi->dev->class, gi->dev->devt);
++}
++#else
++static inline int android_device_create(struct gadget_info *gi)
++{
++	return 0;
++}
++
++static inline void android_device_destroy(struct gadget_info *gi)
++{
++}
++#endif
++
+ static struct config_group *gadgets_make(
+ 		struct config_group *group,
+ 		const char *name)
+@@ -2037,6 +2270,9 @@ static struct config_group *gadgets_make(
+ 	if (!gi->composite.gadget_driver.function)
+ 		goto out_free_driver_name;
+ 
++	if (android_device_create(gi) < 0)
++		goto err;
++
+ 	return &gi->group;
+ 
+ out_free_driver_name:
+@@ -2048,7 +2284,11 @@ static struct config_group *gadgets_make(
+ 
+ static void gadgets_drop(struct config_group *group, struct config_item *item)
+ {
++	struct gadget_info *gi;
++
++	gi = container_of(to_config_group(item), struct gadget_info, group);
+ 	config_item_put(item);
++	android_device_destroy(gi);
+ }
+ 
+ static struct configfs_group_operations gadgets_ops = {
+@@ -2088,6 +2328,13 @@ static int __init gadget_cfs_init(void)
+ 	config_group_init(&gadget_subsys.su_group);
+ 
+ 	ret = configfs_register_subsystem(&gadget_subsys);
++
++#ifdef CONFIG_USB_CONFIGFS_UEVENT
++	android_class = class_create("android_usb");
++	if (IS_ERR(android_class))
++		return PTR_ERR(android_class);
++#endif
++
+ 	return ret;
+ }
+ module_init(gadget_cfs_init);
+@@ -2095,5 +2342,10 @@ module_init(gadget_cfs_init);
+ static void __exit gadget_cfs_exit(void)
+ {
+ 	configfs_unregister_subsystem(&gadget_subsys);
++#ifdef CONFIG_USB_CONFIGFS_UEVENT
++	if (!IS_ERR(android_class))
++		class_destroy(android_class);
++#endif
++
+ }
+ module_exit(gadget_cfs_exit);
+diff --git a/include/linux/usb/composite.h b/include/linux/usb/composite.h
+index 6e38fb9d21174a402485e5cc9acf209a5caceb65..0d80fb0a2d16e1787d414395356a67b2bef88d0b 100644
+--- a/include/linux/usb/composite.h
++++ b/include/linux/usb/composite.h
+@@ -583,6 +583,7 @@ struct usb_function_instance {
+ 	struct config_group group;
+ 	struct list_head cfs_list;
+ 	struct usb_function_driver *fd;
++	struct usb_function *f;
+ 	int (*set_inst_name)(struct usb_function_instance *inst,
+ 			      const char *name);
+ 	void (*free_func_inst)(struct usb_function_instance *inst);
+-- 
+2.47.0.277.g8800431eea-goog
+
diff --git a/fixups/CHROMIUM: Revert usb: typec: ucsi: Remove unused fields from struct ucsi_connector_status.patch b/fixups/CHROMIUM: Revert usb: typec: ucsi: Remove unused fields from struct ucsi_connector_status.patch
new file mode 100644
index 0000000..c58704a
--- /dev/null
+++ b/fixups/CHROMIUM: Revert usb: typec: ucsi: Remove unused fields from struct ucsi_connector_status.patch
@@ -0,0 +1,64 @@
+From d1cdc8036d20775ac79c6bca88b58b5d1ec42004 Mon Sep 17 00:00:00 2001
+From: Alexandre Courbot <acourbot@google.com>
+Date: Tue, 22 Oct 2024 12:12:12 +0900
+Subject: [PATCH] CHROMIUM: Revert "usb: typec: ucsi: Remove unused fields from
+ struct ucsi_connector_status"
+
+This reverts commit 9ecf52153b6f6681853b60c9912231e03857dff4.
+
+Reason: commit "CHROMIUM: usb: typec: ucsi: Check sink_path_status for power supply"
+requires the UCSI_CONSTAT_SINK_PATH_STATUS constant.
+
+Signed-off-by: Alexandre Courbot <acourbot@google.com>
+Kcr-depends-on-sha: 565988e48cdb69bc7185a6f4bd8b255e0b2d6c9c
+Kcr-patch: patches/Revert "usb: typec: ucsi: Remove unused fields from struct ucsi_connector_status".patch
+Change-Id: I4a0af122da83302ef5d76236db134add4204871e
+---
+ drivers/usb/typec/ucsi/ucsi.h | 27 +++++++++++++++++++++++++--
+ 1 file changed, 25 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/usb/typec/ucsi/ucsi.h b/drivers/usb/typec/ucsi/ucsi.h
+index b6f0ff09007a..f373dc747f03 100644
+--- a/drivers/usb/typec/ucsi/ucsi.h
++++ b/drivers/usb/typec/ucsi/ucsi.h
+@@ -351,12 +351,35 @@ struct ucsi_connector_status {
+ #define   UCSI_CONSTAT_PARTNER_TYPE_AUDIO	6
+ 	u32 request_data_obj;
+ 
+-	u8 pwr_status;
+-#define UCSI_CONSTAT_BC_STATUS(_p_)		((_p_) & GENMASK(1, 0))
++	u8 pwr_status[3];
++#define UCSI_CONSTAT_BC_STATUS(_p_)		((_p_[0]) & GENMASK(1, 0))
+ #define   UCSI_CONSTAT_BC_NOT_CHARGING		0
+ #define   UCSI_CONSTAT_BC_NOMINAL_CHARGING	1
+ #define   UCSI_CONSTAT_BC_SLOW_CHARGING		2
+ #define   UCSI_CONSTAT_BC_TRICKLE_CHARGING	3
++#define UCSI_CONSTAT_PROVIDER_CAP_LIMIT(_p_)	(((_p_[0]) & GENMASK(5, 2)) >> 2)
++#define   UCSI_CONSTAT_CAP_PWR_LOWERED		0
++#define   UCSI_CONSTAT_CAP_PWR_BUDGET_LIMIT	1
++#define UCSI_CONSTAT_PROVIDER_PD_VERSION_OPER_MODE(_p_)	\
++	((get_unaligned_le32(_p_) & GENMASK(21, 6)) >> 6)
++#define UCSI_CONSTAT_ORIENTATION(_p_)		(((_p_[2]) & GENMASK(6, 6)) >> 6)
++#define   UCSI_CONSTAT_ORIENTATION_DIRECT	0
++#define   UCSI_CONSTAT_ORIENTATION_FLIPPED	1
++#define UCSI_CONSTAT_SINK_PATH_STATUS(_p_)	(((_p_[2]) & GENMASK(7, 7)) >> 7)
++#define   UCSI_CONSTAT_SINK_PATH_DISABLED	0
++#define   UCSI_CONSTAT_SINK_PATH_ENABLED	1
++	u8 pwr_readings[9];
++#define UCSI_CONSTAT_REV_CURR_PROT_STATUS(_p_)	((_p_[0]) & 0x1)
++#define UCSI_CONSTAT_PWR_READING_VALID(_p_)	(((_p_[0]) & GENMASK(1, 1)) >> 1)
++#define UCSI_CONSTAT_CURRENT_SCALE(_p_)		(((_p_[0]) & GENMASK(4, 2)) >> 2)
++#define UCSI_CONSTAT_PEAK_CURRENT(_p_) \
++	((get_unaligned_le32(_p_) & GENMASK(20, 5)) >> 5)
++#define UCSI_CONSTAT_AVG_CURRENT(_p_) \
++	((get_unaligned_le32(&(_p_)[2]) & GENMASK(20, 5)) >> 5)
++#define UCSI_CONSTAT_VOLTAGE_SCALE(_p_) \
++	((get_unaligned_le16(&(_p_)[4]) & GENMASK(8, 5)) >> 5)
++#define UCSI_CONSTAT_VOLTAGE_READING(_p_) \
++	((get_unaligned_le32(&(_p_)[5]) & GENMASK(16, 1)) >> 1)
+ } __packed;
+ 
+ /* -------------------------------------------------------------------------- */
+-- 
+2.47.0.277.g8800431eea-goog
+
diff --git a/fixups/FIXUP: CHROMIUM: HID: multitouch: Scope mt_reset actions to haptic devices.patch b/fixups/FIXUP: CHROMIUM: HID: multitouch: Scope mt_reset actions to haptic devices.patch
new file mode 100644
index 0000000..cabc205
--- /dev/null
+++ b/fixups/FIXUP: CHROMIUM: HID: multitouch: Scope mt_reset actions to haptic devices.patch
@@ -0,0 +1,29 @@
+From 6255b9ce18ab4c568f3bb3039d8bd30e5a1bbb6d Mon Sep 17 00:00:00 2001
+From: Alexandre Courbot <acourbot@google.com>
+Date: Tue, 22 Oct 2024 11:56:39 +0900
+Subject: [PATCH] FIXUP: CHROMIUM: HID: multitouch: Scope mt_reset actions to
+ haptic devices
+
+Change-Id: I7496a7f752b4c9dc9a8ee8bf55ce3addc7141f6f
+Kcr-depends-on-sha: 00e64efb5931160057f40d1a6ac1f598632f6c1d
+Signed-off-by: Alexandre Courbot <acourbot@google.com>
+Kcr-patch: fixups/6689667a209e5bfe00c45168be3c542c78537c77.patch
+---
+ drivers/hid/hid-multitouch.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
+index 30b69f467fdbe698d48c225839625d70dfb73ee4..1cf088369225e4e0d58091eda7a8e8fd5f1ea791 100644
+--- a/drivers/hid/hid-multitouch.c
++++ b/drivers/hid/hid-multitouch.c
+@@ -2150,7 +2150,6 @@ static int mt_reset(struct hid_device *hdev)
+ 
+ 	return 0;
+ }
+-#endif
+ 
+ static void mt_remove(struct hid_device *hdev)
+ {
+-- 
+2.47.0.105.g07ac214952-goog
+
diff --git a/fixups/FIXUP: CHROMIUM: platform:x86:intel:vsec: Add support for Meteor Lake ES0.patch b/fixups/FIXUP: CHROMIUM: platform:x86:intel:vsec: Add support for Meteor Lake ES0.patch
new file mode 100644
index 0000000..566f84a
--- /dev/null
+++ b/fixups/FIXUP: CHROMIUM: platform:x86:intel:vsec: Add support for Meteor Lake ES0.patch
@@ -0,0 +1,38 @@
+From f4f5e8ada3213ba14a689435fd1457d012776e60 Mon Sep 17 00:00:00 2001
+From: Alexandre Courbot <acourbot@google.com>
+Date: Tue, 22 Oct 2024 11:54:47 +0900
+Subject: [PATCH] FIXUP: CHROMIUM: platform/x86/intel/vsec: Add support for
+ Meteor Lake ES0
+
+Signed-off-by: Alexandre Courbot <acourbot@google.com>
+Change-Id: I116693f8a80ad92fdc8aa16ac9f4627fc0b3b3a2
+Kcr-depends-on-sha: 879c5a13cf316ac99e1ca13a0bdf928ba55f6709
+Kcr-patch: fixups/a686c1a3c5c9ede3c31e16f8f42cf4de4b0ed88a.patch
+---
+ drivers/platform/x86/intel/vsec.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/platform/x86/intel/vsec.c b/drivers/platform/x86/intel/vsec.c
+index 87025d0ba60da1d9609f87bc8b9fb4f464ed7520..23613e32e0c01ff9fdfb78ac4a75d76091d180e4 100644
+--- a/drivers/platform/x86/intel/vsec.c
++++ b/drivers/platform/x86/intel/vsec.c
+@@ -24,6 +24,7 @@
+ #include <linux/pci.h>
+ #include <linux/types.h>
+ #include <asm/intel-family.h>
++#include <asm/cpu_device_id.h>
+ 
+ #define PMT_XA_START			0
+ #define PMT_XA_MAX			INT_MAX
+@@ -364,7 +365,7 @@ static int intel_vsec_pci_probe(struct pci_dev *pdev, const struct pci_device_id
+ 	if (!info)
+ 		return -EINVAL;
+ 
+-	if((boot_cpu_data.x86_model == INTEL_FAM6_METEORLAKE_L) &&
++	if((boot_cpu_data.x86_vfm == INTEL_METEORLAKE_L) &&
+ 			(boot_cpu_data.x86_stepping == 1))
+ 		info->quirks |= VSEC_QUIRK_TABLE_SHIFT;
+ 
+-- 
+2.47.0.105.g07ac214952-goog
+
