diff options
-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); |