Problem with W83792d

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

 



Hi,

	I m working in "ASUS NCL-DE Board " in RHEL 3.0 UP5,with lmsensors-2.10.0 and i2c-2.10.0
In this board w83792d is the health monitoring chip.
But i am not able to get any of the values.The chip is not even detecting using sensors-detect.
I have inserted modules i2c-i801,i2c-proc,i2c-dev,i2c-core,w83792d.But the chip is showing in
/proc/sys/dev/sensors/.
The reply i got from 'Asus' is, it using the slave addres as 0x5e,smbus base addres 0x400.
But the driver for w83792d searches in 0x2c to 0x2f (static unsigned short normal_i2c_range[] = { 0x2c, 0x2f, SENSORS_I2C_END };)


I have tried using dev-interface also.But that is giving incorrect values.

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <linux/i2c-dev.h>
                                                                                                 
main()
{
        int fp,res;
//      int addr = 0x5E;
        __u8 reg= 0x29;             //0x29  is the CPU fan register                                                                                                 
        fp = open("/dev/i2c-0",O_RDWR);
        if(fp == -1) {
                printf("Error\n");
                exit(0);
        }
        ioctl(fp,I2C_SLAVE,0x5e);  //Slave address 0x5e
//      read(fp,res,8);  //Not working since it doesn't support i2c level transactions.
        res = i2c_smbus_read_byte_data(fp,reg);
                                                                                                 
        printf("%d\n",res);
}



Then i have gone for port programming.
This is the code i have used 

#include <sys/io.h>
#include<fcntl.h>
#include<string.h>
#include<stdio.h>
                                                                                                 

cpufan()
{
        unsigned char x,y;
        unsigned char fandiv,fandiv2;
//      int x;
        FILE *fp;
        char s[100];
                                                                                                 
        iopl(3);
        outb(0xFF,0x400);   //Base address is 400
        outb(0x29,0x403);   //0x29  is the CPU fan register
        outb(0x5E,0x404);   //Slave addres is 0x5e
        outb(0x48,0x402);
        while( (inb(0x400)&0x02)!=0x02);
        x = inb(0x405);
                                                                                                 
        printf("%u\n",x);
        printf("%u\n",1350000/(x*8));
}
main()
{
        cpufan();
}

But this program is going infite while loop;

Could  any one please help me to solve this issue

Thanks
Nithin






	






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

  Powered by Linux