summaryrefslogtreecommitdiff
path: root/drivers/clk/sunxi/clk-sunxi.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/clk/sunxi/clk-sunxi.c')
-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);