06 Sep, 2005

40 commits

  • i2c_probe was quite complex and slow, so I rewrote it in a more
    efficient and hopefully clearer way.

    Note that this slightly changes the way the module parameters are
    handled. This shouldn't change anything for the most common cases
    though.

    For one thing, the function now respects the order of the parameters
    for address probing. It used to always do lower addresses first. The
    new approach gives the user more control.

    For another, ignore addresses don't overrule probe addresses anymore.
    This could have been restored the way it was at the cost of a few more
    lines of code, but I don't think it's worth it. Both lists are given
    as module parameters, so a user would be quite silly to specify the
    same addresses in both lists. The normal addresses list is the only
    one that isn't controlled by a module parameter, thus is the only one
    the user may reasonably want to remove an address from.

    Another significant change is the fact that i2c_probe() will no more
    stop when a detection function returns -ENODEV. Just because a driver
    found a chip it doesn't support isn't a valid reason to stop all
    probings for this one driver. This closes the long standing lm_sensors
    ticket #1807.

    http://www2.lm-sensors.nu/~lm78/readticket.cgi?ticket=1807

    I updated the documentation accordingly.

    In terms of algorithmic complexity, the new code is way better. If
    I is the ignore address count, P the probe address count, N the
    normal address count and F the force address count, the old code
    was doing 128 * (F + I + P + N) iterations max, while the new code
    does F + P + ((I+1) * N) iterations max. For the most common case
    where F, I and P are empty, this is down from 128 * N to N.

    Signed-off-by: Jean Delvare
    Signed-off-by: Greg Kroah-Hartman

    Jean Delvare
     
  • This patch updates the VID entries, so any future
    Intel CPU will be detected as unknown rather than 9.0

    Signed-off-by: Rudolf Marek
    Signed-off-by: Greg Kroah-Hartman

    R.Marek@sh.cvut.cz
     
  • Use the common vid_from_reg function in lm78 rather than
    reimplementing it.

    Signed-off-by: Jean Delvare
    Signed-off-by: Greg Kroah-Hartman

    Jean Delvare
     
  • I see very little reason why vid_from_reg is inlined. It is not
    exactly short, its parameters are seldom known in advance, and it is
    never called in speed critical areas. Uninlining it should cause
    little performance loss if any, and saves a signficant space as well
    as compilation time.

    As suggested by Alexey Dobriyan, I am leaving vid_to_reg inline for now,
    as it is short and has a single user so far.

    Signed-off-by: Jean Delvare
    Signed-off-by: Greg Kroah-Hartman

    Jean Delvare
     
  • Delete DEFAULT_VRM from hwmon-vid.h, it has no more users.

    Signed-off-by: Jean Delvare
    Signed-off-by: Greg Kroah-Hartman

    Jean Delvare
     
  • Cleanup hwmon-vid a bit, fixing typos, rewording some comments and
    reindenting properly at places.

    Signed-off-by: Jean Delvare
    Signed-off-by: Greg Kroah-Hartman

    Jean Delvare
     
  • The only part left in i2c-sensor is the VRM/VRD/VID handling code.
    This is in no way related to i2c, so it doesn't belong there. Move
    the code to hwmon, where it belongs.

    Note that not all hardware monitoring drivers do VRM/VRD/VID
    operations, so less drivers depend on hwmon-vid than there were
    depending on i2c-sensor.

    Signed-off-by: Jean Delvare
    Signed-off-by: Greg Kroah-Hartman

    Jean Delvare
     
  • The only thing left in i2c-sensor.h are module parameter definition
    macros. It's only an extension of what i2c.h offers, and this extension
    is not sensors-specific. As a matter of fact, a few non-sensors drivers
    use them. So we better merge them in i2c.h, and get rid of i2c-sensor.h
    altogether.

    Signed-off-by: Jean Delvare
    Signed-off-by: Greg Kroah-Hartman

    Jean Delvare
     
  • The i2c_detect function has no more user, delete it.

    Signed-off-by: Jean Delvare
    Signed-off-by: Greg Kroah-Hartman

    Jean Delvare
     
  • i2c_probe and i2c_detect now do the exact same thing and operate on
    the same data structure, so we can have everyone call i2c_probe.

    Signed-off-by: Jean Delvare
    Signed-off-by: Greg Kroah-Hartman

    Jean Delvare
     
  • We now have two identical structures, i2c_address_data in i2c-sensor.h
    and i2c_client_address_data in i2c.h. We can kill one of them, I choose
    to keep the one in i2c.h as it makes more sense (this structure is not
    specific to sensors.)

    Signed-off-by: Jean Delvare
    Signed-off-by: Greg Kroah-Hartman

    Jean Delvare
     
  • The way i2c-sensor handles forced addresses could be optimized. It
    defines a structure (i2c_force_data) to associate a module parameter
    with a given kind value, but in fact this kind value is always the
    index of the structure in each array it is used in. So this additional
    value can be omitted, and still be deduced in the code handling these
    arrays.

    Signed-off-by: Jean Delvare
    Signed-off-by: Greg Kroah-Hartman

    Jean Delvare
     
  • Add support for kind-forced addresses to i2c_probe, like i2c_detect
    has for (essentially) hardware monitoring drivers.

    Note that this change will slightly increase the size of the drivers
    using I2C_CLIENT_INSMOD, with no immediate benefit. This is a
    requirement if we want to merge i2c_probe and i2c_detect though, and
    seems a reasonable price to pay in comparison with the previous
    cleanups which saved much more than that (such as the i2c-isa cleanup
    or the i2c address ranges removal.)

    Signed-off-by: Jean Delvare
    Signed-off-by: Greg Kroah-Hartman

    Jean Delvare
     
  • Remove an unused macro and an outdated comment from the lm85 driver.

    Signed-off-by: Jean Delvare
    Signed-off-by: Greg Kroah-Hartman

    Jean Delvare
     
  • Move SENSORS_LIMIT from i2c-sensor.h to hwmon.h, as it is in no way
    related to i2c.

    Signed-off-by: Jean Delvare
    Signed-off-by: Greg Kroah-Hartman

    Jean Delvare
     
  • The debugging messages in i2c-core are more confusing than helpful. Some
    lack their trailing newline, some lack a prefix, some are redundant,
    some lack precious information. Here is my attempt to introduce some
    standardization in there.

    I also changed two messages in i2c-dev to make it clear they come from
    i2c-dev.

    Signed-off-by: Jean Delvare
    Signed-off-by: Greg Kroah-Hartman

    Jean Delvare
     
  • Fix a typo in the i2c documentation: the i2c bus scanning tool found in
    lm_sensors is called i2cdetect, not i2c_detect.

    Signed-off-by: Jean Delvare
    Signed-off-by: Greg Kroah-Hartman

    Jean Delvare
     
  • I've been running with this patch for a while now, and while I've never
    seen it trigger except with buggy hardware I think it is a cleaner way
    to handle a busy bus. I had -EBUSY until about 10 minutes ago but -EIO
    seems to be what most of the existing algo drivers will return in the
    same circumstances.

    Signed-off-by: Ian Campbell
    Signed-off-by: Greg Kroah-Hartman

    Ian Campbell
     
  • We could inline i2c_adapter_id, as it is really, really short. Doing
    so saves a few bytes both in i2c-core and in the drivers using this
    function.

    before after diff
    drivers/hwmon/adm1026.ko 41344 41305 -39
    drivers/hwmon/asb100.ko 27325 27246 -79
    drivers/hwmon/gl518sm.ko 20824 20785 -39
    drivers/hwmon/it87.ko 26419 26380 -39
    drivers/hwmon/lm78.ko 21424 21385 -39
    drivers/hwmon/lm85.ko 41034 40939 -95
    drivers/hwmon/w83781d.ko 39561 39514 -47
    drivers/hwmon/w83792d.ko 32979 32932 -47
    drivers/i2c/i2c-core.ko 24708 24531 -177

    Signed-off-by: Jean Delvare
    Signed-off-by: Greg Kroah-Hartman

    Jean Delvare
     
  • Super-I/O find functions in hardware monitoring drivers can be tagged
    __init as they are only called from functions themselves tagged __init.
    Two of them (smsc47b397 and w83627ehf) already do, but the other four
    of them (it87, pc87360, smsc47m1 and w83627hf) did not.

    This saves a few bytes of memory after the drivers are loaded, 192 in
    the case of the it87 driver.

    Signed-off-by: Jean Delvare
    Signed-off-by: Greg Kroah-Hartman

    Jean Delvare
     
  • We could refactor the error message 34 different i2c drivers print if
    i2c_detach_client() fails in this function itself. Saves quite a few
    lines of code. Documentation is updated to reflect that change.

    Note that this patch should be applied after Rudolf Marek's w83792d
    patches.

    Signed-off-by: Jean Delvare
    Signed-off-by: Greg Kroah-Hartman

    Jean Delvare
     
  • This patch adds documentation entry for W83792D chip.

    Signed-off-by: Rudolf Marek
    Signed-off-by: Greg Kroah-Hartman

    R.Marek@sh.cvut.cz
     
  • This patch adds registration of hwmon class. Tested with help of i2c-stub.

    Signed-off-by: Rudolf Marek
    Signed-off-by: Greg Kroah-Hartman

    R.Marek@sh.cvut.cz
     
  • I would like to announce support for W83792D chip. This driver was developed
    by Winbond Electronics Corp. I added sysfs attributes callbacks infrastructure
    plus various code fixes and codingstyle cleanups. I would like to thank Winbond
    for supporting free software.

    This patch is against 2.6.13rc3 plus hwmon-class and hwmon-split.
    Separate patch for documantation and hwmon class register will follow.

    Signed-off-by: Rudolf Marek
    Signed-off-by: Chunhao Huang
    Signed-off-by: Greg Kroah-Hartman

    R.Marek@sh.cvut.cz
     
  • Move the definitions of i2c_is_isa_client and i2c_is_isa_adapter from
    i2c.h to i2c-isa.h. Only hybrid drivers still need them.

    Signed-off-by: Greg Kroah-Hartman

    Jean Delvare
     
  • Kill all uses of i2c_is_isa_adapter except for the hybrid drivers (it87,
    lm78, w83781d). The i2c-isa adapter not being registered with the i2c
    core anymore, drivers don't have to fear being erroneously attached to
    it.

    Signed-off-by: Greg Kroah-Hartman

    Jean Delvare
     
  • Kill normal_isa in header files, documentation and all chip drivers, as
    it is no more used.

    normal_i2c could be renamed to normal, but I decided not to do so at the
    moment, so as to limit the number of changes. This might be done later
    as part of the i2c_probe/i2c_detect merge.

    Signed-off-by: Greg Kroah-Hartman

    Jean Delvare
     
  • Kill all isa-related stuff from i2c_detect, it's not used anymore.

    This is one major step in the directiom of merging i2c_probe and
    i2c_detect. The last obstacle I can think of is the different way forced
    addresses work between sensors and non-sensors i2c drivers. I'll deal
    with that in a later patchset.

    Signed-off-by: Greg Kroah-Hartman

    Jean Delvare
     
  • Call the ISA chip drivers detection function directly instead of relying
    on i2c_detect. The net effect is that address lists won't be handled
    anymore, but they were mostly useless in the ISA case anyway (pc87360,
    smsc47m1, smsc47b397 had already dropped them).

    We don't need to handle multiple devices, all we may need is a way to
    force a given address instead of the original one (some drivers already
    do: sis5595, via686a, w83627hf), and, for drivers supporting multiple
    chips, a way to force one given kind. All this may be added later on
    demand, but I actually don't think there will be much demand.

    Signed-off-by: Greg Kroah-Hartman

    Jean Delvare
     
  • All ISA hardware monitoring drivers (including hybrid drivers) now have
    a hard dependency on i2c-isa, so they must select I2C_ISA. As a result,
    CONFIG_I2C_ISA doesn't need to be left visible to the user. The good
    thing here is that users will stop complaining that some driver doesn't
    work just because they forgot to compile or load i2c-isa.

    At this point, all drivers are working again and the cleanup phase can
    begin.

    Signed-off-by: Greg Kroah-Hartman

    Jean Delvare
     
  • Convert the 10 ISA hardware monitoring drivers (it87, lm78, pc87360,
    sis5595, smsc47b397, smsc47m1, via686a, w83627hf, w83627ehf, w83781d) to
    explicitely register with i2c-isa. For hybrid drivers (it87, lm78,
    w83781d), we now have two separate instances of i2c_driver, one for the
    I2C interface of the chip, and one for ISA interface. In the long run,
    the one for ISA will be replaced with a different driver type.

    At this point, all drivers are working again, except for missing
    dependencies in Kconfig.

    Signed-off-by: Greg Kroah-Hartman

    Jean Delvare
     
  • Convert i2c-isa from a dumb i2c_adapter into a pseudo i2c-core for ISA
    hardware monitoring drivers. The isa i2c_adapter is no more registered
    with i2c-core, drivers have to explicitely connect to it using the new
    i2c_isa_{add,del}_driver interface.

    At this point, all ISA chip drivers are useless, because they still
    register with i2c-core in the hope i2c-isa is registered there as well,
    but it isn't anymore.

    The fake bus will be named i2c-9191 in sysfs. This is the number it
    already had internally in various places, so it's not exactly new,
    except that now the number is seen in userspace as well. This shouldn't
    be a problem until someone really has 9192 I2C busses in a given system
    ;)

    The fake bus will no more show in "i2cdetect -l", as it won't be seen by
    i2c-dev anymore (not being registered with i2c-core), which is a good
    thing, as i2cdetect/i2cdump/i2cset cannot operate on this fake bus
    anyway.

    Signed-off-by: Greg Kroah-Hartman

    Jean Delvare
     
  • Temporarily export a few structures and functions from i2c-core, because we
    will soon need them in i2c-isa.

    Signed-off-by: Jean Delvare
    Signed-off-by: Greg Kroah-Hartman

    Jean Delvare
     
  • This patch modifies sensors chip drivers to make use of the new
    sysfs class "hwmon".

    Signed-off-by: Mark M. Hoffman
    Signed-off-by: Jean Delvare
    Signed-off-by: Greg Kroah-Hartman

    Mark M. Hoffman
     
  • This patch adds the sysfs class "hwmon" for use by hardware monitoring
    (sensors) chip drivers. It also fixes up the related Kconfig/Makefile
    bits.

    Signed-off-by: Mark M. Hoffman
    Signed-off-by: Jean Delvare
    Signed-off-by: Greg Kroah-Hartman

    Mark M. Hoffman
     
  • Document the fact that the W83627EHG is compatible with the W83627EHF.

    Signed-off-by: Jean Delvare
    Signed-off-by: Greg Kroah-Hartman

    Jean Delvare
     
  • Drop the separate client name for the LM78-J chip. This is really
    only a later revision of the LM78, with almost no difference and
    no difference the driver handles in any case.

    This was the only client name that had a dash in it, and special care
    had to be taken in libsensors because of it. As we plan to write a new
    library soon, I'd like to get rid of this exception before we do.

    As a nice side effect, it saves 876 bytes in lm78.ko.

    Signed-off-by: Jean Delvare
    Signed-off-by: Greg Kroah-Hartman

    Jean Delvare
     
  • The LM75 initialization is a bit agressive, it arbitrarily reconfigures
    the chip. Make it only change the bit it needs. This is a port from
    the 2.4 kernel version of the driver (lm_sensors).

    Signed-off-by: Jean Delvare
    Signed-off-by: Greg Kroah-Hartman

    Jean Delvare
     
  • Remove an unused local variable and change the subclient name.

    Signed-off-by: Ben Gardner
    Signed-off-by: Greg Kroah-Hartman

    bgardner@wabtec.com
     
  • Fix a spelling error and change a sysfs name.

    Signed-off-by: Ben Gardner
    Signed-off-by: Greg Kroah-Hartman

    bgardner@wabtec.com