summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Serbinenko <phcoder@gmail.com>2013-06-05 22:43:44 +0200
committerRonald G. Minnich <rminnich@gmail.com>2013-06-12 05:28:25 +0200
commit7d1ebbff5ad224591a2d1972737611f96a13145c (patch)
treebbe36fd57e5f24953ce1164a9457c2a617a41cf3
parent942e69dea150fa0318feed1dfab728e62f9ee893 (diff)
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>
-rw-r--r--src/ec/lenovo/h8/h8.c45
1 files changed, 35 insertions, 10 deletions
diff --git a/src/ec/lenovo/h8/h8.c b/src/ec/lenovo/h8/h8.c
index 9ffdfc1d1d..350cc77cf0 100644
--- a/src/ec/lenovo/h8/h8.c
+++ b/src/ec/lenovo/h8/h8.c
@@ -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 = {