SMBus busy in 82801

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

 



We cannot get the lm-sensors user-space adapter to work on our embedded
system.  Problem seems to be localized to the Intel 82801 Southbridge.
 
SHORT DESCRIPTION
We are trying to read an eeprom located on the SMBus ( using
i2c_smbus_read_byte_data() ).  Debug messages from the driver show that
the SMBus is busy (or not ready to Transmit).  However there is other
debug output just before the busy-check which shows some important host
registers to have all FF's in them; this seems to be abnormal.  We have
not used "sensors-detect"; it is a perlscript and getting perl onto our
embedded system would be quite ungainly.  
 
Any help would be appreciated.  Details, souce code, and kernel config
are below.
Thanks,
Patrick
 
DETAILS:
 
The fail occurs at the beginning of the following file/function:
           drivers/i2c/busses/i2c-i801.c:i801_transaction()
    Debug information shows that all five registers have FF in them and
that the SMBus is busy:
i801_smbus : Transaction (pre): CNT=ff, CMD=ff, ADD=ff, DAT0=ff, DAT1=ff
i801_smbus : SMBus busy (1f). Resetting...
i801_smbus : Failed! (1f)
 

SOURCE CODE:
   drivers/i2c/busses/i2c-i801.c:i801_transaction() ( lines 183-206 )
 
static int i801_transaction(void)
{
        int temp;
        int result = 0;
        int timeout = 0;
 
        dev_dbg(&I801_dev->dev, "Transaction (pre): CNT=%02x, CMD=%02x,
"
                "ADD=%02x, DAT0=%02x, DAT1=%02x\n", inb_p(SMBHSTCNT),
                inb_p(SMBHSTCMD), inb_p(SMBHSTADD), inb_p(SMBHSTDAT0),
                inb_p(SMBHSTDAT1));
 
        /* Make sure the SMBus host is ready to start transmitting */
        /* 0x1f = Failed, Bus_Err, Dev_Err, Intr, Host_Busy */
        if ((temp = (0x1f & inb_p(SMBHSTSTS))) != 0x00) {
                dev_dbg(&I801_dev->dev, "SMBus busy (%02x).
Resetting...\n",
                        temp);
                outb_p(temp, SMBHSTSTS);
                if ((temp = (0x1f & inb_p(SMBHSTSTS))) != 0x00) {
                        dev_dbg(&I801_dev->dev, "Failed! (%02x)\n",
temp);
                        return -1;
                } else {
                        dev_dbg(&I801_dev->dev, "Successfull!\n");
                }
        }
 
   ...
 
KERNEL CONFIGURATION   (using 2.6.14.1)
   Since we need to reduce the size of the kernel, we've tried to
eliminate any unnecessary drivers. We've followed the 2.6 Kernel
Configuration instructions at:
      http://www.lm-sensors.org/wiki/Kernel2.6
<http://www.lm-sensors.org/wiki/Kernel2.6> 
   ...with the following exceptions:
  * Under I2C_support>I2C_Algorithms : all 3 drivers are configured as
built-in instead of modules
  * Under I2C_support>I2C_Hardware_Bus_Support : Intel 82801 is
configured as "built-in" and the remaining 20 drivers are excluded
  * Under I2C_support>Misc_I2C_Chip_support : EEPROM reader and the 3
Phillips drivers are included; remaining 4 drivers are excluded.
  * Under Hardware Monitoring support:  "Hardware Monitoring Support" is
included as a module but all 27 drivers under it are excluded

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.lm-sensors.org/pipermail/lm-sensors/attachments/20070606/23eab584/attachment.html 


[Index of Archives]     [Linux Kernel]     [Linux Hardware Monitoring]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux