mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-24 21:54:34 -04:00
Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux
Pull thermal management update from Zhang Rui:
"Highlights:
- Introduction of thermal policy support, together with three new
thermal governors, including step_wise, user_space, fire_share.
- Introduction of ST-Ericsson db8500_thermal driver and ST-Ericsson
db8500_cpufreq_cooling driver.
- Thermal Kconfig file and Makefile refactor.
- Fixes for generic thermal layer, generic cpucooling, rcar thermal
driver and Exynos thermal driver."
* 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux: (36 commits)
Thermal: Fix DEFAULT_THERMAL_GOVERNOR
Thermal: fix a NULL pointer dereference when generic thermal layer is built as a module
thermal: rcar: add rcar_zone_to_priv() macro
thermal: rcar: fixup the unit of temperature
thermal: cpu cooling: allow module builds
thermal: cpu cooling: use const parameter while registering
Thermal: Add ST-Ericsson DB8500 thermal properties and platform data.
Thermal: Add ST-Ericsson DB8500 thermal driver.
drivers/thermal/Makefile refactor
Exynos: Add missing dependency
Refactor drivers/thermal/Kconfig
thermal: cpu_cooling: Make 'notify_device' static
Thermal: Remove the cooling_cpufreq_list.
Thermal: fix bug of counting cpu frequencies.
Thermal: add indent for code alignment.
thermal: rcar_thermal: remove explicitly used devm_kfree/iounap()
thermal: user_space: Add missing static storage class specifiers
thermal: fair_share: Add missing static storage class specifiers
thermal: step_wise: Add missing static storage class specifiers
Thermal: Fix oops and unlocking in thermal_sys.c
...
This commit is contained in:
commit
50851c6248
27 changed files with 2038 additions and 398 deletions
|
|
@ -29,13 +29,13 @@
|
|||
#define CPUFREQ_COOLING_START 0
|
||||
#define CPUFREQ_COOLING_STOP 1
|
||||
|
||||
#ifdef CONFIG_CPU_THERMAL
|
||||
#if defined(CONFIG_CPU_THERMAL) || defined(CONFIG_CPU_THERMAL_MODULE)
|
||||
/**
|
||||
* cpufreq_cooling_register - function to create cpufreq cooling device.
|
||||
* @clip_cpus: cpumask of cpus where the frequency constraints will happen
|
||||
*/
|
||||
struct thermal_cooling_device *cpufreq_cooling_register(
|
||||
struct cpumask *clip_cpus);
|
||||
const struct cpumask *clip_cpus);
|
||||
|
||||
/**
|
||||
* cpufreq_cooling_unregister - function to remove cpufreq cooling device.
|
||||
|
|
@ -44,7 +44,7 @@ struct thermal_cooling_device *cpufreq_cooling_register(
|
|||
void cpufreq_cooling_unregister(struct thermal_cooling_device *cdev);
|
||||
#else /* !CONFIG_CPU_THERMAL */
|
||||
static inline struct thermal_cooling_device *cpufreq_cooling_register(
|
||||
struct cpumask *clip_cpus)
|
||||
const struct cpumask *clip_cpus)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
|||
38
include/linux/platform_data/db8500_thermal.h
Normal file
38
include/linux/platform_data/db8500_thermal.h
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
/*
|
||||
* db8500_thermal.h - DB8500 Thermal Management Implementation
|
||||
*
|
||||
* Copyright (C) 2012 ST-Ericsson
|
||||
* Copyright (C) 2012 Linaro Ltd.
|
||||
*
|
||||
* Author: Hongbo Zhang <hongbo.zhang@linaro.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; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef _DB8500_THERMAL_H_
|
||||
#define _DB8500_THERMAL_H_
|
||||
|
||||
#include <linux/thermal.h>
|
||||
|
||||
#define COOLING_DEV_MAX 8
|
||||
|
||||
struct db8500_trip_point {
|
||||
unsigned long temp;
|
||||
enum thermal_trip_type type;
|
||||
char cdev_name[COOLING_DEV_MAX][THERMAL_NAME_LENGTH];
|
||||
};
|
||||
|
||||
struct db8500_thsens_platform_data {
|
||||
struct db8500_trip_point trip_points[THERMAL_MAX_TRIPS];
|
||||
int num_trips;
|
||||
};
|
||||
|
||||
#endif /* _DB8500_THERMAL_H_ */
|
||||
|
|
@ -29,6 +29,32 @@
|
|||
#include <linux/device.h>
|
||||
#include <linux/workqueue.h>
|
||||
|
||||
#define THERMAL_TRIPS_NONE -1
|
||||
#define THERMAL_MAX_TRIPS 12
|
||||
#define THERMAL_NAME_LENGTH 20
|
||||
|
||||
/* No upper/lower limit requirement */
|
||||
#define THERMAL_NO_LIMIT -1UL
|
||||
|
||||
/* Unit conversion macros */
|
||||
#define KELVIN_TO_CELSIUS(t) (long)(((long)t-2732 >= 0) ? \
|
||||
((long)t-2732+5)/10 : ((long)t-2732-5)/10)
|
||||
#define CELSIUS_TO_KELVIN(t) ((t)*10+2732)
|
||||
|
||||
/* Adding event notification support elements */
|
||||
#define THERMAL_GENL_FAMILY_NAME "thermal_event"
|
||||
#define THERMAL_GENL_VERSION 0x01
|
||||
#define THERMAL_GENL_MCAST_GROUP_NAME "thermal_mc_group"
|
||||
|
||||
/* Default Thermal Governor */
|
||||
#if defined(CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE)
|
||||
#define DEFAULT_THERMAL_GOVERNOR "step_wise"
|
||||
#elif defined(CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE)
|
||||
#define DEFAULT_THERMAL_GOVERNOR "fair_share"
|
||||
#elif defined(CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE)
|
||||
#define DEFAULT_THERMAL_GOVERNOR "user_space"
|
||||
#endif
|
||||
|
||||
struct thermal_zone_device;
|
||||
struct thermal_cooling_device;
|
||||
|
||||
|
|
@ -50,6 +76,30 @@ enum thermal_trend {
|
|||
THERMAL_TREND_DROPPING, /* temperature is dropping */
|
||||
};
|
||||
|
||||
/* Events supported by Thermal Netlink */
|
||||
enum events {
|
||||
THERMAL_AUX0,
|
||||
THERMAL_AUX1,
|
||||
THERMAL_CRITICAL,
|
||||
THERMAL_DEV_FAULT,
|
||||
};
|
||||
|
||||
/* attributes of thermal_genl_family */
|
||||
enum {
|
||||
THERMAL_GENL_ATTR_UNSPEC,
|
||||
THERMAL_GENL_ATTR_EVENT,
|
||||
__THERMAL_GENL_ATTR_MAX,
|
||||
};
|
||||
#define THERMAL_GENL_ATTR_MAX (__THERMAL_GENL_ATTR_MAX - 1)
|
||||
|
||||
/* commands supported by the thermal_genl_family */
|
||||
enum {
|
||||
THERMAL_GENL_CMD_UNSPEC,
|
||||
THERMAL_GENL_CMD_EVENT,
|
||||
__THERMAL_GENL_CMD_MAX,
|
||||
};
|
||||
#define THERMAL_GENL_CMD_MAX (__THERMAL_GENL_CMD_MAX - 1)
|
||||
|
||||
struct thermal_zone_device_ops {
|
||||
int (*bind) (struct thermal_zone_device *,
|
||||
struct thermal_cooling_device *);
|
||||
|
|
@ -83,11 +133,6 @@ struct thermal_cooling_device_ops {
|
|||
int (*set_cur_state) (struct thermal_cooling_device *, unsigned long);
|
||||
};
|
||||
|
||||
#define THERMAL_NO_LIMIT -1UL /* no upper/lower limit requirement */
|
||||
|
||||
#define THERMAL_TRIPS_NONE -1
|
||||
#define THERMAL_MAX_TRIPS 12
|
||||
#define THERMAL_NAME_LENGTH 20
|
||||
struct thermal_cooling_device {
|
||||
int id;
|
||||
char type[THERMAL_NAME_LENGTH];
|
||||
|
|
@ -100,10 +145,6 @@ struct thermal_cooling_device {
|
|||
struct list_head node;
|
||||
};
|
||||
|
||||
#define KELVIN_TO_CELSIUS(t) (long)(((long)t-2732 >= 0) ? \
|
||||
((long)t-2732+5)/10 : ((long)t-2732-5)/10)
|
||||
#define CELSIUS_TO_KELVIN(t) ((t)*10+2732)
|
||||
|
||||
struct thermal_attr {
|
||||
struct device_attribute attr;
|
||||
char name[THERMAL_NAME_LENGTH];
|
||||
|
|
@ -125,46 +166,61 @@ struct thermal_zone_device {
|
|||
int passive;
|
||||
unsigned int forced_passive;
|
||||
const struct thermal_zone_device_ops *ops;
|
||||
const struct thermal_zone_params *tzp;
|
||||
struct thermal_governor *governor;
|
||||
struct list_head thermal_instances;
|
||||
struct idr idr;
|
||||
struct mutex lock; /* protect thermal_instances list */
|
||||
struct list_head node;
|
||||
struct delayed_work poll_queue;
|
||||
};
|
||||
/* Adding event notification support elements */
|
||||
#define THERMAL_GENL_FAMILY_NAME "thermal_event"
|
||||
#define THERMAL_GENL_VERSION 0x01
|
||||
#define THERMAL_GENL_MCAST_GROUP_NAME "thermal_mc_group"
|
||||
|
||||
enum events {
|
||||
THERMAL_AUX0,
|
||||
THERMAL_AUX1,
|
||||
THERMAL_CRITICAL,
|
||||
THERMAL_DEV_FAULT,
|
||||
/* Structure that holds thermal governor information */
|
||||
struct thermal_governor {
|
||||
char name[THERMAL_NAME_LENGTH];
|
||||
int (*throttle)(struct thermal_zone_device *tz, int trip);
|
||||
struct list_head governor_list;
|
||||
struct module *owner;
|
||||
};
|
||||
|
||||
/* Structure that holds binding parameters for a zone */
|
||||
struct thermal_bind_params {
|
||||
struct thermal_cooling_device *cdev;
|
||||
|
||||
/*
|
||||
* This is a measure of 'how effectively these devices can
|
||||
* cool 'this' thermal zone. The shall be determined by platform
|
||||
* characterization. This is on a 'percentage' scale.
|
||||
* See Documentation/thermal/sysfs-api.txt for more information.
|
||||
*/
|
||||
int weight;
|
||||
|
||||
/*
|
||||
* This is a bit mask that gives the binding relation between this
|
||||
* thermal zone and cdev, for a particular trip point.
|
||||
* See Documentation/thermal/sysfs-api.txt for more information.
|
||||
*/
|
||||
int trip_mask;
|
||||
int (*match) (struct thermal_zone_device *tz,
|
||||
struct thermal_cooling_device *cdev);
|
||||
};
|
||||
|
||||
/* Structure to define Thermal Zone parameters */
|
||||
struct thermal_zone_params {
|
||||
char governor_name[THERMAL_NAME_LENGTH];
|
||||
int num_tbps; /* Number of tbp entries */
|
||||
struct thermal_bind_params *tbp;
|
||||
};
|
||||
|
||||
struct thermal_genl_event {
|
||||
u32 orig;
|
||||
enum events event;
|
||||
};
|
||||
/* attributes of thermal_genl_family */
|
||||
enum {
|
||||
THERMAL_GENL_ATTR_UNSPEC,
|
||||
THERMAL_GENL_ATTR_EVENT,
|
||||
__THERMAL_GENL_ATTR_MAX,
|
||||
};
|
||||
#define THERMAL_GENL_ATTR_MAX (__THERMAL_GENL_ATTR_MAX - 1)
|
||||
|
||||
/* commands supported by the thermal_genl_family */
|
||||
enum {
|
||||
THERMAL_GENL_CMD_UNSPEC,
|
||||
THERMAL_GENL_CMD_EVENT,
|
||||
__THERMAL_GENL_CMD_MAX,
|
||||
};
|
||||
#define THERMAL_GENL_CMD_MAX (__THERMAL_GENL_CMD_MAX - 1)
|
||||
|
||||
/* Function declarations */
|
||||
struct thermal_zone_device *thermal_zone_device_register(const char *, int, int,
|
||||
void *, const struct thermal_zone_device_ops *, int, int);
|
||||
void *, const struct thermal_zone_device_ops *,
|
||||
const struct thermal_zone_params *, int, int);
|
||||
void thermal_zone_device_unregister(struct thermal_zone_device *);
|
||||
|
||||
int thermal_zone_bind_cooling_device(struct thermal_zone_device *, int,
|
||||
|
|
@ -173,10 +229,20 @@ int thermal_zone_bind_cooling_device(struct thermal_zone_device *, int,
|
|||
int thermal_zone_unbind_cooling_device(struct thermal_zone_device *, int,
|
||||
struct thermal_cooling_device *);
|
||||
void thermal_zone_device_update(struct thermal_zone_device *);
|
||||
|
||||
struct thermal_cooling_device *thermal_cooling_device_register(char *, void *,
|
||||
const struct thermal_cooling_device_ops *);
|
||||
void thermal_cooling_device_unregister(struct thermal_cooling_device *);
|
||||
|
||||
int get_tz_trend(struct thermal_zone_device *, int);
|
||||
struct thermal_instance *get_thermal_instance(struct thermal_zone_device *,
|
||||
struct thermal_cooling_device *, int);
|
||||
void thermal_cdev_update(struct thermal_cooling_device *);
|
||||
void notify_thermal_framework(struct thermal_zone_device *, int);
|
||||
|
||||
int thermal_register_governor(struct thermal_governor *);
|
||||
void thermal_unregister_governor(struct thermal_governor *);
|
||||
|
||||
#ifdef CONFIG_NET
|
||||
extern int thermal_generate_netlink_event(u32 orig, enum events event);
|
||||
#else
|
||||
|
|
|
|||
Loading…
Reference in a new issue