Martin Roth (martinroth@google.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/15029
-gerrit
commit 7a1444efcd2311b8231c5fa61c5b04ee664868e1 Author: Vadim Bendebury vbendeb@chromium.org Date: Sun May 22 15:53:37 2016 -0700
gru: kevin: define GPIOs used on both platforms
The same GPIOs are used on both platforms, definitions are added an a new .h to make it easier to re-use them across the code.
BRANCH=none BUG=chrome-os-partner:51537 TEST=panel backlight still enabled on Gru as before. The rest of the GPIOs are used in the upcoming patches.
Change-Id: If06f4b33720ab4bf098d23fb91322bba23fe6e90 Signed-off-by: Martin Roth martinroth@chromium.org Original-Commit-Id: c587880 Original-Change-Id: I1a6c5b5beb82ffcc5fea397e8e9ec2f183f4a7e0 Original-Signed-off-by: Vadim Bendebury vbendeb@chromium.org Original-Reviewed-on: https://chromium-review.googlesource.com/346219 Original-Tested-by: Shunqian Zheng zhengsq@rock-chips.com --- src/mainboard/google/gru/board.h | 30 ++++++++++++++++++ src/mainboard/google/gru/mainboard.c | 60 ++++++++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+)
diff --git a/src/mainboard/google/gru/board.h b/src/mainboard/google/gru/board.h new file mode 100644 index 0000000..6d80cdf --- /dev/null +++ b/src/mainboard/google/gru/board.h @@ -0,0 +1,30 @@ +/* + * This file is part of the coreboot project. + * + * Copyright 2016 Rockchip Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#ifndef __COREBOOT_SRC_MAINBOARD_GOOGLE_GRU_BOARD_H +#define __COREBOOT_SRC_MAINBOARD_GOOGLE_GRU_BOARD_H + +#include <gpio.h> + +#define GPIO_BACKLIGHT GPIO(1, C, 1) +#define GPIO_EC_IN_RW GPIO(3, B, 0) +#define GPIO_EC_IRQ GPIO(0, A, 1) +#define GPIO_RESET GPIO(0, B, 3) +#define GPIO_WP GPIO(1, C, 2) + +void setup_chromeos_gpios(void); + +#endif /* ! __COREBOOT_SRC_MAINBOARD_GOOGLE_GRU_BOARD_H */ diff --git a/src/mainboard/google/gru/mainboard.c b/src/mainboard/google/gru/mainboard.c index 6824cbf..54443bc 100644 --- a/src/mainboard/google/gru/mainboard.c +++ b/src/mainboard/google/gru/mainboard.c @@ -15,11 +15,17 @@ */
#include <boardid.h> +#include <delay.h> #include <device/device.h> +#include <device/i2c.h> #include <gpio.h> #include <soc/clock.h> +#include <soc/display.h> #include <soc/emmc.h> #include <soc/grf.h> +#include <soc/i2c.h> + +#include "board.h"
static void configure_emmc(void) { @@ -86,10 +92,64 @@ static void configure_sdmmc(void) write32(&rk3399_grf->iomux_sdmmc, IOMUX_SDMMC); }
+static void configure_display(void) +{ + /* set pinmux for edp HPD*/ + gpio_input_pulldown(GPIO(4, C, 7)); + write32(&rk3399_grf->iomux_edp_hotplug, IOMUX_EDP_HOTPLUG); + + gpio_output(GPIO(4, D, 3), 1); /* CPU3_EDP_VDDEN for P3.3V_DISP */ +} + static void mainboard_init(device_t dev) { configure_sdmmc(); configure_emmc(); + configure_display(); +} + +static void enable_backlight_booster(void) +{ + const struct { + uint8_t reg; + uint8_t value; + } i2c_writes[] = { + {1, 0x84}, + {1, 0x85}, + {0, 0x26} + }; + int i; + const int booster_i2c_port = 0; + uint8_t i2c_buf[2]; + struct i2c_seg i2c_command = { .read = 0, .chip = 0x2c, + .buf = i2c_buf, .len = sizeof(i2c_buf) + }; + + /* + * This function is called on Gru right after BL_EN is asserted. It + * takes time for the switcher chip to come online, let's wait a bit + * to let the voltage settle, so that the chip can be accessed. + */ + udelay(1000); + + /* Select pinmux for i2c0, which is the display backlight booster. */ + write32(&rk3399_pmugrf->iomux_i2c0_sda, IOMUX_I2C0_SDA); + write32(&rk3399_pmugrf->iomux_i2c0_scl, IOMUX_I2C0_SCL); + i2c_init(0, 100*KHz); + + for (i = 0; i < ARRAY_SIZE(i2c_writes); i++) { + i2c_buf[0] = i2c_writes[i].reg; + i2c_buf[1] = i2c_writes[i].value; + i2c_transfer(booster_i2c_port, &i2c_command, 1); + } +} + +void mainboard_power_on_backlight(void) +{ + gpio_output(GPIO(1, C, 1), 1); /* BL_EN */ + + if (IS_ENABLED(CONFIG_BOARD_GOOGLE_GRU)) + enable_backlight_booster(); }
static void mainboard_enable(device_t dev)