diff options
author | Hans de Goede <hdegoede@redhat.com> | 2018-03-20 08:57:06 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2018-03-22 08:40:10 -0400 |
commit | c6962c29729cc64177f56a466766daa7de9f87ac (patch) | |
tree | c08521ad2213d5a7086ab56f3dbb7078b17c19b1 /include/linux/usb/tcpm.h | |
parent | ceeb162500c3480b660a47d509db7955a7913271 (diff) |
usb: typec: tcpm: Set USB role switch to device mode when configured as such
Setting the mux to MUX_NONE and the switch to USB_SWITCH_DISCONNECT when
the data-role is device is not correct. Plenty of devices support
operating as USB device through a (separate) USB device controller.
We really need 2 different versions of USB_SWITCH_CONNECT,
USB_SWITCH_CONNECT_HOST and USB_SWITCH_DEVICE. Rather then modifying the
tcpc_usb_switch enum for this, simply remove it and switch to the
usb_role enum which provides exactly this, this will save use needing to
convert betweent the 2 enums when calling an usb-role-switch driver later.
Besides switching to the usb_role type, this commit also actually sets the
mux to TYPEC_MUX_USB and the switch to USB_ROLE_DEVICE instead of setting
both to none when the data-role is device.
This commit also makes tcpm_reset_port() call tcpm_mux_set(port,
TYPEC_MUX_NONE, USB_ROLE_NONE) so that the mux and switch
do _not_ stay in their last mode after a detach.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'include/linux/usb/tcpm.h')
-rw-r--r-- | include/linux/usb/tcpm.h | 8 |
1 files changed, 2 insertions, 6 deletions
diff --git a/include/linux/usb/tcpm.h b/include/linux/usb/tcpm.h index 5a5e1d8c5b65..3e8bdaa5085a 100644 --- a/include/linux/usb/tcpm.h +++ b/include/linux/usb/tcpm.h | |||
@@ -16,6 +16,7 @@ | |||
16 | #define __LINUX_USB_TCPM_H | 16 | #define __LINUX_USB_TCPM_H |
17 | 17 | ||
18 | #include <linux/bitops.h> | 18 | #include <linux/bitops.h> |
19 | #include <linux/usb/role.h> | ||
19 | #include <linux/usb/typec.h> | 20 | #include <linux/usb/typec.h> |
20 | #include "pd.h" | 21 | #include "pd.h" |
21 | 22 | ||
@@ -98,11 +99,6 @@ struct tcpc_config { | |||
98 | const struct typec_altmode_desc *alt_modes; | 99 | const struct typec_altmode_desc *alt_modes; |
99 | }; | 100 | }; |
100 | 101 | ||
101 | enum tcpc_usb_switch { | ||
102 | TCPC_USB_SWITCH_CONNECT, | ||
103 | TCPC_USB_SWITCH_DISCONNECT, | ||
104 | }; | ||
105 | |||
106 | /* Mux state attributes */ | 102 | /* Mux state attributes */ |
107 | #define TCPC_MUX_USB_ENABLED BIT(0) /* USB enabled */ | 103 | #define TCPC_MUX_USB_ENABLED BIT(0) /* USB enabled */ |
108 | #define TCPC_MUX_DP_ENABLED BIT(1) /* DP enabled */ | 104 | #define TCPC_MUX_DP_ENABLED BIT(1) /* DP enabled */ |
@@ -119,7 +115,7 @@ enum tcpc_mux_mode { | |||
119 | 115 | ||
120 | struct tcpc_mux_dev { | 116 | struct tcpc_mux_dev { |
121 | int (*set)(struct tcpc_mux_dev *dev, enum tcpc_mux_mode mux_mode, | 117 | int (*set)(struct tcpc_mux_dev *dev, enum tcpc_mux_mode mux_mode, |
122 | enum tcpc_usb_switch usb_config, | 118 | enum usb_role usb_role, |
123 | enum typec_cc_polarity polarity); | 119 | enum typec_cc_polarity polarity); |
124 | bool dfp_only; | 120 | bool dfp_only; |
125 | void *priv_data; | 121 | void *priv_data; |