diff options
author | Christoph Muellner <christoph.muellner@theobroma-systems.com> | 2015-05-04 17:51:10 +0200 |
---|---|---|
committer | Klaus Goger <klaus.goger@theobroma-systems.com> | 2015-07-30 18:52:57 +0200 |
commit | 8086fb77715f68cc6cfa9f2bd48e3f6e09154f84 (patch) | |
tree | 26de6c4b7811cb0df6bf4401e26975934b92c48c | |
parent | b9e372bbfd75f5860ce193669ce1459a86738470 (diff) |
Clk: sunxi: Add support for resetting all gates.
Signed-off-by: Christoph Muellner <christoph.muellner@theobroma-systems.com>
-rw-r--r-- | drivers/clk/sunxi/clk-sunxi.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/clk/sunxi/clk-sunxi.c b/drivers/clk/sunxi/clk-sunxi.c index 95859355c880..b0bae0f2ad23 100644 --- a/drivers/clk/sunxi/clk-sunxi.c +++ b/drivers/clk/sunxi/clk-sunxi.c @@ -904,13 +904,15 @@ static int sunxi_gates_reset_assert(struct reset_controller_dev *rcdev, struct gates_reset_data *data = container_of(rcdev, struct gates_reset_data, rcdev); + int bank = id / BITS_PER_LONG; + int offset = id % BITS_PER_LONG; unsigned long flags; u32 reg; spin_lock_irqsave(data->lock, flags); - reg = readl(data->reg); - writel(reg & ~BIT(id), data->reg); + reg = readl(data->reg + (bank * 4)); + writel(reg & ~BIT(offset), data->reg + (bank * 4)); spin_unlock_irqrestore(data->lock, flags); @@ -923,13 +925,15 @@ static int sunxi_gates_reset_deassert(struct reset_controller_dev *rcdev, struct gates_reset_data *data = container_of(rcdev, struct gates_reset_data, rcdev); + int bank = id / BITS_PER_LONG; + int offset = id % BITS_PER_LONG; unsigned long flags; u32 reg; spin_lock_irqsave(data->lock, flags); - reg = readl(data->reg); - writel(reg | BIT(id), data->reg); + reg = readl(data->reg + (bank * 4)); + writel(reg | BIT(offset), data->reg + (bank * 4)); spin_unlock_irqrestore(data->lock, flags); |