Re: [PATCH V6 13/30] thermal: exynos: Add support for instance based register/unregister

2013-06-19 Thread Eduardo Valentin
Hi,

On 17-06-2013 02:46, Amit Daniel Kachhap wrote:
 This code modifies the thermal driver to have multiple thermal zone
 support by replacing the global thermal zone variable with device data
 member of thermal_zone_device.
 
 Acked-by: Kukjin Kim kgene@samsung.com
 Acked-by: Jonghwa Lee jonghwa3@samsung.com
 Signed-off-by: Amit Daniel Kachhap amit.dan...@samsung.com

Acked-by: Eduardo Valentin eduardo.valen...@ti.com

 ---
  drivers/thermal/samsung/exynos_thermal_common.c |   36 ++
  drivers/thermal/samsung/exynos_thermal_common.h |9 +++--
  drivers/thermal/samsung/exynos_tmu.c|   15 +
  3 files changed, 36 insertions(+), 24 deletions(-)
 
 diff --git a/drivers/thermal/samsung/exynos_thermal_common.c 
 b/drivers/thermal/samsung/exynos_thermal_common.c
 index dd49c9f..2af1e3b 100644
 --- a/drivers/thermal/samsung/exynos_thermal_common.c
 +++ b/drivers/thermal/samsung/exynos_thermal_common.c
 @@ -36,12 +36,11 @@ struct exynos_thermal_zone {
   bool bind;
  };
  
 -static struct exynos_thermal_zone *th_zone;
 -
  /* Get mode callback functions for thermal zone */
  static int exynos_get_mode(struct thermal_zone_device *thermal,
   enum thermal_device_mode *mode)
  {
 + struct exynos_thermal_zone *th_zone = thermal-devdata;
   if (th_zone)
   *mode = th_zone-mode;
   return 0;
 @@ -51,25 +50,26 @@ static int exynos_get_mode(struct thermal_zone_device 
 *thermal,
  static int exynos_set_mode(struct thermal_zone_device *thermal,
   enum thermal_device_mode mode)
  {
 - if (!th_zone-therm_dev) {
 + struct exynos_thermal_zone *th_zone = thermal-devdata;
 + if (!th_zone) {
   pr_notice(thermal zone not registered\n);
   return 0;
   }
  
 - mutex_lock(th_zone-therm_dev-lock);
 + mutex_lock(thermal-lock);
  
   if (mode == THERMAL_DEVICE_ENABLED 
   !th_zone-sensor_conf-trip_data.trigger_falling)
 - th_zone-therm_dev-polling_delay = IDLE_INTERVAL;
 + thermal-polling_delay = IDLE_INTERVAL;
   else
 - th_zone-therm_dev-polling_delay = 0;
 + thermal-polling_delay = 0;
  
 - mutex_unlock(th_zone-therm_dev-lock);
 + mutex_unlock(thermal-lock);
  
   th_zone-mode = mode;
 - thermal_zone_device_update(th_zone-therm_dev);
 + thermal_zone_device_update(thermal);
   pr_info(thermal polling set for duration=%d msec\n,
 - th_zone-therm_dev-polling_delay);
 + thermal-polling_delay);
   return 0;
  }
  
 @@ -96,6 +96,8 @@ static int exynos_get_trip_type(struct thermal_zone_device 
 *thermal, int trip,
  static int exynos_get_trip_temp(struct thermal_zone_device *thermal, int 
 trip,
   unsigned long *temp)
  {
 + struct exynos_thermal_zone *th_zone = thermal-devdata;
 +
   if (trip  GET_TRIP(MONITOR_ZONE) || trip  GET_TRIP(PANIC_ZONE))
   return -EINVAL;
  
 @@ -122,6 +124,7 @@ static int exynos_bind(struct thermal_zone_device 
 *thermal,
  {
   int ret = 0, i, tab_size, level;
   struct freq_clip_table *tab_ptr, *clip_data;
 + struct exynos_thermal_zone *th_zone = thermal-devdata;
   struct thermal_sensor_conf *data = th_zone-sensor_conf;
  
   tab_ptr = (struct freq_clip_table *)data-cooling_data.freq_data;
 @@ -168,6 +171,7 @@ static int exynos_unbind(struct thermal_zone_device 
 *thermal,
   struct thermal_cooling_device *cdev)
  {
   int ret = 0, i, tab_size;
 + struct exynos_thermal_zone *th_zone = thermal-devdata;
   struct thermal_sensor_conf *data = th_zone-sensor_conf;
  
   if (th_zone-bind == false)
 @@ -210,6 +214,7 @@ static int exynos_unbind(struct thermal_zone_device 
 *thermal,
  static int exynos_get_temp(struct thermal_zone_device *thermal,
   unsigned long *temp)
  {
 + struct exynos_thermal_zone *th_zone = thermal-devdata;
   void *data;
  
   if (!th_zone-sensor_conf) {
 @@ -229,6 +234,7 @@ static int exynos_set_emul_temp(struct 
 thermal_zone_device *thermal,
  {
   void *data;
   int ret = -EINVAL;
 + struct exynos_thermal_zone *th_zone = thermal-devdata;
  
   if (!th_zone-sensor_conf) {
   pr_info(Temperature sensor not initialised\n);
 @@ -276,11 +282,12 @@ static struct thermal_zone_device_ops const 
 exynos_dev_ops = {
   * This function may be called from interrupt based temperature sensor
   * when threshold is changed.
   */
 -void exynos_report_trigger(void)
 +void exynos_report_trigger(struct thermal_sensor_conf *conf)
  {
   unsigned int i;
   char data[10];
   char *envp[] = { data, NULL };
 + struct exynos_thermal_zone *th_zone = conf-pzone_data;
  
   if (!th_zone || !th_zone-therm_dev)
   return;
 @@ -321,6 +328,7 @@ int exynos_register_thermal(struct thermal_sensor_conf 
 

[PATCH V6 13/30] thermal: exynos: Add support for instance based register/unregister

2013-06-17 Thread Amit Daniel Kachhap
This code modifies the thermal driver to have multiple thermal zone
support by replacing the global thermal zone variable with device data
member of thermal_zone_device.

Acked-by: Kukjin Kim kgene@samsung.com
Acked-by: Jonghwa Lee jonghwa3@samsung.com
Signed-off-by: Amit Daniel Kachhap amit.dan...@samsung.com
---
 drivers/thermal/samsung/exynos_thermal_common.c |   36 ++
 drivers/thermal/samsung/exynos_thermal_common.h |9 +++--
 drivers/thermal/samsung/exynos_tmu.c|   15 +
 3 files changed, 36 insertions(+), 24 deletions(-)

diff --git a/drivers/thermal/samsung/exynos_thermal_common.c 
b/drivers/thermal/samsung/exynos_thermal_common.c
index dd49c9f..2af1e3b 100644
--- a/drivers/thermal/samsung/exynos_thermal_common.c
+++ b/drivers/thermal/samsung/exynos_thermal_common.c
@@ -36,12 +36,11 @@ struct exynos_thermal_zone {
bool bind;
 };
 
-static struct exynos_thermal_zone *th_zone;
-
 /* Get mode callback functions for thermal zone */
 static int exynos_get_mode(struct thermal_zone_device *thermal,
enum thermal_device_mode *mode)
 {
+   struct exynos_thermal_zone *th_zone = thermal-devdata;
if (th_zone)
*mode = th_zone-mode;
return 0;
@@ -51,25 +50,26 @@ static int exynos_get_mode(struct thermal_zone_device 
*thermal,
 static int exynos_set_mode(struct thermal_zone_device *thermal,
enum thermal_device_mode mode)
 {
-   if (!th_zone-therm_dev) {
+   struct exynos_thermal_zone *th_zone = thermal-devdata;
+   if (!th_zone) {
pr_notice(thermal zone not registered\n);
return 0;
}
 
-   mutex_lock(th_zone-therm_dev-lock);
+   mutex_lock(thermal-lock);
 
if (mode == THERMAL_DEVICE_ENABLED 
!th_zone-sensor_conf-trip_data.trigger_falling)
-   th_zone-therm_dev-polling_delay = IDLE_INTERVAL;
+   thermal-polling_delay = IDLE_INTERVAL;
else
-   th_zone-therm_dev-polling_delay = 0;
+   thermal-polling_delay = 0;
 
-   mutex_unlock(th_zone-therm_dev-lock);
+   mutex_unlock(thermal-lock);
 
th_zone-mode = mode;
-   thermal_zone_device_update(th_zone-therm_dev);
+   thermal_zone_device_update(thermal);
pr_info(thermal polling set for duration=%d msec\n,
-   th_zone-therm_dev-polling_delay);
+   thermal-polling_delay);
return 0;
 }
 
@@ -96,6 +96,8 @@ static int exynos_get_trip_type(struct thermal_zone_device 
*thermal, int trip,
 static int exynos_get_trip_temp(struct thermal_zone_device *thermal, int trip,
unsigned long *temp)
 {
+   struct exynos_thermal_zone *th_zone = thermal-devdata;
+
if (trip  GET_TRIP(MONITOR_ZONE) || trip  GET_TRIP(PANIC_ZONE))
return -EINVAL;
 
@@ -122,6 +124,7 @@ static int exynos_bind(struct thermal_zone_device *thermal,
 {
int ret = 0, i, tab_size, level;
struct freq_clip_table *tab_ptr, *clip_data;
+   struct exynos_thermal_zone *th_zone = thermal-devdata;
struct thermal_sensor_conf *data = th_zone-sensor_conf;
 
tab_ptr = (struct freq_clip_table *)data-cooling_data.freq_data;
@@ -168,6 +171,7 @@ static int exynos_unbind(struct thermal_zone_device 
*thermal,
struct thermal_cooling_device *cdev)
 {
int ret = 0, i, tab_size;
+   struct exynos_thermal_zone *th_zone = thermal-devdata;
struct thermal_sensor_conf *data = th_zone-sensor_conf;
 
if (th_zone-bind == false)
@@ -210,6 +214,7 @@ static int exynos_unbind(struct thermal_zone_device 
*thermal,
 static int exynos_get_temp(struct thermal_zone_device *thermal,
unsigned long *temp)
 {
+   struct exynos_thermal_zone *th_zone = thermal-devdata;
void *data;
 
if (!th_zone-sensor_conf) {
@@ -229,6 +234,7 @@ static int exynos_set_emul_temp(struct thermal_zone_device 
*thermal,
 {
void *data;
int ret = -EINVAL;
+   struct exynos_thermal_zone *th_zone = thermal-devdata;
 
if (!th_zone-sensor_conf) {
pr_info(Temperature sensor not initialised\n);
@@ -276,11 +282,12 @@ static struct thermal_zone_device_ops const 
exynos_dev_ops = {
  * This function may be called from interrupt based temperature sensor
  * when threshold is changed.
  */
-void exynos_report_trigger(void)
+void exynos_report_trigger(struct thermal_sensor_conf *conf)
 {
unsigned int i;
char data[10];
char *envp[] = { data, NULL };
+   struct exynos_thermal_zone *th_zone = conf-pzone_data;
 
if (!th_zone || !th_zone-therm_dev)
return;
@@ -321,6 +328,7 @@ int exynos_register_thermal(struct thermal_sensor_conf 
*sensor_conf)
 {
int ret;
struct cpumask mask_val;
+   struct exynos_thermal_zone *th_zone;
 
if