summaryrefslogtreecommitdiff
path: root/drivers/i2c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/i2c')
-rw-r--r--drivers/i2c/busses/i2c-tegra.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c
index 10fdc96a338c..311612580676 100644
--- a/drivers/i2c/busses/i2c-tegra.c
+++ b/drivers/i2c/busses/i2c-tegra.c
@@ -100,6 +100,16 @@
#define I2C_HEADER_MASTER_ADDR_SHIFT 12
#define I2C_HEADER_SLAVE_ADDR_SHIFT 1
+struct tegra_i2c_dev;
+
+struct tegra_i2c_bus {
+ struct tegra_i2c_dev *dev;
+ const struct tegra_pingroup_config *mux;
+ int mux_len;
+ unsigned long bus_clk_rate;
+ struct i2c_adapter adapter;
+};
+
/**
* struct tegra_i2c_dev - per device i2c context
* @dev: device reference for power management
@@ -143,14 +153,6 @@ struct tegra_i2c_dev {
struct tegra_i2c_bus busses[1];
};
-struct tegra_i2c_bus {
- struct tegra_i2c_dev *dev;
- const struct tegra_pingroup_config *mux;
- int mux_len;
- unsigned long bus_clk_rate;
- struct i2c_adapter adapter;
-};
-
static void dvc_writel(struct tegra_i2c_dev *i2c_dev, u32 val, unsigned long reg)
{
writel(val, i2c_dev->base + reg);
@@ -562,9 +564,9 @@ static int tegra_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[],
i2c_dev->last_mux_len = i2c_bus->mux_len;
}
- if (i2c_dev->last_bus_clk != i2c_bus->bus_clk_rate) {
- tegra_i2c_set_clk(i2c_dev, i2c_bus->bus_clk_rate);
- i2c_dev->last_bus_clk = i2c_bus->bus_clk_rate;
+ if (i2c_dev->last_bus_clk_rate != i2c_bus->bus_clk_rate) {
+ clk_set_rate(i2c_dev, i2c_bus->bus_clk_rate * 8);
+ i2c_dev->last_bus_clk_rate = i2c_bus->bus_clk_rate;
}
clk_enable(i2c_dev->clk);