23 Aug, 2013

1 commit


04 Jun, 2013

1 commit


19 Feb, 2013

1 commit


16 Jan, 2013

1 commit

  • w1_therm includes some obsolete code to detect bad_roms, this is no
    longer relevant.
    The retry code is only used for this bad_rom test, however there is a
    CRC check that detects a bad read, but does not trigger a retry. This
    patch removes all the bad_rom code and uses the CRC check to trigger
    retries.

    Signed-off-by: David Stevenson
    Acked-by: Evgeniy Polyakov
    Signed-off-by: Greg Kroah-Hartman

    David Stevenson
     

17 Aug, 2012

1 commit


14 Jun, 2012

1 commit

  • The 'mutex' in struct w1_master is use for two very different
    purposes.

    Firstly it protects various data structures such as the list of all
    slaves.

    Secondly it protects the w1 buss against concurrent accesses.

    This can lead to deadlocks when the ->probe code called while adding a
    slave needs to talk on the bus, as is the case for power_supply
    devices.
    ds2780 and ds2781 drivers contain a work around to track which
    process hold the lock simply to avoid this deadlock. bq27000 doesn't
    have that work around and so deadlocks.

    There are other possible deadlocks involving sysfs.
    When removing a device the sysfs s_active lock is held, so the lock
    that protects the slave list must take precedence over s_active.
    However when access power_supply attributes via sysfs, the s_active
    lock must take precedence over the lock that protects accesses to
    the bus.

    So to avoid deadlocks between w1 slaves and sysfs, these must be
    two separate locks. Making them separate means that the work around
    in ds2780 and ds2781 can be removed.

    So this patch:
    - adds a new mutex: "bus_mutex" which serialises access to the bus.
    - takes in mutex in w1_search and ds1wm_search while they access
    the bus for searching. The mutex is dropped before calling the
    callback which adds the slave.
    - changes all slaves to use bus_mutex instead of mutex to
    protect access to the bus
    - removes w1_ds2790_io_nolock and w1_ds2781_io_nolock, and the
    related code from drivers/power/ds278[01]_battery.c which
    calls them.

    Signed-off-by: NeilBrown
    Acked-by: Evgeniy Polyakov
    Signed-off-by: Greg Kroah-Hartman

    NeilBrown
     

18 Nov, 2011

1 commit

  • w1_therm devices can either be bus powered or externally powered.

    When device is bus powered during temperature conversion the bus
    have to be left high to provide necessary power. Some masters also allow
    strong power-up to be enabled in this case.
    Naturally, no communication over bus can occur during that time.

    However, if device has external power then there is no such restriction,
    and host can talk to other devices during temperature conversion.

    There is command which allows us to check how device is powered,
    this patch uses it to release the bus on externally w1_therm powered devices
    during temperature conversion.

    Also, this changes uninterruptible sleeps there into interruptible ones to
    avoid long uninterruptible sleep if w1 subsystem happens to grab bus for
    scan during w1_therm_read().

    Signed-off-by: Maciej Szmigiero
    Acked-by: Evgeniy Polyakov
    Signed-off-by: Greg Kroah-Hartman

    Maciej Szmigiero
     

26 Aug, 2011

1 commit


27 Jul, 2011

1 commit


25 Apr, 2010

1 commit

  • Fix regression caused by commit 507e2fbaaacb6f164b4125b87c5002f95143174b
    ("w1: w1 temp calculation overflow fix") whereby negative temperatures for
    the DS18B20 are not converted properly.

    When the temperature exceeds 32767 milli-degrees the temperature overflows
    to -32768 millidegrees. These are both well within the -55 - +125 degree
    range for the sensor.

    Addresses https://bugzilla.kernel.org/show_bug.cgi?id=12646

    Signed-of-by: Ian Dall
    Cc: Evgeniy Polyakov
    Tested-by: Karsten Elfenbein
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ian Dall
     

12 Feb, 2009

1 commit

  • Addresses http://bugzilla.kernel.org/show_bug.cgi?id=12646

    When the temperature exceeds 32767 milli-degrees the temperature overflows
    to -32768 millidegrees. These are bothe well within the -55 - +125 degree
    range for the sensor.

    Fix overflow in left-shift of a u8.

    Signed-off-by: Ian Dall
    Signed-off-by: Evgeniy Polyakov
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ian Dall
     

17 Oct, 2008

3 commits

  • sl->master->mutex and dev->mutex refer to the same mutex variable, but be
    consistent and use the same set of pointers for the lock and unlock calls.
    It is less confusing (and one less pointer dereference this way).

    Signed-off-by: David Fries
    Signed-off-by: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     
  • Fixed data reading bug by replacing binary attribute with device one.

    Switching the sysfs read from bin_attribute to device_attribute. The data
    is far under PAGE_SIZE so the binary interface isn't required. As the
    device_attribute interface will make one call to w1_therm_read per file
    open and buffer, the result is, the following problems go away.

    buffer overflow:
    Execute a short read on w1_slave and w1_therm_read_bin would still
    return the full string size worth of data clobbering the user space
    buffer when it returned. Switching to device_attribute avoids the
    buffer overflow problems. With the snprintf formatted output dealing
    with short reads without doing a conversion per read would have
    been difficult.
    bad behavior:
    `cat w1_slave` would cause two temperature conversions to take place.
    Previously the code assumed W1_SLAVE_DATA_SIZE would be returned with
    each read. It would not return 0 unless the offset was less
    than W1_SLAVE_DATA_SIZE. The result was the first read did a
    temperature conversion, filled the buffer and returned, the
    offset in the second read would be less than
    W1_SLAVE_DATA_SIZE and also fill the buffer and return, the
    third read would finnally have a big enough offset to return 0
    and cause cat to stop. Now w1_therm_read will be called at
    most once per open.

    Signed-off-by: David Fries
    Signed-off-by: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     
  • Added strong pullup to thermal sensor driver and general documentation on
    the sensor.

    Signed-off-by: David Fries
    Signed-off-by: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     

07 Feb, 2008

1 commit

  • Standardize the temperature units to millidegrees C for the two sensor
    conversion routines. Previously the routines were,

    w1_DS18B20_convert_temp degrees C
    w1_DS18S20_convert_temp millidegrees C

    Unfortunately this will break any program using the ds18b20 value as it
    will now be 1000 times bigger. Fortunately there can't be that many users
    out there, or some of these bugs will have been fixed by now, such as the
    negative C error (see previous patch) that makes me think the ds18b20 is
    the better choice to change because of the current bugs.

    Signed-off-by: David Fries
    Cc: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     

23 Jan, 2008

2 commits

  • The extra rom[0] check is flagging valid temperatures as invalid when
    there is already a CRC data transmission check.

    w1_therm_read_bin()
    if (rom[8] == crc && rom[0])
    verdict = 1;

    Requiring rom[0] to be non-zero will flag as invalid temperature
    conversions when the low byte is zero, specifically the temperatures 0C,
    16C, 32C, 48C, -16C, -32C, and -48C.

    The CRC check is produced on the device for the previous 8 bytes and is
    required to ensure the data integrity in transmission. I don't see why the
    extra check for rom[0] being non-zero is in there. Evgeniy Polyakov didn't
    know either. Just for a check I unplugged the sensor, executed a
    temperature conversion, and read the results. The read was all ff's, which
    also failed the CRC, so it doesn't need to protect against a disconnected
    sensor.

    I have more extensive patches in the work, but these two trivial ones will
    do for today. I would like to hear from people who use the ds2490 USB to
    one wire dongle. 1 if you would be willing to test the patches as I
    currently only have the one sensor on a short parisite powered wire, 2 if
    there is any cheap sources for the ds2490.

    Signed-off-by: David Fries
    Acked-by: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     
  • Correct the decoding of negative C temperatures. The code did a binary OR
    of two bytes to make a 16 bit value, but assignd it to an integer. This
    caused the value to not be sign extended and to loose that it was a
    negative number in the assignment.

    Before the patch (in my freezer),
    w1_slave
    ed fe 4b 46 7f ff 03 10 e4 : crc=e4 YES
    ed fe 4b 46 7f ff 03 10 e4 t=4078
    With the patch,
    e3 fe 4b 46 7f ff 0d 10 81 : crc=81 YES
    e3 fe 4b 46 7f ff 0d 10 81 t=-17

    Signed-off-by: David Fries
    Acked-by: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     

12 Jul, 2007

2 commits

  • Well, first of all, I don't want to change so many files either.

    What I do:
    Adding a new parameter "struct bin_attribute *" in the
    .read/.write methods for the sysfs binary attributes.

    In fact, only the four lines change in fs/sysfs/bin.c and
    include/linux/sysfs.h do the real work.
    But I have to update all the files that use binary attributes
    to make them compatible with the new .read and .write methods.
    I'm not sure if I missed any. :(

    Why I do this:
    For a sysfs attribute, we can get a pointer pointing to the
    struct attribute in the .show/.store method,
    while we can't do this for the binary attributes.
    I don't know why this is different, but this does make it not
    so handy to use the binary attributes as the regular ones.
    So I think this patch is reasonable. :)

    Who benefits from it:
    The patch that exposes ACPI tables in sysfs
    requires such an improvement.
    All the table binary attributes share the same .read method.
    Parameter "struct bin_attribute *" is used to get
    the table signature and instance number which are used to
    distinguish different ACPI table binary attributes.

    Without this parameter, we need to offer different .read methods
    for different ACPI table binary attributes.
    This is impossible as there are various ACPI tables on different
    platforms, and we don't know what they are until they are loaded.

    Signed-off-by: Zhang Rui
    Signed-off-by: Greg Kroah-Hartman

    Zhang Rui
     
  • sysfs is now completely out of driver/module lifetime game. After
    deletion, a sysfs node doesn't access anything outside sysfs proper,
    so there's no reason to hold onto the attribute owners. Note that
    often the wrong modules were accounted for as owners leading to
    accessing removed modules.

    This patch kills now unnecessary attribute->owner. Note that with
    this change, userland holding a sysfs node does not prevent the
    backing module from being unloaded.

    For more info regarding lifetime rule cleanup, please read the
    following message.

    http://article.gmane.org/gmane.linux.kernel/510293

    (tweaked by Greg to not delete the field just yet, to make it easier to
    merge things properly.)

    Signed-off-by: Tejun Heo
    Cc: Cornelia Huck
    Cc: Andrew Morton
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     

29 Jun, 2007

1 commit


13 Feb, 2007

1 commit


04 Dec, 2006

1 commit


23 Jun, 2006

2 commits


24 Mar, 2006

1 commit