mb/google/dedede/drawcia: Add CFR option for touchscreen selection
The i2c auto-detection fails to find a touchscreen on Drawcia, so create a user-selectable CFR option instead, with the default being all enabled. This allows Linux to probe and detect the correct device, and Windows users to select the appropriate selection. Change-Id: I2e4a760b7d6c9b1546418630f75538adccdcf8e1 Signed-off-by: Matt DeVillier <matt.devillier@gmail.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/90349 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Jason Glenesk <jason.glenesk@gmail.com>
This commit is contained in:
parent
1890c6d165
commit
7a78543eca
3 changed files with 79 additions and 10 deletions
|
|
@ -6,6 +6,24 @@
|
|||
#include <intelblocks/cfr.h>
|
||||
#include <soc/cfr.h>
|
||||
|
||||
static const struct sm_object touchscreen = SM_DECLARE_ENUM({
|
||||
.opt_name = "touchscreen",
|
||||
.ui_name = "Touchscreen Type",
|
||||
.ui_helptext = "Select the model of the integrated touchscreen device",
|
||||
.default_value = 0,
|
||||
.values = (const struct sm_enum_value[]) {
|
||||
{ "Auto-select", 0 },
|
||||
{ "ELAN0001", 1 },
|
||||
{ "GTCH7503", 2 },
|
||||
{ "GDIX0000", 3 },
|
||||
{ "ELAN2513", 4 },
|
||||
{ "WDHT0002", 5 },
|
||||
SM_ENUM_VALUE_END },
|
||||
#if !CONFIG(BOARD_GOOGLE_DRAWCIA)
|
||||
.flags = CFR_OPTFLAG_SUPPRESS,
|
||||
#endif
|
||||
});
|
||||
|
||||
static struct sm_obj_form system = {
|
||||
.ui_name = "System",
|
||||
.obj_list = (const struct sm_object *[]) {
|
||||
|
|
@ -32,8 +50,17 @@ static struct sm_obj_form ec = {
|
|||
},
|
||||
};
|
||||
|
||||
static struct sm_obj_form devices = {
|
||||
.ui_name = "Devices",
|
||||
.obj_list = (const struct sm_object *[]) {
|
||||
&touchscreen,
|
||||
NULL
|
||||
},
|
||||
};
|
||||
|
||||
static struct sm_obj_form *sm_root[] = {
|
||||
&system,
|
||||
&devices,
|
||||
&ec,
|
||||
NULL
|
||||
};
|
||||
|
|
|
|||
|
|
@ -231,32 +231,29 @@ chip soc/intel/jasperlake
|
|||
register "hid" = ""ELAN0001""
|
||||
register "desc" = ""ELAN Touchscreen""
|
||||
register "irq" = "ACPI_IRQ_LEVEL_LOW(GPP_D4_IRQ)"
|
||||
register "detect" = "1"
|
||||
register "reset_gpio" = "ACPI_GPIO_OUTPUT_ACTIVE_HIGH(GPP_D5)"
|
||||
register "reset_delay_ms" = "20"
|
||||
register "enable_gpio" = "ACPI_GPIO_OUTPUT_ACTIVE_HIGH(GPP_D6)"
|
||||
register "enable_delay_ms" = "1"
|
||||
register "has_power_resource" = "true"
|
||||
device i2c 10 on end
|
||||
device i2c 10 alias elan0001 on end
|
||||
end
|
||||
chip drivers/i2c/hid
|
||||
register "generic.hid" = ""GTCH7503""
|
||||
register "generic.desc" = ""G2TOUCH Touchscreen""
|
||||
register "generic.irq" = "ACPI_IRQ_LEVEL_LOW(GPP_D4_IRQ)"
|
||||
register "generic.detect" = "1"
|
||||
register "generic.reset_gpio" = "ACPI_GPIO_OUTPUT_ACTIVE_HIGH(GPP_D5)"
|
||||
register "generic.reset_delay_ms" = "50"
|
||||
register "generic.enable_gpio" = "ACPI_GPIO_OUTPUT_ACTIVE_HIGH(GPP_D6)"
|
||||
register "generic.enable_delay_ms" = "1"
|
||||
register "generic.has_power_resource" = "1"
|
||||
register "hid_desc_reg_offset" = "0x01"
|
||||
device i2c 40 on end
|
||||
device i2c 40 alias gtch7503 on end
|
||||
end
|
||||
chip drivers/i2c/hid
|
||||
register "generic.hid" = ""GDIX0000""
|
||||
register "generic.desc" = ""Goodix Touchscreen""
|
||||
register "generic.irq" = "ACPI_IRQ_LEVEL_LOW(GPP_D4_IRQ)"
|
||||
register "generic.detect" = "1"
|
||||
register "generic.reset_gpio" = "ACPI_GPIO_OUTPUT_ACTIVE_HIGH(GPP_D5)"
|
||||
register "generic.reset_delay_ms" = "120"
|
||||
register "generic.reset_off_delay_ms" = "2"
|
||||
|
|
@ -264,13 +261,12 @@ chip soc/intel/jasperlake
|
|||
register "generic.enable_delay_ms" = "12"
|
||||
register "generic.has_power_resource" = "1"
|
||||
register "hid_desc_reg_offset" = "0x01"
|
||||
device i2c 0x5d on end
|
||||
device i2c 0x5d alias gdix0000 on end
|
||||
end
|
||||
chip drivers/i2c/hid
|
||||
register "generic.hid" = ""ELAN2513""
|
||||
register "generic.desc" = ""ELAN Touchscreen""
|
||||
register "generic.irq" = "ACPI_IRQ_LEVEL_LOW(GPP_D4_IRQ)"
|
||||
register "generic.detect" = "1"
|
||||
register "generic.reset_gpio" = "ACPI_GPIO_OUTPUT_ACTIVE_HIGH(GPP_D5)"
|
||||
register "generic.reset_delay_ms" = "20"
|
||||
register "generic.reset_off_delay_ms" = "2"
|
||||
|
|
@ -280,20 +276,19 @@ chip soc/intel/jasperlake
|
|||
register "generic.stop_delay_ms" = "130"
|
||||
register "generic.has_power_resource" = "1"
|
||||
register "hid_desc_reg_offset" = "0x01"
|
||||
device i2c 15 on end
|
||||
device i2c 15 alias elan2513 on end
|
||||
end
|
||||
chip drivers/i2c/hid
|
||||
register "generic.hid" = ""WDHT0002""
|
||||
register "generic.desc" = ""WDT Touchscreen""
|
||||
register "generic.irq" = "ACPI_IRQ_LEVEL_LOW(GPP_D4_IRQ)"
|
||||
register "generic.detect" = "1"
|
||||
register "generic.reset_gpio" = "ACPI_GPIO_OUTPUT_ACTIVE_HIGH(GPP_D5)"
|
||||
register "generic.reset_delay_ms" = "130"
|
||||
register "generic.enable_gpio" = "ACPI_GPIO_OUTPUT_ACTIVE_HIGH(GPP_D6)"
|
||||
register "generic.enable_delay_ms" = "10"
|
||||
register "generic.has_power_resource" = "1"
|
||||
register "hid_desc_reg_offset" = "0x20"
|
||||
device i2c 2c on end
|
||||
device i2c 2c alias wdht0002 on end
|
||||
end
|
||||
end # I2C 2
|
||||
device pci 15.3 on
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
#include <device/device.h>
|
||||
#include <drivers/usb/acpi/chip.h>
|
||||
#include <fw_config.h>
|
||||
#include <option.h>
|
||||
#include <soc/soc_chip.h>
|
||||
#include <static.h>
|
||||
|
||||
|
|
@ -28,9 +29,21 @@ static void update_lte_device_drawcia(void)
|
|||
config->reset_gpio = lte_reset_gpio;
|
||||
}
|
||||
|
||||
#define TS_TYPE_AUTO_SELECT 0
|
||||
#define TS_TYPE_ELAN0001 0
|
||||
#define TS_TYPE_GTCH7503 1
|
||||
#define TS_TYPE_GDIX0000 2
|
||||
#define TS_TYPE_ELAN2513 3
|
||||
#define TS_TYPE_WDHT0002 4
|
||||
|
||||
void variant_devtree_update(void)
|
||||
{
|
||||
uint32_t board_version = board_id();
|
||||
struct device *ts_elan0001 = DEV_PTR(elan0001);
|
||||
struct device *ts_gtch7503 = DEV_PTR(gtch7503);
|
||||
struct device *ts_gdix0000 = DEV_PTR(gdix0000);
|
||||
struct device *ts_elan2513 = DEV_PTR(elan2513);
|
||||
struct device *ts_wdht0002 = DEV_PTR(wdht0002);
|
||||
|
||||
/* Remove power IC after board version 0xb for Draw* and Oscino units */
|
||||
if (board_version > 0xb)
|
||||
|
|
@ -38,4 +51,38 @@ void variant_devtree_update(void)
|
|||
/* Board version 0xa, 0xb and 0xf are for Drawper units */
|
||||
if (board_version != 0xa && board_version != 0xb && board_version != 0xf)
|
||||
update_lte_device_drawcia();
|
||||
|
||||
/* Update touchscreen device */
|
||||
switch (get_uint_option("touchscreen", TS_TYPE_AUTO_SELECT)) {
|
||||
case TS_TYPE_ELAN0001:
|
||||
ts_gtch7503->enabled = 0;
|
||||
ts_gdix0000->enabled = 0;
|
||||
ts_elan2513->enabled = 0;
|
||||
ts_wdht0002->enabled = 0;
|
||||
break;
|
||||
case TS_TYPE_GTCH7503:
|
||||
ts_elan0001->enabled = 0;
|
||||
ts_gdix0000->enabled = 0;
|
||||
ts_elan2513->enabled = 0;
|
||||
ts_wdht0002->enabled = 0;
|
||||
break;
|
||||
case TS_TYPE_GDIX0000:
|
||||
ts_elan0001->enabled = 0;
|
||||
ts_gtch7503->enabled = 0;
|
||||
ts_elan2513->enabled = 0;
|
||||
ts_wdht0002->enabled = 0;
|
||||
break;
|
||||
case TS_TYPE_ELAN2513:
|
||||
ts_elan0001->enabled = 0;
|
||||
ts_gtch7503->enabled = 0;
|
||||
ts_gdix0000->enabled = 0;
|
||||
ts_wdht0002->enabled = 0;
|
||||
break;
|
||||
case TS_TYPE_WDHT0002:
|
||||
ts_elan0001->enabled = 0;
|
||||
ts_gtch7503->enabled = 0;
|
||||
ts_gdix0000->enabled = 0;
|
||||
ts_elan2513->enabled = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue