mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-10 15:58:47 +00:00
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. Fixes: da0cb6310094 ("usb: typec: add support for STUSB160x Type-C controller family") Cc: stable <stable@vger.kernel.org> Signed-off-by: Amelie Delaunay <amelie.delaunay@foss.st.com> Link: https://lore.kernel.org/r/20210716120718.20398-2-amelie.delaunay@foss.st.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
6abf2fe6b4
commit
86762ad4ab
@ -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:
|
||||
|
Loading…
x
Reference in New Issue
Block a user