mb/lenovo/t60,x60: Split dock_(dis)connect() function

Avoid calling a function named mainboard_io_trap_handler() when
the dock (dis)connect is not triggered from IO trap.

Change-Id: Idc258a390f2de2c32d38a0e35fcce896d058d1b9
Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/70363
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
This commit is contained in:
Kyösti Mälkki 2022-12-02 17:59:35 +02:00
parent dbbbb8f5c1
commit 791f7a4f63
2 changed files with 57 additions and 37 deletions

View File

@ -45,16 +45,14 @@ static void mainboard_smi_brightness_up(void)
*(bar+LVTMA_BL_MOD_LEVEL) += 0x10; *(bar+LVTMA_BL_MOD_LEVEL) += 0x10;
} }
int mainboard_io_trap_handler(int smif) static void mainboard_smi_dock_connect(void)
{ {
switch (smif) {
case SMI_DOCK_CONNECT:
/* If there's an legacy I/O module present, we're not /* If there's an legacy I/O module present, we're not
* allowed to connect the Docking LPC Bus, as both Super I/O * allowed to connect the Docking LPC Bus, as both Super I/O
* chips are using 0x2e as base address. * chips are using 0x2e as base address.
*/ */
if (legacy_io_present()) if (legacy_io_present())
break; return;
if (!dock_connect()) { if (!dock_connect()) {
/* set dock LED to indicate status */ /* set dock LED to indicate status */
@ -65,12 +63,24 @@ int mainboard_io_trap_handler(int smif)
ec_write(0x0c, 0xc8); ec_write(0x0c, 0xc8);
ec_write(0x0c, 0x09); ec_write(0x0c, 0x09);
} }
break; }
case SMI_DOCK_DISCONNECT: static void mainboard_smi_dock_disconnect(void)
{
dock_disconnect(); dock_disconnect();
ec_write(0x0c, 0x09); ec_write(0x0c, 0x09);
ec_write(0x0c, 0x08); ec_write(0x0c, 0x08);
}
int mainboard_io_trap_handler(int smif)
{
switch (smif) {
case SMI_DOCK_CONNECT:
mainboard_smi_dock_connect();
break;
case SMI_DOCK_DISCONNECT:
mainboard_smi_dock_disconnect();
break; break;
case SMI_BRIGHTNESS_UP: case SMI_BRIGHTNESS_UP:
@ -116,11 +126,11 @@ static void mainboard_smi_handle_ec_sci(void)
case 0x27: case 0x27:
/* undock event */ /* undock event */
case 0x50: case 0x50:
mainboard_io_trap_handler(SMI_DOCK_DISCONNECT); mainboard_smi_dock_disconnect();
break; break;
/* dock event */ /* dock event */
case 0x37: case 0x37:
mainboard_io_trap_handler(SMI_DOCK_CONNECT); mainboard_smi_dock_connect();
break; break;
default: default:
break; break;

View File

@ -29,10 +29,8 @@ static void mainboard_smi_save_cmos(void)
outb(tmp72, 0x72); outb(tmp72, 0x72);
} }
int mainboard_io_trap_handler(int smif) static void mainboard_smi_dock_connect(void)
{ {
switch (smif) {
case SMI_DOCK_CONNECT:
ec_clr_bit(0x03, 2); ec_clr_bit(0x03, 2);
mdelay(250); mdelay(250);
if (!dock_connect()) { if (!dock_connect()) {
@ -45,11 +43,23 @@ int mainboard_io_trap_handler(int smif)
ec_write(0x0c, 0x08); ec_write(0x0c, 0x08);
ec_write(0x0c, 0xc9); 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:
mainboard_smi_dock_connect();
break; break;
case SMI_DOCK_DISCONNECT: case SMI_DOCK_DISCONNECT:
ec_clr_bit(0x03, 2); mainboard_smi_dock_disconnect();
dock_disconnect();
break; break;
case SMI_SAVE_CMOS: case SMI_SAVE_CMOS:
@ -108,12 +118,12 @@ static void mainboard_smi_handle_ec_sci(void)
case 0x27: case 0x27:
/* Undock Key */ /* Undock Key */
case 0x50: case 0x50:
mainboard_io_trap_handler(SMI_DOCK_DISCONNECT); mainboard_smi_dock_disconnect();
break; break;
/* Dock Event */ /* Dock Event */
case 0x37: case 0x37:
case 0x58: case 0x58:
mainboard_io_trap_handler(SMI_DOCK_CONNECT); mainboard_smi_dock_connect();
break; break;
default: default:
break; break;