i2c: npcm: speed set Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/drivers/i2c/busses/i2c-npcm7xx.c b/drivers/i2c/busses/i2c-npcm7xx.c index cf1829f..89b47cc 100644 --- a/drivers/i2c/busses/i2c-npcm7xx.c +++ b/drivers/i2c/busses/i2c-npcm7xx.c
@@ -2477,6 +2477,28 @@ static const struct i2c_algorithm npcm_i2c_algo = { #endif }; +static int npcm_i2c_speed_get(void *data, u64 *val) +{ + struct npcm_i2c *bus = data; + *val = bus->bus_freq; + return 0; +} + +static int npcm_i2c_speed_set(void *data, u64 val) +{ + struct npcm_i2c *bus = data; + int ret; + + if (val == bus->bus_freq) + return 0; + + i2c_lock_bus(&bus->adap, I2C_LOCK_ROOT_ADAPTER); + ret = npcm_i2c_init_module(bus, I2C_MASTER, (u32)val); + i2c_unlock_bus(&bus->adap, I2C_LOCK_ROOT_ADAPTER); + return ret; +} +DEFINE_DEBUGFS_ATTRIBUTE(npcm_i2c_clock_ops, npcm_i2c_speed_get, npcm_i2c_speed_set, "%llu\n"); + static void npcm_i2c_init_debugfs(struct platform_device *pdev, struct npcm_i2c *bus) { @@ -2486,6 +2508,7 @@ static void npcm_i2c_init_debugfs(struct platform_device *pdev, debugfs_create_u64("rec_fail_cnt", 0444, bus->adap.debugfs, &bus->rec_fail_cnt); debugfs_create_u64("timeout_cnt", 0444, bus->adap.debugfs, &bus->timeout_cnt); debugfs_create_u64("tx_complete_cnt", 0444, bus->adap.debugfs, &bus->tx_complete_cnt); + debugfs_create_file("i2c_speed", 0644, bus->adap.debugfs, bus, &npcm_i2c_clock_ops); } static int npcm_i2c_probe_bus(struct platform_device *pdev)