diff --git a/src/soc/intel/pantherlake/include/soc/touch.h b/src/soc/intel/pantherlake/include/soc/touch.h index 33b3d1db2e..c954437fa8 100644 --- a/src/soc/intel/pantherlake/include/soc/touch.h +++ b/src/soc/intel/pantherlake/include/soc/touch.h @@ -3,6 +3,8 @@ #ifndef _SOC_PANTHERLAKE_TOUCH_H_ #define _SOC_PANTHERLAKE_TOUCH_H_ +#include + /* For THC-I2C: */ /* @@ -54,8 +56,8 @@ /* unit: ms */ #define SOC_PTL_THC_RST_SEQ_DLY 300 -/* The initial default speed is 17000000 Hz. */ -#define SOC_PTL_THC_CONNECTION_SPEED 17000000 +/* The initial default speed is 17 MHz. */ +#define SOC_PTL_THC_SPI_CONNECTION_SPEED (17 * MHz) /* 0 = no limit */ #define SOC_PTL_THC_HIDSPI_LIMIT_PKT_SZ 0 diff --git a/src/soc/intel/pantherlake/touch.c b/src/soc/intel/pantherlake/touch.c index ed475fe837..f09bd43187 100644 --- a/src/soc/intel/pantherlake/touch.c +++ b/src/soc/intel/pantherlake/touch.c @@ -3,11 +3,29 @@ #include #include +/* Convert I2C speed into value for the register in SoC */ +static uint64_t get_soc_thc_i2c_bus_freq_val(uint32_t speed) +{ + switch (speed) { + case I2C_SPEED_FAST_PLUS: + return SOC_PTL_THC_I2C_CONNECTION_SPEED_FMP; + case I2C_SPEED_FAST: + return SOC_PTL_THC_I2C_CONNECTION_SPEED_FM; + case I2C_SPEED_STANDARD: + return SOC_PTL_THC_I2C_CONNECTION_SPEED_SM; + case 0: /* If not specified in the device tree, SoC, and device, standard speed is used */ + return SOC_PTL_THC_I2C_CONNECTION_SPEED_SM; + default: + die("Fail to map %d Hz to proper I2C speed.\n", speed); + } +} + /* SoC-specific THC-I2C config */ const struct intel_thc_hidi2c_info *soc_get_thc_hidi2c_info(void) { static const struct intel_thc_hidi2c_info soc_thc_hidi2c_info = { - .connection_speed = SOC_PTL_THC_I2C_CONNECTION_SPEED_FM, + .connection_speed = I2C_SPEED_FAST, /* 400KHz */ + .get_soc_i2c_bus_speed_val_func = get_soc_thc_i2c_bus_freq_val, .addr_mode = SOC_PTL_THC_I2C_ADDR_MODE, .sm_scl_high_period = SOC_PTL_THC_I2C_SM_SCL_HIGH_PERIOD, .sm_scl_low_period = SOC_PTL_THC_I2C_SM_SCL_LOW_PERIOD, @@ -35,7 +53,7 @@ const struct intel_thc_hidi2c_info *soc_get_thc_hidi2c_info(void) const struct intel_thc_hidspi_info *soc_get_thc_hidspi_info(void) { static const struct intel_thc_hidspi_info soc_thc_hidspi_info = { - .connection_speed = SOC_PTL_THC_CONNECTION_SPEED, + .connection_speed = SOC_PTL_THC_SPI_CONNECTION_SPEED, .write_mode = HIDSPI_WRITE_MODE_MULTI_SINGLE_SPI, .limit_packet_size = SOC_PTL_THC_HIDSPI_LIMIT_PKT_SZ, .performance_limit = SOC_PTL_THC_PERFORMANCE_LIMIT,