Skip to contentSkip to conversation

Finding particular I2C adapter?

DISCUSSION Przemyslaw Wegrzyn 1 participant 2 messages Oct 7, 2011 – Oct 10, 2011 1 message not in the archive I2C subsystem host drivers

lore
Share & tools
lore
#0 lore raw

Hi!

First of all - I know what I'm asking for is somewhat "broken by design", but anyway...

I'm about to develop a driver for a custom chip attached to SMBus in a sort of industrial PC (choosing SMBus was a really bad idea, imho, but unfortunately I can't change hardware team decisions).

While developing the I2C client driver seems pretty straight-forward, I'm slightly confused about making it look for the device on a particular I2C adapter instance. The project is limited to particular board types, each using ICH chipset, so I need to use i2c_adapter controlled by i2c-i801 module.

Here's my understanding so far:

- it is not an embedded system in a strict sense -> thus no i2c_board_info -> no static I2C configuration

- AFAIR I can force the bus and address using 'force' parameter at module loading time (e.g. via /etc/modules), but the I2C adapter number is not static anyway on PC, and depend on e.g. adapter modules loading order, so I'm a bit afraid of users breaking this configuration too easily.

- similar issue with echo'ing to /sys/bus/i2c/devices/i2c-<n>/new_device
- I need to know the bus ID in advance

Ideally, I'd like to have a sort of wrapper module that will find the proper i2c_adapter and instantiate my i2c_client explicitly. Yet I know that iterating i2c adapters is discouraged at least (actually, is there any API now allowing for this? calling i2c_get_adapter with successive numbers is clearly a hack).

Any ideas?

BR,
Przemek

A message that is not in the archive (sent off-list or not yet received): 4E8EF3DC.7060704-qaBtZ/[email protected]

#2 lore raw
Quoted 5 lines · Przemyslaw Wegrzyn

Ideally, I'd like to have a sort of wrapper module that will find the proper i2c_adapter and instantiate my i2c_client explicitly. Yet I know that iterating i2c adapters is discouraged at least (actually, is there any API now allowing for this? calling i2c_get_adapter with successive numbers is clearly a hack).

Answering my own question - there's i2c_for_each_dev() that I've overlooked before. Still a hack, anyway.

--
Przemek