Lines Matching refs:pf_cool
38 static rt_err_t pwm_fan_power_on(struct pwm_fan_cool *pf_cool) in pwm_fan_power_on() argument
42 if ((err = rt_pwm_enable(pf_cool->pwm_dev, pf_cool->pwm_conf.channel))) in pwm_fan_power_on()
47 if (pf_cool->supply && (err = rt_regulator_enable(pf_cool->supply))) in pwm_fan_power_on()
49 rt_pwm_disable(pf_cool->pwm_dev, pf_cool->pwm_conf.channel); in pwm_fan_power_on()
57 static rt_err_t pwm_fan_power_off(struct pwm_fan_cool *pf_cool) in pwm_fan_power_off() argument
61 if (pf_cool->supply && (err = rt_regulator_disable(pf_cool->supply))) in pwm_fan_power_off()
66 if ((err = rt_pwm_disable(pf_cool->pwm_dev, pf_cool->pwm_conf.channel))) in pwm_fan_power_off()
68 rt_regulator_enable(pf_cool->supply); in pwm_fan_power_off()
79 struct pwm_fan_cool *pf_cool = raw_to_pwm_fan_cool(cdev); in pwm_fan_cool_get_max_level() local
81 *out_level = pf_cool->pwm_fan_max_level; in pwm_fan_cool_get_max_level()
89 struct pwm_fan_cool *pf_cool = raw_to_pwm_fan_cool(cdev); in pwm_fan_cool_get_cur_level() local
91 *out_level = pf_cool->pwm_fan_level; in pwm_fan_cool_get_cur_level()
101 struct pwm_fan_cool *pf_cool = raw_to_pwm_fan_cool(cdev); in pwm_fan_cool_set_cur_level() local
103 if (pf_cool->pwm_fan_level == level) in pwm_fan_cool_set_cur_level()
108 rt_spin_lock(&pf_cool->lock); in pwm_fan_cool_set_cur_level()
110 if ((pwm = pf_cool->pwm_fan_cooling_levels[level])) in pwm_fan_cool_set_cur_level()
113 struct rt_pwm_configuration *pwm_conf = &pf_cool->pwm_conf; in pwm_fan_cool_set_cur_level()
118 err = rt_pwm_set(pf_cool->pwm_dev, in pwm_fan_cool_set_cur_level()
121 if (!err && pf_cool->pwm_fan_level == 0) in pwm_fan_cool_set_cur_level()
123 err = pwm_fan_power_on(pf_cool); in pwm_fan_cool_set_cur_level()
126 else if (pf_cool->pwm_fan_level > 0) in pwm_fan_cool_set_cur_level()
128 err = pwm_fan_power_off(pf_cool); in pwm_fan_cool_set_cur_level()
131 rt_spin_unlock(&pf_cool->lock); in pwm_fan_cool_set_cur_level()
135 pf_cool->pwm_fan_level = level; in pwm_fan_cool_set_cur_level()
148 static void pwm_fan_cool_free(struct pwm_fan_cool *pf_cool) in pwm_fan_cool_free() argument
150 if (!rt_is_err_or_null(pf_cool->supply)) in pwm_fan_cool_free()
152 rt_regulator_put(pf_cool->supply); in pwm_fan_cool_free()
155 if (pf_cool->pwm_fan_cooling_levels) in pwm_fan_cool_free()
157 rt_free(pf_cool->pwm_fan_cooling_levels); in pwm_fan_cool_free()
160 rt_free(pf_cool); in pwm_fan_cool_free()
170 struct pwm_fan_cool *pf_cool = rt_calloc(1, sizeof(*pf_cool)); in pwm_fan_cool_probe() local
172 if (!pf_cool) in pwm_fan_cool_probe()
190 pf_cool->pwm_dev = rt_ofw_data(pwm_np); in pwm_fan_cool_probe()
193 if (!pf_cool->pwm_dev) in pwm_fan_cool_probe()
199 pf_cool->pwm_conf.channel = pwm_args.args[0]; in pwm_fan_cool_probe()
200 pf_cool->pwm_conf.period = pwm_args.args[1]; in pwm_fan_cool_probe()
202 pf_cool->supply = rt_regulator_get(dev, "fan"); in pwm_fan_cool_probe()
204 if (rt_is_err(pf_cool->supply)) in pwm_fan_cool_probe()
206 err = rt_ptr_err(pf_cool->supply); in pwm_fan_cool_probe()
216 pf_cool->pwm_fan_cooling_levels = rt_calloc(levels_nr, sizeof(rt_uint32_t)); in pwm_fan_cool_probe()
218 if (!pf_cool->pwm_fan_cooling_levels) in pwm_fan_cool_probe()
225 0, levels_nr, pf_cool->pwm_fan_cooling_levels) <= 0) in pwm_fan_cool_probe()
231 pf_cool->pwm_fan_level = MAX_PWM; in pwm_fan_cool_probe()
232 pf_cool->pwm_fan_max_level = levels_nr - 1; in pwm_fan_cool_probe()
234 rt_spin_lock_init(&pf_cool->lock); in pwm_fan_cool_probe()
235 pwm_fan_cool_set_cur_level(&pf_cool->parent, 0); in pwm_fan_cool_probe()
237 rt_dm_dev_set_name(&pf_cool->parent.parent, "%s", rt_dm_dev_get_name(&pdev->parent)); in pwm_fan_cool_probe()
238 pf_cool->parent.parent.ofw_node = dev->ofw_node; in pwm_fan_cool_probe()
239 pf_cool->parent.ops = &pwm_fan_cool_ops; in pwm_fan_cool_probe()
241 if ((err = rt_thermal_cooling_device_register(&pf_cool->parent))) in pwm_fan_cool_probe()
246 dev->user_data = pf_cool; in pwm_fan_cool_probe()
251 pwm_fan_cool_free(pf_cool); in pwm_fan_cool_probe()
258 struct pwm_fan_cool *pf_cool = pdev->parent.ofw_node; in pwm_fan_cool_remove() local
260 rt_thermal_cooling_device_unregister(&pf_cool->parent); in pwm_fan_cool_remove()
262 pwm_fan_power_off(pf_cool); in pwm_fan_cool_remove()
263 pwm_fan_cool_free(pf_cool); in pwm_fan_cool_remove()