Commit fc27e046 authored by Hans de Goede's avatar Hans de Goede

usb: typec: altmodes/displayport: Make dp_altmode_notify() more generic

Make dp_altmode_notify() handle the dp->data.conf == 0 case too,
rather then having separate code-paths for this in various places
which call it.
Reviewed-by: default avatarHeikki Krogerus <heikki.krogerus@linux.intel.com>
Tested-by: default avatarHeikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Reviewed-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Reviewed-by: default avatarLyude Paul <lyude@redhat.com>
Link: https://lore.kernel.org/r/20210817215201.795062-8-hdegoede@redhat.com
parent 72ad4968
...@@ -66,10 +66,17 @@ struct dp_altmode { ...@@ -66,10 +66,17 @@ struct dp_altmode {
static int dp_altmode_notify(struct dp_altmode *dp) static int dp_altmode_notify(struct dp_altmode *dp)
{ {
u8 state = get_count_order(DP_CONF_GET_PIN_ASSIGN(dp->data.conf)); unsigned long conf;
u8 state;
if (dp->data.conf) {
state = get_count_order(DP_CONF_GET_PIN_ASSIGN(dp->data.conf));
conf = TYPEC_MODAL_STATE(state);
} else {
conf = TYPEC_STATE_USB;
}
return typec_altmode_notify(dp->alt, TYPEC_MODAL_STATE(state), return typec_altmode_notify(dp->alt, conf, &dp->data);
&dp->data);
} }
static int dp_altmode_configure(struct dp_altmode *dp, u8 con) static int dp_altmode_configure(struct dp_altmode *dp, u8 con)
...@@ -137,21 +144,10 @@ static int dp_altmode_status_update(struct dp_altmode *dp) ...@@ -137,21 +144,10 @@ static int dp_altmode_status_update(struct dp_altmode *dp)
static int dp_altmode_configured(struct dp_altmode *dp) static int dp_altmode_configured(struct dp_altmode *dp)
{ {
int ret;
sysfs_notify(&dp->alt->dev.kobj, "displayport", "configuration"); sysfs_notify(&dp->alt->dev.kobj, "displayport", "configuration");
if (!dp->data.conf)
return typec_altmode_notify(dp->alt, TYPEC_STATE_USB,
&dp->data);
ret = dp_altmode_notify(dp);
if (ret)
return ret;
sysfs_notify(&dp->alt->dev.kobj, "displayport", "pin_assignment"); sysfs_notify(&dp->alt->dev.kobj, "displayport", "pin_assignment");
return 0; return dp_altmode_notify(dp);
} }
static int dp_altmode_configure_vdm(struct dp_altmode *dp, u32 conf) static int dp_altmode_configure_vdm(struct dp_altmode *dp, u32 conf)
...@@ -172,13 +168,8 @@ static int dp_altmode_configure_vdm(struct dp_altmode *dp, u32 conf) ...@@ -172,13 +168,8 @@ static int dp_altmode_configure_vdm(struct dp_altmode *dp, u32 conf)
} }
ret = typec_altmode_vdm(dp->alt, header, &conf, 2); ret = typec_altmode_vdm(dp->alt, header, &conf, 2);
if (ret) { if (ret)
if (DP_CONF_GET_PIN_ASSIGN(dp->data.conf)) dp_altmode_notify(dp);
dp_altmode_notify(dp);
else
typec_altmode_notify(dp->alt, TYPEC_STATE_USB,
&dp->data);
}
return ret; return 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