ARM: OMAP3+: SmartReflex: class drivers should use struct omap_sr *
Convert SmartReflex "class" functions to take a struct omap_sr *, rather than a struct voltagedomain *. SmartReflex code should be driver code and not tightly coupled to OMAP subarchitecture-specific structures. Based on Paul's original code for the SmartReflex driver conversion. Signed-off-by: Jean Pihet <j-pihet@ti.com> Signed-off-by: J Keerthy <j-keerthy@ti.com> Reviewed-by: Kevin Hilman <khilman@ti.com> Signed-off-by: Kevin Hilman <khilman@ti.com>
This commit is contained in:
parent
b86aeafc76
commit
80821c9c90
3 changed files with 46 additions and 46 deletions
|
@ -14,34 +14,34 @@
|
||||||
#include <linux/power/smartreflex.h>
|
#include <linux/power/smartreflex.h>
|
||||||
#include "voltage.h"
|
#include "voltage.h"
|
||||||
|
|
||||||
static int sr_class3_enable(struct voltagedomain *voltdm)
|
static int sr_class3_enable(struct omap_sr *sr)
|
||||||
{
|
{
|
||||||
unsigned long volt = voltdm_get_voltage(voltdm);
|
unsigned long volt = voltdm_get_voltage(sr->voltdm);
|
||||||
|
|
||||||
if (!volt) {
|
if (!volt) {
|
||||||
pr_warning("%s: Curr voltage unknown. Cannot enable sr_%s\n",
|
pr_warning("%s: Curr voltage unknown. Cannot enable sr_%s\n",
|
||||||
__func__, voltdm->name);
|
__func__, sr->voltdm->name);
|
||||||
return -ENODATA;
|
return -ENODATA;
|
||||||
}
|
}
|
||||||
|
|
||||||
omap_vp_enable(voltdm);
|
omap_vp_enable(sr->voltdm);
|
||||||
return sr_enable(voltdm, volt);
|
return sr_enable(sr->voltdm, volt);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sr_class3_disable(struct voltagedomain *voltdm, int is_volt_reset)
|
static int sr_class3_disable(struct omap_sr *sr, int is_volt_reset)
|
||||||
{
|
{
|
||||||
sr_disable_errgen(voltdm);
|
sr_disable_errgen(sr->voltdm);
|
||||||
omap_vp_disable(voltdm);
|
omap_vp_disable(sr->voltdm);
|
||||||
sr_disable(voltdm);
|
sr_disable(sr->voltdm);
|
||||||
if (is_volt_reset)
|
if (is_volt_reset)
|
||||||
voltdm_reset(voltdm);
|
voltdm_reset(sr->voltdm);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sr_class3_configure(struct voltagedomain *voltdm)
|
static int sr_class3_configure(struct omap_sr *sr)
|
||||||
{
|
{
|
||||||
return sr_configure_errgen(voltdm);
|
return sr_configure_errgen(sr->voltdm);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SR class3 structure */
|
/* SR class3 structure */
|
||||||
|
|
|
@ -34,29 +34,6 @@
|
||||||
#define NVALUE_NAME_LEN 40
|
#define NVALUE_NAME_LEN 40
|
||||||
#define SR_DISABLE_TIMEOUT 200
|
#define SR_DISABLE_TIMEOUT 200
|
||||||
|
|
||||||
struct omap_sr {
|
|
||||||
struct list_head node;
|
|
||||||
struct platform_device *pdev;
|
|
||||||
struct omap_sr_nvalue_table *nvalue_table;
|
|
||||||
struct voltagedomain *voltdm;
|
|
||||||
struct dentry *dbg_dir;
|
|
||||||
unsigned int irq;
|
|
||||||
int srid;
|
|
||||||
int ip_type;
|
|
||||||
int nvalue_count;
|
|
||||||
bool autocomp_active;
|
|
||||||
u32 clk_length;
|
|
||||||
u32 err_weight;
|
|
||||||
u32 err_minlimit;
|
|
||||||
u32 err_maxlimit;
|
|
||||||
u32 accum_data;
|
|
||||||
u32 senn_avgweight;
|
|
||||||
u32 senp_avgweight;
|
|
||||||
u32 senp_mod;
|
|
||||||
u32 senn_mod;
|
|
||||||
void __iomem *base;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* sr_list contains all the instances of smartreflex module */
|
/* sr_list contains all the instances of smartreflex module */
|
||||||
static LIST_HEAD(sr_list);
|
static LIST_HEAD(sr_list);
|
||||||
|
|
||||||
|
@ -147,7 +124,7 @@ static irqreturn_t sr_interrupt(int irq, void *data)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sr_class->notify)
|
if (sr_class->notify)
|
||||||
sr_class->notify(sr_info->voltdm, status);
|
sr_class->notify(sr_info, status);
|
||||||
|
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
}
|
}
|
||||||
|
@ -225,7 +202,7 @@ static void sr_start_vddautocomp(struct omap_sr *sr)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!sr_class->enable(sr->voltdm))
|
if (!sr_class->enable(sr))
|
||||||
sr->autocomp_active = true;
|
sr->autocomp_active = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -239,7 +216,7 @@ static void sr_stop_vddautocomp(struct omap_sr *sr)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sr->autocomp_active) {
|
if (sr->autocomp_active) {
|
||||||
sr_class->disable(sr->voltdm, 1);
|
sr_class->disable(sr, 1);
|
||||||
sr->autocomp_active = false;
|
sr->autocomp_active = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -654,7 +631,7 @@ int sr_enable(struct voltagedomain *voltdm, unsigned long volt)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* Configure SR */
|
/* Configure SR */
|
||||||
ret = sr_class->configure(voltdm);
|
ret = sr_class->configure(sr);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
@ -772,7 +749,7 @@ void omap_sr_enable(struct voltagedomain *voltdm)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sr_class->enable(voltdm);
|
sr_class->enable(sr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -805,7 +782,7 @@ void omap_sr_disable(struct voltagedomain *voltdm)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sr_class->disable(voltdm, 0);
|
sr_class->disable(sr, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -838,7 +815,7 @@ void omap_sr_disable_reset_volt(struct voltagedomain *voltdm)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sr_class->disable(voltdm, 1);
|
sr_class->disable(sr, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -143,6 +143,29 @@
|
||||||
#define OMAP3430_SR_ERRWEIGHT 0x04
|
#define OMAP3430_SR_ERRWEIGHT 0x04
|
||||||
#define OMAP3430_SR_ERRMAXLIMIT 0x02
|
#define OMAP3430_SR_ERRMAXLIMIT 0x02
|
||||||
|
|
||||||
|
struct omap_sr {
|
||||||
|
struct list_head node;
|
||||||
|
struct platform_device *pdev;
|
||||||
|
struct omap_sr_nvalue_table *nvalue_table;
|
||||||
|
struct voltagedomain *voltdm;
|
||||||
|
struct dentry *dbg_dir;
|
||||||
|
unsigned int irq;
|
||||||
|
int srid;
|
||||||
|
int ip_type;
|
||||||
|
int nvalue_count;
|
||||||
|
bool autocomp_active;
|
||||||
|
u32 clk_length;
|
||||||
|
u32 err_weight;
|
||||||
|
u32 err_minlimit;
|
||||||
|
u32 err_maxlimit;
|
||||||
|
u32 accum_data;
|
||||||
|
u32 senn_avgweight;
|
||||||
|
u32 senp_avgweight;
|
||||||
|
u32 senp_mod;
|
||||||
|
u32 senn_mod;
|
||||||
|
void __iomem *base;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct omap_sr_pmic_data - Strucutre to be populated by pmic code to pass
|
* struct omap_sr_pmic_data - Strucutre to be populated by pmic code to pass
|
||||||
* pmic specific info to smartreflex driver
|
* pmic specific info to smartreflex driver
|
||||||
|
@ -187,10 +210,10 @@ struct omap_smartreflex_dev_attr {
|
||||||
* based decisions.
|
* based decisions.
|
||||||
*/
|
*/
|
||||||
struct omap_sr_class_data {
|
struct omap_sr_class_data {
|
||||||
int (*enable)(struct voltagedomain *voltdm);
|
int (*enable)(struct omap_sr *sr);
|
||||||
int (*disable)(struct voltagedomain *voltdm, int is_volt_reset);
|
int (*disable)(struct omap_sr *sr, int is_volt_reset);
|
||||||
int (*configure)(struct voltagedomain *voltdm);
|
int (*configure)(struct omap_sr *sr);
|
||||||
int (*notify)(struct voltagedomain *voltdm, u32 status);
|
int (*notify)(struct omap_sr *sr, u32 status);
|
||||||
u8 notify_flags;
|
u8 notify_flags;
|
||||||
u8 class_type;
|
u8 class_type;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue