tree de560055647ce08a9faf14147833e37d25674775
parent 40403c1b13cb01d9125df80789b574c2d4172cc0
parent 2155971a66f89924edb37c213251c4fe9f7776c0
author Greg Kroah-Hartman <gregkh@linuxfoundation.org> 1436988729 -0700
committer Greg Kroah-Hartman <gregkh@linuxfoundation.org> 1436988729 -0700
mergetag object 2155971a66f89924edb37c213251c4fe9f7776c0
 type commit
 tag iio-for-4.3a
 tagger Jonathan Cameron <jic23@kernel.org> 1436982344 +0100
 
 First round of new drivers, cleanups and functionality for IIO in the 4.3 cycle.
 
 Core and tools new stuff
 * Allow explicit flush of hardware fifo by using an non blocking read.
   This is needed to support some of the Android requirements for HW fifo
   devices - also makes sense generally and clarifies a corner of the ABI.
 * Add some missing modifier names.  Mostly these exist for weird and
   wonderful event types, but should still be present in the name array.
 * Update iio_event_monitor to cope with new channel types.
 * generic_buffer gains support for single byte scan elements (no idea
   how this never got implemented before!)
 
 New device support
 * ROHM rpr0521 light and proximity sensor driver.
 * bmc150 gains bmc156 support.
 * ms5611 gains ms5607 temperature and pressure sensor support.
 
 Driver functionality
 * inv-mpu - add scale_available attributes to aid userspace in
   configuring these devices.
 * isl29125 - add scale_available attributes.
 * stk8ba50 - sampling frequency control, triggered buffer support.
 * stk8312 - sampling frequency control, triggered buffer support.
 * cc10001 - ensure ADC powered up at probe time if shared by non linux
   running CPUs.
 * bmc150-magn - decouple the buffer and trigger allowing other triggers
   to be used to drive this device's sampling.
 Documentation
 * Add some previously missed *scale_available attributes to the ABI docs.
 
 Cleanups
 * Clarify some crazy naming in iio_triggered_buffer_setup that seems to
   have somehow ended up backwards (dates back a long way).  Avoid the top
   half and bottom half naming entirely given we are how dealing with a
   handler and a thread in all cases.
 * Tools cleanup including coding style, variable naming improvements, also
   a new sanity check on a full event having been read.
 * stk8ba50 - replace the scale table with a struct for clarity. Also suspend
   the sensor if an error occurs in init.
 * hid-sensor-prox - drop uneeded line break.
 * mma9551 - use size in words for word read / write avoiding accidental
   sending of an odd number of bytes.
 * mma9553 - fix code alignment and document the use of a mutex.
 * light/Kconfig - typo fix in commment.
 * cm3323 - don't eat an error value, replace an unneeded local variable with
   a generic local variable with the same use, add some blank lines for clarity.
 * pressure/Kconfig - typo in Measurement Specialties name.
 * bmc150-accel - actually use a mask definition rather than repeating the
   value inline, code style cleanup.
 * adc/Kconfig - general help description cleanup.
 * ssp_sensors - drop redundant spi driver bus initialization (done in the
   spi core)
 * tmp006 - use genmask rather than hand generated masks.
 * ms5611 - drop IIO_CHAN_INFO_SCALE as this driver provides a processed
   output and as such the read only scale adds nothing useful.
 * kxcjk-1013, adf4350, dummy - drop unwanted blank lines.
 * Drop all owner assignments from i2c_drivers and this is done in the
   i2c core.
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2
 
 iQIcBAABCAAGBQJVpqGLAAoJEFSFNJnE9BaIeXEP/09wE8m98+cTUn4/cppM1vTL
 Ypx5ariBNrsbJ3aodD6uOhIY/E8tnOGa5MZmMt7F6XTOTDJIoWt3sJHTYGgC2niS
 1rvXpIKcFx473LabhI7Cq6r3Azon7wC3RrEkZZFgpgMAbZLGLLwamWawZKZkgsQx
 tlWrT3M8BwQoV72mkfUBVrZpRgHwpB5QDZZ7RLVe04QoO1QBZg4HlGO67BdGx3md
 farmaCVOyB1PehzRk1C4wBgfLa2x/fnnrTlXlwNqKfh5OXhbwzluEbzejS9fk5KZ
 ox+H1Ns3+prVheaElI9N5svx1vIrviwwyh1a7aE5r32djidVd502qPOlcB1ebr2e
 xZ0xxzXYzd+XD3g3mGF0B2mIEUL8kj1wX3w/Q2DNoLUaCfPRQbRr8rRf3C7QFcZl
 F0nZyaL2yZzYrs4nqZ6o3G2huWQNBybaQ7riyswq8dPyJ0vpKyQE7Ihj9FHt2u13
 44zpbQ59ct7BZlnsljtSMMQRzJMA2JHnXciB8FYliRoc0QBn4vTP9c+PDCFY2+YW
 TJ6TB/bVI1h/6Qn8rp6i9Ks+QhPr98ftlfSRPTJ9pMINvyZh1oW0yunGfVr88jdj
 aEuQ2sQg/QYs0qB2eon7GmgZ1fhM1snoz3X6XPIuo3pC4eJ29K59gxDHAvUpqdhM
 ANGW8MwFk1lMipobvXIM
 =0E79
 -----END PGP SIGNATURE-----

Merge tag 'iio-for-4.3a' of git://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio into staging-next

Jonathan writes:

First round of new drivers, cleanups and functionality for IIO in the 4.3 cycle.

Core and tools new stuff
* Allow explicit flush of hardware fifo by using an non blocking read.
  This is needed to support some of the Android requirements for HW fifo
  devices - also makes sense generally and clarifies a corner of the ABI.
* Add some missing modifier names.  Mostly these exist for weird and
  wonderful event types, but should still be present in the name array.
* Update iio_event_monitor to cope with new channel types.
* generic_buffer gains support for single byte scan elements (no idea
  how this never got implemented before!)

New device support
* ROHM rpr0521 light and proximity sensor driver.
* bmc150 gains bmc156 support.
* ms5611 gains ms5607 temperature and pressure sensor support.

Driver functionality
* inv-mpu - add scale_available attributes to aid userspace in
  configuring these devices.
* isl29125 - add scale_available attributes.
* stk8ba50 - sampling frequency control, triggered buffer support.
* stk8312 - sampling frequency control, triggered buffer support.
* cc10001 - ensure ADC powered up at probe time if shared by non linux
  running CPUs.
* bmc150-magn - decouple the buffer and trigger allowing other triggers
  to be used to drive this device's sampling.
Documentation
* Add some previously missed *scale_available attributes to the ABI docs.

Cleanups
* Clarify some crazy naming in iio_triggered_buffer_setup that seems to
  have somehow ended up backwards (dates back a long way).  Avoid the top
  half and bottom half naming entirely given we are how dealing with a
  handler and a thread in all cases.
* Tools cleanup including coding style, variable naming improvements, also
  a new sanity check on a full event having been read.
* stk8ba50 - replace the scale table with a struct for clarity. Also suspend
  the sensor if an error occurs in init.
* hid-sensor-prox - drop uneeded line break.
* mma9551 - use size in words for word read / write avoiding accidental
  sending of an odd number of bytes.
* mma9553 - fix code alignment and document the use of a mutex.
* light/Kconfig - typo fix in commment.
* cm3323 - don't eat an error value, replace an unneeded local variable with
  a generic local variable with the same use, add some blank lines for clarity.
* pressure/Kconfig - typo in Measurement Specialties name.
* bmc150-accel - actually use a mask definition rather than repeating the
  value inline, code style cleanup.
* adc/Kconfig - general help description cleanup.
* ssp_sensors - drop redundant spi driver bus initialization (done in the
  spi core)
* tmp006 - use genmask rather than hand generated masks.
* ms5611 - drop IIO_CHAN_INFO_SCALE as this driver provides a processed
  output and as such the read only scale adds nothing useful.
* kxcjk-1013, adf4350, dummy - drop unwanted blank lines.
* Drop all owner assignments from i2c_drivers and this is done in the
  i2c core.
