#define TQMX86_REG_BOARD_ID_50UC       2
 #define TQMX86_REG_BOARD_ID_E38C       3
 #define TQMX86_REG_BOARD_ID_60EB       4
-#define TQMX86_REG_BOARD_ID_E39M       5
-#define TQMX86_REG_BOARD_ID_E39C       6
-#define TQMX86_REG_BOARD_ID_E39x       7
+#define TQMX86_REG_BOARD_ID_E39MS      5
+#define TQMX86_REG_BOARD_ID_E39C1      6
+#define TQMX86_REG_BOARD_ID_E39C2      7
 #define TQMX86_REG_BOARD_ID_70EB       8
 #define TQMX86_REG_BOARD_ID_80UC       9
 #define TQMX86_REG_BOARD_ID_110EB      11
 #define TQMX86_REG_IO_EXT_INT_12               3
 #define TQMX86_REG_IO_EXT_INT_MASK             0x3
 #define TQMX86_REG_IO_EXT_INT_GPIO_SHIFT       4
+#define TQMX86_REG_SAUC                0x17
 
 #define TQMX86_REG_I2C_DETECT  0x1a7
 #define TQMX86_REG_I2C_DETECT_SOFT             0xa5
        },
 };
 
-static const char *tqmx86_board_id_to_name(u8 board_id)
+static const char *tqmx86_board_id_to_name(u8 board_id, u8 sauc)
 {
        switch (board_id) {
        case TQMX86_REG_BOARD_ID_E38M:
                return "TQMxE38C";
        case TQMX86_REG_BOARD_ID_60EB:
                return "TQMx60EB";
-       case TQMX86_REG_BOARD_ID_E39M:
-               return "TQMxE39M";
-       case TQMX86_REG_BOARD_ID_E39C:
-               return "TQMxE39C";
-       case TQMX86_REG_BOARD_ID_E39x:
-               return "TQMxE39x";
+       case TQMX86_REG_BOARD_ID_E39MS:
+               return (sauc == 0xff) ? "TQMxE39M" : "TQMxE39S";
+       case TQMX86_REG_BOARD_ID_E39C1:
+               return "TQMxE39C1";
+       case TQMX86_REG_BOARD_ID_E39C2:
+               return "TQMxE39C2";
        case TQMX86_REG_BOARD_ID_70EB:
                return "TQMx70EB";
        case TQMX86_REG_BOARD_ID_80UC:
        case TQMX86_REG_BOARD_ID_E40C1:
        case TQMX86_REG_BOARD_ID_E40C2:
                return 24000;
-       case TQMX86_REG_BOARD_ID_E39M:
-       case TQMX86_REG_BOARD_ID_E39C:
-       case TQMX86_REG_BOARD_ID_E39x:
+       case TQMX86_REG_BOARD_ID_E39MS:
+       case TQMX86_REG_BOARD_ID_E39C1:
+       case TQMX86_REG_BOARD_ID_E39C2:
                return 25000;
        case TQMX86_REG_BOARD_ID_E38M:
        case TQMX86_REG_BOARD_ID_E38C:
 
 static int tqmx86_probe(struct platform_device *pdev)
 {
-       u8 board_id, rev, i2c_det, io_ext_int_val;
+       u8 board_id, sauc, rev, i2c_det, io_ext_int_val;
        struct device *dev = &pdev->dev;
        u8 gpio_irq_cfg, readback;
        const char *board_name;
                return -ENOMEM;
 
        board_id = ioread8(io_base + TQMX86_REG_BOARD_ID);
-       board_name = tqmx86_board_id_to_name(board_id);
+       sauc = ioread8(io_base + TQMX86_REG_SAUC);
+       board_name = tqmx86_board_id_to_name(board_id, sauc);
        rev = ioread8(io_base + TQMX86_REG_BOARD_REV);
 
        dev_info(dev,