1. 10 Sep, 2016 1 commit
    • Lars-Peter Clausen's avatar
      iio: iio_push_event(): Don't crash if the event interface is not registered · 4b1a9380
      Lars-Peter Clausen authored
      iio_push_event() operates on a struct iio_dev. This struct can be allocated
      using iio_device_alloc() which returns a valid struct iio_dev pointer. But
      iio_push_event() is not safe to use on such a iio_dev until
      iio_device_register() for the same device has successfully completed.
      
      This restriction is not documented anywhere and most drivers are written
      with the assumption that this restriction does not exist. The basic pattern
      that is followed by all drivers looks like the following:
      
      	irqreturn_t event_callback(int irq, void *devid)
      	{
      		struct iio_dev *indio_dev = devid;
      		...
      		iio_push_event(indio_dev, ...);
      
      		return IRQ_HANDLED;
      	}
      
      	int driver_probe(struct device *dev)
      	{
      		struct iio_dev *indio_dev;
      
      		indio_dev = iio_device_alloc(...);
      
      		request_irq(event_irq, event_callback, ..., indio_dev);
      
      		return iio_device_register(indio_dev);
      	}
      
      And while it is unlikely that the IRQ fires before iio_device_register()
      completes (e.g. because the IRQ is disabled in the device) it is not
      impossible and might be triggered by glitches on the signal line or
      incorrect hardware configuration.
      
      To avoid undefined behaviour in such a case extend iio_push_event() to
      check if the event has been registered and discard generated events if it
      has not.
      Signed-off-by: default avatarLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: default avatarJonathan Cameron <jic23@kernel.org>
      4b1a9380
  2. 05 Sep, 2016 4 commits
  3. 04 Sep, 2016 2 commits
  4. 03 Sep, 2016 6 commits
  5. 31 Aug, 2016 1 commit
  6. 29 Aug, 2016 16 commits
  7. 23 Aug, 2016 1 commit
    • Greg Kroah-Hartman's avatar
      Merge tag 'iio-for-4.9a' of... · d5bd1eba
      Greg Kroah-Hartman authored
      Merge tag 'iio-for-4.9a' of git://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio into work-testing
      
      Jonathan writes:
      
      First round of new features, device support and cleanups for IIO in the 4.9 cycle.
      
      Device support
      
      * ak8974
        - New driver and bindings for this 2009 vintage magnetometer (it was very
          popular back then!)
      * atlas-ph-sensor
        -  ORP sensor support(I had to look up what one of these was)
      * cio-dac
        - New driver for Measurement Computing DAC boards
      * dmard06
        - New driver for Domintech DMARDO6 accelerometer. Also vendor prefix.
      * dmard09
        - New driver for Domintech DMARD09 accelerometer.
      * maxim-thermocouple
        - max6675 and max31855 new driver
      * mt6577 auxdac
        - new driver for this Mediatek chip mt2701, mt6577 and mt8173 have this
          hardware.
      * ti-adc161s626
        - new driver for this TI single channel differential ADC.
      * vcnl4000
        - support vcnl4010 and vcnl4020 which are compatible for all features
          currently supported by this driver.
      
      New features
      
      * Core
        - Allow retrieving of underlying iio_dev from a callback buffer handle.
          This is needed to allow client drivers to perform operations such as
          configuring the trigger used.
      * hid-sensors
        - asynchronous resume support to avoid really long resume times.
      * kxcjk-1013
        - add the mysterious KIOX000A ACPI id seen in the wild.
      * Tools
        - lsiio now enumerates processed as well as raw channels.
      
      Cleanup
      
      * ad7298
        - use iio_device_claim_direct_mode and friends to simplify locking around
          mode switching and drop some boilerplate.
      * ad7793
        - use iio_device_claim_direct_mode and friends to simplify locking around
          mode switching and drop some boilerplate.
      * ade7854
        - checkpatch fixups (alignment of parameters)
      * atlas-ph-sensor
        - use iio_device_claim_direct_mode and friends to simplify locking around
          mode switching and drop some boilerplate.
        - Switch to REGCACHE_NONE as there are no useful register to cache.
      * bma180
        - use iio_device_claim_direct_mode and friends to simplify locking around
          mode switching and drop some boilerplate.
      * hdc100x
        - Add mention of the HDC1000 and HDC1008 to the Kconfig help text.
      * isl29018
        - Add driver specific prefixes to defines and function names.
        - Remove excessive logging.
        - Drop newlines which add nothing to readability.
        - General tidying up of comments.
        - Drop I2C_CLASS_HWMON as irrelevant to driver.
      * isl29028
        - Add driver specific prefixes to defines, enums and function names.
        - Drop comma's from available attribute output as not ABI compliant.
        - Drop I2C_CLASS_HWMON as irrelevant to driver.
      * kxsd9
        - devicetree bindings.
      * mag3110
        - This one wasn't locking to protect against mode switches during
          raw_reads.  Use the iio_claim_direct_mode function to fix this buglet.
      * maxim-theromcouple
        - Fix missing selects for triggered buffer support in Kconfig.
      * nau7802
        - Use complete instead of complete_all as only one completion at a time.
      * sx9500
        - Use complete instead of complete_all as only one completion at a time.
      * us5182d
        - Add a missing error code asignment instead of checking the result of
          an already checked statement.
      * vcnl4000
        - Use BIT macro where appropriate.
        - Refactor return codes in read_raw callback.
        - Add some missing locking for concurrent accesses to the device.
      d5bd1eba
  8. 22 Aug, 2016 2 commits
  9. 21 Aug, 2016 7 commits