clk: sunxi-ng: Implement reset control status readback
authorChen-Yu Tsai <wens@csie.org>
Tue, 26 Sep 2017 02:36:20 +0000 (10:36 +0800)
committerMaxime Ripard <maxime.ripard@free-electrons.com>
Tue, 26 Sep 2017 09:13:03 +0000 (11:13 +0200)
Until now we were not providing a way to read back the status of our
reset controls. Consumers had no real way to be certain whether a
peripheral was held in reset or not.

Implement the status callback to complete the API support.

Fixes: 1d80c14248d6 ("clk: sunxi-ng: Add common infrastructure")
Signed-off-by: Chen-Yu Tsai <wens@csie.org>
Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
drivers/clk/sunxi-ng/ccu_reset.c

index 1dc4e98..b671491 100644 (file)
@@ -60,8 +60,22 @@ static int ccu_reset_reset(struct reset_controller_dev *rcdev,
        return 0;
 }
 
+static int ccu_reset_status(struct reset_controller_dev *rcdev,
+                           unsigned long id)
+{
+       struct ccu_reset *ccu = rcdev_to_ccu_reset(rcdev);
+       const struct ccu_reset_map *map = &ccu->reset_map[id];
+
+       /*
+        * The reset control API expects 0 if reset is not asserted,
+        * which is the opposite of what our hardware uses.
+        */
+       return !(map->bit & readl(ccu->base + map->reg));
+}
+
 const struct reset_control_ops ccu_reset_ops = {
        .assert         = ccu_reset_assert,
        .deassert       = ccu_reset_deassert,
        .reset          = ccu_reset_reset,
+       .status         = ccu_reset_status,
 };