[PATCH V3 12/19] OMAP3+: SR: introduce class start, stop and priv data

Kevin Hilman khilman at ti.com
Thu Mar 17 13:23:50 EDT 2011


Nishanth Menon <nm at ti.com> writes:

> Certain class drivers such as class 1.5 drivers, will need specific
> notification that they have to be started up or stopped independent
> of smart reflex operation. They also may need private data to be
> used for operations of their own, provide the same.
> This allows the class driver to initialize it's internal data structures
> on a need basis in preparation for the specific domain's autocomp usage.
> The resultant operation is as follows:
> when autocomp is set to 1 -> class drivers' start is called
> The existing enable/disable is still used as before by the SmartReflex
> core driver to enable disable the class operation.
> When autocomp is set to 0 -> class drivers' stop is called, signaling
> the end of usage for that domain.
>
> Signed-off-by: Nishanth Menon <nm at ti.com>

Please also fixup the comments and printks to use the start/stop
terminology instead of the init/deinit terminology.

Thanks,

Kevin

> ---
>  arch/arm/mach-omap2/smartreflex.c |   14 ++++++++++++++
>  arch/arm/mach-omap2/smartreflex.h |    6 ++++++
>  2 files changed, 20 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/smartreflex.c b/arch/arm/mach-omap2/smartreflex.c
> index 1e52d61..592e9a0 100644
> --- a/arch/arm/mach-omap2/smartreflex.c
> +++ b/arch/arm/mach-omap2/smartreflex.c
> @@ -220,6 +220,13 @@ static void sr_start_vddautocomp(struct omap_sr *sr)
>  		return;
>  	}
>  
> +	if (sr_class->start &&
> +	    sr_class->start(sr->voltdm, sr_class->class_priv_data)) {
> +		dev_err(&sr->pdev->dev,
> +			"%s: SRClass initialization failed\n", __func__);
> +		return;
> +	}
> +
>  	if (!sr_class->enable(sr->voltdm))
>  		sr->autocomp_active = true;
>  }
> @@ -235,6 +242,13 @@ static void sr_stop_vddautocomp(struct omap_sr *sr)
>  
>  	if (sr->autocomp_active) {
>  		sr_class->disable(sr->voltdm, 1);
> +		if (sr_class->stop &&
> +		    sr_class->stop(sr->voltdm,
> +			    sr_class->class_priv_data)) {
> +			dev_err(&sr->pdev->dev,
> +				"%s: SR[%d]Class deinitialization failed\n",
> +				__func__, sr->srid);
> +		}
>  		sr->autocomp_active = false;
>  	}
>  }
> diff --git a/arch/arm/mach-omap2/smartreflex.h b/arch/arm/mach-omap2/smartreflex.h
> index 5f35b9e..d4b8bee 100644
> --- a/arch/arm/mach-omap2/smartreflex.h
> +++ b/arch/arm/mach-omap2/smartreflex.h
> @@ -168,6 +168,8 @@ struct omap_sr_pmic_data {
>   *
>   * @enable:		API to enable a particular class smaartreflex.
>   * @disable:		API to disable a particular class smartreflex.
> + * @start:		API to do class specific initialization (optional)
> + * @stop:		API to do class specific deinitialization (optional)
>   * @configure:		API to configure a particular class smartreflex.
>   * @notify:		API to notify the class driver about an event in SR.
>   *			Not needed for class3.
> @@ -175,14 +177,18 @@ struct omap_sr_pmic_data {
>   * @class_type:		specify which smartreflex class.
>   *			Can be used by the SR driver to take any class
>   *			based decisions.
> + * @class_priv_data:	Class specific private data (optional)
>   */
>  struct omap_sr_class_data {
>  	int (*enable)(struct voltagedomain *voltdm);
>  	int (*disable)(struct voltagedomain *voltdm, int is_volt_reset);
> +	int (*start)(struct voltagedomain *voltdm, void *class_priv_data);
> +	int (*stop)(struct voltagedomain *voltdm, void *class_priv_data);
>  	int (*configure)(struct voltagedomain *voltdm);
>  	int (*notify)(struct voltagedomain *voltdm, u32 status);
>  	u8 notify_flags;
>  	u8 class_type;
> +	void *class_priv_data;
>  };
>  
>  /**



More information about the linux-arm-kernel mailing list