static struct thermal_trip *thermal_of_trips_init(struct device_node *np, int *ntrips)
 {
-       struct thermal_trip *tt;
-       struct device_node *trips;
        int ret, count;
 
        *ntrips = 0;
        
-       trips = of_get_child_by_name(np, "trips");
+       struct device_node *trips __free(device_node) = of_get_child_by_name(np, "trips");
        if (!trips)
                return NULL;
 
        if (!count)
                return NULL;
 
-       tt = kzalloc(sizeof(*tt) * count, GFP_KERNEL);
-       if (!tt) {
-               ret = -ENOMEM;
-               goto out_of_node_put;
-       }
-
-       *ntrips = count;
+       struct thermal_trip *tt __free(kfree) = kzalloc(sizeof(*tt) * count, GFP_KERNEL);
+       if (!tt)
+               return ERR_PTR(-ENOMEM);
 
        count = 0;
        for_each_child_of_node_scoped(trips, trip) {
                ret = thermal_of_populate_trip(trip, &tt[count++]);
                if (ret)
-                       goto out_kfree;
+                       return ERR_PTR(ret);
        }
 
-       of_node_put(trips);
-
-       return tt;
-
-out_kfree:
-       kfree(tt);
-out_of_node_put:
-       of_node_put(trips);
+       *ntrips = count;
 
-       return ERR_PTR(ret);
+       return no_free_ptr(tt);
 }
 
 static struct device_node *of_thermal_zone_find(struct device_node *sensor, int id)