Skip to contentSkip to conversation

fix nct7802_temp_is_visible

PATCH In review Constantine Shulyupin 2 participants 4 messages Jun 24, 2015 – Jun 25, 2015 Hardware monitoring

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 fix nct7802_temp_is_visible

From: const <[email protected]>

Fixed registers are invisible only when registers' mode is 0

---
 drivers/hwmon/nct7802.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)
drivers/hwmon/nct7802.c +3 -5
index ec56782..65e40c2 100644
@@ -541,13 +541,11 @@ static umode_t nct7802_temp_is_visible(struct kobject *kobj,
 	if (err < 0)
 		return 0;
 
-	if (index < 9 &&
-	    (reg & 03) != 0x01 && (reg & 0x03) != 0x02)		/* RD1 */
+	if (index < 9 && !(reg & 0x03))			/* RD1 */
 		return 0;
-	if (index >= 9 && index < 18 &&
-	    (reg & 0x0c) != 0x04 && (reg & 0x0c) != 0x08)	/* RD2 */
+	if (index >= 9 && index < 18 && !(reg & 0x0c))	/* RD2 */
 		return 0;
-	if (index >= 18 && index < 27 && (reg & 0x30) != 0x10)	/* RD3 */
+	if (index >= 18 && index < 27 && !(reg & 0x30))	/* RD3 */
 		return 0;
 	if (index >= 27 && index < 35)				/* local */
 		return attr->mode;
Signature · 7 lines
1.9.1


_______________________________________________
lm-sensors mailing list
[email protected]
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
maintainer
#1 lore raw

Hi Constantine,

Quoted 17 lines · Constantine Shulyupin

From: const <[email protected]>

Fixed registers are invisible only when registers' mode is 0

---
  drivers/hwmon/nct7802.c | 8 +++-----
  1 file changed, 3 insertions(+), 5 deletions(-)
drivers/hwmon/nct7802.c +0 -0
index ec56782..65e40c2 100644
@@ -541,13 +541,11 @@ static umode_t nct7802_temp_is_visible(struct kobject *kobj,
  	if (err < 0)
  		return 0;
 

drivers/hwmon/nct7802.c static umode_t nct7802_temp_is_visible(struct kobject *kobj, · line 548

Quoted 10 lines
drivers/hwmon/nct7802.c +3 -5
-	if (index < 9 &&
-	    (reg & 03) != 0x01 && (reg & 0x03) != 0x02)		/* RD1 */
+	if (index < 9 && !(reg & 0x03))			/* RD1 */
  		return 0;
-	if (index >= 9 && index < 18 &&
-	    (reg & 0x0c) != 0x04 && (reg & 0x0c) != 0x08)	/* RD2 */
+	if (index >= 9 && index < 18 && !(reg & 0x0c))	/* RD2 */
  		return 0;
-	if (index >= 18 && index < 27 && (reg & 0x30) != 0x10)	/* RD3 */
+	if (index >= 18 && index < 27 && !(reg & 0x30))	/* RD3 */

11b sets a sensor to voltage sense mode, not temperature mode. This is what the inX attributes are for. We can not just display a random temperature value if a sensor is configured to measure a voltage.

According to my datasheet, 01b (0x10 shifted) is reserved for RD3. So there is a bug, but it is

	if (index >= 18 && index < 27 && (reg & 0x30) != 0x10)	/* RD3 */
which should be
	if (index >= 18 && index < 27 && (reg & 0x30) != 0x20)	/* RD3 */

Can you send an updated patch ?

Thanks,
Guenter

_______________________________________________
lm-sensors mailing list
[email protected]
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors

#2 lore raw
In reply to Constantine Shulyupin

Hi Guenter,

Excerpt from datasheet:
7.2.32 Mode Selection Register
RTD3_MD : 00=Closed , 01=Reserved , 10=Thermistor mode , 11=Voltage sense

As I understand the datasheel value 11b is valid too and the resister should be visible. It is legit to hide registers on 00=Closed and optionally on 01=Reserved (RTD3_MD only).

I suppose condition RTD3_MD = 01b can be uncounted because is it reserved should not be used. temp3_* registers should be visible when RTD3_MD is 10b or 11b and hidden when RTD3_MD = 0 and optionally when RTD3_MD = 1

Therefore I propose to hide temp3_* when RTD3_MD != 0:
if (index >= 18 && index < 27 && !(reg & 0x30) /* RD3 */

or when RTD3_MD = 0 or RTD3_MD = 1:
if (index >= 18 && index < 27 && (reg & 0x30) <= 0x10) /* RD3 */

Do you agree?
What do you prefer?

Thanks
Constantine

Quoted 52 lines · Guenter Roeck

Hi Constantine,

Quoted 19 lines · Constantine Shulyupin

From: const <[email protected]>

Fixed registers are invisible only when registers' mode is 0

---
  drivers/hwmon/nct7802.c | 8 +++-----
  1 file changed, 3 insertions(+), 5 deletions(-)
drivers/hwmon/nct7802.c +0 -1
index ec56782..65e40c2 100644
@@ -541,13 +541,11 @@ static umode_t nct7802_temp_is_visible(struct
 kobject *kobj,
        if (err < 0)
                return 0;
 
-       if (index < 9 &&

drivers/hwmon/nct7802.c static umode_t nct7802_temp_is_visible(struct · line 550

Quoted 10 lines
drivers/hwmon/nct7802.c +3 -4
-           (reg & 03) != 0x01 && (reg & 0x03) != 0x02)         /* RD1 */
+       if (index < 9 && !(reg & 0x03))                 /* RD1 */
                return 0;
-       if (index >= 9 && index < 18 &&
-           (reg & 0x0c) != 0x04 && (reg & 0x0c) != 0x08)       /* RD2 */
+       if (index >= 9 && index < 18 && !(reg & 0x0c))  /* RD2 */
                return 0;
-       if (index >= 18 && index < 27 && (reg & 0x30) != 0x10)  /* RD3 */
+       if (index >= 18 && index < 27 && !(reg & 0x30)) /* RD3 */
 

11b sets a sensor to voltage sense mode, not temperature mode. This is what the inX attributes are for. We can not just display a random temperature value if a sensor is configured to measure a voltage.

According to my datasheet, 01b (0x10 shifted) is reserved for RD3. So there is a bug, but it is

        if (index >= 18 && index < 27 && (reg & 0x30) != 0x10)  /* RD3 */
which should be
        if (index >= 18 && index < 27 && (reg & 0x30) != 0x20)  /* RD3 */

Can you send an updated patch ?

Thanks,
Guenter

Signature · 8 lines
Constantine Shulyupin
http://www.MakeLinux.com/
Embedded Linux Systems
and Device Drivers
_______________________________________________
lm-sensors mailing list
[email protected]
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
maintainer
#3 lore raw

Hi Constantine,

Quoted 2 lines · Constantine Shulyupin

Hi Guenter,

Please don't top-post.

Quoted 8 lines

Excerpt from datasheet:
7.2.32 Mode Selection Register
RTD3_MD : 00=Closed , 01=Reserved , 10=Thermistor mode , 11=Voltage sense

As I understand the datasheel value 11b is valid too and the resister should be visible. It is legit to hide registers on 00=Closed and optionally on 01=Reserved (RTD3_MD only).

modeb configures the sensor to voltage mode, and the voltage is then reported with inX_input. Why do you think it should be reported as temperature ? How do you propose to translate the reported voltage to a temperature value ?

Quoted 11 lines

I suppose condition RTD3_MD = 01b can be uncounted because is it reserved should not be used. temp3_* registers should be visible when RTD3_MD is 10b or 11b and hidden when RTD3_MD = 0 and optionally when RTD3_MD = 1

Therefore I propose to hide temp3_* when RTD3_MD != 0:
if (index >= 18 && index < 27 && !(reg & 0x30) /* RD3 */

or when RTD3_MD = 0 or RTD3_MD = 1:
if (index >= 18 && index < 27 && (reg & 0x30) <= 0x10) /* RD3 */

Do you agree?

No - see above. You don't explain why you want voltages reported as temperatures, and you don't explain the proposed transition function from voltages to temperatures, or the rationale for it.

What error are trying to fix, actually ? Do you have a temperature sensor connectecd to the chip which reports a temperature as voltage and needs a translation function from voltage to temperature ? Can you provide a link to the datasheet for that sensor, and details on how it is connected to the chip ?

Thanks,
Guenter

_______________________________________________
lm-sensors mailing list
[email protected]
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors