From: Jonathan K. <jon...@gm...> - 2011-05-13 20:41:28
|
Hi again, For Google's sake, here is what I found tucked in the documentation: I2C devices for the Overo Gumstix (and in general) are not scanned in any way, but are instead registered. (A good reference on this topic can be found here, in the kernel's documentation itself<http://www.mjmwired.net/kernel/Documentation/i2c/instantiating-devices>.) This is because scanning the i2c buss can cause problems. The easiest way to do this in a fixed board configuration is to edit the appropriate lines in board-overo.c (or whichever board-*.c file is appropriate) and add your devices information to the registration list. Mine looked like this: //this one is already in board-overo.c static struct i2c_board_info __initdata overo_i2c_boardinfo[] = { ... }; // Declarations of devices on i2c buss 3 static struct i2c_board_info __initdata overo_i2c_boardinfo_i2c_3[] = { { // arguments: module name, I2C address I2C_BOARD_INFO("hmc5843", 0x1e), }, }; static int __init overo_i2c_init(void) { omap_register_i2c_bus(1, 2600, overo_i2c_boardinfo, ARRAY_SIZE(overo_i2c_boardinfo)); /* i2c2 pins are used for gpio */ //this is where my changes happened. Note the macro. omap_register_i2c_bus(3, 400, overo_i2c_boardinfo_i2c_3, ARRAY_SIZE(overo_i2c_boardinfo_i2c_3)); return 0; } After building and booting with these changes my device appeared quite happily under both /sys/bus/iio and /sys/bus/i2c. Best of luck to the next chap! --Jon On Thu, May 12, 2011 at 3:25 PM, Jonathan Kunkee <jon...@gm...>wrote: > Hello, > > I am using a customized Sakoman 2.6.36 kernel on an Overo Earth on a > modified Tobi. I've hooked up the HMC5883 magnetometer to one of the I2C > lines and can use i2c-tools to interact and read data from it. It's rather > brilliant, actually. > > I am using the hmc5843 module, as I figure from the specsheet that the > HMC5843 uses the same register-level interface as its more accurate > successor, the HMC 5883, and so will work. It also seems that all > identifying strings are the same between them. > > I noticed that the kernel code for the magnetometer has wrapped many of the > I2C calls into useful bundles, so I started looking for them in userland. > After flogging my brain and Google, I determined that IIO devices (of which > the HMC5843 is one) have /sys entries. Cool! ...except that they are not > there. Device registration seems broken: > > # i2cdetect -y -r 3 0x1e > 0 1 2 3 4 5 6 7 8 9 a b c d e f > 00: -- -- -- -- -- -- -- -- -- -- -- -- -- > 10: UU -- -- -- -- -- -- -- -- -- -- -- -- -- 1e -- > 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- > 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- > 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- > 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- > 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- > 70: -- -- -- -- -- -- -- -- > # modprobe hmc5843 && dmesg | tail > [timestamp] hmc5843: module is from the staging directory, the quality is > unknown, you have been warned. > # ls /sys/bus/i2c/devices/ > 1-00??... 3-0010 i2c-1 i2c-3 > # ls /sys/bus/i2c/drivers > ... hmc5843 ... > # ls /sys/bus/i2c/drivers/hmc5843/ > bind module uevent unbind > > Note that I can enumerate (and get data from, using i2cget and i2cset) the > device (0x1e as per the driver), yet the kernel seems to ignore it > (/sys/bus/i2c/devices/3-001e should correspond to it). Inserting 'printk' > calls tells me that the module loads but never binds. Does anyone know what > I can check or try next? > > Cheers, > Jon Kunkee > > > |