|
@@ -235,7 +235,10 @@ EXPORT_SYMBOL(opp_get_opp_count);
|
|
|
*
|
|
|
* Searches for exact match in the opp list and returns pointer to the matching
|
|
|
* opp if found, else returns ERR_PTR in case of error and should be handled
|
|
|
- * using IS_ERR.
|
|
|
+ * 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
|
|
|
*
|
|
|
* Note: available is a modifier for the search. if available=true, then the
|
|
|
* match is for exact matching frequency and is available in the stored OPP
|
|
@@ -254,7 +257,7 @@ struct opp *opp_find_freq_exact(struct device *dev, unsigned long freq,
|
|
|
bool available)
|
|
|
{
|
|
|
struct device_opp *dev_opp;
|
|
|
- struct opp *temp_opp, *opp = ERR_PTR(-ENODEV);
|
|
|
+ struct opp *temp_opp, *opp = ERR_PTR(-ERANGE);
|
|
|
|
|
|
dev_opp = find_device_opp(dev);
|
|
|
if (IS_ERR(dev_opp)) {
|
|
@@ -284,7 +287,11 @@ EXPORT_SYMBOL(opp_find_freq_exact);
|
|
|
* for a device.
|
|
|
*
|
|
|
* Returns matching *opp and refreshes *freq accordingly, else returns
|
|
|
- * ERR_PTR in case of error and should be handled using IS_ERR.
|
|
|
+ * 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
|
|
|
*
|
|
|
* Locking: This function must be called under rcu_read_lock(). opp is a rcu
|
|
|
* protected pointer. The reason for the same is that the opp pointer which is
|
|
@@ -295,7 +302,7 @@ EXPORT_SYMBOL(opp_find_freq_exact);
|
|
|
struct opp *opp_find_freq_ceil(struct device *dev, unsigned long *freq)
|
|
|
{
|
|
|
struct device_opp *dev_opp;
|
|
|
- struct opp *temp_opp, *opp = ERR_PTR(-ENODEV);
|
|
|
+ struct opp *temp_opp, *opp = ERR_PTR(-ERANGE);
|
|
|
|
|
|
if (!dev || !freq) {
|
|
|
dev_err(dev, "%s: Invalid argument freq=%p\n", __func__, freq);
|
|
@@ -304,7 +311,7 @@ struct opp *opp_find_freq_ceil(struct device *dev, unsigned long *freq)
|
|
|
|
|
|
dev_opp = find_device_opp(dev);
|
|
|
if (IS_ERR(dev_opp))
|
|
|
- return opp;
|
|
|
+ return ERR_CAST(dev_opp);
|
|
|
|
|
|
list_for_each_entry_rcu(temp_opp, &dev_opp->opp_list, node) {
|
|
|
if (temp_opp->available && temp_opp->rate >= *freq) {
|
|
@@ -327,7 +334,11 @@ EXPORT_SYMBOL(opp_find_freq_ceil);
|
|
|
* for a device.
|
|
|
*
|
|
|
* Returns matching *opp and refreshes *freq accordingly, else returns
|
|
|
- * ERR_PTR in case of error and should be handled using IS_ERR.
|
|
|
+ * 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
|
|
|
*
|
|
|
* Locking: This function must be called under rcu_read_lock(). opp is a rcu
|
|
|
* protected pointer. The reason for the same is that the opp pointer which is
|
|
@@ -338,7 +349,7 @@ EXPORT_SYMBOL(opp_find_freq_ceil);
|
|
|
struct opp *opp_find_freq_floor(struct device *dev, unsigned long *freq)
|
|
|
{
|
|
|
struct device_opp *dev_opp;
|
|
|
- struct opp *temp_opp, *opp = ERR_PTR(-ENODEV);
|
|
|
+ struct opp *temp_opp, *opp = ERR_PTR(-ERANGE);
|
|
|
|
|
|
if (!dev || !freq) {
|
|
|
dev_err(dev, "%s: Invalid argument freq=%p\n", __func__, freq);
|
|
@@ -347,7 +358,7 @@ struct opp *opp_find_freq_floor(struct device *dev, unsigned long *freq)
|
|
|
|
|
|
dev_opp = find_device_opp(dev);
|
|
|
if (IS_ERR(dev_opp))
|
|
|
- return opp;
|
|
|
+ return ERR_CAST(dev_opp);
|
|
|
|
|
|
list_for_each_entry_rcu(temp_opp, &dev_opp->opp_list, node) {
|
|
|
if (temp_opp->available) {
|