From: Wei Ni <wni-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
To: Guenter Roeck <linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
Cc: "khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org"
<khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org>,
"swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org"
<swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>,
Matthew Longnecker
<MLongnecker-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>,
"linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org"
<linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org>,
"lm-sensors-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org"
<lm-sensors-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org>,
"linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
"linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: Re: [PATCH v2 1/3] hwmon: (lm90) Add power control
Date: Thu, 8 Aug 2013 17:47:12 +0800 [thread overview]
Message-ID: <52036920.4050808@nvidia.com> (raw)
In-Reply-To: <520359E9.1000600-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
On 08/08/2013 04:42 PM, Guenter Roeck wrote:
> On 08/07/2013 11:56 PM, Wei Ni wrote:
>> The device lm90 can be controlled by the vdd rail.
>> Adding the power control support to power on/off the vdd rail.
>> And make sure that power is enabled before accessing the device.
>>
>> Signed-off-by: Wei Ni <wni-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
>> ---
>> drivers/hwmon/lm90.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
>> 1 file changed, 49 insertions(+)
>>
>> diff --git a/drivers/hwmon/lm90.c b/drivers/hwmon/lm90.c
>> index cdff742..306a348 100644
>> --- a/drivers/hwmon/lm90.c
>> +++ b/drivers/hwmon/lm90.c
>> @@ -89,6 +89,7 @@
>> #include <linux/err.h>
>> #include <linux/mutex.h>
>> #include <linux/sysfs.h>
>> +#include <linux/regulator/consumer.h>
>>
>> /*
>> * Addresses to scan
>> @@ -302,6 +303,7 @@ static const struct lm90_params lm90_params[] = {
>> struct lm90_data {
>> struct device *hwmon_dev;
>> struct mutex update_lock;
>> + struct regulator *lm90_reg;
>> char valid; /* zero until following fields are valid */
>> unsigned long last_updated; /* in jiffies */
>> int kind;
>> @@ -1391,6 +1393,32 @@ static void lm90_init_client(struct i2c_client *client)
>> i2c_smbus_write_byte_data(client, LM90_REG_W_CONFIG1, config);
>> }
>>
>> +static void lm90_power_control(struct i2c_client *client, bool is_enable)
>> +{
>> + struct lm90_data *data = i2c_get_clientdata(client);
>> + int ret;
>> +
>> + if (!data->lm90_reg)
>> + return;
>> +
>> + mutex_lock(&data->update_lock);
>> +
>
> This is only called during probe and remove, so the mutex is unnecessary.
I considered that we may call this function in suspend/resume routine,
so I add this mutex.
But as you said, currently we doesn't have these routine yet, the mutex
is unnecessary, so I will remove it.
>
>> + if (is_enable)
>> + ret = regulator_enable(data->lm90_reg);
>> + else
>> + ret = regulator_disable(data->lm90_reg);
>> +
>> + if (ret < 0)
>> + dev_err(&client->dev,
>> + "Error in %s rail vdd, error %d\n",
>> + (is_enable) ? "enabling" : "disabling", ret);
>> + else
>> + dev_info(&client->dev, "success in %s rail vdd\n",
>> + (is_enable) ? "enabling" : "disabling");
>> +
> which reduces the function to (pretty much unnecessary) messages and an if statement
> which you only need because you have the function.
>
> You should just call regulator_enable in probe and regulator_disable in remove.
Ok, I will remove these messages and this function.
>
> Guenter
>
>> + mutex_unlock(&data->update_lock);
>> +}
>> +
>> static int lm90_probe(struct i2c_client *client,
>> const struct i2c_device_id *id)
>> {
>> @@ -1406,6 +1434,20 @@ static int lm90_probe(struct i2c_client *client,
>> i2c_set_clientdata(client, data);
>> mutex_init(&data->update_lock);
>>
>> + data->lm90_reg = regulator_get(&client->dev, "vdd");
>
> You should use devm_regulator_get(). Then you also don't need the call to regulator_put().
Oh, yes, you are right, I will do it.
>
>> + if (IS_ERR_OR_NULL(data->lm90_reg)) {
>
> The function never returns NULL except if the regulator subsystem is not configured,
> so IS_ERR() is more appropriate.
>
> If the regulator subsystem is not configured, you especially don't need or want
> to pollute the log with an error message.
>
>> + if (PTR_ERR(data->lm90_reg) == -ENODEV)
>> + dev_info(&client->dev,
>> + "No regulator found for vdd. Assuming vdd is always powered.");
>> + else
>> + dev_warn(&client->dev,
>> + "Error [%ld] in getting the regulator handle for vdd.\n",
>> + PTR_ERR(data->lm90_reg));
>
> I consider the messages unnecessary and confusing. You are polluting the log
> of pretty much every PC user who has one of the supported chips in the system,
> and of everyone else not using regulators for this chip.
Ok, I will remove these codes.
So I will write something like:
if (!IS_ERR(data->lm90_reg)) {
ret = regulator_enable(data->lm90_reg);
if (ret < 0) {
dev_err();
return ret;
}
} else {
if (PTR_ERR(data->lm90_reg) == -EPROBE_DEFER)
return -EPRPBE_DEFER;
data->lm90_reg = !!IS_ERR(data->lm90_reg);
}
>
>> + data->lm90_reg = NULL;
>
> As pointed out, this is unnecessary, and you should handle -EPROBE_DEFER correctly.
I think get_regulator() will return error values, not only
-EPROBE_DEFER, so we should set data->lm90_reg to NULL to handle other
error values.
>
>> + }
>> +
>> + lm90_power_control(client, true);
>> +
>> /* Set the device type */
>> data->kind = id->driver_data;
>> if (data->kind == adm1032) {
>> @@ -1473,6 +1515,10 @@ exit_remove_files:
>> lm90_remove_files(client, data);
>> exit_restore:
>> lm90_restore_conf(client, data);
>> + lm90_power_control(client, false);
>> + if (data->lm90_reg)
>> + regulator_put(data->lm90_reg);
>> +
>> return err;
>> }
>>
>> @@ -1483,6 +1529,9 @@ static int lm90_remove(struct i2c_client *client)
>> hwmon_device_unregister(data->hwmon_dev);
>> lm90_remove_files(client, data);
>> lm90_restore_conf(client, data);
>> + lm90_power_control(client, false);
>> + if (data->lm90_reg)
>> + regulator_put(data->lm90_reg);
>>
>> return 0;
>> }
>>
>
WARNING: multiple messages have this Message-ID (diff)
From: Wei Ni <wni@nvidia.com>
To: Guenter Roeck <linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
Cc: "khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org"
<khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org>,
"swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org"
<swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>,
Matthew Longnecker
<MLongnecker-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>,
"linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org"
<linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org>,
"lm-sensors-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org"
<lm-sensors-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org>,
"linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
"linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: Re: [lm-sensors] [PATCH v2 1/3] hwmon: (lm90) Add power control
Date: Thu, 08 Aug 2013 09:47:12 +0000 [thread overview]
Message-ID: <52036920.4050808@nvidia.com> (raw)
In-Reply-To: <520359E9.1000600-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
On 08/08/2013 04:42 PM, Guenter Roeck wrote:
> On 08/07/2013 11:56 PM, Wei Ni wrote:
>> The device lm90 can be controlled by the vdd rail.
>> Adding the power control support to power on/off the vdd rail.
>> And make sure that power is enabled before accessing the device.
>>
>> Signed-off-by: Wei Ni <wni@nvidia.com>
>> ---
>> drivers/hwmon/lm90.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
>> 1 file changed, 49 insertions(+)
>>
>> diff --git a/drivers/hwmon/lm90.c b/drivers/hwmon/lm90.c
>> index cdff742..306a348 100644
>> --- a/drivers/hwmon/lm90.c
>> +++ b/drivers/hwmon/lm90.c
>> @@ -89,6 +89,7 @@
>> #include <linux/err.h>
>> #include <linux/mutex.h>
>> #include <linux/sysfs.h>
>> +#include <linux/regulator/consumer.h>
>>
>> /*
>> * Addresses to scan
>> @@ -302,6 +303,7 @@ static const struct lm90_params lm90_params[] = {
>> struct lm90_data {
>> struct device *hwmon_dev;
>> struct mutex update_lock;
>> + struct regulator *lm90_reg;
>> char valid; /* zero until following fields are valid */
>> unsigned long last_updated; /* in jiffies */
>> int kind;
>> @@ -1391,6 +1393,32 @@ static void lm90_init_client(struct i2c_client *client)
>> i2c_smbus_write_byte_data(client, LM90_REG_W_CONFIG1, config);
>> }
>>
>> +static void lm90_power_control(struct i2c_client *client, bool is_enable)
>> +{
>> + struct lm90_data *data = i2c_get_clientdata(client);
>> + int ret;
>> +
>> + if (!data->lm90_reg)
>> + return;
>> +
>> + mutex_lock(&data->update_lock);
>> +
>
> This is only called during probe and remove, so the mutex is unnecessary.
I considered that we may call this function in suspend/resume routine,
so I add this mutex.
But as you said, currently we doesn't have these routine yet, the mutex
is unnecessary, so I will remove it.
>
>> + if (is_enable)
>> + ret = regulator_enable(data->lm90_reg);
>> + else
>> + ret = regulator_disable(data->lm90_reg);
>> +
>> + if (ret < 0)
>> + dev_err(&client->dev,
>> + "Error in %s rail vdd, error %d\n",
>> + (is_enable) ? "enabling" : "disabling", ret);
>> + else
>> + dev_info(&client->dev, "success in %s rail vdd\n",
>> + (is_enable) ? "enabling" : "disabling");
>> +
> which reduces the function to (pretty much unnecessary) messages and an if statement
> which you only need because you have the function.
>
> You should just call regulator_enable in probe and regulator_disable in remove.
Ok, I will remove these messages and this function.
>
> Guenter
>
>> + mutex_unlock(&data->update_lock);
>> +}
>> +
>> static int lm90_probe(struct i2c_client *client,
>> const struct i2c_device_id *id)
>> {
>> @@ -1406,6 +1434,20 @@ static int lm90_probe(struct i2c_client *client,
>> i2c_set_clientdata(client, data);
>> mutex_init(&data->update_lock);
>>
>> + data->lm90_reg = regulator_get(&client->dev, "vdd");
>
> You should use devm_regulator_get(). Then you also don't need the call to regulator_put().
Oh, yes, you are right, I will do it.
>
>> + if (IS_ERR_OR_NULL(data->lm90_reg)) {
>
> The function never returns NULL except if the regulator subsystem is not configured,
> so IS_ERR() is more appropriate.
>
> If the regulator subsystem is not configured, you especially don't need or want
> to pollute the log with an error message.
>
>> + if (PTR_ERR(data->lm90_reg) = -ENODEV)
>> + dev_info(&client->dev,
>> + "No regulator found for vdd. Assuming vdd is always powered.");
>> + else
>> + dev_warn(&client->dev,
>> + "Error [%ld] in getting the regulator handle for vdd.\n",
>> + PTR_ERR(data->lm90_reg));
>
> I consider the messages unnecessary and confusing. You are polluting the log
> of pretty much every PC user who has one of the supported chips in the system,
> and of everyone else not using regulators for this chip.
Ok, I will remove these codes.
So I will write something like:
if (!IS_ERR(data->lm90_reg)) {
ret = regulator_enable(data->lm90_reg);
if (ret < 0) {
dev_err();
return ret;
}
} else {
if (PTR_ERR(data->lm90_reg) = -EPROBE_DEFER)
return -EPRPBE_DEFER;
data->lm90_reg = !!IS_ERR(data->lm90_reg);
}
>
>> + data->lm90_reg = NULL;
>
> As pointed out, this is unnecessary, and you should handle -EPROBE_DEFER correctly.
I think get_regulator() will return error values, not only
-EPROBE_DEFER, so we should set data->lm90_reg to NULL to handle other
error values.
>
>> + }
>> +
>> + lm90_power_control(client, true);
>> +
>> /* Set the device type */
>> data->kind = id->driver_data;
>> if (data->kind = adm1032) {
>> @@ -1473,6 +1515,10 @@ exit_remove_files:
>> lm90_remove_files(client, data);
>> exit_restore:
>> lm90_restore_conf(client, data);
>> + lm90_power_control(client, false);
>> + if (data->lm90_reg)
>> + regulator_put(data->lm90_reg);
>> +
>> return err;
>> }
>>
>> @@ -1483,6 +1529,9 @@ static int lm90_remove(struct i2c_client *client)
>> hwmon_device_unregister(data->hwmon_dev);
>> lm90_remove_files(client, data);
>> lm90_restore_conf(client, data);
>> + lm90_power_control(client, false);
>> + if (data->lm90_reg)
>> + regulator_put(data->lm90_reg);
>>
>> return 0;
>> }
>>
>
_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
WARNING: multiple messages have this Message-ID (diff)
From: wni@nvidia.com (Wei Ni)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 1/3] hwmon: (lm90) Add power control
Date: Thu, 8 Aug 2013 17:47:12 +0800 [thread overview]
Message-ID: <52036920.4050808@nvidia.com> (raw)
In-Reply-To: <520359E9.1000600@roeck-us.net>
On 08/08/2013 04:42 PM, Guenter Roeck wrote:
> On 08/07/2013 11:56 PM, Wei Ni wrote:
>> The device lm90 can be controlled by the vdd rail.
>> Adding the power control support to power on/off the vdd rail.
>> And make sure that power is enabled before accessing the device.
>>
>> Signed-off-by: Wei Ni <wni@nvidia.com>
>> ---
>> drivers/hwmon/lm90.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
>> 1 file changed, 49 insertions(+)
>>
>> diff --git a/drivers/hwmon/lm90.c b/drivers/hwmon/lm90.c
>> index cdff742..306a348 100644
>> --- a/drivers/hwmon/lm90.c
>> +++ b/drivers/hwmon/lm90.c
>> @@ -89,6 +89,7 @@
>> #include <linux/err.h>
>> #include <linux/mutex.h>
>> #include <linux/sysfs.h>
>> +#include <linux/regulator/consumer.h>
>>
>> /*
>> * Addresses to scan
>> @@ -302,6 +303,7 @@ static const struct lm90_params lm90_params[] = {
>> struct lm90_data {
>> struct device *hwmon_dev;
>> struct mutex update_lock;
>> + struct regulator *lm90_reg;
>> char valid; /* zero until following fields are valid */
>> unsigned long last_updated; /* in jiffies */
>> int kind;
>> @@ -1391,6 +1393,32 @@ static void lm90_init_client(struct i2c_client *client)
>> i2c_smbus_write_byte_data(client, LM90_REG_W_CONFIG1, config);
>> }
>>
>> +static void lm90_power_control(struct i2c_client *client, bool is_enable)
>> +{
>> + struct lm90_data *data = i2c_get_clientdata(client);
>> + int ret;
>> +
>> + if (!data->lm90_reg)
>> + return;
>> +
>> + mutex_lock(&data->update_lock);
>> +
>
> This is only called during probe and remove, so the mutex is unnecessary.
I considered that we may call this function in suspend/resume routine,
so I add this mutex.
But as you said, currently we doesn't have these routine yet, the mutex
is unnecessary, so I will remove it.
>
>> + if (is_enable)
>> + ret = regulator_enable(data->lm90_reg);
>> + else
>> + ret = regulator_disable(data->lm90_reg);
>> +
>> + if (ret < 0)
>> + dev_err(&client->dev,
>> + "Error in %s rail vdd, error %d\n",
>> + (is_enable) ? "enabling" : "disabling", ret);
>> + else
>> + dev_info(&client->dev, "success in %s rail vdd\n",
>> + (is_enable) ? "enabling" : "disabling");
>> +
> which reduces the function to (pretty much unnecessary) messages and an if statement
> which you only need because you have the function.
>
> You should just call regulator_enable in probe and regulator_disable in remove.
Ok, I will remove these messages and this function.
>
> Guenter
>
>> + mutex_unlock(&data->update_lock);
>> +}
>> +
>> static int lm90_probe(struct i2c_client *client,
>> const struct i2c_device_id *id)
>> {
>> @@ -1406,6 +1434,20 @@ static int lm90_probe(struct i2c_client *client,
>> i2c_set_clientdata(client, data);
>> mutex_init(&data->update_lock);
>>
>> + data->lm90_reg = regulator_get(&client->dev, "vdd");
>
> You should use devm_regulator_get(). Then you also don't need the call to regulator_put().
Oh, yes, you are right, I will do it.
>
>> + if (IS_ERR_OR_NULL(data->lm90_reg)) {
>
> The function never returns NULL except if the regulator subsystem is not configured,
> so IS_ERR() is more appropriate.
>
> If the regulator subsystem is not configured, you especially don't need or want
> to pollute the log with an error message.
>
>> + if (PTR_ERR(data->lm90_reg) == -ENODEV)
>> + dev_info(&client->dev,
>> + "No regulator found for vdd. Assuming vdd is always powered.");
>> + else
>> + dev_warn(&client->dev,
>> + "Error [%ld] in getting the regulator handle for vdd.\n",
>> + PTR_ERR(data->lm90_reg));
>
> I consider the messages unnecessary and confusing. You are polluting the log
> of pretty much every PC user who has one of the supported chips in the system,
> and of everyone else not using regulators for this chip.
Ok, I will remove these codes.
So I will write something like:
if (!IS_ERR(data->lm90_reg)) {
ret = regulator_enable(data->lm90_reg);
if (ret < 0) {
dev_err();
return ret;
}
} else {
if (PTR_ERR(data->lm90_reg) == -EPROBE_DEFER)
return -EPRPBE_DEFER;
data->lm90_reg = !!IS_ERR(data->lm90_reg);
}
>
>> + data->lm90_reg = NULL;
>
> As pointed out, this is unnecessary, and you should handle -EPROBE_DEFER correctly.
I think get_regulator() will return error values, not only
-EPROBE_DEFER, so we should set data->lm90_reg to NULL to handle other
error values.
>
>> + }
>> +
>> + lm90_power_control(client, true);
>> +
>> /* Set the device type */
>> data->kind = id->driver_data;
>> if (data->kind == adm1032) {
>> @@ -1473,6 +1515,10 @@ exit_remove_files:
>> lm90_remove_files(client, data);
>> exit_restore:
>> lm90_restore_conf(client, data);
>> + lm90_power_control(client, false);
>> + if (data->lm90_reg)
>> + regulator_put(data->lm90_reg);
>> +
>> return err;
>> }
>>
>> @@ -1483,6 +1529,9 @@ static int lm90_remove(struct i2c_client *client)
>> hwmon_device_unregister(data->hwmon_dev);
>> lm90_remove_files(client, data);
>> lm90_restore_conf(client, data);
>> + lm90_power_control(client, false);
>> + if (data->lm90_reg)
>> + regulator_put(data->lm90_reg);
>>
>> return 0;
>> }
>>
>
WARNING: multiple messages have this Message-ID (diff)
From: Wei Ni <wni@nvidia.com>
To: Guenter Roeck <linux@roeck-us.net>
Cc: "khali@linux-fr.org" <khali@linux-fr.org>,
"swarren@wwwdotorg.org" <swarren@wwwdotorg.org>,
Matthew Longnecker <MLongnecker@nvidia.com>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"lm-sensors@lm-sensors.org" <lm-sensors@lm-sensors.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-tegra@vger.kernel.org" <linux-tegra@vger.kernel.org>
Subject: Re: [PATCH v2 1/3] hwmon: (lm90) Add power control
Date: Thu, 8 Aug 2013 17:47:12 +0800 [thread overview]
Message-ID: <52036920.4050808@nvidia.com> (raw)
In-Reply-To: <520359E9.1000600@roeck-us.net>
On 08/08/2013 04:42 PM, Guenter Roeck wrote:
> On 08/07/2013 11:56 PM, Wei Ni wrote:
>> The device lm90 can be controlled by the vdd rail.
>> Adding the power control support to power on/off the vdd rail.
>> And make sure that power is enabled before accessing the device.
>>
>> Signed-off-by: Wei Ni <wni@nvidia.com>
>> ---
>> drivers/hwmon/lm90.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
>> 1 file changed, 49 insertions(+)
>>
>> diff --git a/drivers/hwmon/lm90.c b/drivers/hwmon/lm90.c
>> index cdff742..306a348 100644
>> --- a/drivers/hwmon/lm90.c
>> +++ b/drivers/hwmon/lm90.c
>> @@ -89,6 +89,7 @@
>> #include <linux/err.h>
>> #include <linux/mutex.h>
>> #include <linux/sysfs.h>
>> +#include <linux/regulator/consumer.h>
>>
>> /*
>> * Addresses to scan
>> @@ -302,6 +303,7 @@ static const struct lm90_params lm90_params[] = {
>> struct lm90_data {
>> struct device *hwmon_dev;
>> struct mutex update_lock;
>> + struct regulator *lm90_reg;
>> char valid; /* zero until following fields are valid */
>> unsigned long last_updated; /* in jiffies */
>> int kind;
>> @@ -1391,6 +1393,32 @@ static void lm90_init_client(struct i2c_client *client)
>> i2c_smbus_write_byte_data(client, LM90_REG_W_CONFIG1, config);
>> }
>>
>> +static void lm90_power_control(struct i2c_client *client, bool is_enable)
>> +{
>> + struct lm90_data *data = i2c_get_clientdata(client);
>> + int ret;
>> +
>> + if (!data->lm90_reg)
>> + return;
>> +
>> + mutex_lock(&data->update_lock);
>> +
>
> This is only called during probe and remove, so the mutex is unnecessary.
I considered that we may call this function in suspend/resume routine,
so I add this mutex.
But as you said, currently we doesn't have these routine yet, the mutex
is unnecessary, so I will remove it.
>
>> + if (is_enable)
>> + ret = regulator_enable(data->lm90_reg);
>> + else
>> + ret = regulator_disable(data->lm90_reg);
>> +
>> + if (ret < 0)
>> + dev_err(&client->dev,
>> + "Error in %s rail vdd, error %d\n",
>> + (is_enable) ? "enabling" : "disabling", ret);
>> + else
>> + dev_info(&client->dev, "success in %s rail vdd\n",
>> + (is_enable) ? "enabling" : "disabling");
>> +
> which reduces the function to (pretty much unnecessary) messages and an if statement
> which you only need because you have the function.
>
> You should just call regulator_enable in probe and regulator_disable in remove.
Ok, I will remove these messages and this function.
>
> Guenter
>
>> + mutex_unlock(&data->update_lock);
>> +}
>> +
>> static int lm90_probe(struct i2c_client *client,
>> const struct i2c_device_id *id)
>> {
>> @@ -1406,6 +1434,20 @@ static int lm90_probe(struct i2c_client *client,
>> i2c_set_clientdata(client, data);
>> mutex_init(&data->update_lock);
>>
>> + data->lm90_reg = regulator_get(&client->dev, "vdd");
>
> You should use devm_regulator_get(). Then you also don't need the call to regulator_put().
Oh, yes, you are right, I will do it.
>
>> + if (IS_ERR_OR_NULL(data->lm90_reg)) {
>
> The function never returns NULL except if the regulator subsystem is not configured,
> so IS_ERR() is more appropriate.
>
> If the regulator subsystem is not configured, you especially don't need or want
> to pollute the log with an error message.
>
>> + if (PTR_ERR(data->lm90_reg) == -ENODEV)
>> + dev_info(&client->dev,
>> + "No regulator found for vdd. Assuming vdd is always powered.");
>> + else
>> + dev_warn(&client->dev,
>> + "Error [%ld] in getting the regulator handle for vdd.\n",
>> + PTR_ERR(data->lm90_reg));
>
> I consider the messages unnecessary and confusing. You are polluting the log
> of pretty much every PC user who has one of the supported chips in the system,
> and of everyone else not using regulators for this chip.
Ok, I will remove these codes.
So I will write something like:
if (!IS_ERR(data->lm90_reg)) {
ret = regulator_enable(data->lm90_reg);
if (ret < 0) {
dev_err();
return ret;
}
} else {
if (PTR_ERR(data->lm90_reg) == -EPROBE_DEFER)
return -EPRPBE_DEFER;
data->lm90_reg = !!IS_ERR(data->lm90_reg);
}
>
>> + data->lm90_reg = NULL;
>
> As pointed out, this is unnecessary, and you should handle -EPROBE_DEFER correctly.
I think get_regulator() will return error values, not only
-EPROBE_DEFER, so we should set data->lm90_reg to NULL to handle other
error values.
>
>> + }
>> +
>> + lm90_power_control(client, true);
>> +
>> /* Set the device type */
>> data->kind = id->driver_data;
>> if (data->kind == adm1032) {
>> @@ -1473,6 +1515,10 @@ exit_remove_files:
>> lm90_remove_files(client, data);
>> exit_restore:
>> lm90_restore_conf(client, data);
>> + lm90_power_control(client, false);
>> + if (data->lm90_reg)
>> + regulator_put(data->lm90_reg);
>> +
>> return err;
>> }
>>
>> @@ -1483,6 +1529,9 @@ static int lm90_remove(struct i2c_client *client)
>> hwmon_device_unregister(data->hwmon_dev);
>> lm90_remove_files(client, data);
>> lm90_restore_conf(client, data);
>> + lm90_power_control(client, false);
>> + if (data->lm90_reg)
>> + regulator_put(data->lm90_reg);
>>
>> return 0;
>> }
>>
>
next prev parent reply other threads:[~2013-08-08 9:47 UTC|newest]
Thread overview: 157+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-08 6:56 [PATCH v2 0/3] Add power control for lm90 Wei Ni
2013-08-08 6:56 ` Wei Ni
2013-08-08 6:56 ` Wei Ni
2013-08-08 6:56 ` [lm-sensors] " Wei Ni
2013-08-08 6:56 ` [PATCH v2 1/3] hwmon: (lm90) Add power control Wei Ni
2013-08-08 6:56 ` Wei Ni
2013-08-08 6:56 ` Wei Ni
2013-08-08 6:56 ` [lm-sensors] " Wei Ni
2013-08-08 7:13 ` Alexander Shiyan
2013-08-08 7:13 ` Alexander Shiyan
2013-08-08 7:13 ` Alexander Shiyan
2013-08-08 7:13 ` [lm-sensors] [PATCH v2 1/3] hwmon: (lm90) Add Alexander Shiyan
[not found] ` <1375946022.222322391-uDhCb/4LxRRsdVUOrk1QfQ@public.gmane.org>
2013-08-08 9:26 ` [PATCH v2 1/3] hwmon: (lm90) Add power control Wei Ni
2013-08-08 9:26 ` Wei Ni
2013-08-08 9:26 ` Wei Ni
2013-08-08 9:26 ` [lm-sensors] " Wei Ni
[not found] ` <1375944991-29182-2-git-send-email-wni-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-08-08 8:42 ` Guenter Roeck
2013-08-08 8:42 ` Guenter Roeck
2013-08-08 8:42 ` Guenter Roeck
2013-08-08 8:42 ` [lm-sensors] " Guenter Roeck
[not found] ` <520359E9.1000600-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
2013-08-08 9:47 ` Wei Ni [this message]
2013-08-08 9:47 ` Wei Ni
2013-08-08 9:47 ` Wei Ni
2013-08-08 9:47 ` [lm-sensors] " Wei Ni
2013-08-08 9:57 ` Alexander Shiyan
2013-08-08 9:57 ` Alexander Shiyan
2013-08-08 9:57 ` Alexander Shiyan
2013-08-08 9:57 ` [lm-sensors] [PATCH v2 1/3] hwmon: (lm90) Add Alexander Shiyan
[not found] ` <1375955834.368114617-VbvbiqT9YuJsdVUOrk1QfQ@public.gmane.org>
2013-08-08 9:59 ` [PATCH v2 1/3] hwmon: (lm90) Add power control Wei Ni
2013-08-08 9:59 ` Wei Ni
2013-08-08 9:59 ` Wei Ni
2013-08-08 9:59 ` [lm-sensors] " Wei Ni
2013-08-08 10:07 ` Wei Ni
2013-08-08 10:07 ` Wei Ni
2013-08-08 10:07 ` Wei Ni
2013-08-08 10:07 ` [lm-sensors] " Wei Ni
[not found] ` <52036920.4050808-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-08-08 11:23 ` Guenter Roeck
2013-08-08 11:23 ` Guenter Roeck
2013-08-08 11:23 ` Guenter Roeck
2013-08-08 11:23 ` [lm-sensors] " Guenter Roeck
[not found] ` <52037F9A.7070802-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
2013-08-08 17:33 ` Stephen Warren
2013-08-08 17:33 ` Stephen Warren
2013-08-08 17:33 ` Stephen Warren
2013-08-08 17:33 ` [lm-sensors] " Stephen Warren
[not found] ` <5203D659.4050907-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-08-08 17:59 ` Guenter Roeck
2013-08-08 17:59 ` Guenter Roeck
2013-08-08 17:59 ` Guenter Roeck
2013-08-08 17:59 ` [lm-sensors] " Guenter Roeck
[not found] ` <20130808175918.GA15013-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
2013-08-08 18:45 ` Stephen Warren
2013-08-08 18:45 ` Stephen Warren
2013-08-08 18:45 ` Stephen Warren
2013-08-08 18:45 ` [lm-sensors] " Stephen Warren
2013-08-08 17:30 ` Stephen Warren
2013-08-08 17:30 ` Stephen Warren
2013-08-08 17:30 ` Stephen Warren
2013-08-08 17:30 ` [lm-sensors] " Stephen Warren
[not found] ` <5203D5B6.3060806-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-08-08 17:59 ` Guenter Roeck
2013-08-08 17:59 ` Guenter Roeck
2013-08-08 17:59 ` Guenter Roeck
2013-08-08 17:59 ` [lm-sensors] " Guenter Roeck
2013-08-08 19:27 ` Mark Brown
2013-08-08 19:27 ` Mark Brown
2013-08-08 19:27 ` Mark Brown
2013-08-08 19:27 ` [lm-sensors] " Mark Brown
2013-08-08 11:01 ` Mark Brown
2013-08-08 11:01 ` Mark Brown
2013-08-08 11:01 ` Mark Brown
2013-08-08 11:01 ` [lm-sensors] " Mark Brown
[not found] ` <20130808110136.GA6427-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2013-08-08 11:25 ` Guenter Roeck
2013-08-08 11:25 ` Guenter Roeck
2013-08-08 11:25 ` Guenter Roeck
2013-08-08 11:25 ` [lm-sensors] " Guenter Roeck
[not found] ` <52038035.7030803-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
2013-08-08 13:08 ` Mark Brown
2013-08-08 13:08 ` Mark Brown
2013-08-08 13:08 ` Mark Brown
2013-08-08 13:08 ` [lm-sensors] " Mark Brown
2013-08-08 15:21 ` Guenter Roeck
2013-08-08 15:21 ` Guenter Roeck
2013-08-08 15:21 ` [lm-sensors] " Guenter Roeck
[not found] ` <5203B78C.7010101-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
2013-08-08 17:15 ` Mark Brown
2013-08-08 17:15 ` Mark Brown
2013-08-08 17:15 ` Mark Brown
2013-08-08 17:15 ` [lm-sensors] " Mark Brown
[not found] ` <20130808171554.GI6427-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2013-08-08 20:00 ` Guenter Roeck
2013-08-08 20:00 ` Guenter Roeck
2013-08-08 20:00 ` Guenter Roeck
2013-08-08 20:00 ` [lm-sensors] " Guenter Roeck
[not found] ` <20130808200026.GA18226-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
2013-08-08 21:18 ` Mark Brown
2013-08-08 21:18 ` Mark Brown
2013-08-08 21:18 ` Mark Brown
2013-08-08 21:18 ` [lm-sensors] " Mark Brown
[not found] ` <20130808211825.GN6427-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2013-08-08 21:30 ` Guenter Roeck
2013-08-08 21:30 ` Guenter Roeck
2013-08-08 21:30 ` Guenter Roeck
2013-08-08 21:30 ` [lm-sensors] " Guenter Roeck
[not found] ` <52040DE2.50201-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
2013-08-09 5:57 ` Proposal: I2C device power (Was: hwmon: (lm90) Add power control) Alexander Shiyan
2013-08-09 5:57 ` Alexander Shiyan
2013-08-09 5:57 ` [lm-sensors] Proposal: I2C device power (Was: hwm =?utf-8?q?on=3A_=28lm90=29_Add_p Alexander Shiyan
2013-08-09 10:27 ` Proposal: I2C device power (Was: hwmon: (lm90) Add power control) Mark Brown
2013-08-09 10:27 ` Mark Brown
2013-08-09 10:27 ` [lm-sensors] " Mark Brown
2013-08-09 10:50 ` Alexander Shiyan
2013-08-09 10:50 ` Alexander Shiyan
2013-08-09 10:50 ` Alexander Shiyan
2013-08-09 10:50 ` [lm-sensors] Proposal: I2C device power (Was: hwm Alexander Shiyan
[not found] ` <1376045411.585130456-gOtJ1i61JehsdVUOrk1QfQ@public.gmane.org>
2013-08-09 11:09 ` Proposal: I2C device power (Was: hwmon: (lm90) Add power control) Mark Brown
2013-08-09 11:09 ` Mark Brown
2013-08-09 11:09 ` Mark Brown
2013-08-09 11:09 ` [lm-sensors] " Mark Brown
2013-08-09 7:23 ` [PATCH v2 1/3] hwmon: (lm90) Add power control Wei Ni
2013-08-09 7:23 ` Wei Ni
2013-08-09 7:23 ` Wei Ni
2013-08-09 7:23 ` [lm-sensors] " Wei Ni
[not found] ` <520498F3.8030101-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-08-09 10:56 ` Mark Brown
2013-08-09 10:56 ` Mark Brown
2013-08-09 10:56 ` Mark Brown
2013-08-09 10:56 ` [lm-sensors] " Mark Brown
2013-08-08 6:56 ` [PATCH v2 2/3] ARM: dt: t114 dalmore: add dt entry for nct1008 Wei Ni
2013-08-08 6:56 ` Wei Ni
2013-08-08 6:56 ` Wei Ni
2013-08-08 6:56 ` [lm-sensors] " Wei Ni
[not found] ` <1375944991-29182-3-git-send-email-wni-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-08-08 17:35 ` Stephen Warren
2013-08-08 17:35 ` Stephen Warren
2013-08-08 17:35 ` Stephen Warren
2013-08-08 17:35 ` [lm-sensors] " Stephen Warren
2013-08-09 6:06 ` Wei Ni
2013-08-09 6:06 ` Wei Ni
2013-08-09 6:06 ` Wei Ni
2013-08-09 6:06 ` [lm-sensors] " Wei Ni
2013-08-08 20:36 ` Sergei Shtylyov
2013-08-08 20:36 ` Sergei Shtylyov
2013-08-08 20:36 ` [lm-sensors] " Sergei Shtylyov
[not found] ` <52040146.7060703-M4DtvfQ/ZS1MRgGoP+s0PdBPR1lH4CV8@public.gmane.org>
2013-08-08 20:40 ` Stephen Warren
2013-08-08 20:40 ` Stephen Warren
2013-08-08 20:40 ` Stephen Warren
2013-08-08 20:40 ` [lm-sensors] " Stephen Warren
2013-08-08 21:33 ` Guenter Roeck
2013-08-08 21:33 ` Guenter Roeck
2013-08-08 21:33 ` [lm-sensors] " Guenter Roeck
2013-08-09 6:16 ` Wei Ni
2013-08-09 6:16 ` Wei Ni
2013-08-09 6:16 ` [lm-sensors] " Wei Ni
2013-08-08 6:56 ` [PATCH v2 3/3] Documentation: dt: hwmon: add OF document for lm90 Wei Ni
2013-08-08 6:56 ` Wei Ni
2013-08-08 6:56 ` Wei Ni
2013-08-08 6:56 ` [lm-sensors] " Wei Ni
[not found] ` <1375944991-29182-4-git-send-email-wni-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-08-08 17:37 ` Stephen Warren
2013-08-08 17:37 ` Stephen Warren
2013-08-08 17:37 ` Stephen Warren
2013-08-08 17:37 ` [lm-sensors] " Stephen Warren
2013-08-09 6:10 ` Wei Ni
2013-08-09 6:10 ` Wei Ni
2013-08-09 6:10 ` [lm-sensors] " Wei Ni
[not found] ` <520487C7.5080901-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-08-09 16:35 ` Stephen Warren
2013-08-09 16:35 ` Stephen Warren
2013-08-09 16:35 ` Stephen Warren
2013-08-09 16:35 ` [lm-sensors] " Stephen Warren
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=52036920.4050808@nvidia.com \
--to=wni-ddmlm1+adcrqt0dzr+alfa@public.gmane.org \
--cc=MLongnecker-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org \
--cc=khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org \
--cc=linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org \
--cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=lm-sensors-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org \
--cc=swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.