Lines Matching refs:sc

45 static int gdsc_is_enabled(struct gdsc *sc)  in gdsc_is_enabled()  argument
50 ret = regmap_read(sc->regmap, sc->gdscr, &val); in gdsc_is_enabled()
57 static int gdsc_toggle_logic(struct gdsc *sc, bool en) in gdsc_toggle_logic() argument
64 ret = regmap_update_bits(sc->regmap, sc->gdscr, SW_COLLAPSE_MASK, val); in gdsc_toggle_logic()
70 ret = regmap_read(sc->regmap, sc->gdscr, &val); in gdsc_toggle_logic()
78 ret = regmap_read(sc->regmap, sc->gdscr, &val); in gdsc_toggle_logic()
88 static inline int gdsc_deassert_reset(struct gdsc *sc) in gdsc_deassert_reset() argument
92 for (i = 0; i < sc->reset_count; i++) in gdsc_deassert_reset()
93 sc->rcdev->ops->deassert(sc->rcdev, sc->resets[i]); in gdsc_deassert_reset()
97 static inline int gdsc_assert_reset(struct gdsc *sc) in gdsc_assert_reset() argument
101 for (i = 0; i < sc->reset_count; i++) in gdsc_assert_reset()
102 sc->rcdev->ops->assert(sc->rcdev, sc->resets[i]); in gdsc_assert_reset()
106 static inline void gdsc_force_mem_on(struct gdsc *sc) in gdsc_force_mem_on() argument
111 for (i = 0; i < sc->cxc_count; i++) in gdsc_force_mem_on()
112 regmap_update_bits(sc->regmap, sc->cxcs[i], mask, mask); in gdsc_force_mem_on()
115 static inline void gdsc_clear_mem_on(struct gdsc *sc) in gdsc_clear_mem_on() argument
120 for (i = 0; i < sc->cxc_count; i++) in gdsc_clear_mem_on()
121 regmap_update_bits(sc->regmap, sc->cxcs[i], mask, 0); in gdsc_clear_mem_on()
126 struct gdsc *sc = domain_to_gdsc(domain); in gdsc_enable() local
129 if (sc->pwrsts == PWRSTS_ON) in gdsc_enable()
130 return gdsc_deassert_reset(sc); in gdsc_enable()
132 ret = gdsc_toggle_logic(sc, true); in gdsc_enable()
136 if (sc->pwrsts & PWRSTS_OFF) in gdsc_enable()
137 gdsc_force_mem_on(sc); in gdsc_enable()
153 struct gdsc *sc = domain_to_gdsc(domain); in gdsc_disable() local
155 if (sc->pwrsts == PWRSTS_ON) in gdsc_disable()
156 return gdsc_assert_reset(sc); in gdsc_disable()
158 if (sc->pwrsts & PWRSTS_OFF) in gdsc_disable()
159 gdsc_clear_mem_on(sc); in gdsc_disable()
161 return gdsc_toggle_logic(sc, false); in gdsc_disable()
164 static int gdsc_init(struct gdsc *sc) in gdsc_init() argument
177 ret = regmap_update_bits(sc->regmap, sc->gdscr, mask, val); in gdsc_init()
182 if (sc->pwrsts == PWRSTS_ON) { in gdsc_init()
183 ret = gdsc_toggle_logic(sc, true); in gdsc_init()
188 on = gdsc_is_enabled(sc); in gdsc_init()
192 if (on || (sc->pwrsts & PWRSTS_RET)) in gdsc_init()
193 gdsc_force_mem_on(sc); in gdsc_init()
195 gdsc_clear_mem_on(sc); in gdsc_init()
197 sc->pd.power_off = gdsc_disable; in gdsc_init()
198 sc->pd.power_on = gdsc_enable; in gdsc_init()
199 pm_genpd_init(&sc->pd, NULL, !on); in gdsc_init()