Linux-Hwmon Archive on lore.kernel.org
 help / color / Atom feed
* [v1,1/1] hwmon: (nct7904) Fix the incorrect value of vsen_mask & tcpu_mask & temp_mode in nct7904_data struct.
@ 2019-10-14  8:24 Amy.Shih
  2019-10-20 16:23 ` Guenter Roeck
  0 siblings, 1 reply; 2+ messages in thread
From: Amy.Shih @ 2019-10-14  8:24 UTC (permalink / raw)
  To: she90122
  Cc: amy.shih, oakley.ding, Jean Delvare, Guenter Roeck, linux-hwmon,
	linux-kernel

From: "amy.shih" <amy.shih@advantech.com.tw>

Voltage sensors overlap with external temperature sensors. Detect
the multi-function of voltage, thermal diode, thermistor and
reserved from register VT_ADC_MD_REG to set value of vsen_mask &
tcpu_mask & temp_mode in nct7904_data struct. If the value is
reserved, needs to disable the vsen_mask & tcpu_mask.

Signed-off-by: amy.shih <amy.shih@advantech.com.tw>
---
 drivers/hwmon/nct7904.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/drivers/hwmon/nct7904.c b/drivers/hwmon/nct7904.c
index b26419dbe840..281c81edabc6 100644
--- a/drivers/hwmon/nct7904.c
+++ b/drivers/hwmon/nct7904.c
@@ -82,6 +82,10 @@
 #define FANCTL1_FMR_REG		0x00	/* Bank 3; 1 reg per channel */
 #define FANCTL1_OUT_REG		0x10	/* Bank 3; 1 reg per channel */
 
+#define VOLT_MONITOR_MODE	0x0
+#define THERMAL_DIODE_MODE	0x1
+#define THERMISTOR_MODE		0x3
+
 #define ENABLE_TSI	BIT(1)
 
 static const unsigned short normal_i2c[] = {
@@ -935,11 +939,16 @@ static int nct7904_probe(struct i2c_client *client,
 	for (i = 0; i < 4; i++) {
 		val = (ret >> (i * 2)) & 0x03;
 		bit = (1 << i);
-		if (val == 0) {
+		if (val == VOLT_MONITOR_MODE) {
 			data->tcpu_mask &= ~bit;
+		} else if (val == THERMAL_DIODE_MODE && i < 2) {
+			data->temp_mode |= bit;
+			data->vsen_mask &= ~(0x06 << (i * 2));
+		} else if (val == THERMISTOR_MODE) {
+			data->vsen_mask &= ~(0x02 << (i * 2));
 		} else {
-			if (val == 0x1 || val == 0x2)
-				data->temp_mode |= bit;
+			/* Reserved */
+			data->tcpu_mask &= ~bit;
 			data->vsen_mask &= ~(0x06 << (i * 2));
 		}
 	}
-- 
2.17.1


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [v1,1/1] hwmon: (nct7904) Fix the incorrect value of vsen_mask & tcpu_mask & temp_mode in nct7904_data struct.
  2019-10-14  8:24 [v1,1/1] hwmon: (nct7904) Fix the incorrect value of vsen_mask & tcpu_mask & temp_mode in nct7904_data struct Amy.Shih
@ 2019-10-20 16:23 ` Guenter Roeck
  0 siblings, 0 replies; 2+ messages in thread
From: Guenter Roeck @ 2019-10-20 16:23 UTC (permalink / raw)
  To: Amy.Shih; +Cc: she90122, oakley.ding, Jean Delvare, linux-hwmon, linux-kernel

On Mon, Oct 14, 2019 at 04:24:51PM +0800, Amy.Shih@advantech.com.tw wrote:
> From: "amy.shih" <amy.shih@advantech.com.tw>
> 
> Voltage sensors overlap with external temperature sensors. Detect
> the multi-function of voltage, thermal diode, thermistor and
> reserved from register VT_ADC_MD_REG to set value of vsen_mask &
> tcpu_mask & temp_mode in nct7904_data struct. If the value is
> reserved, needs to disable the vsen_mask & tcpu_mask.
> 
> Signed-off-by: amy.shih <amy.shih@advantech.com.tw>

Applied.

Thanks,
Guenter

> ---
>  drivers/hwmon/nct7904.c | 15 ++++++++++++---
>  1 file changed, 12 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/hwmon/nct7904.c b/drivers/hwmon/nct7904.c
> index b26419dbe840..281c81edabc6 100644
> --- a/drivers/hwmon/nct7904.c
> +++ b/drivers/hwmon/nct7904.c
> @@ -82,6 +82,10 @@
>  #define FANCTL1_FMR_REG		0x00	/* Bank 3; 1 reg per channel */
>  #define FANCTL1_OUT_REG		0x10	/* Bank 3; 1 reg per channel */
>  
> +#define VOLT_MONITOR_MODE	0x0
> +#define THERMAL_DIODE_MODE	0x1
> +#define THERMISTOR_MODE		0x3
> +
>  #define ENABLE_TSI	BIT(1)
>  
>  static const unsigned short normal_i2c[] = {
> @@ -935,11 +939,16 @@ static int nct7904_probe(struct i2c_client *client,
>  	for (i = 0; i < 4; i++) {
>  		val = (ret >> (i * 2)) & 0x03;
>  		bit = (1 << i);
> -		if (val == 0) {
> +		if (val == VOLT_MONITOR_MODE) {
>  			data->tcpu_mask &= ~bit;
> +		} else if (val == THERMAL_DIODE_MODE && i < 2) {
> +			data->temp_mode |= bit;
> +			data->vsen_mask &= ~(0x06 << (i * 2));
> +		} else if (val == THERMISTOR_MODE) {
> +			data->vsen_mask &= ~(0x02 << (i * 2));
>  		} else {
> -			if (val == 0x1 || val == 0x2)
> -				data->temp_mode |= bit;
> +			/* Reserved */
> +			data->tcpu_mask &= ~bit;
>  			data->vsen_mask &= ~(0x06 << (i * 2));
>  		}
>  	}

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, back to index

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-14  8:24 [v1,1/1] hwmon: (nct7904) Fix the incorrect value of vsen_mask & tcpu_mask & temp_mode in nct7904_data struct Amy.Shih
2019-10-20 16:23 ` Guenter Roeck

Linux-Hwmon Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-hwmon/0 linux-hwmon/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-hwmon linux-hwmon/ https://lore.kernel.org/linux-hwmon \
		linux-hwmon@vger.kernel.org
	public-inbox-index linux-hwmon

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-hwmon


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git