Lines Matching refs:tt_zone
54 DEFINE_GUARD(tt_zone, struct tt_thermal_zone *, mutex_lock(&_T->lock), mutex_unlock(&_T->lock))
81 struct tt_thermal_zone *tt_zone; member
112 struct tt_thermal_zone *tt_zone = data; in tt_zone_tz_temp_get() local
114 guard(tt_zone)(tt_zone); in tt_zone_tz_temp_get() local
116 if (!tt_zone->tz) in tt_zone_tz_temp_get()
119 *val = tt_zone->tz_temp; in tt_zone_tz_temp_get()
125 struct tt_thermal_zone *tt_zone = data; in tt_zone_tz_temp_set() local
127 guard(tt_zone)(tt_zone); in tt_zone_tz_temp_set() local
129 if (!tt_zone->tz) in tt_zone_tz_temp_set()
132 WRITE_ONCE(tt_zone->tz_temp, val); in tt_zone_tz_temp_set()
133 thermal_zone_device_update(tt_zone->tz, THERMAL_EVENT_TEMP_SAMPLE); in tt_zone_tz_temp_set()
140 static void tt_zone_free_trips(struct tt_thermal_zone *tt_zone) in tt_zone_free_trips() argument
144 list_for_each_entry_safe(tt_trip, aux, &tt_zone->trips, list_node) { in tt_zone_free_trips()
146 ida_free(&tt_zone->ida, tt_trip->id); in tt_zone_free_trips()
151 static void tt_zone_free(struct tt_thermal_zone *tt_zone) in tt_zone_free() argument
153 tt_zone_free_trips(tt_zone); in tt_zone_free()
154 ida_free(&tt_thermal_zones_ida, tt_zone->id); in tt_zone_free()
155 ida_destroy(&tt_zone->ida); in tt_zone_free()
156 kfree(tt_zone); in tt_zone_free()
162 struct tt_thermal_zone *tt_zone = tt_work->tt_zone; in tt_add_tz_work_fn() local
167 snprintf(f_name, TT_MAX_FILE_NAME_LENGTH, "tz%d", tt_zone->id); in tt_add_tz_work_fn()
168 tt_zone->d_tt_zone = debugfs_create_dir(f_name, d_testing); in tt_add_tz_work_fn()
169 if (IS_ERR(tt_zone->d_tt_zone)) { in tt_add_tz_work_fn()
170 tt_zone_free(tt_zone); in tt_add_tz_work_fn()
174 debugfs_create_file_unsafe("temp", 0600, tt_zone->d_tt_zone, tt_zone, in tt_add_tz_work_fn()
177 debugfs_create_file_unsafe("init_temp", 0600, tt_zone->d_tt_zone, in tt_add_tz_work_fn()
178 &tt_zone->temp, &tt_int_attr); in tt_add_tz_work_fn()
182 list_add_tail(&tt_zone->list_node, &tt_thermal_zones); in tt_add_tz_work_fn()
187 struct tt_thermal_zone *tt_zone __free(kfree); in tt_add_tz()
191 tt_zone = kzalloc(sizeof(*tt_zone), GFP_KERNEL); in tt_add_tz()
192 if (!tt_zone) in tt_add_tz()
199 INIT_LIST_HEAD(&tt_zone->trips); in tt_add_tz()
200 mutex_init(&tt_zone->lock); in tt_add_tz()
201 ida_init(&tt_zone->ida); in tt_add_tz()
202 tt_zone->temp = THERMAL_TEMP_INVALID; in tt_add_tz()
208 tt_zone->id = ret; in tt_add_tz()
211 tt_work->tt_zone = no_free_ptr(tt_zone); in tt_add_tz()
220 struct tt_thermal_zone *tt_zone = tt_work->tt_zone; in tt_del_tz_work_fn() local
224 debugfs_remove(tt_zone->d_tt_zone); in tt_del_tz_work_fn()
225 tt_zone_free(tt_zone); in tt_del_tz_work_fn()
228 static void tt_zone_unregister_tz(struct tt_thermal_zone *tt_zone) in tt_zone_unregister_tz() argument
230 guard(tt_zone)(tt_zone); in tt_zone_unregister_tz() local
232 if (tt_zone->tz) { in tt_zone_unregister_tz()
233 thermal_zone_device_unregister(tt_zone->tz); in tt_zone_unregister_tz()
234 tt_zone->tz = NULL; in tt_zone_unregister_tz()
241 struct tt_thermal_zone *tt_zone, *aux; in tt_del_tz() local
256 list_for_each_entry_safe(tt_zone, aux, &tt_thermal_zones, list_node) { in tt_del_tz()
257 if (tt_zone->id == id) { in tt_del_tz()
258 if (tt_zone->refcount) { in tt_del_tz()
261 list_del(&tt_zone->list_node); in tt_del_tz()
271 tt_zone_unregister_tz(tt_zone); in tt_del_tz()
274 tt_work->tt_zone = tt_zone; in tt_del_tz()
282 struct tt_thermal_zone *tt_zone; in tt_get_tt_zone() local
291 list_for_each_entry(tt_zone, &tt_thermal_zones, list_node) { in tt_get_tt_zone()
292 if (tt_zone->id == id) { in tt_get_tt_zone()
293 tt_zone->refcount++; in tt_get_tt_zone()
294 return tt_zone; in tt_get_tt_zone()
301 static void tt_put_tt_zone(struct tt_thermal_zone *tt_zone) in tt_put_tt_zone() argument
305 tt_zone->refcount--; in tt_put_tt_zone()
314 struct tt_thermal_zone *tt_zone = tt_work->tt_zone; in tt_zone_add_trip_work_fn() local
321 debugfs_create_file_unsafe(d_name, 0600, tt_zone->d_tt_zone, in tt_zone_add_trip_work_fn()
325 debugfs_create_file_unsafe(d_name, 0600, tt_zone->d_tt_zone, in tt_zone_add_trip_work_fn()
328 tt_put_tt_zone(tt_zone); in tt_zone_add_trip_work_fn()
333 struct tt_thermal_zone *tt_zone __free(put_tt_zone) = NULL; in tt_zone_add_trip()
346 tt_zone = tt_get_tt_zone(arg); in tt_zone_add_trip()
347 if (IS_ERR(tt_zone)) in tt_zone_add_trip()
348 return PTR_ERR(tt_zone); in tt_zone_add_trip()
350 id = ida_alloc(&tt_zone->ida, GFP_KERNEL); in tt_zone_add_trip()
359 guard(tt_zone)(tt_zone); in tt_zone_add_trip() local
361 list_add_tail(&tt_trip->list_node, &tt_zone->trips); in tt_zone_add_trip()
362 tt_zone->num_trips++; in tt_zone_add_trip()
365 tt_work->tt_zone = no_free_ptr(tt_zone); in tt_zone_add_trip()
374 struct tt_thermal_zone *tt_zone = thermal_zone_device_priv(tz); in tt_zone_get_temp() local
376 *temp = READ_ONCE(tt_zone->tz_temp); in tt_zone_get_temp()
388 static int tt_zone_register_tz(struct tt_thermal_zone *tt_zone) in tt_zone_register_tz() argument
395 guard(tt_zone)(tt_zone); in tt_zone_register_tz() local
397 if (tt_zone->tz) in tt_zone_register_tz()
400 trips = kcalloc(tt_zone->num_trips, sizeof(*trips), GFP_KERNEL); in tt_zone_register_tz()
405 list_for_each_entry(tt_trip, &tt_zone->trips, list_node) in tt_zone_register_tz()
408 tt_zone->tz_temp = tt_zone->temp; in tt_zone_register_tz()
410 tz = thermal_zone_device_register_with_trips("test_tz", trips, i, tt_zone, in tt_zone_register_tz()
415 tt_zone->tz = tz; in tt_zone_register_tz()
424 struct tt_thermal_zone *tt_zone __free(put_tt_zone); in tt_zone_reg()
426 tt_zone = tt_get_tt_zone(arg); in tt_zone_reg()
427 if (IS_ERR(tt_zone)) in tt_zone_reg()
428 return PTR_ERR(tt_zone); in tt_zone_reg()
430 return tt_zone_register_tz(tt_zone); in tt_zone_reg()
435 struct tt_thermal_zone *tt_zone __free(put_tt_zone); in tt_zone_unreg()
437 tt_zone = tt_get_tt_zone(arg); in tt_zone_unreg()
438 if (IS_ERR(tt_zone)) in tt_zone_unreg()
439 return PTR_ERR(tt_zone); in tt_zone_unreg()
441 tt_zone_unregister_tz(tt_zone); in tt_zone_unreg()
448 struct tt_thermal_zone *tt_zone, *aux; in tt_zone_cleanup() local
450 list_for_each_entry_safe(tt_zone, aux, &tt_thermal_zones, list_node) { in tt_zone_cleanup()
451 tt_zone_unregister_tz(tt_zone); in tt_zone_cleanup()
453 list_del(&tt_zone->list_node); in tt_zone_cleanup()
455 tt_zone_free(tt_zone); in tt_zone_cleanup()