diff mbox series

[v2,2/4] opp: add API which get max freq by voltage

Message ID 1553841972-19737-3-git-send-email-andrew-sh.cheng@mediatek.com (mailing list archive)
State New, archived
Headers show
Series Add cpufreq and cci devfreq for mt8183 | expand

Commit Message

andrew-sh.cheng March 29, 2019, 6:46 a.m. UTC
This API will get voltage as input parameter.
Search all opp items for the item which with max frequency,
and the voltae is smaller than provided voltage.

Signed-off-by: Andrew-sh.Cheng <andrew-sh.cheng@mediatek.com>
---
 drivers/opp/core.c     | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++
 include/linux/pm_opp.h |  8 ++++++++
 2 files changed, 63 insertions(+)

Comments

MyungJoo Ham April 1, 2019, 2:30 a.m. UTC | #1
>This API will get voltage as input parameter.
>Search all opp items for the item which with max frequency,
>and the voltae is smaller than provided voltage.
>
>Signed-off-by: Andrew-sh.Cheng <andrew-sh.cheng@mediatek.com>
>---
> drivers/opp/core.c     | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++
> include/linux/pm_opp.h |  8 ++++++++
> 2 files changed, 63 insertions(+)
>
>diff --git a/include/linux/pm_opp.h b/include/linux/pm_opp.h
>index 24c757a..57deef9 100644
>--- a/include/linux/pm_opp.h
>+++ b/include/linux/pm_opp.h
>@@ -102,6 +102,8 @@ struct dev_pm_opp *dev_pm_opp_find_freq_exact(struct device *dev,
> 
> struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev,
> 					      unsigned long *freq);
>+struct dev_pm_opp *dev_pm_opp_find_max_freq_by_volt(struct device *dev,
>+					      unsigned long u_volt);

For the symmetricity, wouldn't it be better to name it
dev_pm_opp_find_volt_ceiling(dev, u_volt); ?

Cheers,
MyungJoo
Nicolas Boichat April 3, 2019, 4:32 a.m. UTC | #2
On Fri, Mar 29, 2019 at 2:46 PM Andrew-sh.Cheng
<andrew-sh.cheng@mediatek.com> wrote:
>
> This API will get voltage as input parameter.
> Search all opp items for the item which with max frequency,
> and the voltae is smaller than provided voltage.
>
> Signed-off-by: Andrew-sh.Cheng <andrew-sh.cheng@mediatek.com>
> ---
>  drivers/opp/core.c     | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++
>  include/linux/pm_opp.h |  8 ++++++++
>  2 files changed, 63 insertions(+)
>
> diff --git a/drivers/opp/core.c b/drivers/opp/core.c
> index 0420f7e..7323cd9 100644
> --- a/drivers/opp/core.c
> +++ b/drivers/opp/core.c
> @@ -526,6 +526,61 @@ struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev,
>  }
>  EXPORT_SYMBOL_GPL(dev_pm_opp_find_freq_floor);
>
> +/**
> + * dev_pm_opp_find_max_freq_by_volt() - Search for a opp with max freq
> + * under provided voltage
> + * @dev:       device for which we do this operation
> + * @u_volt:    provided voltage
> + *
> + * Search for the matching available OPP which provide voltage can support.
> + *
> + * Return: matching *opp, else returns ERR_PTR in case of error
> + * and should be handled using IS_ERR.
> + * Error return values can be:
> + * EINVAL:     for bad pointer
> + * ERANGE:     no match found for search
> + * ENODEV:     if device not found in list of registered devices
> + *
> + * The callers are required to call dev_pm_opp_put() for the returned OPP after
> + * use.
> + */
> +struct dev_pm_opp *dev_pm_opp_find_max_freq_by_volt(struct device *dev,
> +                                             unsigned long u_volt)
> +{
> +       struct opp_table *opp_table;
> +       struct dev_pm_opp *temp_opp, *opp = ERR_PTR(-ERANGE);
> +
> +       if (!dev || !u_volt) {
> +               dev_err(dev, "%s: Invalid argument volt=%d\n", __func__,
> +                       u_volt);

u_volt is an unsigned long, so you should use %lu.

drivers/opp/core.c:582:3: error: format '%d' expects argument of type
'int', but argument 4 has type 'long unsigned int' [-Werror=format=]
  chromeos-kernel-4_19-4.19.32-r271:    dev_err(dev, "%s: Invalid
argument volt=%d\n", __func__,
  chromeos-kernel-4_19-4.19.32-r271:    ^

> +               return ERR_PTR(-EINVAL);
> +       }
> +
> +       opp_table = _find_opp_table(dev);
> +       if (IS_ERR(opp_table))
> +               return ERR_CAST(opp_table);
> +
> +       mutex_lock(&opp_table->lock);
> +
> +       list_for_each_entry(temp_opp, &opp_table->opp_list, node) {
> +               if (temp_opp->available) {
> +                       /* go to the next node, before choosing prev */
> +                       if (temp_opp->supplies[0].u_volt > u_volt)
> +                               break;
> +                       opp = temp_opp;
> +               }
> +       }
> +
> +       /* Increment the reference count of OPP */
> +       if (!IS_ERR(opp))
> +               dev_pm_opp_get(opp);
> +       mutex_unlock(&opp_table->lock);
> +       dev_pm_opp_put_opp_table(opp_table);
> +
> +       return opp;
> +}
> +EXPORT_SYMBOL_GPL(dev_pm_opp_find_max_freq_by_volt);
> +
>  static int _set_opp_voltage(struct device *dev, struct regulator *reg,
>                             struct dev_pm_opp_supply *supply)
>  {
> diff --git a/include/linux/pm_opp.h b/include/linux/pm_opp.h
> index 24c757a..57deef9 100644
> --- a/include/linux/pm_opp.h
> +++ b/include/linux/pm_opp.h
> @@ -102,6 +102,8 @@ struct dev_pm_opp *dev_pm_opp_find_freq_exact(struct device *dev,
>
>  struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev,
>                                               unsigned long *freq);
> +struct dev_pm_opp *dev_pm_opp_find_max_freq_by_volt(struct device *dev,
> +                                             unsigned long u_volt);
>
>  struct dev_pm_opp *dev_pm_opp_find_freq_ceil(struct device *dev,
>                                              unsigned long *freq);
> @@ -207,6 +209,12 @@ static inline struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev,
>         return ERR_PTR(-ENOTSUPP);
>  }
>
> +static inline struct dev_pm_opp *dev_pm_opp_find_max_freq_by_volt(struct device *dev,
> +                                             unsigned long u_volt)
> +{
> +       return ERR_PTR(-ENOTSUPP);
> +}
> +
>  static inline struct dev_pm_opp *dev_pm_opp_find_freq_ceil(struct device *dev,
>                                         unsigned long *freq)
>  {
> --
> 1.8.1.1.dirty
>
>
> _______________________________________________
> Linux-mediatek mailing list
> Linux-mediatek@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-mediatek
Viresh Kumar April 10, 2019, 6:29 a.m. UTC | #3
On 29-03-19, 14:46, Andrew-sh.Cheng wrote:
> This API will get voltage as input parameter.
> Search all opp items for the item which with max frequency,
> and the voltae is smaller than provided voltage.
> 
> Signed-off-by: Andrew-sh.Cheng <andrew-sh.cheng@mediatek.com>
> ---
>  drivers/opp/core.c     | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++
>  include/linux/pm_opp.h |  8 ++++++++
>  2 files changed, 63 insertions(+)

I have applied this patch with some modifications, here is the diff:

---
 drivers/opp/core.c     | 29 ++++++++++++++---------------
 include/linux/pm_opp.h |  8 ++++----
 2 files changed, 18 insertions(+), 19 deletions(-)

diff --git a/drivers/opp/core.c b/drivers/opp/core.c
index 7323cd9aabf9..0e7703fe733f 100644
--- a/drivers/opp/core.c
+++ b/drivers/opp/core.c
@@ -527,31 +527,30 @@ struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev,
 EXPORT_SYMBOL_GPL(dev_pm_opp_find_freq_floor);
 
 /**
- * dev_pm_opp_find_max_freq_by_volt() - Search for a opp with max freq
- * under provided voltage
- * @dev:	device for which we do this operation
- * @u_volt:	provided voltage
+ * dev_pm_opp_find_freq_ceil_by_volt() - Find OPP with highest frequency for
+ *					 target voltage.
+ * @dev:	Device for which we do this operation.
+ * @u_volt:	Target voltage.
+ *
+ * Search for OPP with highest (ceil) frequency and has voltage <= u_volt.
  *
- * Search for the matching available OPP which provide voltage can support.
+ * Return: matching *opp, else returns ERR_PTR in case of error which should be
+ * handled using IS_ERR.
  *
- * Return: matching *opp, else returns ERR_PTR in case of error
- * and should be handled using IS_ERR.
  * Error return values can be:
- * EINVAL:	for bad pointer
- * ERANGE:	no match found for search
- * ENODEV:	if device not found in list of registered devices
+ * EINVAL:	bad parameters
  *
  * The callers are required to call dev_pm_opp_put() for the returned OPP after
  * use.
  */
-struct dev_pm_opp *dev_pm_opp_find_max_freq_by_volt(struct device *dev,
-					      unsigned long u_volt)
+struct dev_pm_opp *dev_pm_opp_find_freq_ceil_by_volt(struct device *dev,
+						     unsigned long u_volt)
 {
 	struct opp_table *opp_table;
 	struct dev_pm_opp *temp_opp, *opp = ERR_PTR(-ERANGE);
 
 	if (!dev || !u_volt) {
-		dev_err(dev, "%s: Invalid argument volt=%d\n", __func__,
+		dev_err(dev, "%s: Invalid argument volt=%lu\n", __func__,
 			u_volt);
 		return ERR_PTR(-EINVAL);
 	}
@@ -564,7 +563,6 @@ struct dev_pm_opp *dev_pm_opp_find_max_freq_by_volt(struct device *dev,
 
 	list_for_each_entry(temp_opp, &opp_table->opp_list, node) {
 		if (temp_opp->available) {
-			/* go to the next node, before choosing prev */
 			if (temp_opp->supplies[0].u_volt > u_volt)
 				break;
 			opp = temp_opp;
@@ -574,12 +572,13 @@ struct dev_pm_opp *dev_pm_opp_find_max_freq_by_volt(struct device *dev,
 	/* Increment the reference count of OPP */
 	if (!IS_ERR(opp))
 		dev_pm_opp_get(opp);
+
 	mutex_unlock(&opp_table->lock);
 	dev_pm_opp_put_opp_table(opp_table);
 
 	return opp;
 }
-EXPORT_SYMBOL_GPL(dev_pm_opp_find_max_freq_by_volt);
+EXPORT_SYMBOL_GPL(dev_pm_opp_find_freq_ceil_by_volt);
 
 static int _set_opp_voltage(struct device *dev, struct regulator *reg,
 			    struct dev_pm_opp_supply *supply)
diff --git a/include/linux/pm_opp.h b/include/linux/pm_opp.h
index 57deef9cf5d3..b150fe97ce5a 100644
--- a/include/linux/pm_opp.h
+++ b/include/linux/pm_opp.h
@@ -102,8 +102,8 @@ struct dev_pm_opp *dev_pm_opp_find_freq_exact(struct device *dev,
 
 struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev,
 					      unsigned long *freq);
-struct dev_pm_opp *dev_pm_opp_find_max_freq_by_volt(struct device *dev,
-					      unsigned long u_volt);
+struct dev_pm_opp *dev_pm_opp_find_freq_ceil_by_volt(struct device *dev,
+						     unsigned long u_volt);
 
 struct dev_pm_opp *dev_pm_opp_find_freq_ceil(struct device *dev,
 					     unsigned long *freq);
@@ -209,8 +209,8 @@ static inline struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev,
 	return ERR_PTR(-ENOTSUPP);
 }
 
-static inline struct dev_pm_opp *dev_pm_opp_find_max_freq_by_volt(struct device *dev,
-					      unsigned long u_volt)
+static inline struct dev_pm_opp *dev_pm_opp_find_freq_ceil_by_volt(struct device *dev,
+					unsigned long u_volt)
 {
 	return ERR_PTR(-ENOTSUPP);
 }
andrew-sh.cheng April 13, 2019, 3:36 a.m. UTC | #4
On Mon, 2019-04-01 at 11:30 +0900, MyungJoo Ham wrote:
> >This API will get voltage as input parameter.
> >Search all opp items for the item which with max frequency,
> >and the voltae is smaller than provided voltage.
> >
> >Signed-off-by: Andrew-sh.Cheng <andrew-sh.cheng@mediatek.com>
> >---
> > drivers/opp/core.c     | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++
> > include/linux/pm_opp.h |  8 ++++++++
> > 2 files changed, 63 insertions(+)
> >
> >diff --git a/include/linux/pm_opp.h b/include/linux/pm_opp.h
> >index 24c757a..57deef9 100644
> >--- a/include/linux/pm_opp.h
> >+++ b/include/linux/pm_opp.h
> >@@ -102,6 +102,8 @@ struct dev_pm_opp *dev_pm_opp_find_freq_exact(struct device *dev,
> > 
> > struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev,
> > 					      unsigned long *freq);
> >+struct dev_pm_opp *dev_pm_opp_find_max_freq_by_volt(struct device *dev,
> >+					      unsigned long u_volt);
> 
> For the symmetricity, wouldn't it be better to name it
> dev_pm_opp_find_volt_ceiling(dev, u_volt); ?
Yes.
Viresh has comment on this, too.
I will use dev_pm_opp_find_freq_ceil_by_volt() in next patch.

> 
> Cheers,
> MyungJoo
> 
> 
> 
> _______________________________________________
> Linux-mediatek mailing list
> Linux-mediatek@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-mediatek
andrew-sh.cheng April 13, 2019, 4:39 a.m. UTC | #5
On Wed, 2019-04-03 at 12:32 +0800, Nicolas Boichat wrote:
> On Fri, Mar 29, 2019 at 2:46 PM Andrew-sh.Cheng
> <andrew-sh.cheng@mediatek.com> wrote:
> >
> > This API will get voltage as input parameter.
> > Search all opp items for the item which with max frequency,
> > and the voltae is smaller than provided voltage.
> >
> > Signed-off-by: Andrew-sh.Cheng <andrew-sh.cheng@mediatek.com>
> > ---
> >  drivers/opp/core.c     | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++
> >  include/linux/pm_opp.h |  8 ++++++++
> >  2 files changed, 63 insertions(+)
> >
> > diff --git a/drivers/opp/core.c b/drivers/opp/core.c
> > index 0420f7e..7323cd9 100644
> > --- a/drivers/opp/core.c
> > +++ b/drivers/opp/core.c
> > @@ -526,6 +526,61 @@ struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev,
> >  }
> >  EXPORT_SYMBOL_GPL(dev_pm_opp_find_freq_floor);
> >
> > +/**
> > + * dev_pm_opp_find_max_freq_by_volt() - Search for a opp with max freq
> > + * under provided voltage
> > + * @dev:       device for which we do this operation
> > + * @u_volt:    provided voltage
> > + *
> > + * Search for the matching available OPP which provide voltage can support.
> > + *
> > + * Return: matching *opp, else returns ERR_PTR in case of error
> > + * and should be handled using IS_ERR.
> > + * Error return values can be:
> > + * EINVAL:     for bad pointer
> > + * ERANGE:     no match found for search
> > + * ENODEV:     if device not found in list of registered devices
> > + *
> > + * The callers are required to call dev_pm_opp_put() for the returned OPP after
> > + * use.
> > + */
> > +struct dev_pm_opp *dev_pm_opp_find_max_freq_by_volt(struct device *dev,
> > +                                             unsigned long u_volt)
> > +{
> > +       struct opp_table *opp_table;
> > +       struct dev_pm_opp *temp_opp, *opp = ERR_PTR(-ERANGE);
> > +
> > +       if (!dev || !u_volt) {
> > +               dev_err(dev, "%s: Invalid argument volt=%d\n", __func__,
> > +                       u_volt);
> 
> u_volt is an unsigned long, so you should use %lu.
> 
> drivers/opp/core.c:582:3: error: format '%d' expects argument of type
> 'int', but argument 4 has type 'long unsigned int' [-Werror=format=]
>   chromeos-kernel-4_19-4.19.32-r271:    dev_err(dev, "%s: Invalid
> argument volt=%d\n", __func__,
>   chromeos-kernel-4_19-4.19.32-r271:    ^
> 
Got it. I will fix this on next patch
> > +               return ERR_PTR(-EINVAL);
> > +       }
> > +
> > +       opp_table = _find_opp_table(dev);
> > +       if (IS_ERR(opp_table))
> > +               return ERR_CAST(opp_table);
> > +
> > +       mutex_lock(&opp_table->lock);
> > +
> > +       list_for_each_entry(temp_opp, &opp_table->opp_list, node) {
> > +               if (temp_opp->available) {
> > +                       /* go to the next node, before choosing prev */
> > +                       if (temp_opp->supplies[0].u_volt > u_volt)
> > +                               break;
> > +                       opp = temp_opp;
> > +               }
> > +       }
> > +
> > +       /* Increment the reference count of OPP */
> > +       if (!IS_ERR(opp))
> > +               dev_pm_opp_get(opp);
> > +       mutex_unlock(&opp_table->lock);
> > +       dev_pm_opp_put_opp_table(opp_table);
> > +
> > +       return opp;
> > +}
> > +EXPORT_SYMBOL_GPL(dev_pm_opp_find_max_freq_by_volt);
> > +
> >  static int _set_opp_voltage(struct device *dev, struct regulator *reg,
> >                             struct dev_pm_opp_supply *supply)
> >  {
> > diff --git a/include/linux/pm_opp.h b/include/linux/pm_opp.h
> > index 24c757a..57deef9 100644
> > --- a/include/linux/pm_opp.h
> > +++ b/include/linux/pm_opp.h
> > @@ -102,6 +102,8 @@ struct dev_pm_opp *dev_pm_opp_find_freq_exact(struct device *dev,
> >
> >  struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev,
> >                                               unsigned long *freq);
> > +struct dev_pm_opp *dev_pm_opp_find_max_freq_by_volt(struct device *dev,
> > +                                             unsigned long u_volt);
> >
> >  struct dev_pm_opp *dev_pm_opp_find_freq_ceil(struct device *dev,
> >                                              unsigned long *freq);
> > @@ -207,6 +209,12 @@ static inline struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev,
> >         return ERR_PTR(-ENOTSUPP);
> >  }
> >
> > +static inline struct dev_pm_opp *dev_pm_opp_find_max_freq_by_volt(struct device *dev,
> > +                                             unsigned long u_volt)
> > +{
> > +       return ERR_PTR(-ENOTSUPP);
> > +}
> > +
> >  static inline struct dev_pm_opp *dev_pm_opp_find_freq_ceil(struct device *dev,
> >                                         unsigned long *freq)
> >  {
> > --
> > 1.8.1.1.dirty
> >
> >
> > _______________________________________________
> > Linux-mediatek mailing list
> > Linux-mediatek@lists.infradead.org
> > http://lists.infradead.org/mailman/listinfo/linux-mediatek
Viresh Kumar June 2, 2022, 6:54 a.m. UTC | #6
On Fri, 29 Mar 2019 at 12:16, Andrew-sh.Cheng
<andrew-sh.cheng@mediatek.com> wrote:
>
> This API will get voltage as input parameter.
> Search all opp items for the item which with max frequency,
> and the voltae is smaller than provided voltage.
>
> Signed-off-by: Andrew-sh.Cheng <andrew-sh.cheng@mediatek.com>
> ---
>  drivers/opp/core.c     | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++
>  include/linux/pm_opp.h |  8 ++++++++
>  2 files changed, 63 insertions(+)

This patch added dev_pm_opp_find_freq_ceil_by_volt() but I don't find anything
in the kernel which uses it? The patchset for CCI never got merged ?

I will remove the API now.

--
Viresh
diff mbox series

Patch

diff --git a/drivers/opp/core.c b/drivers/opp/core.c
index 0420f7e..7323cd9 100644
--- a/drivers/opp/core.c
+++ b/drivers/opp/core.c
@@ -526,6 +526,61 @@  struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev,
 }
 EXPORT_SYMBOL_GPL(dev_pm_opp_find_freq_floor);
 
+/**
+ * dev_pm_opp_find_max_freq_by_volt() - Search for a opp with max freq
+ * under provided voltage
+ * @dev:	device for which we do this operation
+ * @u_volt:	provided voltage
+ *
+ * Search for the matching available OPP which provide voltage can support.
+ *
+ * Return: matching *opp, else returns ERR_PTR in case of error
+ * and should be handled using IS_ERR.
+ * Error return values can be:
+ * EINVAL:	for bad pointer
+ * ERANGE:	no match found for search
+ * ENODEV:	if device not found in list of registered devices
+ *
+ * The callers are required to call dev_pm_opp_put() for the returned OPP after
+ * use.
+ */
+struct dev_pm_opp *dev_pm_opp_find_max_freq_by_volt(struct device *dev,
+					      unsigned long u_volt)
+{
+	struct opp_table *opp_table;
+	struct dev_pm_opp *temp_opp, *opp = ERR_PTR(-ERANGE);
+
+	if (!dev || !u_volt) {
+		dev_err(dev, "%s: Invalid argument volt=%d\n", __func__,
+			u_volt);
+		return ERR_PTR(-EINVAL);
+	}
+
+	opp_table = _find_opp_table(dev);
+	if (IS_ERR(opp_table))
+		return ERR_CAST(opp_table);
+
+	mutex_lock(&opp_table->lock);
+
+	list_for_each_entry(temp_opp, &opp_table->opp_list, node) {
+		if (temp_opp->available) {
+			/* go to the next node, before choosing prev */
+			if (temp_opp->supplies[0].u_volt > u_volt)
+				break;
+			opp = temp_opp;
+		}
+	}
+
+	/* Increment the reference count of OPP */
+	if (!IS_ERR(opp))
+		dev_pm_opp_get(opp);
+	mutex_unlock(&opp_table->lock);
+	dev_pm_opp_put_opp_table(opp_table);
+
+	return opp;
+}
+EXPORT_SYMBOL_GPL(dev_pm_opp_find_max_freq_by_volt);
+
 static int _set_opp_voltage(struct device *dev, struct regulator *reg,
 			    struct dev_pm_opp_supply *supply)
 {
diff --git a/include/linux/pm_opp.h b/include/linux/pm_opp.h
index 24c757a..57deef9 100644
--- a/include/linux/pm_opp.h
+++ b/include/linux/pm_opp.h
@@ -102,6 +102,8 @@  struct dev_pm_opp *dev_pm_opp_find_freq_exact(struct device *dev,
 
 struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev,
 					      unsigned long *freq);
+struct dev_pm_opp *dev_pm_opp_find_max_freq_by_volt(struct device *dev,
+					      unsigned long u_volt);
 
 struct dev_pm_opp *dev_pm_opp_find_freq_ceil(struct device *dev,
 					     unsigned long *freq);
@@ -207,6 +209,12 @@  static inline struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev,
 	return ERR_PTR(-ENOTSUPP);
 }
 
+static inline struct dev_pm_opp *dev_pm_opp_find_max_freq_by_volt(struct device *dev,
+					      unsigned long u_volt)
+{
+	return ERR_PTR(-ENOTSUPP);
+}
+
 static inline struct dev_pm_opp *dev_pm_opp_find_freq_ceil(struct device *dev,
 					unsigned long *freq)
 {