summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph Muellner <christoph.muellner@theobroma-systems.com>2015-05-04 17:51:10 +0200
committerKlaus Goger <klaus.goger@theobroma-systems.com>2015-07-30 18:52:57 +0200
commit8086fb77715f68cc6cfa9f2bd48e3f6e09154f84 (patch)
tree26de6c4b7811cb0df6bf4401e26975934b92c48c
parentb9e372bbfd75f5860ce193669ce1459a86738470 (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.c12
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);