diff options
Diffstat (limited to 'drivers/clk/sunxi-ng/ccu_reset.c')
| -rw-r--r-- | drivers/clk/sunxi-ng/ccu_reset.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/clk/sunxi-ng/ccu_reset.c b/drivers/clk/sunxi-ng/ccu_reset.c index 1dc4e98ea802..b67149143554 100644 --- a/drivers/clk/sunxi-ng/ccu_reset.c +++ b/drivers/clk/sunxi-ng/ccu_reset.c | |||
| @@ -60,8 +60,22 @@ static int ccu_reset_reset(struct reset_controller_dev *rcdev, | |||
| 60 | return 0; | 60 | return 0; |
| 61 | } | 61 | } |
| 62 | 62 | ||
| 63 | static int ccu_reset_status(struct reset_controller_dev *rcdev, | ||
| 64 | unsigned long id) | ||
| 65 | { | ||
| 66 | struct ccu_reset *ccu = rcdev_to_ccu_reset(rcdev); | ||
| 67 | const struct ccu_reset_map *map = &ccu->reset_map[id]; | ||
| 68 | |||
| 69 | /* | ||
| 70 | * The reset control API expects 0 if reset is not asserted, | ||
| 71 | * which is the opposite of what our hardware uses. | ||
| 72 | */ | ||
| 73 | return !(map->bit & readl(ccu->base + map->reg)); | ||
| 74 | } | ||
| 75 | |||
| 63 | const struct reset_control_ops ccu_reset_ops = { | 76 | const struct reset_control_ops ccu_reset_ops = { |
| 64 | .assert = ccu_reset_assert, | 77 | .assert = ccu_reset_assert, |
| 65 | .deassert = ccu_reset_deassert, | 78 | .deassert = ccu_reset_deassert, |
| 66 | .reset = ccu_reset_reset, | 79 | .reset = ccu_reset_reset, |
| 80 | .status = ccu_reset_status, | ||
| 67 | }; | 81 | }; |
