Commit 6258db14 authored by Hans de Goede's avatar Hans de Goede Committed by Greg Kroah-Hartman

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: ea3b4d55("usb: typec: fusb302: Resolve fixed power role ...")
Cc: Adam Thomson <Adam.Thomson.Opensource@diasemi.com>
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Reviewed-by: default avatarGuenter Roeck <linux@roeck-us.net>
Acked-by: default avatarHeikki Krogerus <heikki.krogerus@linux.intel.com>
Tested-by: default avatarAdam Thomson <Adam.Thomson.Opensource@diasemi.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 7893f9e1
...@@ -882,10 +882,20 @@ static int tcpm_start_toggling(struct tcpc_dev *dev, ...@@ -882,10 +882,20 @@ static int tcpm_start_toggling(struct tcpc_dev *dev,
{ {
struct fusb302_chip *chip = container_of(dev, struct fusb302_chip, struct fusb302_chip *chip = container_of(dev, struct fusb302_chip,
tcpc_dev); tcpc_dev);
enum toggling_mode mode = TOGGLING_MODE_OFF;
int ret = 0; int ret = 0;
if (port_type != TYPEC_PORT_DRP) switch (port_type) {
return -EOPNOTSUPP; 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); mutex_lock(&chip->lock);
ret = fusb302_set_src_current(chip, cc_src_current[cc]); ret = fusb302_set_src_current(chip, cc_src_current[cc]);
...@@ -894,7 +904,7 @@ static int tcpm_start_toggling(struct tcpc_dev *dev, ...@@ -894,7 +904,7 @@ static int tcpm_start_toggling(struct tcpc_dev *dev,
typec_cc_status_name[cc], ret); typec_cc_status_name[cc], ret);
goto done; goto done;
} }
ret = fusb302_set_toggling(chip, TOGGLING_MODE_DRP); ret = fusb302_set_toggling(chip, mode);
if (ret < 0) { if (ret < 0) {
fusb302_log(chip, fusb302_log(chip,
"unable to start drp toggling, ret=%d", ret); "unable to start drp toggling, ret=%d", ret);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment