patch "usb: typec: stusb160x: register role switch before interrupt" added to usb-linus
Subsystems (3)
This is a note to let you know that I've just added the patch titled
usb: typec: stusb160x: register role switch before interrupt
to my usb git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git
in the usb-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
From 86762ad4abcc549deb7a155c8e5e961b9755bcf0 Mon Sep 17 00:00:00 2001
From: Amelie Delaunay <[email protected]>
Date: Fri, 16 Jul 2021 14:07:17 +0200
Subject: usb: typec: stusb160x: register role switch before interrupt
registration
During interrupt registration, attach state is checked. If attached, then the Type-C state is updated with typec_set_xxx functions and role switch is set with usb_role_switch_set_role().
If the usb_role_switch parameter is error or null, the function simply returns 0.
So, to update usb_role_switch role if a device is attached before the irq is registered, usb_role_switch must be registered before irq registration.
--- drivers/usb/typec/stusb160x.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)
drivers/usb/typec/stusb160x.c +7 -4
@@ -739,10 +739,6 @@ static int stusb160x_probe(struct i2c_client *client)typec_set_pwr_opmode (chip->port, chip->pwr_opmode);if (client->irq) { - ret =stusb160x_irq_init (chip, client->irq); -if (ret) - goto port_unregister; - chip->role_sw =fwnode_usb_role_switch_get (fwnode);if (IS_ERR (chip->role_sw)) { ret =PTR_ERR (chip->role_sw);
@@ -752,6 +748,10 @@ static int stusb160x_probe(struct i2c_client *client) ret); goto port_unregister; } + + ret =stusb160x_irq_init (chip, client->irq); +if (ret) + goto role_sw_put; }else {/* * If Source or Dual power role, need to enable VDD supply
@@ -775,6 +775,9 @@ static int stusb160x_probe(struct i2c_client *client)return 0 ; +role_sw_put: +if (chip->role_sw) +usb_role_switch_put (chip->role_sw); port_unregister:typec_unregister_port (chip->port); all_reg_disable:
Signature · 1 line
2.32.0