brintos

brintos / linux-shallow public Read only

0
0
Text · 1.7 KiB · 75137b4 Raw
59 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 *  user_space.c - A simple user space Thermal events notifier4 *5 *  Copyright (C) 2012 Intel Corp6 *  Copyright (C) 2012 Durgadoss R <durgadoss.r@intel.com>7 *8 *  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~9 *10 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~11 */12 13#include <linux/slab.h>14#include <linux/thermal.h>15 16#include "thermal_core.h"17 18static int user_space_bind(struct thermal_zone_device *tz)19{20	pr_info_once("Consider using thermal netlink events interface\n");21 22	return 0;23}24 25/**26 * notify_user_space - Notifies user space about thermal events27 * @tz: thermal_zone_device28 * @trip: trip point29 * @crossed_up: whether or not the trip has been crossed on the way up30 *31 * This function notifies the user space through UEvents.32 */33static void notify_user_space(struct thermal_zone_device *tz,34			      const struct thermal_trip *trip,35			      bool crossed_up)36{37	char *thermal_prop[5];38	int i;39 40	lockdep_assert_held(&tz->lock);41 42	thermal_prop[0] = kasprintf(GFP_KERNEL, "NAME=%s", tz->type);43	thermal_prop[1] = kasprintf(GFP_KERNEL, "TEMP=%d", tz->temperature);44	thermal_prop[2] = kasprintf(GFP_KERNEL, "TRIP=%d",45				    thermal_zone_trip_id(tz, trip));46	thermal_prop[3] = kasprintf(GFP_KERNEL, "EVENT=%d", tz->notify_event);47	thermal_prop[4] = NULL;48	kobject_uevent_env(&tz->device.kobj, KOBJ_CHANGE, thermal_prop);49	for (i = 0; i < 4; ++i)50		kfree(thermal_prop[i]);51}52 53static struct thermal_governor thermal_gov_user_space = {54	.name		= "user_space",55	.trip_crossed	= notify_user_space,56	.bind_to_tz	= user_space_bind,57};58THERMAL_GOVERNOR_DECLARE(thermal_gov_user_space);59