Nishanth Menon <n...@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 <n...@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;
>  };
>  
>  /**
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to