Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
dd634666
Commit
dd634666
authored
Sep 18, 2014
by
Zhang Rui
Browse files
Options
Browse Files
Download
Plain Diff
Merge branches 'eduardo-soc' and 'bang-bang-governor' of .git into next
parents
62ebb7b1
e4dbf98f
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
155 additions
and
0 deletions
+155
-0
drivers/thermal/Kconfig
drivers/thermal/Kconfig
+10
-0
drivers/thermal/Makefile
drivers/thermal/Makefile
+1
-0
drivers/thermal/gov_bang_bang.c
drivers/thermal/gov_bang_bang.c
+131
-0
drivers/thermal/thermal_core.c
drivers/thermal/thermal_core.c
+5
-0
drivers/thermal/thermal_core.h
drivers/thermal/thermal_core.h
+8
-0
No files found.
drivers/thermal/Kconfig
View file @
dd634666
...
...
@@ -84,6 +84,16 @@ config THERMAL_GOV_STEP_WISE
Enable this to manage platform thermals using a simple linear
governor.
config THERMAL_GOV_BANG_BANG
bool "Bang Bang thermal governor"
default n
help
Enable this to manage platform thermals using bang bang governor.
Say 'Y' here if you want to use two point temperature regulation
used for fans without throttling. Some fan drivers depend on this
governor to be enabled (e.g. acerhdf).
config THERMAL_GOV_USER_SPACE
bool "User_space thermal governor"
help
...
...
drivers/thermal/Makefile
View file @
dd634666
...
...
@@ -11,6 +11,7 @@ thermal_sys-$(CONFIG_THERMAL_OF) += of-thermal.o
# governors
thermal_sys-$(CONFIG_THERMAL_GOV_FAIR_SHARE)
+=
fair_share.o
thermal_sys-$(CONFIG_THERMAL_GOV_BANG_BANG)
+=
gov_bang_bang.o
thermal_sys-$(CONFIG_THERMAL_GOV_STEP_WISE)
+=
step_wise.o
thermal_sys-$(CONFIG_THERMAL_GOV_USER_SPACE)
+=
user_space.o
...
...
drivers/thermal/gov_bang_bang.c
0 → 100644
View file @
dd634666
/*
* gov_bang_bang.c - A simple thermal throttling governor using hysteresis
*
* Copyright (C) 2014 Peter Feuerer <peter@piie.net>
*
* Based on step_wise.c with following Copyrights:
* 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.
*
* 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.
*
*/
#include <linux/thermal.h>
#include "thermal_core.h"
static
void
thermal_zone_trip_update
(
struct
thermal_zone_device
*
tz
,
int
trip
)
{
long
trip_temp
;
unsigned
long
trip_hyst
;
struct
thermal_instance
*
instance
;
tz
->
ops
->
get_trip_temp
(
tz
,
trip
,
&
trip_temp
);
tz
->
ops
->
get_trip_hyst
(
tz
,
trip
,
&
trip_hyst
);
dev_dbg
(
&
tz
->
device
,
"Trip%d[temp=%ld]:temp=%d:hyst=%ld
\n
"
,
trip
,
trip_temp
,
tz
->
temperature
,
trip_hyst
);
mutex_lock
(
&
tz
->
lock
);
list_for_each_entry
(
instance
,
&
tz
->
thermal_instances
,
tz_node
)
{
if
(
instance
->
trip
!=
trip
)
continue
;
/* in case fan is in initial state, switch the fan off */
if
(
instance
->
target
==
THERMAL_NO_TARGET
)
instance
->
target
=
0
;
/* in case fan is neither on nor off set the fan to active */
if
(
instance
->
target
!=
0
&&
instance
->
target
!=
1
)
{
pr_warn
(
"Thermal instance %s controlled by bang-bang has unexpected state: %ld
\n
"
,
instance
->
name
,
instance
->
target
);
instance
->
target
=
1
;
}
/*
* enable fan when temperature exceeds trip_temp and disable
* the fan in case it falls below trip_temp minus hysteresis
*/
if
(
instance
->
target
==
0
&&
tz
->
temperature
>=
trip_temp
)
instance
->
target
=
1
;
else
if
(
instance
->
target
==
1
&&
tz
->
temperature
<
trip_temp
-
trip_hyst
)
instance
->
target
=
0
;
dev_dbg
(
&
instance
->
cdev
->
device
,
"target=%d
\n
"
,
(
int
)
instance
->
target
);
instance
->
cdev
->
updated
=
false
;
/* cdev needs update */
}
mutex_unlock
(
&
tz
->
lock
);
}
/**
* bang_bang_control - controls devices associated with the given zone
* @tz - thermal_zone_device
* @trip - the trip point
*
* Regulation Logic: a two point regulation, deliver cooling state depending
* on the previous state shown in this diagram:
*
* Fan: OFF ON
*
* |
* |
* trip_temp: +---->+
* | | ^
* | | |
* | | Temperature
* (trip_temp - hyst): +<----+
* |
* |
* |
*
* * If the fan is not running and temperature exceeds trip_temp, the fan
* gets turned on.
* * In case the fan is running, temperature must fall below
* (trip_temp - hyst) so that the fan gets turned off again.
*
*/
static
int
bang_bang_control
(
struct
thermal_zone_device
*
tz
,
int
trip
)
{
struct
thermal_instance
*
instance
;
thermal_zone_trip_update
(
tz
,
trip
);
mutex_lock
(
&
tz
->
lock
);
list_for_each_entry
(
instance
,
&
tz
->
thermal_instances
,
tz_node
)
thermal_cdev_update
(
instance
->
cdev
);
mutex_unlock
(
&
tz
->
lock
);
return
0
;
}
static
struct
thermal_governor
thermal_gov_bang_bang
=
{
.
name
=
"bang_bang"
,
.
throttle
=
bang_bang_control
,
};
int
thermal_gov_bang_bang_register
(
void
)
{
return
thermal_register_governor
(
&
thermal_gov_bang_bang
);
}
void
thermal_gov_bang_bang_unregister
(
void
)
{
thermal_unregister_governor
(
&
thermal_gov_bang_bang
);
}
drivers/thermal/thermal_core.c
View file @
dd634666
...
...
@@ -1797,6 +1797,10 @@ static int __init thermal_register_governors(void)
if
(
result
)
return
result
;
result
=
thermal_gov_bang_bang_register
();
if
(
result
)
return
result
;
return
thermal_gov_user_space_register
();
}
...
...
@@ -1804,6 +1808,7 @@ static void thermal_unregister_governors(void)
{
thermal_gov_step_wise_unregister
();
thermal_gov_fair_share_unregister
();
thermal_gov_bang_bang_unregister
();
thermal_gov_user_space_unregister
();
}
...
...
drivers/thermal/thermal_core.h
View file @
dd634666
...
...
@@ -69,6 +69,14 @@ static inline int thermal_gov_fair_share_register(void) { return 0; }
static
inline
void
thermal_gov_fair_share_unregister
(
void
)
{}
#endif
/* CONFIG_THERMAL_GOV_FAIR_SHARE */
#ifdef CONFIG_THERMAL_GOV_BANG_BANG
int
thermal_gov_bang_bang_register
(
void
);
void
thermal_gov_bang_bang_unregister
(
void
);
#else
static
inline
int
thermal_gov_bang_bang_register
(
void
)
{
return
0
;
}
static
inline
void
thermal_gov_bang_bang_unregister
(
void
)
{}
#endif
/* CONFIG_THERMAL_GOV_BANG_BANG */
#ifdef CONFIG_THERMAL_GOV_USER_SPACE
int
thermal_gov_user_space_register
(
void
);
void
thermal_gov_user_space_unregister
(
void
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment