Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 80821c9c authored by Jean Pihet's avatar Jean Pihet Committed by Kevin Hilman
Browse files

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: default avatarJean Pihet <j-pihet@ti.com>
Signed-off-by: default avatarJ Keerthy <j-keerthy@ti.com>
Reviewed-by: default avatarKevin Hilman <khilman@ti.com>
Signed-off-by: default avatarKevin Hilman <khilman@ti.com>
parent b86aeafc
Loading
Loading
Loading
Loading
+12 −12
Original line number Diff line number Diff line
@@ -14,34 +14,34 @@
#include <linux/power/smartreflex.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) {
		pr_warning("%s: Curr voltage unknown. Cannot enable sr_%s\n",
				__func__, voltdm->name);
				__func__, sr->voltdm->name);
		return -ENODATA;
	}

	omap_vp_enable(voltdm);
	return sr_enable(voltdm, volt);
	omap_vp_enable(sr->voltdm);
	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);
	omap_vp_disable(voltdm);
	sr_disable(voltdm);
	sr_disable_errgen(sr->voltdm);
	omap_vp_disable(sr->voltdm);
	sr_disable(sr->voltdm);
	if (is_volt_reset)
		voltdm_reset(voltdm);
		voltdm_reset(sr->voltdm);

	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 */
+7 −30
Original line number Diff line number Diff line
@@ -34,29 +34,6 @@
#define NVALUE_NAME_LEN		40
#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 */
static LIST_HEAD(sr_list);

@@ -147,7 +124,7 @@ static irqreturn_t sr_interrupt(int irq, void *data)
	}

	if (sr_class->notify)
		sr_class->notify(sr_info->voltdm, status);
		sr_class->notify(sr_info, status);

	return IRQ_HANDLED;
}
@@ -225,7 +202,7 @@ static void sr_start_vddautocomp(struct omap_sr *sr)
		return;
	}

	if (!sr_class->enable(sr->voltdm))
	if (!sr_class->enable(sr))
		sr->autocomp_active = true;
}

@@ -239,7 +216,7 @@ static void sr_stop_vddautocomp(struct omap_sr *sr)
	}

	if (sr->autocomp_active) {
		sr_class->disable(sr->voltdm, 1);
		sr_class->disable(sr, 1);
		sr->autocomp_active = false;
	}
}
@@ -654,7 +631,7 @@ int sr_enable(struct voltagedomain *voltdm, unsigned long volt)
		return 0;

	/* Configure SR */
	ret = sr_class->configure(voltdm);
	ret = sr_class->configure(sr);
	if (ret)
		return ret;

@@ -772,7 +749,7 @@ void omap_sr_enable(struct voltagedomain *voltdm)
		return;
	}

	sr_class->enable(voltdm);
	sr_class->enable(sr);
}

/**
@@ -805,7 +782,7 @@ void omap_sr_disable(struct voltagedomain *voltdm)
		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;
	}

	sr_class->disable(voltdm, 1);
	sr_class->disable(sr, 1);
}

/**
+27 −4
Original line number Diff line number Diff line
@@ -143,6 +143,29 @@
#define OMAP3430_SR_ERRWEIGHT		0x04
#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
 *				pmic specific info to smartreflex driver
@@ -187,10 +210,10 @@ struct omap_smartreflex_dev_attr {
 *			based decisions.
 */
struct omap_sr_class_data {
	int (*enable)(struct voltagedomain *voltdm);
	int (*disable)(struct voltagedomain *voltdm, int is_volt_reset);
	int (*configure)(struct voltagedomain *voltdm);
	int (*notify)(struct voltagedomain *voltdm, u32 status);
	int (*enable)(struct omap_sr *sr);
	int (*disable)(struct omap_sr *sr, int is_volt_reset);
	int (*configure)(struct omap_sr *sr);
	int (*notify)(struct omap_sr *sr, u32 status);
	u8 notify_flags;
	u8 class_type;
};