diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mainboard/lenovo/t60/smihandler.c | 52 | ||||
-rw-r--r-- | src/mainboard/lenovo/x60/smihandler.c | 42 |
2 files changed, 57 insertions, 37 deletions
diff --git a/src/mainboard/lenovo/t60/smihandler.c b/src/mainboard/lenovo/t60/smihandler.c index 12a1e53be0..e87362bd92 100644 --- a/src/mainboard/lenovo/t60/smihandler.c +++ b/src/mainboard/lenovo/t60/smihandler.c @@ -45,32 +45,42 @@ static void mainboard_smi_brightness_up(void) *(bar+LVTMA_BL_MOD_LEVEL) += 0x10; } +static void mainboard_smi_dock_connect(void) +{ + /* If there's an legacy I/O module present, we're not + * allowed to connect the Docking LPC Bus, as both Super I/O + * chips are using 0x2e as base address. + */ + if (legacy_io_present()) + return; + + if (!dock_connect()) { + /* set dock LED to indicate status */ + ec_write(0x0c, 0x08); + ec_write(0x0c, 0x89); + } else { + /* blink dock LED to indicate failure */ + ec_write(0x0c, 0xc8); + ec_write(0x0c, 0x09); + } +} + +static void mainboard_smi_dock_disconnect(void) +{ + dock_disconnect(); + ec_write(0x0c, 0x09); + ec_write(0x0c, 0x08); +} + int mainboard_io_trap_handler(int smif) { switch (smif) { case SMI_DOCK_CONNECT: - /* If there's an legacy I/O module present, we're not - * allowed to connect the Docking LPC Bus, as both Super I/O - * chips are using 0x2e as base address. - */ - if (legacy_io_present()) - break; - - if (!dock_connect()) { - /* set dock LED to indicate status */ - ec_write(0x0c, 0x08); - ec_write(0x0c, 0x89); - } else { - /* blink dock LED to indicate failure */ - ec_write(0x0c, 0xc8); - ec_write(0x0c, 0x09); - } + mainboard_smi_dock_connect(); break; case SMI_DOCK_DISCONNECT: - dock_disconnect(); - ec_write(0x0c, 0x09); - ec_write(0x0c, 0x08); + mainboard_smi_dock_disconnect(); break; case SMI_BRIGHTNESS_UP: @@ -116,11 +126,11 @@ static void mainboard_smi_handle_ec_sci(void) case 0x27: /* undock event */ case 0x50: - mainboard_io_trap_handler(SMI_DOCK_DISCONNECT); + mainboard_smi_dock_disconnect(); break; /* dock event */ case 0x37: - mainboard_io_trap_handler(SMI_DOCK_CONNECT); + mainboard_smi_dock_connect(); break; default: break; diff --git a/src/mainboard/lenovo/x60/smihandler.c b/src/mainboard/lenovo/x60/smihandler.c index e1a97f57ee..13c6406c4d 100644 --- a/src/mainboard/lenovo/x60/smihandler.c +++ b/src/mainboard/lenovo/x60/smihandler.c @@ -29,27 +29,37 @@ static void mainboard_smi_save_cmos(void) outb(tmp72, 0x72); } +static void mainboard_smi_dock_connect(void) +{ + ec_clr_bit(0x03, 2); + mdelay(250); + if (!dock_connect()) { + ec_set_bit(0x03, 2); + /* set dock LED to indicate status */ + ec_write(0x0c, 0x09); + ec_write(0x0c, 0x88); + } else { + /* blink dock LED to indicate failure */ + ec_write(0x0c, 0x08); + ec_write(0x0c, 0xc9); + } +} + +static void mainboard_smi_dock_disconnect(void) +{ + ec_clr_bit(0x03, 2); + dock_disconnect(); +} + int mainboard_io_trap_handler(int smif) { switch (smif) { case SMI_DOCK_CONNECT: - ec_clr_bit(0x03, 2); - mdelay(250); - if (!dock_connect()) { - ec_set_bit(0x03, 2); - /* set dock LED to indicate status */ - ec_write(0x0c, 0x09); - ec_write(0x0c, 0x88); - } else { - /* blink dock LED to indicate failure */ - ec_write(0x0c, 0x08); - ec_write(0x0c, 0xc9); - } + mainboard_smi_dock_connect(); break; case SMI_DOCK_DISCONNECT: - ec_clr_bit(0x03, 2); - dock_disconnect(); + mainboard_smi_dock_disconnect(); break; case SMI_SAVE_CMOS: @@ -108,12 +118,12 @@ static void mainboard_smi_handle_ec_sci(void) case 0x27: /* Undock Key */ case 0x50: - mainboard_io_trap_handler(SMI_DOCK_DISCONNECT); + mainboard_smi_dock_disconnect(); break; /* Dock Event */ case 0x37: case 0x58: - mainboard_io_trap_handler(SMI_DOCK_CONNECT); + mainboard_smi_dock_connect(); break; default: break; |