Re: Winbond W83L604G

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Tim,

On Thu, 7 Jul 2011 10:32:38 -0500 (CDT), Tim Nelson wrote:
> ----- Original Message -----
> > As pointed out by Michael already, 08h in the datasheet translates to
> > 0x08 in the Linux world.
> 
> I'm curious how this conversion translates. Is it as simple as dropping the suffix 'h', no actual math involved? Most other registers are noted with an 'h' suffix as well for this chip.

No math involved. The "h" suffix means hexadecimal. The "0x" prefix
means the same. Which one to use depends on the environment and
culture. Have fun reading:
http://en.wikipedia.org/wiki/Hexadecimal#Representing_hexadecimal

> > The correct slave address is certainly 0x19, as the datasheet says
> > that
> > the first 4 address bits are hard-set to 0011b, which means a 7-bit
> > slave address in the 0x18-0x1f range. The device at 0x4c could be a
> > thermal sensor (sensors-detect should tell.)
> 
> Yes, correct. We have an ITE super-IO sensor onboard for monitoring which is at 0x4c.

That would be relatively surprising, as ITE super-I/O chips are LPC
devices accessed with direct I/O. I think there used to be one old
model which could alternatively be accessed over the SMBus (the
monitoring block at least) but it would be at address 0x2d rather than
0x4c, and I doubt current chips still support that.

Just try sensors-detect and see what it finds.

> > Yes, with i2cget and i2cset you could do that. But I suspect that in
> > the end you will want to write a proper kernel GPIO driver, so that
> > you
> > can benefit from all the nice things gpiolib does for you (including,
> > but not limited to, clear and safe access from other kernel drivers.)
> > There are several examples of such drivers under drivers/gpio (pcf857x
> > and pca953x in particular.)
> 
> This specific implementation purely needs to exist in userland as the only use for the controller is LED status (on, off, blink).

Well, there is a framework in the kernel for this too.

> I'm now able to read from the proper register for the GP10-GP13 pins, but I'm not able to write. Example:
> 
> root@aaa:~# i2cget -y 0 0x19 0x08
> 0x00
> 
> According to the datasbeet, to set all LEDs from off to on, I'd need to set the 0x08 register to binary '10101010' which is 0xaa in hex. So:
> 
> root@aaa:~# i2cset -y 0 0x19 0x08 0xaa
> Error: Write failed
> 
> Is my binary->hex math incorrect (verified against a few online calcs...)? Am I blatantly missing something else?

Your binary->hex is correct, and the command as well, but the chip did
not like the write for some reason. You should look at the kernel logs
when it failed, there may be a hint. You could also just retry to check
if this was maybe a transient error.

To test the reliability of the SMBus you could dump the whole register
map:
# i2cdump -y -r 0x00-0x22 0 0x19
and look for XX's.

-- 
Jean Delvare
--
To unsubscribe from this list: send the line "unsubscribe linux-i2c" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux GPIO]     [Linux SPI]     [Linux Hardward Monitoring]     [LM Sensors]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux