You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
613 lines
19 KiB
613 lines
19 KiB
From da0f4171a9318ac01d9220f31f3f0b2cee05ccf3 Mon Sep 17 00:00:00 2001
|
|
From: Alexander Couzens <lynxis@fe80.eu>
|
|
Date: Sat, 6 Oct 2018 00:31:49 +0200
|
|
Subject: [PATCH] lenovo/x230: introduce FHD variant
|
|
|
|
There is a modification for the x230 which uses the 2nd DP from the dock
|
|
as the integrated panel's connection, which allows using a Full HD (FHD)
|
|
eDP panel instead of the stock LVDS display.
|
|
|
|
To make this work with coreboot, the internal LVDS connector should be
|
|
disabled in libgfxinit. The VBT has been modified as well, which allows
|
|
brightness controls to work out of the box.
|
|
|
|
The modifications done to the VBT are:
|
|
- Remove the LVDS port entry.
|
|
- Move the DP-3 (which is the 2nd DP on the dock) entry to the first
|
|
position on the list.
|
|
- Set the DP-3 as internally connected.
|
|
|
|
This has been reported to work with panel LP125WF2 SPB4.
|
|
|
|
Change-Id: I0355d39a61956792e69bccd5274cfc2749d72bf0
|
|
Signed-off-by: Alexander Couzens <lynxis@fe80.eu>
|
|
---
|
|
src/mainboard/lenovo/x230/Kconfig | 13 +-
|
|
src/mainboard/lenovo/x230/Kconfig.name | 3 +
|
|
.../x230/variants/x230_fhd/board_info.txt | 7 +
|
|
.../lenovo/x230/variants/x230_fhd/data.vbt | Bin 0 -> 3986 bytes
|
|
.../x230/variants/x230_fhd/early_init.c | 28 ++
|
|
.../x230/variants/x230_fhd/gma-mainboard.ads | 21 ++
|
|
.../lenovo/x230/variants/x230_fhd/gpio.c | 284 ++++++++++++++++++
|
|
.../lenovo/x230/variants/x230_fhd/hda_verb.c | 82 +++++
|
|
.../x230/variants/x230_fhd/overridetree.cb | 16 +
|
|
9 files changed, 451 insertions(+), 3 deletions(-)
|
|
create mode 100644 src/mainboard/lenovo/x230/variants/x230_fhd/board_info.txt
|
|
create mode 100644 src/mainboard/lenovo/x230/variants/x230_fhd/data.vbt
|
|
create mode 100644 src/mainboard/lenovo/x230/variants/x230_fhd/early_init.c
|
|
create mode 100644 src/mainboard/lenovo/x230/variants/x230_fhd/gma-mainboard.ads
|
|
create mode 100644 src/mainboard/lenovo/x230/variants/x230_fhd/gpio.c
|
|
create mode 100644 src/mainboard/lenovo/x230/variants/x230_fhd/hda_verb.c
|
|
create mode 100644 src/mainboard/lenovo/x230/variants/x230_fhd/overridetree.cb
|
|
|
|
diff --git a/src/mainboard/lenovo/x230/Kconfig b/src/mainboard/lenovo/x230/Kconfig
|
|
index 7d563efb2b..4e6cd37cf8 100644
|
|
--- a/src/mainboard/lenovo/x230/Kconfig
|
|
+++ b/src/mainboard/lenovo/x230/Kconfig
|
|
@@ -1,4 +1,4 @@
|
|
-if BOARD_LENOVO_X230 || BOARD_LENOVO_X230T
|
|
+if BOARD_LENOVO_X230 || BOARD_LENOVO_X230T || BOARD_LENOVO_X230_FHD
|
|
|
|
config BOARD_SPECIFIC_OPTIONS
|
|
def_bool y
|
|
@@ -20,7 +20,8 @@ config BOARD_SPECIFIC_OPTIONS
|
|
select MAINBOARD_HAS_LPC_TPM
|
|
select MAINBOARD_HAS_TPM1
|
|
select MAINBOARD_HAS_LIBGFXINIT
|
|
- select GFX_GMA_PANEL_1_ON_LVDS
|
|
+ select GFX_GMA_PANEL_1_ON_LVDS if BOARD_LENOVO_X230 || BOARD_LENOVO_X230T
|
|
+ select GFX_GMA_PANEL_1_ON_EDP if BOARD_LENOVO_X230_FHD
|
|
select INTEL_GMA_HAVE_VBT
|
|
select MAINBOARD_USES_IFD_GBE_REGION
|
|
|
|
@@ -50,10 +51,16 @@ config MAINBOARD_DIR
|
|
string
|
|
default "lenovo/x230"
|
|
|
|
+config VARIANT_DIR
|
|
+ string
|
|
+ default "x230" if BOARD_LENOVO_X230 || BOARD_LENOVO_X230T
|
|
+ default "x230_fhd" if BOARD_LENOVO_X230_FHD
|
|
+
|
|
config MAINBOARD_PART_NUMBER
|
|
string
|
|
default "ThinkPad X230" if BOARD_LENOVO_X230
|
|
default "ThinkPad X230t" if BOARD_LENOVO_X230T
|
|
+ default "ThinkPad X230 FHD" if BOARD_LENOVO_X230_FHD
|
|
|
|
config MAX_CPUS
|
|
int
|
|
@@ -81,4 +88,4 @@ config PS2K_EISAID
|
|
config PS2M_EISAID
|
|
default "LEN0020"
|
|
|
|
-endif # BOARD_LENOVO_X230 || BOARD_LENOVO_X230T
|
|
+endif # BOARD_LENOVO_X230 || BOARD_LENOVO_X230T || BOARD_LENOVO_X230_FHD
|
|
diff --git a/src/mainboard/lenovo/x230/Kconfig.name b/src/mainboard/lenovo/x230/Kconfig.name
|
|
index 10fdc2ed11..e278e2ffe7 100644
|
|
--- a/src/mainboard/lenovo/x230/Kconfig.name
|
|
+++ b/src/mainboard/lenovo/x230/Kconfig.name
|
|
@@ -3,3 +3,6 @@ config BOARD_LENOVO_X230
|
|
|
|
config BOARD_LENOVO_X230T
|
|
bool "ThinkPad X230t"
|
|
+
|
|
+config BOARD_LENOVO_X230_FHD
|
|
+ bool "ThinkPad X230 Nitrocaster Full HD mod"
|
|
diff --git a/src/mainboard/lenovo/x230/variants/x230_fhd/board_info.txt b/src/mainboard/lenovo/x230/variants/x230_fhd/board_info.txt
|
|
new file mode 100644
|
|
index 0000000000..7be565b634
|
|
--- /dev/null
|
|
+++ b/src/mainboard/lenovo/x230/variants/x230_fhd/board_info.txt
|
|
@@ -0,0 +1,7 @@
|
|
+Category: laptop
|
|
+Board name: ThinkPad X230 FHD
|
|
+ROM package: SOIC-8
|
|
+ROM protocol: SPI
|
|
+ROM socketed: n
|
|
+Flashrom support: n
|
|
+Release year: 2012
|
|
diff --git a/src/mainboard/lenovo/x230/variants/x230_fhd/data.vbt b/src/mainboard/lenovo/x230/variants/x230_fhd/data.vbt
|
|
new file mode 100644
|
|
index 0000000000000000000000000000000000000000..1aaf54226c937b0e63b6062c1a4ed3b49e61e858
|
|
GIT binary patch
|
|
literal 3986
|
|
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
|
|
|
|
literal 0
|
|
HcmV?d00001
|
|
|
|
diff --git a/src/mainboard/lenovo/x230/variants/x230_fhd/early_init.c b/src/mainboard/lenovo/x230/variants/x230_fhd/early_init.c
|
|
new file mode 100644
|
|
index 0000000000..9c97a199d1
|
|
--- /dev/null
|
|
+++ b/src/mainboard/lenovo/x230/variants/x230_fhd/early_init.c
|
|
@@ -0,0 +1,28 @@
|
|
+/* SPDX-License-Identifier: GPL-2.0-only */
|
|
+
|
|
+#include <northbridge/intel/sandybridge/raminit_native.h>
|
|
+#include <southbridge/intel/bd82x6x/pch.h>
|
|
+#include <southbridge/intel/common/gpio.h>
|
|
+
|
|
+const struct southbridge_usb_port mainboard_usb_ports[] = {
|
|
+ { 1, 0, 0 }, /* P0 (left, fan side), OC 0 */
|
|
+ { 1, 0, 1 }, /* P1 (left touchpad side), OC 1 */
|
|
+ { 1, 1, 3 }, /* P2: dock, OC 3 */
|
|
+ { 1, 1, -1 }, /* P3: wwan, no OC */
|
|
+ { 1, 1, -1 }, /* P4: Wacom tablet on X230t, otherwise empty */
|
|
+ { 1, 1, -1 }, /* P5: Expresscard, no OC */
|
|
+ { 0, 0, -1 }, /* P6: Empty */
|
|
+ { 1, 2, -1 }, /* P7: dock, no OC */
|
|
+ { 1, 0, -1 },
|
|
+ { 1, 2, 5 }, /* P9: Right (EHCI debug), OC 5 */
|
|
+ { 1, 1, -1 }, /* P10: fingerprint reader, no OC */
|
|
+ { 1, 1, -1 }, /* P11: bluetooth, no OC. */
|
|
+ { 1, 1, -1 }, /* P12: wlan, no OC */
|
|
+ { 1, 1, -1 }, /* P13: webcam, no OC */
|
|
+};
|
|
+
|
|
+void mainboard_get_spd(spd_raw_data *spd, bool id_only)
|
|
+{
|
|
+ read_spd (&spd[0], 0x50, id_only);
|
|
+ read_spd (&spd[2], 0x51, id_only);
|
|
+}
|
|
diff --git a/src/mainboard/lenovo/x230/variants/x230_fhd/gma-mainboard.ads b/src/mainboard/lenovo/x230/variants/x230_fhd/gma-mainboard.ads
|
|
new file mode 100644
|
|
index 0000000000..f7cf0bc264
|
|
--- /dev/null
|
|
+++ b/src/mainboard/lenovo/x230/variants/x230_fhd/gma-mainboard.ads
|
|
@@ -0,0 +1,21 @@
|
|
+-- SPDX-License-Identifier: GPL-2.0-or-later
|
|
+
|
|
+with HW.GFX.GMA;
|
|
+with HW.GFX.GMA.Display_Probing;
|
|
+
|
|
+use HW.GFX.GMA;
|
|
+use HW.GFX.GMA.Display_Probing;
|
|
+
|
|
+private package GMA.Mainboard is
|
|
+
|
|
+ ports : constant Port_List :=
|
|
+ (DP1,
|
|
+ DP2,
|
|
+ DP3,
|
|
+ HDMI1,
|
|
+ HDMI2,
|
|
+ HDMI3,
|
|
+ Analog,
|
|
+ others => Disabled);
|
|
+
|
|
+end GMA.Mainboard;
|
|
diff --git a/src/mainboard/lenovo/x230/variants/x230_fhd/gpio.c b/src/mainboard/lenovo/x230/variants/x230_fhd/gpio.c
|
|
new file mode 100644
|
|
index 0000000000..8de285b34f
|
|
--- /dev/null
|
|
+++ b/src/mainboard/lenovo/x230/variants/x230_fhd/gpio.c
|
|
@@ -0,0 +1,284 @@
|
|
+/* SPDX-License-Identifier: GPL-2.0-only */
|
|
+
|
|
+#include <southbridge/intel/common/gpio.h>
|
|
+
|
|
+static const struct pch_gpio_set1 pch_gpio_set1_mode = {
|
|
+ .gpio0 = GPIO_MODE_GPIO,
|
|
+ .gpio1 = GPIO_MODE_GPIO,
|
|
+ .gpio2 = GPIO_MODE_GPIO,
|
|
+ .gpio3 = GPIO_MODE_GPIO,
|
|
+ .gpio4 = GPIO_MODE_GPIO,
|
|
+ .gpio5 = GPIO_MODE_GPIO,
|
|
+ .gpio6 = GPIO_MODE_GPIO,
|
|
+ .gpio7 = GPIO_MODE_GPIO,
|
|
+ .gpio8 = GPIO_MODE_GPIO,
|
|
+ .gpio9 = GPIO_MODE_NATIVE,
|
|
+ .gpio10 = GPIO_MODE_GPIO,
|
|
+ .gpio11 = GPIO_MODE_NATIVE,
|
|
+ .gpio12 = GPIO_MODE_NATIVE,
|
|
+ .gpio13 = GPIO_MODE_GPIO,
|
|
+ .gpio14 = GPIO_MODE_NATIVE,
|
|
+ .gpio15 = GPIO_MODE_GPIO,
|
|
+ .gpio16 = GPIO_MODE_NATIVE,
|
|
+ .gpio17 = GPIO_MODE_GPIO,
|
|
+ .gpio18 = GPIO_MODE_NATIVE,
|
|
+ .gpio19 = GPIO_MODE_NATIVE,
|
|
+ .gpio20 = GPIO_MODE_NATIVE,
|
|
+ .gpio21 = GPIO_MODE_GPIO,
|
|
+ .gpio22 = GPIO_MODE_GPIO,
|
|
+ .gpio23 = GPIO_MODE_NATIVE,
|
|
+ .gpio24 = GPIO_MODE_GPIO,
|
|
+ .gpio25 = GPIO_MODE_NATIVE,
|
|
+ .gpio26 = GPIO_MODE_NATIVE,
|
|
+ .gpio27 = GPIO_MODE_GPIO,
|
|
+ .gpio28 = GPIO_MODE_GPIO,
|
|
+ .gpio29 = GPIO_MODE_GPIO,
|
|
+ .gpio30 = GPIO_MODE_NATIVE,
|
|
+ .gpio31 = GPIO_MODE_NATIVE,
|
|
+};
|
|
+
|
|
+static const struct pch_gpio_set1 pch_gpio_set1_direction = {
|
|
+ .gpio0 = GPIO_DIR_INPUT,
|
|
+ .gpio1 = GPIO_DIR_INPUT,
|
|
+ .gpio2 = GPIO_DIR_INPUT,
|
|
+ .gpio3 = GPIO_DIR_INPUT,
|
|
+ .gpio4 = GPIO_DIR_INPUT,
|
|
+ .gpio5 = GPIO_DIR_INPUT,
|
|
+ .gpio6 = GPIO_DIR_INPUT,
|
|
+ .gpio7 = GPIO_DIR_INPUT,
|
|
+ .gpio8 = GPIO_DIR_OUTPUT,
|
|
+ .gpio9 = GPIO_DIR_INPUT,
|
|
+ .gpio10 = GPIO_DIR_OUTPUT,
|
|
+ .gpio11 = GPIO_DIR_INPUT,
|
|
+ .gpio12 = GPIO_DIR_OUTPUT,
|
|
+ .gpio13 = GPIO_DIR_INPUT,
|
|
+ .gpio14 = GPIO_DIR_INPUT,
|
|
+ .gpio15 = GPIO_DIR_OUTPUT,
|
|
+ .gpio16 = GPIO_DIR_INPUT,
|
|
+ .gpio17 = GPIO_DIR_INPUT,
|
|
+ .gpio18 = GPIO_DIR_INPUT,
|
|
+ .gpio19 = GPIO_DIR_INPUT,
|
|
+ .gpio20 = GPIO_DIR_INPUT,
|
|
+ .gpio21 = GPIO_DIR_INPUT,
|
|
+ .gpio22 = GPIO_DIR_OUTPUT,
|
|
+ .gpio23 = GPIO_DIR_INPUT,
|
|
+ .gpio24 = GPIO_DIR_OUTPUT,
|
|
+ .gpio25 = GPIO_DIR_INPUT,
|
|
+ .gpio26 = GPIO_DIR_INPUT,
|
|
+ .gpio27 = GPIO_DIR_INPUT,
|
|
+ .gpio28 = GPIO_DIR_OUTPUT,
|
|
+ .gpio29 = GPIO_DIR_OUTPUT,
|
|
+ .gpio30 = GPIO_DIR_OUTPUT,
|
|
+ .gpio31 = GPIO_DIR_INPUT
|
|
+};
|
|
+
|
|
+static const struct pch_gpio_set1 pch_gpio_set1_level = {
|
|
+ .gpio0 = GPIO_LEVEL_HIGH,
|
|
+ .gpio1 = GPIO_LEVEL_HIGH,
|
|
+ .gpio2 = GPIO_LEVEL_LOW,
|
|
+ .gpio3 = GPIO_LEVEL_HIGH,
|
|
+ .gpio4 = GPIO_LEVEL_HIGH,
|
|
+ .gpio5 = GPIO_LEVEL_HIGH,
|
|
+ .gpio6 = GPIO_LEVEL_HIGH,
|
|
+ .gpio7 = GPIO_LEVEL_HIGH,
|
|
+ .gpio8 = GPIO_LEVEL_LOW,
|
|
+ .gpio9 = GPIO_LEVEL_HIGH,
|
|
+ .gpio10 = GPIO_LEVEL_HIGH,
|
|
+ .gpio11 = GPIO_LEVEL_HIGH,
|
|
+ .gpio12 = GPIO_LEVEL_HIGH,
|
|
+ .gpio13 = GPIO_LEVEL_HIGH,
|
|
+ .gpio14 = GPIO_LEVEL_HIGH,
|
|
+ .gpio15 = GPIO_LEVEL_LOW,
|
|
+ .gpio16 = GPIO_LEVEL_HIGH,
|
|
+ .gpio17 = GPIO_LEVEL_HIGH,
|
|
+ .gpio18 = GPIO_LEVEL_HIGH,
|
|
+ .gpio19 = GPIO_LEVEL_HIGH,
|
|
+ .gpio20 = GPIO_LEVEL_HIGH,
|
|
+ .gpio21 = GPIO_LEVEL_HIGH,
|
|
+ .gpio22 = GPIO_LEVEL_HIGH,
|
|
+ .gpio23 = GPIO_LEVEL_HIGH,
|
|
+ .gpio24 = GPIO_LEVEL_LOW,
|
|
+ .gpio25 = GPIO_LEVEL_HIGH,
|
|
+ .gpio26 = GPIO_LEVEL_HIGH,
|
|
+ .gpio27 = GPIO_LEVEL_LOW,
|
|
+ .gpio28 = GPIO_LEVEL_LOW,
|
|
+ .gpio29 = GPIO_LEVEL_HIGH,
|
|
+ .gpio30 = GPIO_LEVEL_HIGH,
|
|
+ .gpio31 = GPIO_LEVEL_LOW,
|
|
+};
|
|
+
|
|
+static const struct pch_gpio_set1 pch_gpio_set1_invert = {
|
|
+ .gpio1 = GPIO_INVERT,
|
|
+ .gpio6 = GPIO_INVERT,
|
|
+ .gpio13 = GPIO_INVERT,
|
|
+};
|
|
+
|
|
+static const struct pch_gpio_set2 pch_gpio_set2_mode = {
|
|
+ .gpio32 = GPIO_MODE_NATIVE,
|
|
+ .gpio33 = GPIO_MODE_GPIO,
|
|
+ .gpio34 = GPIO_MODE_GPIO,
|
|
+ .gpio35 = GPIO_MODE_GPIO,
|
|
+ .gpio36 = GPIO_MODE_GPIO,
|
|
+ .gpio37 = GPIO_MODE_GPIO,
|
|
+ .gpio38 = GPIO_MODE_GPIO,
|
|
+ .gpio39 = GPIO_MODE_GPIO,
|
|
+ .gpio40 = GPIO_MODE_NATIVE,
|
|
+ .gpio41 = GPIO_MODE_NATIVE,
|
|
+ .gpio42 = GPIO_MODE_NATIVE,
|
|
+ .gpio43 = GPIO_MODE_GPIO,
|
|
+ .gpio44 = GPIO_MODE_NATIVE,
|
|
+ .gpio45 = GPIO_MODE_NATIVE,
|
|
+ .gpio46 = GPIO_MODE_NATIVE,
|
|
+ .gpio47 = GPIO_MODE_NATIVE,
|
|
+ .gpio48 = GPIO_MODE_GPIO,
|
|
+ .gpio49 = GPIO_MODE_GPIO,
|
|
+ .gpio50 = GPIO_MODE_GPIO,
|
|
+ .gpio51 = GPIO_MODE_GPIO,
|
|
+ .gpio52 = GPIO_MODE_GPIO,
|
|
+ .gpio53 = GPIO_MODE_GPIO,
|
|
+ .gpio54 = GPIO_MODE_GPIO,
|
|
+ .gpio55 = GPIO_MODE_GPIO,
|
|
+ .gpio56 = GPIO_MODE_NATIVE,
|
|
+ .gpio57 = GPIO_MODE_GPIO,
|
|
+ .gpio58 = GPIO_MODE_NATIVE,
|
|
+ .gpio59 = GPIO_MODE_NATIVE,
|
|
+ .gpio60 = GPIO_MODE_NATIVE,
|
|
+ .gpio61 = GPIO_MODE_NATIVE,
|
|
+ .gpio62 = GPIO_MODE_NATIVE,
|
|
+ .gpio63 = GPIO_MODE_NATIVE,
|
|
+};
|
|
+
|
|
+static const struct pch_gpio_set2 pch_gpio_set2_direction = {
|
|
+ .gpio32 = GPIO_DIR_INPUT,
|
|
+ .gpio33 = GPIO_DIR_INPUT,
|
|
+ .gpio34 = GPIO_DIR_OUTPUT,
|
|
+ .gpio35 = GPIO_DIR_INPUT,
|
|
+ .gpio36 = GPIO_DIR_INPUT,
|
|
+ .gpio37 = GPIO_DIR_INPUT,
|
|
+ .gpio38 = GPIO_DIR_INPUT,
|
|
+ .gpio39 = GPIO_DIR_INPUT,
|
|
+ .gpio40 = GPIO_DIR_INPUT,
|
|
+ .gpio41 = GPIO_DIR_INPUT,
|
|
+ .gpio42 = GPIO_DIR_INPUT,
|
|
+ .gpio43 = GPIO_DIR_OUTPUT,
|
|
+ .gpio44 = GPIO_DIR_INPUT,
|
|
+ .gpio45 = GPIO_DIR_INPUT,
|
|
+ .gpio46 = GPIO_DIR_INPUT,
|
|
+ .gpio47 = GPIO_DIR_INPUT,
|
|
+ .gpio48 = GPIO_DIR_INPUT,
|
|
+ .gpio49 = GPIO_DIR_INPUT,
|
|
+ .gpio50 = GPIO_DIR_INPUT,
|
|
+ .gpio51 = GPIO_DIR_OUTPUT,
|
|
+ .gpio52 = GPIO_DIR_OUTPUT,
|
|
+ .gpio53 = GPIO_DIR_OUTPUT,
|
|
+ .gpio54 = GPIO_DIR_INPUT,
|
|
+ .gpio55 = GPIO_DIR_OUTPUT,
|
|
+ .gpio56 = GPIO_DIR_INPUT,
|
|
+ .gpio57 = GPIO_DIR_INPUT,
|
|
+ .gpio58 = GPIO_DIR_INPUT,
|
|
+ .gpio59 = GPIO_DIR_INPUT,
|
|
+ .gpio60 = GPIO_DIR_INPUT,
|
|
+ .gpio61 = GPIO_DIR_OUTPUT,
|
|
+ .gpio62 = GPIO_DIR_OUTPUT,
|
|
+ .gpio63 = GPIO_DIR_OUTPUT,
|
|
+};
|
|
+
|
|
+static const struct pch_gpio_set2 pch_gpio_set2_level = {
|
|
+ .gpio32 = GPIO_LEVEL_HIGH,
|
|
+ .gpio33 = GPIO_LEVEL_HIGH,
|
|
+ .gpio34 = GPIO_LEVEL_LOW,
|
|
+ .gpio35 = GPIO_LEVEL_LOW,
|
|
+ .gpio36 = GPIO_LEVEL_LOW,
|
|
+ .gpio37 = GPIO_LEVEL_LOW,
|
|
+ .gpio38 = GPIO_LEVEL_HIGH,
|
|
+ .gpio39 = GPIO_LEVEL_LOW,
|
|
+ .gpio40 = GPIO_LEVEL_HIGH,
|
|
+ .gpio41 = GPIO_LEVEL_HIGH,
|
|
+ .gpio42 = GPIO_LEVEL_HIGH,
|
|
+ .gpio43 = GPIO_LEVEL_HIGH,
|
|
+ .gpio44 = GPIO_LEVEL_HIGH,
|
|
+ .gpio45 = GPIO_LEVEL_HIGH,
|
|
+ .gpio46 = GPIO_LEVEL_HIGH,
|
|
+ .gpio47 = GPIO_LEVEL_HIGH,
|
|
+ .gpio48 = GPIO_LEVEL_HIGH,
|
|
+ .gpio49 = GPIO_LEVEL_HIGH,
|
|
+ .gpio50 = GPIO_LEVEL_HIGH,
|
|
+ .gpio51 = GPIO_LEVEL_HIGH,
|
|
+ .gpio52 = GPIO_LEVEL_HIGH,
|
|
+ .gpio53 = GPIO_LEVEL_HIGH,
|
|
+ .gpio54 = GPIO_LEVEL_HIGH,
|
|
+ .gpio55 = GPIO_LEVEL_HIGH,
|
|
+ .gpio56 = GPIO_LEVEL_HIGH,
|
|
+ .gpio57 = GPIO_LEVEL_HIGH,
|
|
+ .gpio58 = GPIO_LEVEL_HIGH,
|
|
+ .gpio59 = GPIO_LEVEL_HIGH,
|
|
+ .gpio60 = GPIO_LEVEL_HIGH,
|
|
+ .gpio61 = GPIO_LEVEL_HIGH,
|
|
+ .gpio62 = GPIO_LEVEL_LOW,
|
|
+ .gpio63 = GPIO_LEVEL_HIGH,
|
|
+};
|
|
+
|
|
+static const struct pch_gpio_set3 pch_gpio_set3_mode = {
|
|
+ .gpio64 = GPIO_MODE_GPIO,
|
|
+ .gpio65 = GPIO_MODE_GPIO,
|
|
+ .gpio66 = GPIO_MODE_GPIO,
|
|
+ .gpio67 = GPIO_MODE_GPIO,
|
|
+ .gpio68 = GPIO_MODE_GPIO,
|
|
+ .gpio69 = GPIO_MODE_GPIO,
|
|
+ .gpio70 = GPIO_MODE_GPIO,
|
|
+ .gpio71 = GPIO_MODE_GPIO,
|
|
+ .gpio72 = GPIO_MODE_NATIVE,
|
|
+ .gpio73 = GPIO_MODE_NATIVE,
|
|
+ .gpio74 = GPIO_MODE_NATIVE,
|
|
+ .gpio75 = GPIO_MODE_NATIVE,
|
|
+};
|
|
+
|
|
+static const struct pch_gpio_set3 pch_gpio_set3_direction = {
|
|
+ .gpio64 = GPIO_DIR_INPUT,
|
|
+ .gpio65 = GPIO_DIR_INPUT,
|
|
+ .gpio66 = GPIO_DIR_INPUT,
|
|
+ .gpio67 = GPIO_DIR_INPUT,
|
|
+ .gpio68 = GPIO_DIR_INPUT,
|
|
+ .gpio69 = GPIO_DIR_INPUT,
|
|
+ .gpio70 = GPIO_DIR_INPUT,
|
|
+ .gpio71 = GPIO_DIR_INPUT,
|
|
+ .gpio72 = GPIO_DIR_INPUT,
|
|
+ .gpio73 = GPIO_DIR_INPUT,
|
|
+ .gpio74 = GPIO_DIR_INPUT,
|
|
+ .gpio75 = GPIO_DIR_INPUT,
|
|
+};
|
|
+
|
|
+static const struct pch_gpio_set3 pch_gpio_set3_level = {
|
|
+ .gpio64 = GPIO_LEVEL_HIGH,
|
|
+ .gpio65 = GPIO_LEVEL_HIGH,
|
|
+ .gpio66 = GPIO_LEVEL_HIGH,
|
|
+ .gpio67 = GPIO_LEVEL_HIGH,
|
|
+ .gpio68 = GPIO_LEVEL_LOW,
|
|
+ .gpio69 = GPIO_LEVEL_LOW,
|
|
+ .gpio70 = GPIO_LEVEL_HIGH,
|
|
+ .gpio71 = GPIO_LEVEL_HIGH,
|
|
+ .gpio72 = GPIO_LEVEL_HIGH,
|
|
+ .gpio73 = GPIO_LEVEL_HIGH,
|
|
+ .gpio74 = GPIO_LEVEL_HIGH,
|
|
+ .gpio75 = GPIO_LEVEL_HIGH,
|
|
+};
|
|
+
|
|
+const struct pch_gpio_map mainboard_gpio_map = {
|
|
+ .set1 = {
|
|
+ .mode = &pch_gpio_set1_mode,
|
|
+ .direction = &pch_gpio_set1_direction,
|
|
+ .level = &pch_gpio_set1_level,
|
|
+ .invert = &pch_gpio_set1_invert,
|
|
+
|
|
+ },
|
|
+ .set2 = {
|
|
+ .mode = &pch_gpio_set2_mode,
|
|
+ .direction = &pch_gpio_set2_direction,
|
|
+ .level = &pch_gpio_set2_level,
|
|
+ },
|
|
+ .set3 = {
|
|
+ .mode = &pch_gpio_set3_mode,
|
|
+ .direction = &pch_gpio_set3_direction,
|
|
+ .level = &pch_gpio_set3_level,
|
|
+ },
|
|
+};
|
|
diff --git a/src/mainboard/lenovo/x230/variants/x230_fhd/hda_verb.c b/src/mainboard/lenovo/x230/variants/x230_fhd/hda_verb.c
|
|
new file mode 100644
|
|
index 0000000000..05fb3fd775
|
|
--- /dev/null
|
|
+++ b/src/mainboard/lenovo/x230/variants/x230_fhd/hda_verb.c
|
|
@@ -0,0 +1,82 @@
|
|
+/* SPDX-License-Identifier: GPL-2.0-only */
|
|
+
|
|
+/* Bits 31:28 - Codec Address */
|
|
+/* Bits 27:20 - NID */
|
|
+/* Bits 19:8 - Verb ID */
|
|
+/* Bits 7:0 - Payload */
|
|
+
|
|
+#include <device/azalia_device.h>
|
|
+
|
|
+const u32 cim_verb_data[] = {
|
|
+ /* --- Codec #0 --- */
|
|
+ 0x10ec0269, /* Codec Vendor / Device ID: Realtek ALC269VC */
|
|
+ 0x17aa21fa, /* Subsystem ID */
|
|
+ 19, /* Number of 4 dword sets */
|
|
+ AZALIA_SUBVENDOR(0, 0x17aa21fa),
|
|
+
|
|
+ /* Ext. Microphone Connector: External,Right; MicIn,3.5mm; Black,JD; DA,Seq */
|
|
+ AZALIA_PIN_CFG(0, 0x0a, 0x04a11020),
|
|
+
|
|
+ /* Headphones Connector: External,Right; HP,3.5mm; Black,JD; DA,Seq */
|
|
+ AZALIA_PIN_CFG(0, 0x0b, 0x0421101f),
|
|
+
|
|
+ /* Not connected: N/A,N/A; Other,Unknown; Unknown,JD; DA,Seq */
|
|
+ AZALIA_PIN_CFG(0, 0x0c, 0x40f000f0),
|
|
+
|
|
+ /* Internal Speakers Fixed,Int; Speaker,Other Analog; Unknown,nJD; DA,Seq */
|
|
+ AZALIA_PIN_CFG(0, 0x0d, 0x90170110),
|
|
+
|
|
+ /* Not connected */
|
|
+ AZALIA_PIN_CFG(0, 0x0f, 0x40f000f0),
|
|
+
|
|
+ /* Internal Microphone: Fixed,Int,Top; Mic In,ATIPI; Unknown,nJD; DA,Seq */
|
|
+ AZALIA_PIN_CFG(0, 0x11, 0xd5a30140),
|
|
+ AZALIA_PIN_CFG(0, 0x12, 0x90a60140),
|
|
+ AZALIA_PIN_CFG(0, 0x14, 0x90170110),
|
|
+ AZALIA_PIN_CFG(0, 0x15, 0x03211020),
|
|
+ AZALIA_PIN_CFG(0, 0x18, 0x03a11830),
|
|
+ AZALIA_PIN_CFG(0, 0x19, 0x411111f0),
|
|
+ AZALIA_PIN_CFG(0, 0x1a, 0x411111f0),
|
|
+ AZALIA_PIN_CFG(0, 0x1d, 0x40138205),
|
|
+ AZALIA_PIN_CFG(0, 0x1e, 0x411111f0),
|
|
+
|
|
+ /* Misc entries */
|
|
+ 0x01970804,
|
|
+ 0x01870803,
|
|
+ 0x01470740,
|
|
+ 0x00970640,
|
|
+
|
|
+ 0x00370680,
|
|
+ 0x00270680,
|
|
+ 0x01470c02,
|
|
+ 0x01570c02,
|
|
+
|
|
+ /* ALC coefficients. */
|
|
+ /* 08 */
|
|
+ 0x02050008,
|
|
+ 0x02040700,
|
|
+ /* 18 */
|
|
+ 0x02050018,
|
|
+ 0x02045184,
|
|
+ /* 1c */
|
|
+ 0x0205001c,
|
|
+ 0x02042800,
|
|
+
|
|
+ 0x01870724, /* Enable Vrefout for mic */
|
|
+ 0x00170500, /* Set power state to D0 */
|
|
+
|
|
+ /* --- Codec #3 --- */
|
|
+ 0x80862806, /* Codec Vendor / Device ID: Intel PantherPoint HDMI */
|
|
+ 0x80860101, /* Subsystem ID */
|
|
+ 4, /* Number of 4 dword sets */
|
|
+ AZALIA_SUBVENDOR(3, 0x80860101),
|
|
+ AZALIA_PIN_CFG(3, 0x05, 0x18560010),
|
|
+ AZALIA_PIN_CFG(3, 0x06, 0x18560020),
|
|
+ AZALIA_PIN_CFG(3, 0x07, 0x18560030),
|
|
+};
|
|
+
|
|
+const u32 pc_beep_verbs[] = {
|
|
+ 0x02177a00, /* Digital PCBEEP Gain: 0h=-9db, 1h=-6db ... 4h=+3db, 5h=+6db */
|
|
+};
|
|
+
|
|
+AZALIA_ARRAY_SIZES;
|
|
diff --git a/src/mainboard/lenovo/x230/variants/x230_fhd/overridetree.cb b/src/mainboard/lenovo/x230/variants/x230_fhd/overridetree.cb
|
|
new file mode 100644
|
|
index 0000000000..97e48b8c2a
|
|
--- /dev/null
|
|
+++ b/src/mainboard/lenovo/x230/variants/x230_fhd/overridetree.cb
|
|
@@ -0,0 +1,16 @@
|
|
+chip northbridge/intel/sandybridge
|
|
+ device domain 0 on
|
|
+ chip southbridge/intel/bd82x6x # Intel Series 7 Panther Point PCH
|
|
+ register "docking_supported" = "1"
|
|
+ register "pcie_hotplug_map" = "{ 0, 0, 1, 0, 0, 0, 0, 0 }"
|
|
+ device pci 1c.2 on
|
|
+ smbios_slot_desc "7" "3" "ExpressCard Slot" "8"
|
|
+ end # PCIe Port #3 (expresscard)
|
|
+ device pci 1f.0 on # LPC bridge
|
|
+ chip ec/lenovo/h8
|
|
+ register "eventa_enable" = "0x01"
|
|
+ end
|
|
+ end # LPC Controller
|
|
+ end
|
|
+ end
|
|
+end
|
|
--
|
|
2.28.0
|
|
|
|
|