@@ -71,6 +71,7 @@ struct i2c_enhance_config {
71
71
/* I2C alternate configuration */
72
72
const struct pinctrl_dev_config * pcfg ;
73
73
uint8_t prescale_scl_low ;
74
+ uint8_t data_hold_time ;
74
75
uint32_t clock_gate_offset ;
75
76
bool target_enable ;
76
77
bool target_pio_mode ;
@@ -1145,6 +1146,7 @@ static int i2c_enhance_init(const struct device *dev)
1145
1146
struct i2c_enhance_data * data = dev -> data ;
1146
1147
const struct i2c_enhance_config * config = dev -> config ;
1147
1148
uint8_t * base = config -> base ;
1149
+ uint8_t data_hold_time = config -> data_hold_time ;
1148
1150
uint32_t bitrate_cfg ;
1149
1151
int error , status ;
1150
1152
@@ -1196,6 +1198,10 @@ static int i2c_enhance_init(const struct device *dev)
1196
1198
(IT8XXX2_SMB_SMB45CHS &= ~GENMASK (6 , 4 ));
1197
1199
}
1198
1200
1201
+ /* Set I2C data hold time. */
1202
+ IT8XXX2_I2C_DHTR (base ) = (IT8XXX2_I2C_DHTR (base ) & ~GENMASK (2 , 0 )) |
1203
+ (data_hold_time - 3 );
1204
+
1199
1205
/* Set clock frequency for I2C ports */
1200
1206
if (config -> bitrate == I2C_BITRATE_STANDARD ||
1201
1207
config -> bitrate == I2C_BITRATE_FAST ||
@@ -1453,6 +1459,7 @@ BUILD_ASSERT(IS_ENABLED(CONFIG_I2C_TARGET_BUFFER_MODE),
1453
1459
.scl_gpios = GPIO_DT_SPEC_INST_GET(inst, scl_gpios), \
1454
1460
.sda_gpios = GPIO_DT_SPEC_INST_GET(inst, sda_gpios), \
1455
1461
.prescale_scl_low = DT_INST_PROP_OR(inst, prescale_scl_low, 0), \
1462
+ .data_hold_time = DT_INST_PROP_OR(inst, data_hold_time, 0), \
1456
1463
.clock_gate_offset = DT_INST_PROP(inst, clock_gate_offset), \
1457
1464
.pcfg = PINCTRL_DT_INST_DEV_CONFIG_GET(inst), \
1458
1465
.target_enable = DT_INST_PROP(inst, target_enable), \
0 commit comments