Radio and dock support in EC on X60 and X201

Enable UMTS on Lenovo X60 and X201.
Enable radios if no options are available.
Enable dock on Lenovo X201.

Based on my X201 branch.

Change-Id: I6e8d3bbd6a6b1a8e59473dd5cc8125a1583d75df
Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com>
Reviewed-on: http://review.coreboot.org/3377
Tested-by: build bot (Jenkins)
Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
This commit is contained in:
Vladimir Serbinenko 2013-06-05 22:43:44 +02:00 committed by Ronald G. Minnich
parent 942e69dea1
commit 7d1ebbff5a
1 changed files with 35 additions and 10 deletions

View File

@ -27,6 +27,10 @@
#include "chip.h"
#include <pc80/mc146818rtc.h>
#if defined (CONFIG_BOARD_LENOVO_X201) && CONFIG_BOARD_LENOVO_X201
#include "mainboard/lenovo/x201/dock.h"
#endif
static void h8_bluetooth_enable(int on)
{
if (on)
@ -37,8 +41,7 @@ static void h8_bluetooth_enable(int on)
void h8_trackpoint_enable(int on)
{
ec_write(H8_TRACKPOINT_CTRL,
on ? H8_TRACKPOINT_ON : H8_TRACKPOINT_OFF);
ec_write(H8_TRACKPOINT_CTRL, on ? H8_TRACKPOINT_ON : H8_TRACKPOINT_OFF);
}
@ -50,6 +53,14 @@ void h8_wlan_enable(int on)
ec_clr_bit(0x3a, 5);
}
static void h8_3g_enable(int on)
{
if (on)
ec_set_bit(0x3a, 6);
else
ec_clr_bit(0x3a, 6);
}
static void h8_log_ec_version(void)
{
unsigned char ecfw[9], c;
@ -150,17 +161,31 @@ static void h8_enable(device_t dev)
if (!get_option(&val, "volume"))
ec_write(H8_VOLUME_CONTROL, val);
if (get_option(&val, "bluetooth"))
val = 1;
h8_bluetooth_enable(val);
if (!get_option(&val, "bluetooth"))
h8_bluetooth_enable(val);
if (get_option(&val, "umts"))
val = 1;
if (!get_option(&val, "first_battery")) {
tmp = ec_read(H8_CONFIG3);
tmp &= ~(1 << 4);
tmp |= (val & 1)<< 4;
ec_write(H8_CONFIG3, tmp);
}
h8_3g_enable(val);
if (get_option(&val, "first_battery"))
val = 1;
tmp = ec_read(H8_CONFIG3);
tmp &= ~(1 << 4);
tmp |= (val & 1) << 4;
ec_write(H8_CONFIG3, tmp);
h8_set_audio_mute(0);
#if defined (CONFIG_BOARD_LENOVO_X201) && CONFIG_BOARD_LENOVO_X201
if (dock_present()) {
printk(BIOS_DEBUG, "dock is connected\n");
dock_connect();
} else
printk(BIOS_DEBUG, "dock is not connected\n");
#endif
}
struct chip_operations ec_lenovo_h8_ops = {