[lm-sensors] asb_100 sensor location in /sys heirarchy changes on

Hans de Goede j.w.r.degoede at hhs.nl
Fri Apr 6 21:10:22 CEST 2007


jk wrote:
> Hans de Goede wrote at about 18:21:10 +0200 on Friday, April 6, 2007:
>  > jk wrote:
>  > >> jk wrote:
>  > >>> I have a p4pe board with the asb_100 sensor running under linux 2.6.20.
>  > >>>
>  > >>> I now notice that the sensors location varies between
>  > >>> /sys/bus/i2c/drivers/asb100/0-002d and /sys/bus/i2c/drivers/asb100/2-002d
>  > >>> between reboots.
>  > >>>
>  > >>> This creates problems for me since I use sensord and a crontab entry to read the
>  > >>> sensors but now the location of the sensors in /sys varies with each boot.
>  > >>>
>  > >>> Is this a bug?
>  > >>> If not is there a way to fix the location of the sensor directory in the /sys
>  > >>> heirarch? (Otherwise, I will need to write some klugey shell script to try to
>  > >>> find the location at boot-up and then automatically change the crontab entry
>  > >>> accordingly.
>  > >>>
>  > >>> Thanks!
>  > >>>
>  > > 
>  > > Agreed.
>  > > 
>  > > Note that I also seem to have an 'extra' layer in that my devices sit
>  > > in an asb100 subdirectory (see below) whereas yours seem to sit right
>  > > in the /sys/i2c/bus/devices directory. So I guess that mine already
>  > > has some 'naming' built in.
>  > > 
>  > > 
>  > > I guess my *practical* questions in the meantime until naming gets
>  > > changed are the following:
>  > > 
>  > > 1. Why does the device number prefix change from '0' to '2' on
>  > >    different boots? Also, why does the sensor jump to 2-002d when
>  > >    there is NO 0-002d or 1-002d sensor? i.e. I would have thought you
>  > >    would only get 2-002d if there were already a (conflicting) 0-002d
>  > >    or 1-002d sensor.
>  > > 
>  > 
>  > The first number is the i2c bus, the second the address on the bus.
> 
> Just to make sure I understand, it then seems that in my current
> config, I have the following:
>         i2c bus #0 (p4pe motherboard): 
>                 asb100 (0-002d)
>                 asb100 subclient (0-0048)
>                 asb100 subclient (0-0049)
>                 eeprom (0-0050)
>                 eeprom (0-0051)
>                 eeprom (0-0052)
>         i2c bus #1: (Winfast 2000XP Deluxe card)
>                 tveeprom (1-0050)
>                 tuner (1-0061)
>         i2c bus #1: (pcHDTV-5500??)
>                 eeprom (2-0050)
> 
>  > >    Note I believe I have only one asb100 sensor (corresponding to my
>  > >    p4pe motherboard) but maybe the numbering gets mixed in with other
>  > >    i2c devices (I have a nVIdia GeForce Ti 4600 graphic board, a
>  > >    Winfast 2000XP Deluxe analog TV card, and a pcHDTV 5500 digital TV
>  > >    card).
>  > > 
>  > > 2. Why did none of this happen in the 2.4 kernels where I just used
>  > >    as99127f-i2c-0-2d all the time?
>  > > 
>  > 
>  > Because modules where loaded there by initscripts / through /etc/modules.conf 
>  > and that tended to happen in a fixed order. Now adays when udev registers 
>  > itself as hotplug handler the kernel starts firing hotplug events for al 
>  > already detected hardware and the drivers get loaded in parrallel, so there is 
>  > no fixed order in the loading of the i2c bus masters, and thus no fixed 
>  > addresses for the asb, as the address consists of busnumber-busaddress
> 
> I am then surprised that many more people are not having this
> problem. It would seem then that this "race condition" would apply to
> anybody who had more than one i2c bus.
> Perhaps though there are not many people who are using sensord/rrd
> though... (however, if you are and set up the crontab as recommended
> then you will get cron email errors mailed to you every 5 minutes :)
> 
>  > > 3. What if anything can I do to 'fix' the sensor to a specific prefix?
>  > >    (Perhaps something analogous to what one does in modprobe.conf with
>  > >    the index=n option or maybe something to force the boot order to be
>  > >    consistent)
>  > > 
>  > 
>  > You could try to disable / blacklist non used i2c masters, but you have atleast 
>  > the smbus controller on your board and one for your tvcard which you both need, 
>  > another hack would be to modprobe the smbus driver from your rc.sysinit script 
>  >   before udev gets started.
>  > 
>  > Regards,
>  > 
>  > Hans
> 
> I believe that I need all 3 i2c masters.
> For the rc.sysinit hack, I assume you mean just insert a statement of
> form:
>         modprobe asb100
> 
> Is that right?
> 

About right, but you need to modprobe the driver for your smbus controller / 
the i2c master on your motherboard, as that is the one jumping from 0 - 2, the 
asb100 is always at 2d

Regards,

Hans




More information about the lm-sensors mailing list