mirror of https://gitee.com/openkylin/linux.git
usb: typec: fusb302: Implement start_toggling for all port-types
When in single-role port mode, we must start single-role toggling to get an interrupt when a device / cable gets plugged into the port. This commit modifies the fusb302 start_toggling implementation to start toggling for all port-types, so that connection-detection works on single-role ports too. Fixes: ea3b4d5523bc("usb: typec: fusb302: Resolve fixed power role ...") Cc: Adam Thomson <Adam.Thomson.Opensource@diasemi.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com> Reviewed-by: Guenter Roeck <linux@roeck-us.net> Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Tested-by: Adam Thomson <Adam.Thomson.Opensource@diasemi.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
7893f9e1c2
commit
6258db14d7
|
@ -882,10 +882,20 @@ static int tcpm_start_toggling(struct tcpc_dev *dev,
|
|||
{
|
||||
struct fusb302_chip *chip = container_of(dev, struct fusb302_chip,
|
||||
tcpc_dev);
|
||||
enum toggling_mode mode = TOGGLING_MODE_OFF;
|
||||
int ret = 0;
|
||||
|
||||
if (port_type != TYPEC_PORT_DRP)
|
||||
return -EOPNOTSUPP;
|
||||
switch (port_type) {
|
||||
case TYPEC_PORT_SRC:
|
||||
mode = TOGGLING_MODE_SRC;
|
||||
break;
|
||||
case TYPEC_PORT_SNK:
|
||||
mode = TOGGLING_MODE_SNK;
|
||||
break;
|
||||
case TYPEC_PORT_DRP:
|
||||
mode = TOGGLING_MODE_DRP;
|
||||
break;
|
||||
}
|
||||
|
||||
mutex_lock(&chip->lock);
|
||||
ret = fusb302_set_src_current(chip, cc_src_current[cc]);
|
||||
|
@ -894,7 +904,7 @@ static int tcpm_start_toggling(struct tcpc_dev *dev,
|
|||
typec_cc_status_name[cc], ret);
|
||||
goto done;
|
||||
}
|
||||
ret = fusb302_set_toggling(chip, TOGGLING_MODE_DRP);
|
||||
ret = fusb302_set_toggling(chip, mode);
|
||||
if (ret < 0) {
|
||||
fusb302_log(chip,
|
||||
"unable to start drp toggling, ret=%d", ret);
|
||||
|
|
Loading…
Reference in New Issue