Attention is currently required from: Tarun Tuli, Jason Nien, Martin Roth.
Victor Ding has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/69192 )
Change subject: drivers/i2c/sx9324: Add support for Linux's SX9324 driver ......................................................................
drivers/i2c/sx9324: Add support for Linux's SX9324 driver
SX9324 driver is updated per Linux's documentation found at https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Docu...
Supporting logic for the deprecated SX932x driver is hence guarded by DRIVERS_I2C_SX9324_SUPPORT_LEGACY_LINUX_DRIVER
This patch by itself does not introduce functional changes to any board.
BUG=b:242662878 TEST=Dump ACPI SSDT then verify they are identical w/ and w/o this patch
Change-Id: I42cd6841c3a270c242ed2e739db245e858eadb3b --- M src/drivers/i2c/sx9324/Kconfig M src/drivers/i2c/sx9324/chip.h M src/drivers/i2c/sx9324/registers.h M src/drivers/i2c/sx9324/sx9324.c M src/mainboard/google/brya/Kconfig.name M src/mainboard/google/dedede/Kconfig.name M src/mainboard/google/zork/Kconfig.name 7 files changed, 199 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/92/69192/1
diff --git a/src/drivers/i2c/sx9324/Kconfig b/src/drivers/i2c/sx9324/Kconfig index 77f6967..de44082 100644 --- a/src/drivers/i2c/sx9324/Kconfig +++ b/src/drivers/i2c/sx9324/Kconfig @@ -4,3 +4,10 @@ depends on HAVE_ACPI_TABLES help Board has a Semtech SX9324 proximity sensor. + +config DRIVERS_I2C_SX9324_SUPPORT_LEGACY_LINUX_DRIVER + bool + default n + depends on DRIVERS_I2C_SX9324 + help + Board may use the legacy sx932x linux driver. diff --git a/src/drivers/i2c/sx9324/chip.h b/src/drivers/i2c/sx9324/chip.h index 9c9dd3c..1d646bc 100644 --- a/src/drivers/i2c/sx9324/chip.h +++ b/src/drivers/i2c/sx9324/chip.h @@ -23,7 +23,148 @@
/* IO-APIC interrupt */ struct acpi_irq irq; + + /* + semtech,ph0-pin: + description: | + Array of 3 entries. Index represent the id of the CS pin. + Value indicates how each CS pin is used during phase 0. + Each of the 3 pins have the following value - + 0 : unused (high impedance) + 1 : measured input + 2 : dynamic shield + 3 : grounded. + For instance, CS0 measured, CS1 shield and CS2 ground is [1, 2, 3] + items: + enum: [ 0, 1, 2, 3 ] + minItems: 3 + maxItems: 3 + */ + uint64_t ph0_pin[3]; + + /* + semtech,ph1-pin: + Same as ph0-pin for phase 1. + */ + uint64_t ph1_pin[3]; + + /* + semtech,ph2-pin: + Same as ph0-pin for phase 2. + */ + uint64_t ph2_pin[3]; + + /* + semtech,ph3-pin: + Same as ph0-pin for phase 3. + */ + uint64_t ph3_pin[3]; + + /* + semtech,ph01-resolution: + enum: [8, 16, 32, 64, 128, 256, 512, 1024] + description: + Capacitance measurement resolution. For phase 0 and 1. + Higher the number, higher the resolution. + default: 128 + */ + uint64_t ph01_resolution; + + /* + semtech,ph23-resolution: + Same as ph01-resolution for phase 2 and 3. + */ + uint64_t ph23_resolution; + + /* + semtech,startup-sensor: + enum: [0, 1, 2, 3] + default: 0 + description: | + Phase used for start-up proximity detection. + It is used when we enable a phase to remove static offset and measure + only capacitance changes introduced by the user. + */ + uint64_t startup_sensor; + + /* + semtech,ph01-proxraw-strength: + minimum: 0 + maximum: 7 + default: 1 + description: + PROXRAW filter strength for phase 0 and 1. A value of 0 represents off, + and other values represent 1-1/2^N. + */ + uint64_t ph01_proxraw_strength; + + /* + semtech,ph23-proxraw-strength: + Same as proxraw-strength01, for phase 2 and 3. + */ + uint64_t ph23_proxraw_strength; + + /* + semtech,avg-pos-strength: + enum: [0, 16, 64, 128, 256, 512, 1024, 4294967295] + default: 16 + description: | + Average positive filter strength. A value of 0 represents off and + UINT_MAX (4294967295) represents infinite. Other values + represent 1-1/N. + */ + uint64_t avg_pos_strength; + + /* + semtech,cs-idle-sleep: + description: + State of CS pins during sleep mode and idle time. + enum: + - hi-z + - gnd + - vdd + */ + const char* cs_idle_sleep; + + /* + semtech,int-comp-resistor: + description: + Internal resistor setting for compensation. + enum: + - lowest + - low + - high + - highest + */ + const char* int_comp_resistor; + + /* + semtech,input-precharge-resistor-ohms: + default: 4000 + multipleOf: 2000 + minimum: 0 + maximum: 30000 + description: + Pre-charge input resistance in Ohm. + */ + uint64_t input_precharge_resistor_ohms; + + /* + semtech,input-analog-gain: + minimum: 0 + maximum: 3 + description: | + Defines the input antenna analog gain + 0: x1.247 + 1: x1 (default) + 2: x0.768 + 3: x0.552 + */ + uint64_t input_analog_gain; + +#if CONFIG_DRIVERS_I2C_SX9324_SUPPORT_LEGACY_LINUX_DRIVER #include "registers.h" +#endif };
#undef REGISTER diff --git a/src/drivers/i2c/sx9324/registers.h b/src/drivers/i2c/sx9324/registers.h index 2e22572..29b08eb 100644 --- a/src/drivers/i2c/sx9324/registers.h +++ b/src/drivers/i2c/sx9324/registers.h @@ -4,6 +4,10 @@ #error "define REGISTER(NAME) before including this file" #endif
+#if !CONFIG_DRIVERS_I2C_SX9324_SUPPORT_LEGACY_LINUX_DRIVER +#error "This file is only to support the legacy sx932x linux driver" +#endif + REGISTER(reg_adv_ctrl0); REGISTER(reg_adv_ctrl1); REGISTER(reg_adv_ctrl2); diff --git a/src/drivers/i2c/sx9324/sx9324.c b/src/drivers/i2c/sx9324/sx9324.c index 2ca9f36..3380a5e 100644 --- a/src/drivers/i2c/sx9324/sx9324.c +++ b/src/drivers/i2c/sx9324/sx9324.c @@ -56,7 +56,23 @@
/* DSD */ dsd = acpi_dp_new_table("_DSD"); + acpi_dp_add_integer_array(dsd, "semtech,ph0-pin", config->ph0_pin, ARRAY_SIZE(config->ph0_pin)); + acpi_dp_add_integer_array(dsd, "semtech,ph1-pin", config->ph1_pin, ARRAY_SIZE(config->ph1_pin)); + acpi_dp_add_integer_array(dsd, "semtech,ph2-pin", config->ph2_pin, ARRAY_SIZE(config->ph2_pin)); + acpi_dp_add_integer_array(dsd, "semtech,ph3-pin", config->ph3_pin, ARRAY_SIZE(config->ph3_pin)); + acpi_dp_add_integer(dsd, "semtech,ph01-resolution", config->ph01_resolution); + acpi_dp_add_integer(dsd, "semtech,ph23-resolution", config->ph23_resolution); + acpi_dp_add_integer(dsd, "semtech,startup-sensor", config->startup_sensor); + acpi_dp_add_integer(dsd, "semtech,ph01-proxraw-strength", config->ph01_proxraw_strength); + acpi_dp_add_integer(dsd, "semtech,ph23-proxraw-strength", config->ph23_proxraw_strength); + acpi_dp_add_integer(dsd, "semtech,avg-pos-strength", config->avg_pos_strength); + acpi_dp_add_integer(dsd, "semtech,input-precharge-resistor-ohms", config->input_precharge_resistor_ohms); + acpi_dp_add_integer(dsd, "semtech,input-analog-gain", config->input_analog_gain); + acpi_dp_add_string(dsd, "semtech,cs-idle-sleep", config->cs_idle_sleep); + acpi_dp_add_string(dsd, "semtech,int-comp-resistor", config->cs_idle_sleep); +#if CONFIG_DRIVERS_I2C_SX9324_SUPPORT_LEGACY_LINUX_DRIVER #include "registers.h" +#endif acpi_dp_write(dsd);
acpigen_pop_len(); /* Device */ diff --git a/src/mainboard/google/brya/Kconfig.name b/src/mainboard/google/brya/Kconfig.name index 4b34e7b..1e277a7 100644 --- a/src/mainboard/google/brya/Kconfig.name +++ b/src/mainboard/google/brya/Kconfig.name @@ -40,6 +40,7 @@ select SOC_INTEL_RAPTORLAKE select DRIVERS_GENESYSLOGIC_GL9755 select DRIVERS_I2C_SX9324 + select DRIVERS_I2C_SX9324_SUPPORT_LEGACY_LINUX_DRIVER select DRIVERS_INTEL_MIPI_CAMERA select SOC_INTEL_COMMON_BLOCK_IPU select SOC_INTEL_CRASHLOG @@ -85,6 +86,7 @@ select DRIVERS_GENERIC_GPIO_KEYS select DRIVERS_GENESYSLOGIC_GL9750 select DRIVERS_I2C_SX9324 + select DRIVERS_I2C_SX9324_SUPPORT_LEGACY_LINUX_DRIVER select DRIVERS_INTEL_MIPI_CAMERA select HAVE_WWAN_POWER_SEQUENCE
@@ -139,6 +141,7 @@ select DRIVERS_GENESYSLOGIC_GL9755 select DRIVERS_INTEL_MIPI_CAMERA select DRIVERS_I2C_SX9324 + select DRIVERS_I2C_SX9324_SUPPORT_LEGACY_LINUX_DRIVER select SOC_INTEL_COMMON_BLOCK_IPU
config BOARD_GOOGLE_SKOLAS4ES @@ -147,6 +150,7 @@ select DRIVERS_GENESYSLOGIC_GL9755 select DRIVERS_INTEL_MIPI_CAMERA select DRIVERS_I2C_SX9324 + select DRIVERS_I2C_SX9324_SUPPORT_LEGACY_LINUX_DRIVER select SOC_INTEL_COMMON_BLOCK_IPU
config BOARD_GOOGLE_TAEKO @@ -257,6 +261,7 @@ select DRIVERS_GENERIC_GPIO_KEYS select DRIVERS_GENESYSLOGIC_GL9750 select DRIVERS_I2C_SX9324 + select DRIVERS_I2C_SX9324_SUPPORT_LEGACY_LINUX_DRIVER select HAVE_WWAN_POWER_SEQUENCE
config BOARD_GOOGLE_XIVU diff --git a/src/mainboard/google/dedede/Kconfig.name b/src/mainboard/google/dedede/Kconfig.name index 45cc117..4f2fa04 100644 --- a/src/mainboard/google/dedede/Kconfig.name +++ b/src/mainboard/google/dedede/Kconfig.name @@ -5,6 +5,7 @@ select BOARD_GOOGLE_BASEBOARD_DEDEDE_CR50 select BASEBOARD_DEDEDE_LAPTOP select DRIVERS_I2C_SX9324 + select DRIVERS_I2C_SX9324_SUPPORT_LEGACY_LINUX_DRIVER select GEO_SAR_ENABLE if CHROMEOS_WIFI_SAR
config BOARD_GOOGLE_DEDEDE @@ -108,6 +109,7 @@ select BOARD_GOOGLE_BASEBOARD_DEDEDE_CR50 select BASEBOARD_DEDEDE_LAPTOP select DRIVERS_I2C_SX9324 + select DRIVERS_I2C_SX9324_SUPPORT_LEGACY_LINUX_DRIVER select DRIVERS_INTEL_MIPI_CAMERA select SOC_INTEL_COMMON_BLOCK_IPU select GEO_SAR_ENABLE if CHROMEOS_WIFI_SAR @@ -124,6 +126,7 @@ select BASEBOARD_DEDEDE_LAPTOP select DRIVERS_GENERIC_MAX98357A select DRIVERS_I2C_SX9324 + select DRIVERS_I2C_SX9324_SUPPORT_LEGACY_LINUX_DRIVER select GEO_SAR_ENABLE if CHROMEOS_WIFI_SAR
config BOARD_GOOGLE_BLIPPER @@ -177,6 +180,7 @@ select BOARD_GOOGLE_BASEBOARD_DEDEDE_TPM2 select BASEBOARD_DEDEDE_LAPTOP select DRIVERS_I2C_SX9324 + select DRIVERS_I2C_SX9324_SUPPORT_LEGACY_LINUX_DRIVER select GEO_SAR_ENABLE if CHROMEOS_WIFI_SAR
config BOARD_GOOGLE_BEADRIX @@ -185,6 +189,7 @@ select BASEBOARD_DEDEDE_LAPTOP select DRIVERS_GENERIC_MAX98357A select DRIVERS_I2C_SX9324 + select DRIVERS_I2C_SX9324_SUPPORT_LEGACY_LINUX_DRIVER
config BOARD_GOOGLE_SHOTZO bool "-> Shotzo" diff --git a/src/mainboard/google/zork/Kconfig.name b/src/mainboard/google/zork/Kconfig.name index 7ba518a..4e6cfc5 100644 --- a/src/mainboard/google/zork/Kconfig.name +++ b/src/mainboard/google/zork/Kconfig.name @@ -8,6 +8,7 @@ bool "-> Vilboz (Lenovo 100e/300e Gen3 AMD)" select BOARD_GOOGLE_BASEBOARD_DALBOZ select DRIVERS_I2C_SX9324 + select DRIVERS_I2C_SX9324_SUPPORT_LEGACY_LINUX_DRIVER
config BOARD_GOOGLE_EZKINIL bool "-> Ezkinil (Acer Chromebook Spin 514)"