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

Commit 3dfc35ff authored by Andrii Tseglytskyi's avatar Andrii Tseglytskyi Committed by Kevin Hilman
Browse files

PM / AVS: SmartReflex: use omap_sr * for errgen interfaces



SmartReflex driver interface is natively divided to two parts:

- external SmartReflex interface
- interface between SmartReflex driver and SmartReflex Class

Functions which belong to AVS class interface can use
struct omap_sr* instead of struct voltatedomain*, to provide a
direct connection between SR driver and SR class. This allows
us to optimize and not do additional lookups where none is
required.

sr_disable_errgen() and sr_configure_errgen() are interface
functions between SR driver and SR class. They are typically
used by Class driver to configure error generator module during
SmartReflex enable/disable sequence.
Now they take struct omap_sr* as input parameter.

Signed-off-by: default avatarAndrii Tseglytskyi <andrii.tseglytskyi@ti.com>
Acked-by: default avatarNishanth Menon <nm@ti.com>
Signed-off-by: default avatarKevin Hilman <khilman@linaro.org>
parent 33da2824
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -31,7 +31,7 @@ static int sr_class3_enable(struct omap_sr *sr)


static int sr_class3_disable(struct omap_sr *sr, int is_volt_reset)
static int sr_class3_disable(struct omap_sr *sr, int is_volt_reset)
{
{
	sr_disable_errgen(sr->voltdm);
	sr_disable_errgen(sr);
	omap_vp_disable(sr->voltdm);
	omap_vp_disable(sr->voltdm);
	sr_disable(sr->voltdm);
	sr_disable(sr->voltdm);
	if (is_volt_reset)
	if (is_volt_reset)
@@ -42,7 +42,7 @@ static int sr_class3_disable(struct omap_sr *sr, int is_volt_reset)


static int sr_class3_configure(struct omap_sr *sr)
static int sr_class3_configure(struct omap_sr *sr)
{
{
	return sr_configure_errgen(sr->voltdm);
	return sr_configure_errgen(sr);
}
}


/* SR class3 structure */
/* SR class3 structure */
+13 −13
Original line number Original line Diff line number Diff line
@@ -342,9 +342,9 @@ static struct omap_sr_nvalue_table *sr_retrieve_nvalue_row(
/* Public Functions */
/* Public Functions */


/**
/**
 * sr_configure_errgen() - Configures the smrtreflex to perform AVS using the
 * sr_configure_errgen() - Configures the SmartReflex to perform AVS using the
 *			 error generator module.
 *			 error generator module.
 * @voltdm:	VDD pointer to which the SR module to be configured belongs to.
 * @sr:			SR module to be configured.
 *
 *
 * This API is to be called from the smartreflex class driver to
 * This API is to be called from the smartreflex class driver to
 * configure the error generator module inside the smartreflex module.
 * configure the error generator module inside the smartreflex module.
@@ -353,17 +353,17 @@ static struct omap_sr_nvalue_table *sr_retrieve_nvalue_row(
 * SR CLASS 2 can choose between ERROR module and MINMAXAVG
 * SR CLASS 2 can choose between ERROR module and MINMAXAVG
 * module. Returns 0 on success and error value in case of failure.
 * module. Returns 0 on success and error value in case of failure.
 */
 */
int sr_configure_errgen(struct voltagedomain *voltdm)
int sr_configure_errgen(struct omap_sr *sr)
{
{
	u32 sr_config, sr_errconfig, errconfig_offs;
	u32 sr_config, sr_errconfig, errconfig_offs;
	u32 vpboundint_en, vpboundint_st;
	u32 vpboundint_en, vpboundint_st;
	u32 senp_en = 0, senn_en = 0;
	u32 senp_en = 0, senn_en = 0;
	u8 senp_shift, senn_shift;
	u8 senp_shift, senn_shift;
	struct omap_sr *sr = _sr_lookup(voltdm);


	if (IS_ERR(sr)) {
	if (!sr) {
		pr_warning("%s: omap_sr struct for voltdm not found\n",	__func__);
		pr_warn("%s: NULL omap_sr from %pF\n", __func__,
		return PTR_ERR(sr);
			(void *)_RET_IP_);
		return -EINVAL;
	}
	}


	if (!sr->clk_length)
	if (!sr->clk_length)
@@ -415,22 +415,22 @@ int sr_configure_errgen(struct voltagedomain *voltdm)


/**
/**
 * sr_disable_errgen() - Disables SmartReflex AVS module's errgen component
 * sr_disable_errgen() - Disables SmartReflex AVS module's errgen component
 * @voltdm:	VDD pointer to which the SR module to be configured belongs to.
 * @sr:			SR module to be configured.
 *
 *
 * This API is to be called from the smartreflex class driver to
 * This API is to be called from the smartreflex class driver to
 * disable the error generator module inside the smartreflex module.
 * disable the error generator module inside the smartreflex module.
 *
 *
 * Returns 0 on success and error value in case of failure.
 * Returns 0 on success and error value in case of failure.
 */
 */
int sr_disable_errgen(struct voltagedomain *voltdm)
int sr_disable_errgen(struct omap_sr *sr)
{
{
	u32 errconfig_offs;
	u32 errconfig_offs;
	u32 vpboundint_en, vpboundint_st;
	u32 vpboundint_en, vpboundint_st;
	struct omap_sr *sr = _sr_lookup(voltdm);


	if (IS_ERR(sr)) {
	if (!sr) {
		pr_warning("%s: omap_sr struct for voltdm not found\n",	__func__);
		pr_warn("%s: NULL omap_sr from %pF\n", __func__,
		return PTR_ERR(sr);
			(void *)_RET_IP_);
		return -EINVAL;
	}
	}


	switch (sr->ip_type) {
	switch (sr->ip_type) {
+2 −2
Original line number Original line Diff line number Diff line
@@ -301,8 +301,8 @@ void omap_sr_register_pmic(struct omap_sr_pmic_data *pmic_data);
/* Smartreflex driver hooks to be called from Smartreflex class driver */
/* Smartreflex driver hooks to be called from Smartreflex class driver */
int sr_enable(struct voltagedomain *voltdm, unsigned long volt);
int sr_enable(struct voltagedomain *voltdm, unsigned long volt);
void sr_disable(struct voltagedomain *voltdm);
void sr_disable(struct voltagedomain *voltdm);
int sr_configure_errgen(struct voltagedomain *voltdm);
int sr_configure_errgen(struct omap_sr *sr);
int sr_disable_errgen(struct voltagedomain *voltdm);
int sr_disable_errgen(struct omap_sr *sr);
int sr_configure_minmax(struct voltagedomain *voltdm);
int sr_configure_minmax(struct voltagedomain *voltdm);


/* API to register the smartreflex class driver with the smartreflex driver */
/* API to register the smartreflex class driver with the smartreflex driver */