usb: typec: altmodes/displayport: Make dp_altmode_notify() more generic
authorHans de Goede <hdegoede@redhat.com>
Tue, 17 Aug 2021 21:52:00 +0000 (23:52 +0200)
committerHans de Goede <hdegoede@redhat.com>
Fri, 20 Aug 2021 10:35:59 +0000 (12:35 +0200)
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: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Tested-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Reviewed-by: Lyude Paul <lyude@redhat.com>
Link: https://lore.kernel.org/r/20210817215201.795062-8-hdegoede@redhat.com
drivers/usb/typec/altmodes/displayport.c

index b7f094435b00ab58d71334281d770a1c5c6abd5b..aa669b9cf70ed493e60ceb4ba17399dc42fdd6a2 100644 (file)
@@ -66,10 +66,17 @@ struct dp_altmode {
 
 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),
-                                  &dp->data);
+       return typec_altmode_notify(dp->alt, conf, &dp->data);
 }
 
 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)
 
 static int dp_altmode_configured(struct dp_altmode *dp)
 {
-       int ret;
-
        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");
 
-       return 0;
+       return dp_altmode_notify(dp);
 }
 
 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);
-       if (ret) {
-               if (DP_CONF_GET_PIN_ASSIGN(dp->data.conf))
-                       dp_altmode_notify(dp);
-               else
-                       typec_altmode_notify(dp->alt, TYPEC_STATE_USB,
-                                            &dp->data);
-       }
+       if (ret)
+               dp_altmode_notify(dp);
 
        return ret;
 }