I2C (still)

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


Hi all,

I'm still not able to use the i2c. I still don't know what's the matter.

The code: 

#include <linux/i2c-dev.h>
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include "srf08.h"
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include <linux/types.h>
#include <sys/types.h>
#include <sys/ioctl.h>

#define CHECK_I2C_FUNC( var, label ) \
    do { if(0 == (var & label)) { \
	    fprintf(stderr, "\nError: " \
	    #label " function is required. Program halted.\n\n"); \
	    exit(1); } \
    } while(0);

//global vars
int i2c_handler;

int main( int argc, char *argv[] ) {
    int i=0;
    int value=0;
    int adapter_nr;
    int err;
    int funcs;

    //we don't have to initialize the I2C, since it's done by the driver
    
    //opening the device
    printf("Opening /dev/i2c\n");
    if ( ( err = ( i2c_handler = open("/dev/i2c-0",O_RDWR) ) ) < 0 ) {
	printf("Error opening /dev/i2c! Exiting (%d -
%s).\n",err,strerror(errno));
	exit(1);
    }
    printf("Setting slave addr to 0xE0\n");
    if ( ( err = ioctl(i2c_handler,I2C_SLAVE,0xE0) ) < 0 ) {
	printf("Error setting SLAVE address! Exiting (%d).\n",err);
    }

    // check for req funcs
    printf("Getting available IOCTLs\n");
    // get funcs list
    if((err = ioctl(i2c_handler, I2C_FUNCS, &funcs) < 0)) {
	printf( "Error eeprom_open: %s\n", strerror(err));
	exit(1);
    }
    CHECK_I2C_FUNC( funcs, I2C_FUNC_SMBUS_READ_BYTE );
    CHECK_I2C_FUNC( funcs, I2C_FUNC_SMBUS_WRITE_BYTE );
    CHECK_I2C_FUNC( funcs, I2C_FUNC_SMBUS_READ_BYTE_DATA );
    CHECK_I2C_FUNC( funcs, I2C_FUNC_SMBUS_WRITE_BYTE_DATA );
    CHECK_I2C_FUNC( funcs, I2C_FUNC_SMBUS_READ_WORD_DATA );
    CHECK_I2C_FUNC( funcs, I2C_FUNC_SMBUS_WRITE_WORD_DATA );

    printf("Requesting SW version:\n");
    printf("Exiting.\n");
    exit(0);    
}

The result, when I try to run it:

root@(none):/mnt/tmp# ./srf08_user 
Opening /dev/i2c
Error opening /dev/i2c! Exiting (-1 - No such device).


The dmesg output:

...
i2c /dev entries driver
...

The /dev entries:

lrwxrwxrwx    1 root     root            5 Jan  1 00:21 i2c -> i2c-0
crw-r--r--    1 root     root      89,   0 Jul 28  2007 i2c-0
crw-r--r--    1 root     root      89,   1 Jul 28  2007 i2c-1
crw-r--r--    1 root     root      89,   2 Jul 28  2007 i2c-2
crw-r--r--    1 root     root      89,   3 Jul 28  2007 i2c-3
crw-r--r--    1 root     root      89,   4 Jan 12 01:40 i2c-4


The current kernel config is attached.

What am I doing wrong?

Thanks,

          Tamas

Attachment: actual_kernel_conf.gz
Description: GNU Zip compressed data

-------------------------------------------------------------------
List admin: http://lists.arm.linux.org.uk/mailman/listinfo/linux-arm
FAQ:        http://www.arm.linux.org.uk/mailinglists/faq.php
Etiquette:  http://www.arm.linux.org.uk/mailinglists/etiquette.php

[Linux ARM]     [Linux ARM MSM]     [Linux ARM Kernel]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

Add to Google Follow linuxarm on Twitter