Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
dd634666
cloud-kernel
项目概览
openanolis
/
cloud-kernel
大约 2 年 前同步成功
通知
173
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
dd634666
编写于
9月 18, 2014
作者:
Z
Zhang Rui
浏览文件
操作
浏览文件
下载
差异文件
Merge branches 'eduardo-soc' and 'bang-bang-governor' of .git into next
上级
62ebb7b1
e4dbf98f
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
155 addition
and
0 deletion
+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
未找到文件。
drivers/thermal/Kconfig
浏览文件 @
dd634666
...
@@ -84,6 +84,16 @@ config THERMAL_GOV_STEP_WISE
...
@@ -84,6 +84,16 @@ config THERMAL_GOV_STEP_WISE
Enable this to manage platform thermals using a simple linear
Enable this to manage platform thermals using a simple linear
governor.
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
config THERMAL_GOV_USER_SPACE
bool "User_space thermal governor"
bool "User_space thermal governor"
help
help
...
...
drivers/thermal/Makefile
浏览文件 @
dd634666
...
@@ -11,6 +11,7 @@ thermal_sys-$(CONFIG_THERMAL_OF) += of-thermal.o
...
@@ -11,6 +11,7 @@ thermal_sys-$(CONFIG_THERMAL_OF) += of-thermal.o
# governors
# governors
thermal_sys-$(CONFIG_THERMAL_GOV_FAIR_SHARE)
+=
fair_share.o
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_STEP_WISE)
+=
step_wise.o
thermal_sys-$(CONFIG_THERMAL_GOV_USER_SPACE)
+=
user_space.o
thermal_sys-$(CONFIG_THERMAL_GOV_USER_SPACE)
+=
user_space.o
...
...
drivers/thermal/gov_bang_bang.c
0 → 100644
浏览文件 @
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
浏览文件 @
dd634666
...
@@ -1797,6 +1797,10 @@ static int __init thermal_register_governors(void)
...
@@ -1797,6 +1797,10 @@ static int __init thermal_register_governors(void)
if
(
result
)
if
(
result
)
return
result
;
return
result
;
result
=
thermal_gov_bang_bang_register
();
if
(
result
)
return
result
;
return
thermal_gov_user_space_register
();
return
thermal_gov_user_space_register
();
}
}
...
@@ -1804,6 +1808,7 @@ static void thermal_unregister_governors(void)
...
@@ -1804,6 +1808,7 @@ static void thermal_unregister_governors(void)
{
{
thermal_gov_step_wise_unregister
();
thermal_gov_step_wise_unregister
();
thermal_gov_fair_share_unregister
();
thermal_gov_fair_share_unregister
();
thermal_gov_bang_bang_unregister
();
thermal_gov_user_space_unregister
();
thermal_gov_user_space_unregister
();
}
}
...
...
drivers/thermal/thermal_core.h
浏览文件 @
dd634666
...
@@ -69,6 +69,14 @@ static inline int thermal_gov_fair_share_register(void) { return 0; }
...
@@ -69,6 +69,14 @@ static inline int thermal_gov_fair_share_register(void) { return 0; }
static
inline
void
thermal_gov_fair_share_unregister
(
void
)
{}
static
inline
void
thermal_gov_fair_share_unregister
(
void
)
{}
#endif
/* CONFIG_THERMAL_GOV_FAIR_SHARE */
#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
#ifdef CONFIG_THERMAL_GOV_USER_SPACE
int
thermal_gov_user_space_register
(
void
);
int
thermal_gov_user_space_register
(
void
);
void
thermal_gov_user_space_unregister
(
void
);
void
thermal_gov_user_space_unregister
(
void
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录