Skip to content

Commit 3da552b

Browse files
ck-telecomnashif
authored andcommitted
drivers: i2c: sf32lb: add get_config() support
Add get_config() support for sf32lb Signed-off-by: Qingsong Gou <[email protected]>
1 parent 2216992 commit 3da552b

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

drivers/i2c/i2c_sf32lb.c

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,33 @@ static int i2c_sf32lb_configure(const struct device *dev, uint32_t dev_config)
235235
return 0;
236236
}
237237

238+
static int i2c_sf32lb_get_config(const struct device *dev, uint32_t *dev_config)
239+
{
240+
const struct i2c_sf32lb_config *cfg = dev->config;
241+
uint32_t cr = sys_read32(cfg->base + I2C_CR);
242+
243+
*dev_config = I2C_MODE_CONTROLLER;
244+
245+
switch (FIELD_GET(I2C_CR_MODE_Msk, cr)) {
246+
case I2C_MODE_STD:
247+
*dev_config |= I2C_SPEED_SET(I2C_SPEED_STANDARD);
248+
break;
249+
case I2C_MODE_FS:
250+
*dev_config |= I2C_SPEED_SET(I2C_SPEED_FAST);
251+
break;
252+
case I2C_MODE_HS_STD:
253+
*dev_config |= I2C_SPEED_SET(I2C_SPEED_FAST_PLUS);
254+
break;
255+
case I2C_MODE_HS_FS:
256+
*dev_config |= I2C_SPEED_SET(I2C_SPEED_HIGH);
257+
break;
258+
default:
259+
return -ERANGE;
260+
}
261+
262+
return 0;
263+
}
264+
238265
static int i2c_sf32lb_transfer(const struct device *dev, struct i2c_msg *msgs, uint8_t num_msgs,
239266
uint16_t addr)
240267
{
@@ -293,6 +320,7 @@ static int i2c_sf32lb_recover_bus(const struct device *dev)
293320

294321
static DEVICE_API(i2c, i2c_sf32lb_driver_api) = {
295322
.configure = i2c_sf32lb_configure,
323+
.get_config = i2c_sf32lb_get_config,
296324
.transfer = i2c_sf32lb_transfer,
297325
.recover_bus = i2c_sf32lb_recover_bus,
298326
};

0 commit comments

Comments
 (0)