USB: serial: cp210x: determine fw version for CP2105 and CP2108
authorJohan Hovold <johan@kernel.org>
Mon, 5 Jul 2021 08:20:15 +0000 (10:20 +0200)
committerJohan Hovold <johan@kernel.org>
Fri, 30 Jul 2021 15:19:51 +0000 (17:19 +0200)
CP2105, CP2108 and CP2102N have vendor requests that can be used to
retrieve the firmware version. Having this information available is
essential when trying to work around buggy firmware as a recent CP2102N
regression showed.

Determine and log the firmware version also for CP2105 and CP2108
during type detection at probe.

Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Johan Hovold <johan@kernel.org>
drivers/usb/serial/cp210x.c

index a120646..66a6ac5 100644 (file)
@@ -400,6 +400,7 @@ struct cp210x_special_chars {
 };
 
 /* CP210X_VENDOR_SPECIFIC values */
+#define CP210X_GET_FW_VER      0x000E
 #define CP210X_READ_2NCONFIG   0x000E
 #define CP210X_GET_FW_VER_2N   0x0010
 #define CP210X_READ_LATCH      0x00C2
@@ -2108,6 +2109,10 @@ static void cp210x_determine_type(struct usb_serial *serial)
        }
 
        switch (priv->partnum) {
+       case CP210X_PARTNUM_CP2105:
+       case CP210X_PARTNUM_CP2108:
+               cp210x_get_fw_version(serial, CP210X_GET_FW_VER);
+               break;
        case CP210X_PARTNUM_CP2102N_QFN28:
        case CP210X_PARTNUM_CP2102N_QFN24:
        case CP210X_PARTNUM_CP2102N_QFN20: