#include "reset.h"
 
-static int mtk_reset_assert(struct reset_controller_dev *rcdev,
-                           unsigned long id)
+static int mtk_reset_update(struct reset_controller_dev *rcdev,
+                           unsigned long id, bool deassert)
 {
        struct mtk_reset *data = container_of(rcdev, struct mtk_reset, rcdev);
+       unsigned int val = deassert ? 0 : ~0;
 
        return regmap_update_bits(data->regmap,
                                  data->regofs + ((id / 32) << 2),
-                                 BIT(id % 32), ~0);
+                                 BIT(id % 32), val);
+}
+
+static int mtk_reset_assert(struct reset_controller_dev *rcdev,
+                           unsigned long id)
+{
+       return mtk_reset_update(rcdev, id, false);
 }
 
 static int mtk_reset_deassert(struct reset_controller_dev *rcdev,
                              unsigned long id)
 {
-       struct mtk_reset *data = container_of(rcdev, struct mtk_reset, rcdev);
-
-       return regmap_update_bits(data->regmap,
-                                 data->regofs + ((id / 32) << 2),
-                                 BIT(id % 32), 0);
+       return mtk_reset_update(rcdev, id, true);
 }
 
 static int mtk_reset(struct reset_controller_dev *rcdev, unsigned long id)
        return mtk_reset_deassert(rcdev, id);
 }
 
-static int mtk_reset_assert_set_clr(struct reset_controller_dev *rcdev,
-                                   unsigned long id)
+static int mtk_reset_update_set_clr(struct reset_controller_dev *rcdev,
+                                   unsigned long id, bool deassert)
 {
        struct mtk_reset *data = container_of(rcdev, struct mtk_reset, rcdev);
+       unsigned int deassert_ofs = deassert ? 0x4 : 0;
 
        return regmap_write(data->regmap,
-                           data->regofs + ((id / 32) << 4),
+                           data->regofs + ((id / 32) << 4) + deassert_ofs,
                            BIT(id % 32));
 }
 
+static int mtk_reset_assert_set_clr(struct reset_controller_dev *rcdev,
+                                   unsigned long id)
+{
+       return mtk_reset_update_set_clr(rcdev, id, false);
+}
+
 static int mtk_reset_deassert_set_clr(struct reset_controller_dev *rcdev,
                                      unsigned long id)
 {
-       struct mtk_reset *data = container_of(rcdev, struct mtk_reset, rcdev);
-
-       return regmap_write(data->regmap,
-                           data->regofs + ((id / 32) << 4) + 0x4,
-                           BIT(id % 32));
+       return mtk_reset_update_set_clr(rcdev, id, true);
 }
 
 static int mtk_reset_set_clr(struct reset_controller_dev *rcdev,