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)