2012-09-18 09:35:03 +04:00
/*
* user_space . c - A simple user space Thermal events notifier
*
* Copyright ( C ) 2012 Intel Corp
* Copyright ( C ) 2012 Durgadoss R < durgadoss . r @ intel . com >
*
* ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; version 2 of the License .
*
* This program is distributed in the hope that it will be useful , but
* WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
* General Public License for more details .
*
* You should have received a copy of the GNU General Public License along
* with this program ; if not , write to the Free Software Foundation , Inc . ,
* 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA .
*
* ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
*/
# include <linux/thermal.h>
2016-08-27 02:21:17 +03:00
# include <linux/slab.h>
2017-06-24 16:06:03 +03:00
2012-09-18 09:35:03 +04:00
# include "thermal_core.h"
/**
* notify_user_space - Notifies user space about thermal events
* @ tz - thermal_zone_device
2017-06-24 16:06:03 +03:00
* @ trip - trip point index
2012-09-18 09:35:03 +04:00
*
* This function notifies the user space through UEvents .
*/
2012-09-27 15:27:54 +04:00
static int notify_user_space ( struct thermal_zone_device * tz , int trip )
2012-09-18 09:35:03 +04:00
{
2016-08-27 02:21:17 +03:00
char * thermal_prop [ 5 ] ;
int i ;
2012-09-18 09:35:03 +04:00
mutex_lock ( & tz - > lock ) ;
2016-08-27 02:21:17 +03:00
thermal_prop [ 0 ] = kasprintf ( GFP_KERNEL , " NAME=%s " , tz - > type ) ;
thermal_prop [ 1 ] = kasprintf ( GFP_KERNEL , " TEMP=%d " , tz - > temperature ) ;
thermal_prop [ 2 ] = kasprintf ( GFP_KERNEL , " TRIP=%d " , trip ) ;
thermal_prop [ 3 ] = kasprintf ( GFP_KERNEL , " EVENT=%d " , tz - > notify_event ) ;
thermal_prop [ 4 ] = NULL ;
kobject_uevent_env ( & tz - > device . kobj , KOBJ_CHANGE , thermal_prop ) ;
for ( i = 0 ; i < 4 ; + + i )
kfree ( thermal_prop [ i ] ) ;
2012-09-18 09:35:03 +04:00
mutex_unlock ( & tz - > lock ) ;
return 0 ;
}
2012-09-27 15:27:54 +04:00
static struct thermal_governor thermal_gov_user_space = {
2012-09-18 09:35:03 +04:00
. name = " user_space " ,
. throttle = notify_user_space ,
} ;
2013-03-26 12:38:29 +04:00
int thermal_gov_user_space_register ( void )
2012-09-18 09:35:03 +04:00
{
return thermal_register_governor ( & thermal_gov_user_space ) ;
}
2013-03-26 12:38:29 +04:00
void thermal_gov_user_space_unregister ( void )
2012-09-18 09:35:03 +04:00
{
thermal_unregister_governor ( & thermal_gov_user_space ) ;
}