ddbwritel(0xfff0f, INTERRUPT_ENABLE);
        ddbwritel(0, MSI1_ENABLE);
 
+       /* board control */
+       if (dev->info->board_control) {
+               ddbwritel(0, DDB_LINK_TAG(0) | BOARD_CONTROL);
+               msleep(100);
+               ddbwritel(dev->info->board_control_2,
+                       DDB_LINK_TAG(0) | BOARD_CONTROL);
+               usleep_range(2000, 3000);
+               ddbwritel(dev->info->board_control_2
+                       | dev->info->board_control,
+                       DDB_LINK_TAG(0) | BOARD_CONTROL);
+               usleep_range(2000, 3000);
+       }
+
        if (ddb_i2c_init(dev) < 0)
                goto fail1;
        ddb_ports_init(dev);
 
 
 /* ------------------------------------------------------------------------- */
 
+#define BOARD_CONTROL    0x30
+
+/* ------------------------------------------------------------------------- */
+
 /* Interrupt controller                                     */
 /* How many MSI's are available depends on HW (Min 2 max 8) */
 /* How many are usable also depends on Host platform        */
 
 #define DDB_MAX_PORT    4
 #define DDB_MAX_INPUT   8
 #define DDB_MAX_OUTPUT  4
+#define DDB_MAX_LINK    4
+#define DDB_LINK_SHIFT 28
+
+#define DDB_LINK_TAG(_x) (_x << DDB_LINK_SHIFT)
 
 struct ddb_info {
        int   type;
        char *name;
        int   port_num;
        u32   port_type[DDB_MAX_PORT];
+       u32   board_control;
+       u32   board_control_2;
+       u8    ts_quirks;
+#define TS_QUIRK_SERIAL   1
+#define TS_QUIRK_REVERSED 2
+#define TS_QUIRK_ALT_OSC  8
 };
 
 /* DMA_SIZE MUST be divisible by 188 and 128 !!! */