On Wed, May 16, 2018 at 5:34 PM, Guenter Roeck <linux@xxxxxxxxxxxx> wrote: > On 05/16/2018 02:39 PM, Rail Shafigulin wrote: >> >> My team is working on a custom board. We have LTM4676A on it. I'm trying >> to understand what are the units of measurement for a given register. For >> example: >> >> root@custom-board:/sys/class/i2c-adapter/i2c-1/1-0044/hwmon/hwmon2# ls -l >> total 0 >> lrwxrwxrwx 1 root root 0 Apr 12 07:51 device -> ../../../1-0044 >> -rw-r--r-- 1 root root 4096 Apr 12 07:51 in1_crit >> -r--r--r-- 1 root root 4096 Apr 12 07:51 in1_crit_alarm >> -rw-r--r-- 1 root root 4096 Apr 12 07:51 in1_highest >> -r--r--r-- 1 root root 4096 Apr 12 07:51 in1_input >> -r--r--r-- 1 root root 4096 Apr 12 07:51 in1_label >> -rw-r--r-- 1 root root 4096 Apr 12 07:51 in1_lowest >> -rw-r--r-- 1 root root 4096 Apr 12 07:51 in1_min >> -r--r--r-- 1 root root 4096 Apr 12 07:51 in1_min_alarm >> -rw-r--r-- 1 root root 4096 Apr 12 07:51 in1_reset_history >> -rw-r--r-- 1 root root 4096 Apr 12 07:51 in2_crit >> -r--r--r-- 1 root root 4096 Apr 12 07:51 in2_crit_alarm >> -rw-r--r-- 1 root root 4096 Apr 12 07:51 in2_highest >> -r--r--r-- 1 root root 4096 Apr 12 07:51 in2_input >> -r--r--r-- 1 root root 4096 Apr 12 07:51 in2_label >> -rw-r--r-- 1 root root 4096 Apr 12 07:51 in2_lcrit >> -r--r--r-- 1 root root 4096 Apr 12 07:51 in2_lcrit_alarm >> -rw-r--r-- 1 root root 4096 Apr 12 07:51 in2_max >> -r--r--r-- 1 root root 4096 Apr 12 07:51 in2_max_alarm >> -rw-r--r-- 1 root root 4096 Apr 12 07:51 in2_min >> -r--r--r-- 1 root root 4096 Apr 12 07:51 in2_min_alarm >> -rw-r--r-- 1 root root 4096 Apr 12 07:51 in2_reset_history >> -rw-r--r-- 1 root root 4096 Apr 12 07:51 in3_crit >> -r--r--r-- 1 root root 4096 Apr 12 07:51 in3_crit_alarm >> -rw-r--r-- 1 root root 4096 Apr 12 07:51 in3_highest >> -r--r--r-- 1 root root 4096 Apr 12 07:51 in3_input >> -r--r--r-- 1 root root 4096 Apr 12 07:51 in3_label >> -rw-r--r-- 1 root root 4096 Apr 12 07:51 in3_lcrit >> -r--r--r-- 1 root root 4096 Apr 12 07:51 in3_lcrit_alarm >> -rw-r--r-- 1 root root 4096 Apr 12 07:51 in3_max >> -r--r--r-- 1 root root 4096 Apr 12 07:51 in3_max_alarm >> -rw-r--r-- 1 root root 4096 Apr 12 07:51 in3_min >> -r--r--r-- 1 root root 4096 Apr 12 07:51 in3_min_alarm >> -rw-r--r-- 1 root root 4096 Apr 12 07:51 in3_reset_history >> -r--r--r-- 1 root root 4096 Apr 12 07:51 in4_input >> -r--r--r-- 1 root root 4096 Apr 12 07:51 in4_label >> -rw-r--r-- 1 root root 4096 Apr 12 07:51 in4_reset_history >> -r--r--r-- 1 root root 4096 Apr 12 07:51 in5_input >> -r--r--r-- 1 root root 4096 Apr 12 07:51 in5_label >> -rw-r--r-- 1 root root 4096 Apr 12 07:51 in5_reset_history >> -r--r--r-- 1 root root 4096 Apr 12 07:51 in6_input >> -r--r--r-- 1 root root 4096 Apr 12 07:51 in6_label >> -rw-r--r-- 1 root root 4096 Apr 12 07:51 in6_reset_history >> -r--r--r-- 1 root root 4096 Apr 12 07:51 in7_input >> -r--r--r-- 1 root root 4096 Apr 12 07:51 in7_label >> -rw-r--r-- 1 root root 4096 Apr 12 07:51 in7_reset_history >> -r--r--r-- 1 root root 4096 Apr 12 07:51 in8_input >> -r--r--r-- 1 root root 4096 Apr 12 07:51 in8_label >> -rw-r--r-- 1 root root 4096 Apr 12 07:51 in8_reset_history >> -r--r--r-- 1 root root 4096 Apr 12 07:51 in9_input >> -r--r--r-- 1 root root 4096 Apr 12 07:51 in9_label >> -rw-r--r-- 1 root root 4096 Apr 12 07:51 in9_reset_history >> -r--r--r-- 1 root root 4096 Apr 12 07:51 name >> drwxr-xr-x 2 root root 0 Apr 12 07:51 power >> lrwxrwxrwx 1 root root 0 Apr 12 07:51 subsystem -> >> ../../../../../../../../class/hwmon >> -rw-r--r-- 1 root root 4096 Apr 12 07:50 temp1_crit >> -r--r--r-- 1 root root 4096 Apr 12 07:50 temp1_crit_alarm >> -r--r--r-- 1 root root 4096 Apr 12 07:50 temp1_input >> -rw-r--r-- 1 root root 4096 Apr 12 07:50 temp1_lcrit >> -r--r--r-- 1 root root 4096 Apr 12 07:50 temp1_lcrit_alarm >> -rw-r--r-- 1 root root 4096 Apr 12 07:50 temp1_max >> -r--r--r-- 1 root root 4096 Apr 12 07:50 temp1_max_alarm >> -rw-r--r-- 1 root root 4096 Apr 12 07:49 uevent >> >> root@custom-board:/sys/class/i2c-adapter/i2c-1/1-0044/hwmon/hwmon2# cat >> name >> ltm4676 >> >> root@custom-board:/sys/class/i2c-adapter/i2c-1/1-0044/hwmon/hwmon2# cat >> in1_label >> vin >> >> root@custom-board:/sys/class/i2c-adapter/i2c-1/1-0044/hwmon/hwmon2# cat >> in1_input >> 11953 >> >> root@custom-board:/sys/class/i2c-adapter/i2c-1/1-0044/hwmon/hwmon2# cat >> temp1_input >> 40937 >> >> >> What are the units of in1_input and temp1_input? Are those milli-volts >> (10^-3 V) and milli-celcius (10^-3 C)? Or these are raw values and I need to >> do a conversion? >> > > Please read Documentation/hwmon/sysfs-interface. Are the units listed > there ambiguous ? Didn't look at that folder. Went for https://github.com/torvalds/linux/blob/master/Documentation/hwmon/pmbus. Units make sense now. > > The values are values as measured by the chip on the chip's input pins. > > The output above is completely messed up. The chip doesn't have 9 > voltage sensors. I have no idea how such output would be possible, > unless this is a different chip. An interesting detail is that the > output below (which looks at least almost ok) is from i2c address > 0x41, while the output above is from i2c address 0x44, both on the > same bus. So, whatever the chips are, the output is not from the > same chip. This makes it quite difficult to compare. We have 4 LTM4676A installed on the board. I wanted to try different drivers. Chip at address 0x41 uses pmbus driver (https://github.com/torvalds/linux/blob/master/drivers/hwmon/pmbus/pmbus.c) , chip at address 0x44 uses LTM 4676 driver (https://github.com/torvalds/linux/blob/master/drivers/hwmon/pmbus/ltc2978.c). I don't know why the chip at 0x44 comes up with 9 voltage sensors. All I did was 1. compile ltc2978.c 2. insmod ltc2978.ko 3. echo ltm4676 0x44 > /sys/class/i2c-adapter/i2c-1/new_device There is another issue. Documentation states that I'm supposed to see temp1_input, temp2_input, and temp3_input (https://github.com/torvalds/linux/blob/3acf4e395260e3bd30a6fa29ba7eada4bf7566ca/Documentation/hwmon/ltc2978#L148-L150). Right now I see only temp1_input. Could this be a bug in the driver? > > Guenter > >> LTM4676A and LTM4676 have 2 pages for reporting READ_TEMPERATURE_1 >> register. How do I change a page value? The LTM4676 driver also doesn't seem >> to be aware that there should be a READ_TEMPERATURE_2 register. At least I >> don't see it in sysfs. >> >> I tried using a generic driver, pmbus, and here is what I got >> >> root@custom-board:/sys/class/i2c-adapter/i2c-1/1-0041/hwmon/hwmon0# ls -l >> total 0 >> -r--r--r-- 1 root root 4096 Apr 11 03:04 curr1_input >> -r--r--r-- 1 root root 4096 Apr 11 03:04 curr1_label >> -rw-r--r-- 1 root root 4096 Apr 11 03:04 curr1_max >> -r--r--r-- 1 root root 4096 Apr 11 03:04 curr1_max_alarm >> -rw-r--r-- 1 root root 4096 Apr 11 03:04 curr2_crit >> -r--r--r-- 1 root root 4096 Apr 11 03:04 curr2_crit_alarm >> -r--r--r-- 1 root root 4096 Apr 11 03:04 curr2_input >> -r--r--r-- 1 root root 4096 Apr 11 03:04 curr2_label >> -rw-r--r-- 1 root root 4096 Apr 11 03:04 curr2_max >> -r--r--r-- 1 root root 4096 Apr 11 03:04 curr2_max_alarm >> -rw-r--r-- 1 root root 4096 Apr 11 03:04 curr3_crit >> -r--r--r-- 1 root root 4096 Apr 11 03:04 curr3_crit_alarm >> -r--r--r-- 1 root root 4096 Apr 11 03:04 curr3_input >> -r--r--r-- 1 root root 4096 Apr 11 03:04 curr3_label >> -rw-r--r-- 1 root root 4096 Apr 11 03:04 curr3_max >> -r--r--r-- 1 root root 4096 Apr 11 03:04 curr3_max_alarm >> lrwxrwxrwx 1 root root 0 Apr 11 03:04 device -> ../../../1-0041 >> -rw-r--r-- 1 root root 4096 Apr 11 03:04 in1_crit >> -r--r--r-- 1 root root 4096 Apr 11 03:04 in1_crit_alarm >> -r--r--r-- 1 root root 4096 Apr 11 03:04 in1_input >> -r--r--r-- 1 root root 4096 Apr 11 03:04 in1_label >> -rw-r--r-- 1 root root 4096 Apr 11 03:04 in1_min >> -r--r--r-- 1 root root 4096 Apr 11 03:04 in1_min_alarm >> -rw-r--r-- 1 root root 4096 Apr 11 03:04 in2_crit >> -r--r--r-- 1 root root 4096 Apr 11 03:04 in2_crit_alarm >> -r--r--r-- 1 root root 4096 Apr 11 03:04 in2_input >> -r--r--r-- 1 root root 4096 Apr 11 03:04 in2_label >> -rw-r--r-- 1 root root 4096 Apr 11 03:04 in2_lcrit >> -r--r--r-- 1 root root 4096 Apr 11 03:04 in2_lcrit_alarm >> -rw-r--r-- 1 root root 4096 Apr 11 03:04 in2_max >> -r--r--r-- 1 root root 4096 Apr 11 03:04 in2_max_alarm >> -rw-r--r-- 1 root root 4096 Apr 11 03:04 in2_min >> -r--r--r-- 1 root root 4096 Apr 11 03:04 in2_min_alarm >> -rw-r--r-- 1 root root 4096 Apr 11 03:04 in3_crit >> -r--r--r-- 1 root root 4096 Apr 11 03:04 in3_crit_alarm >> -r--r--r-- 1 root root 4096 Apr 11 03:04 in3_input >> -r--r--r-- 1 root root 4096 Apr 11 03:04 in3_label >> -rw-r--r-- 1 root root 4096 Apr 11 03:04 in3_lcrit >> -r--r--r-- 1 root root 4096 Apr 11 03:04 in3_lcrit_alarm >> -rw-r--r-- 1 root root 4096 Apr 11 03:04 in3_max >> -r--r--r-- 1 root root 4096 Apr 11 03:04 in3_max_alarm >> -rw-r--r-- 1 root root 4096 Apr 11 03:04 in3_min >> -r--r--r-- 1 root root 4096 Apr 11 03:04 in3_min_alarm >> -r--r--r-- 1 root root 4096 Apr 11 03:04 name >> drwxr-xr-x 2 root root 0 Apr 11 03:04 power >> -r--r--r-- 1 root root 4096 Apr 11 03:04 power1_input >> -r--r--r-- 1 root root 4096 Apr 11 03:04 power1_label >> -r--r--r-- 1 root root 4096 Apr 11 03:04 power2_input >> -r--r--r-- 1 root root 4096 Apr 11 03:04 power2_label >> lrwxrwxrwx 1 root root 0 Apr 11 03:04 subsystem -> >> ../../../../../../../../class/hwmon >> -rw-r--r-- 1 root root 4096 Apr 11 03:04 temp1_crit >> -r--r--r-- 1 root root 4096 Apr 11 03:04 temp1_crit_alarm >> -r--r--r-- 1 root root 4096 Apr 11 03:04 temp1_input >> -rw-r--r-- 1 root root 4096 Apr 11 03:04 temp1_lcrit >> -r--r--r-- 1 root root 4096 Apr 11 03:04 temp1_lcrit_alarm >> -rw-r--r-- 1 root root 4096 Apr 11 03:04 temp1_max >> -r--r--r-- 1 root root 4096 Apr 11 03:04 temp1_max_alarm >> -rw-r--r-- 1 root root 4096 Apr 11 03:04 temp2_crit >> -r--r--r-- 1 root root 4096 Apr 11 03:04 temp2_crit_alarm >> -r--r--r-- 1 root root 4096 Apr 11 03:04 temp2_input >> -rw-r--r-- 1 root root 4096 Apr 11 03:04 temp2_lcrit >> -r--r--r-- 1 root root 4096 Apr 11 03:04 temp2_lcrit_alarm >> -rw-r--r-- 1 root root 4096 Apr 11 03:04 temp2_max >> -r--r--r-- 1 root root 4096 Apr 11 03:04 temp2_max_alarm >> -rw-r--r-- 1 root root 4096 Apr 11 03:04 uevent >> >> This one does seem to be aware that there is READ_TEMPERATURE_2 register, >> but when it comes to READ_TEMPERATURE_1 I see the same problem. How do I >> know for which page this is reported and what are the units? >> > Any help is appreciated. >> >> -- >> Rail Shafigulin >> Software Engineer >> Esencia Technologies >> >> >> *ESENCIA TECHNOLOGIES, INC. >> *2350 Mission College Blvd. Suite #490 >> Santa Clara CA 95054 >> ________________________________________________________ >> >> Phone: +1 408 736 8284 Fax: +1 408 519 3475 >> http://www.esenciatech.com <http://www.esenciatech.com/>| >> http://www.lnttechservices.com <http://www.lnttechservices.com/> >> >> > -- Rail Shafigulin Software Engineer Esencia Technologies -- *ESENCIA TECHNOLOGIES, INC. *2350 Mission College Blvd. Suite #490 Santa Clara CA 95054 ________________________________________________________ Phone: +1 408 736 8284 Fax: +1 408 519 3475 http://www.esenciatech.com <http://www.esenciatech.com/> | http://www.lnttechservices.com <http://www.lnttechservices.com/> -- To unsubscribe from this list: send the line "unsubscribe linux-hwmon" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html