mb/google/octopus: update phaser touchscreen enable gpio
The next build for phaser swapped the gpio for the touchscreen enable. In order to support previous builds the devicetree needs to be updated at runtime based on board revision id. BUG=b:111808427,b:111743717 TEST=built Change-Id: I45ef05ea0b991d04d5bf410cd7a175913bf0bf5d Signed-off-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: https://review.coreboot.org/27638 Reviewed-by: Justin TerAvest <teravest@chromium.org> Reviewed-by: Furquan Shaikh <furquan@google.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
2fcc034705
commit
e7f4780137
|
@ -0,0 +1 @@
|
|||
ramstage-y += variant.c
|
|
@ -0,0 +1,73 @@
|
|||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright 2018 Google LLC.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include <arch/acpi_device.h>
|
||||
#include <baseboard/variants.h>
|
||||
#include <boardid.h>
|
||||
#include <device/device.h>
|
||||
#include <drivers/i2c/generic/chip.h>
|
||||
#include <drivers/i2c/hid/chip.h>
|
||||
#include <soc/gpio.h>
|
||||
#include <soc/pci_devs.h>
|
||||
#include <string.h>
|
||||
|
||||
extern struct chip_operations drivers_i2c_generic_ops;
|
||||
extern struct chip_operations drivers_i2c_hid_ops;
|
||||
|
||||
void variant_update_devtree(struct device *dev)
|
||||
{
|
||||
uint32_t bid;
|
||||
struct device *touchscreen_i2c_host;
|
||||
struct device *child;
|
||||
const struct bus *children_bus;
|
||||
static const struct acpi_gpio new_enable_gpio =
|
||||
ACPI_GPIO_OUTPUT_ACTIVE_HIGH(GPIO_146);
|
||||
|
||||
bid = board_id();
|
||||
|
||||
/* Nothing to update. */
|
||||
if (bid == UNDEFINED_STRAPPING_ID || bid < 1)
|
||||
return;
|
||||
|
||||
touchscreen_i2c_host = dev_find_slot(0, PCH_DEVFN_I2C7);
|
||||
|
||||
if (touchscreen_i2c_host == NULL)
|
||||
return;
|
||||
|
||||
children_bus = touchscreen_i2c_host->link_list;
|
||||
child = NULL;
|
||||
|
||||
/* Find all children on bus to update touchscreen enable gpio. */
|
||||
while ((child = dev_bus_each_child(children_bus, child)) != NULL) {
|
||||
struct drivers_i2c_generic_config *cfg;
|
||||
|
||||
/* No configration to change. */
|
||||
if (child->chip_info == NULL)
|
||||
continue;
|
||||
|
||||
if (child->chip_ops == &drivers_i2c_generic_ops)
|
||||
cfg = child->chip_info;
|
||||
else if (child->chip_ops == &drivers_i2c_hid_ops) {
|
||||
struct drivers_i2c_hid_config *hid_cfg;
|
||||
hid_cfg = child->chip_info;
|
||||
cfg = &hid_cfg->generic;
|
||||
} else
|
||||
continue;
|
||||
|
||||
/* Update the enable gpio. */
|
||||
memcpy(&cfg->enable_gpio, &new_enable_gpio,
|
||||
sizeof(new_enable_gpio));
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue