mirror of
https://github.com/a52xq-dev/kernel.git
synced 2026-10-18 21:58:11 +07:00
Staging/IIO patches for 4.9-rc1
Here is the big staging and IIO driver pull request for 4.9-rc1. There are a lot of patches in here, the majority due to the drivers/staging/greybus/ subsystem being merged in with full development history that went back a few years, in order to preserve the work that those developers did over time. This was done the same way that btrfs was merged into the tree, so all should be ok there. Lots and lots of tiny cleanups happened in the tree as well, due to the Outreachy application process and lots of other developers showing up for the first time to clean code up. Along with those changes, we deleted a wireless driver, and added a raspberrypi driver (currently marked broken), and lots of new iio drivers. Overall the tree still shrunk with more lines removed than added, about 10 thousand lines removed in total. Full details are in the very long shortlog below. All of this has been in the linux-next tree with no issues. There will be some merge problems with other subsystem trees, but those are all minor problems and shouldn't be hard to work out when they happen (MAINTAINERS and some lustre build problems with the IB tree.) Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- iFYEABECABYFAlf0qWIPHGdyZWdAa3JvYWguY29tAAoJEDFH1A3bLfsp9GkAoLMa Dl/S8W02azDtKP893es5GXh3AJ4k8J9JlHgTS0RlzVJMvzkSZ2x7Vg== =j18s -----END PGP SIGNATURE----- Merge tag 'staging-4.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging Pull staging and IIO updates from Greg KH: "Here is the big staging and IIO driver pull request for 4.9-rc1. There are a lot of patches in here, the majority due to the drivers/staging/greybus/ subsystem being merged in with full development history that went back a few years, in order to preserve the work that those developers did over time. Lots and lots of tiny cleanups happened in the tree as well, due to the Outreachy application process and lots of other developers showing up for the first time to clean code up. Along with those changes, we deleted a wireless driver, and added a raspberrypi driver (currently marked broken), and lots of new iio drivers. Overall the tree still shrunk with more lines removed than added, about 10 thousand lines removed in total. Full details are in the very long shortlog below. All of this has been in the linux-next tree with no issues. There will be some merge problems with other subsystem trees, but those are all minor problems and shouldn't be hard to work out when they happen (MAINTAINERS and some lustre build problems with the IB tree)" And furter from me asking for clarification about greybus: "Right now there is a phone from Motorola shipping with this code (a slightly older version, but the same tree), so even though Ara is not alive in the same form, the functionality is happening. We are working with the developers of that phone to merge the newer stuff in with their fork so they can use the upstream version in future versions of their phone product line. Toshiba has at least one chip shipping in their catalog that needs/uses this protocol over a Unipro link, and rumor has it that there might be more in the future. There are also other users of the greybus protocols, there is a talk next week at ELC that shows how it is being used across a network connection to control a device, and previous ELC talks have showed the protocol stack being used over USB to drive embedded Linux boards. I've also talked to some people who are starting to work to add a host controller driver to control arduinos as the greybus PHY protocols are very useful to control a serial/i2c/spio/whatever device across a random physical link, as it is a way to have a self-describing device be attached to a host without needing manual configuration. So yes, people are using it, and there is still the chance that it will show up in a phone/laptop/tablet/whatever from Google in the future as well, the tech isn't dead, even if the original large phone project happens to be" * tag 'staging-4.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging: (3703 commits) Staging: fbtft: Fix bug in fbtft-core staging: rtl8188eu: fix double unlock error in rtw_resume_process() staging:r8188eu: remove GEN_MLME_EXT_HANDLER macro staging:r8188eu: remove GEN_DRV_CMD_HANDLER macro staging:r8188eu: remove GEN_EVT_CODE macro staging:r8188eu: remove GEN_CMD_CODE macro staging:r8188eu: remove pkt_newalloc member of the recv_buf structure staging:r8188eu: remove rtw_handle_dualmac declaration staging:r8188eu: remove (RGTRY|BSSID)_(OFT|SZ) macros staging:r8188eu: change rtl8188e_process_phy_info function argument type Staging: fsl-mc: Remove blank lines Staging: fsl-mc: Fix unaligned * in block comments Staging: comedi: Align the * in block comments Staging : ks7010 : Fix block comments warninig Staging: vt6655: Remove explicit NULL comparison using Coccinelle staging: rtl8188eu: core: rtw_xmit: Use macros instead of constants staging: rtl8188eu: core: rtw_xmit: Move constant of the right side staging: dgnc: Fix lines longer than 80 characters Staging: dgnc: constify attribute_group structures Staging: most: hdm-dim2: constify attribute_group structures ...
This commit is contained in:
commit
41844e3620
932 changed files with 81948 additions and 91969 deletions
1
.mailmap
1
.mailmap
|
|
@ -160,6 +160,7 @@ Valdis Kletnieks <Valdis.Kletnieks@vt.edu>
|
|||
Viresh Kumar <vireshk@kernel.org> <viresh.kumar@st.com>
|
||||
Viresh Kumar <vireshk@kernel.org> <viresh.linux@gmail.com>
|
||||
Viresh Kumar <vireshk@kernel.org> <viresh.kumar2@arm.com>
|
||||
Vlad Dogaru <ddvlad@gmail.com> <vlad.dogaru@intel.com>
|
||||
Vladimir Davydov <vdavydov.dev@gmail.com> <vdavydov@virtuozzo.com>
|
||||
Vladimir Davydov <vdavydov.dev@gmail.com> <vdavydov@parallels.com>
|
||||
Takashi YOSHII <takashi.yoshii.zj@renesas.com>
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ dallas,ds4510 CPU Supervisor with Nonvolatile Memory and Programmable I/O
|
|||
dallas,ds75 Digital Thermometer and Thermostat
|
||||
dlg,da9053 DA9053: flexible system level PMIC with multicore support
|
||||
dlg,da9063 DA9063: system PMIC for quad-core application processors
|
||||
domintech,dmard09 DMARD09: 3-axis Accelerometer
|
||||
epson,rx8010 I2C-BUS INTERFACE REAL TIME CLOCK MODULE
|
||||
epson,rx8025 High-Stability. I2C-Bus INTERFACE REAL TIME CLOCK MODULE
|
||||
epson,rx8581 I2C-BUS INTERFACE REAL TIME CLOCK MODULE
|
||||
|
|
@ -56,6 +57,7 @@ maxim,ds1050 5 Bit Programmable, Pulse-Width Modulator
|
|||
maxim,max1237 Low-Power, 4-/12-Channel, 2-Wire Serial, 12-Bit ADCs
|
||||
maxim,max6625 9-Bit/12-Bit Temperature Sensors with I²C-Compatible Serial Interface
|
||||
mc,rv3029c2 Real Time Clock Module with I2C-Bus
|
||||
mcube,mc3230 mCube 3-axis 8-bit digital accelerometer
|
||||
microchip,mcp4531-502 Microchip 7-bit Single I2C Digital Potentiometer (5k)
|
||||
microchip,mcp4531-103 Microchip 7-bit Single I2C Digital Potentiometer (10k)
|
||||
microchip,mcp4531-503 Microchip 7-bit Single I2C Digital Potentiometer (50k)
|
||||
|
|
|
|||
19
Documentation/devicetree/bindings/iio/accel/dmard06.txt
Normal file
19
Documentation/devicetree/bindings/iio/accel/dmard06.txt
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
Device tree bindings for Domintech DMARD05, DMARD06, DMARD07 accelerometers
|
||||
|
||||
Required properties:
|
||||
- compatible : Should be "domintech,dmard05"
|
||||
or "domintech,dmard06"
|
||||
or "domintech,dmard07"
|
||||
- reg : I2C address of the chip. Should be 0x1c
|
||||
|
||||
Example:
|
||||
&i2c1 {
|
||||
/* ... */
|
||||
|
||||
accelerometer@1c {
|
||||
compatible = "domintech,dmard06";
|
||||
reg = <0x1c>;
|
||||
};
|
||||
|
||||
/* ... */
|
||||
};
|
||||
22
Documentation/devicetree/bindings/iio/accel/kionix,kxsd9.txt
Normal file
22
Documentation/devicetree/bindings/iio/accel/kionix,kxsd9.txt
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
Kionix KXSD9 Accelerometer device tree bindings
|
||||
|
||||
Required properties:
|
||||
- compatible: should be set to "kionix,kxsd9"
|
||||
- reg: i2c slave address
|
||||
|
||||
Optional properties:
|
||||
- vdd-supply: The input supply for VDD
|
||||
- iovdd-supply: The input supply for IOVDD
|
||||
- interrupts: The movement detection interrupt
|
||||
- mount-matrix: See mount-matrix.txt
|
||||
|
||||
Example:
|
||||
|
||||
kxsd9@18 {
|
||||
compatible = "kionix,kxsd9";
|
||||
reg = <0x18>;
|
||||
interrupt-parent = <&foo>;
|
||||
interrupts = <57 IRQ_TYPE_EDGE_FALLING>;
|
||||
iovdd-supply = <&bar>;
|
||||
vdd-supply = <&baz>;
|
||||
};
|
||||
29
Documentation/devicetree/bindings/iio/adc/mt6577_auxadc.txt
Normal file
29
Documentation/devicetree/bindings/iio/adc/mt6577_auxadc.txt
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
* Mediatek AUXADC - Analog to Digital Converter on Mediatek mobile soc (mt65xx/mt81xx/mt27xx)
|
||||
===============
|
||||
|
||||
The Auxiliary Analog/Digital Converter (AUXADC) is an ADC found
|
||||
in some Mediatek SoCs which among other things measures the temperatures
|
||||
in the SoC. It can be used directly with register accesses, but it is also
|
||||
used by thermal controller which reads the temperatures from the AUXADC
|
||||
directly via its own bus interface. See
|
||||
Documentation/devicetree/bindings/thermal/mediatek-thermal.txt
|
||||
for the Thermal Controller which holds a phandle to the AUXADC.
|
||||
|
||||
Required properties:
|
||||
- compatible: Should be one of:
|
||||
- "mediatek,mt2701-auxadc": For MT2701 family of SoCs
|
||||
- "mediatek,mt8173-auxadc": For MT8173 family of SoCs
|
||||
- reg: Address range of the AUXADC unit.
|
||||
- clocks: Should contain a clock specifier for each entry in clock-names
|
||||
- clock-names: Should contain "main".
|
||||
- #io-channel-cells: Should be 1, see ../iio-bindings.txt
|
||||
|
||||
Example:
|
||||
|
||||
auxadc: adc@11001000 {
|
||||
compatible = "mediatek,mt2701-auxadc";
|
||||
reg = <0 0x11001000 0 0x1000>;
|
||||
clocks = <&pericfg CLK_PERI_AUXADC>;
|
||||
clock-names = "main";
|
||||
#io-channel-cells = <1>;
|
||||
};
|
||||
37
Documentation/devicetree/bindings/iio/adc/ti-adc12138.txt
Normal file
37
Documentation/devicetree/bindings/iio/adc/ti-adc12138.txt
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
* Texas Instruments' ADC12130/ADC12132/ADC12138
|
||||
|
||||
Required properties:
|
||||
- compatible: Should be one of
|
||||
* "ti,adc12130"
|
||||
* "ti,adc12132"
|
||||
* "ti,adc12138"
|
||||
- reg: SPI chip select number for the device
|
||||
- interrupts: Should contain interrupt for EOC (end of conversion)
|
||||
- clocks: phandle to conversion clock input
|
||||
- spi-max-frequency: Definision as per
|
||||
Documentation/devicetree/bindings/spi/spi-bus.txt
|
||||
- vref-p-supply: The regulator supply for positive analog voltage reference
|
||||
|
||||
Optional properties:
|
||||
- vref-n-supply: The regulator supply for negative analog voltage reference
|
||||
(Note that this must not go below GND or exceed vref-p)
|
||||
If not specified, this is assumed to be analog ground.
|
||||
- ti,acquisition-time: The number of conversion clock periods for the S/H's
|
||||
acquisition time. Should be one of 6, 10, 18, 34. If not specified,
|
||||
default value of 10 is used.
|
||||
For high source impedances, this value can be increased to 18 or 34.
|
||||
For less ADC accuracy and/or slower CCLK frequencies this value may be
|
||||
decreased to 6. See section 6.0 INPUT SOURCE RESISTANCE in the
|
||||
datasheet for details.
|
||||
|
||||
Example:
|
||||
adc@0 {
|
||||
compatible = "ti,adc12138";
|
||||
reg = <0>;
|
||||
interrupts = <28 IRQ_TYPE_EDGE_RISING>;
|
||||
interrupt-parent = <&gpio1>;
|
||||
clocks = <&cclk>;
|
||||
vref-p-supply = <&ldo4_reg>;
|
||||
spi-max-frequency = <5000000>;
|
||||
ti,acquisition-time = <6>;
|
||||
};
|
||||
16
Documentation/devicetree/bindings/iio/adc/ti-adc161s626.txt
Normal file
16
Documentation/devicetree/bindings/iio/adc/ti-adc161s626.txt
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
* Texas Instruments ADC141S626 and ADC161S626 chips
|
||||
|
||||
Required properties:
|
||||
- compatible: Should be "ti,adc141s626" or "ti,adc161s626"
|
||||
- reg: spi chip select number for the device
|
||||
|
||||
Recommended properties:
|
||||
- spi-max-frequency: Definition as per
|
||||
Documentation/devicetree/bindings/spi/spi-bus.txt
|
||||
|
||||
Example:
|
||||
adc@0 {
|
||||
compatible = "ti,adc161s626";
|
||||
reg = <0>;
|
||||
spi-max-frequency = <4300000>;
|
||||
};
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
* Atlas Scientific ORP-SM OEM sensor
|
||||
|
||||
https://www.atlas-scientific.com/_files/_datasheets/_oem/ORP_oem_datasheet.pdf
|
||||
|
||||
Required properties:
|
||||
|
||||
- compatible: must be "atlas,orp-sm"
|
||||
- reg: the I2C address of the sensor
|
||||
- interrupt-parent: should be the phandle for the interrupt controller
|
||||
- interrupts: the sole interrupt generated by the device
|
||||
|
||||
Refer to interrupt-controller/interrupts.txt for generic interrupt client
|
||||
node bindings.
|
||||
|
||||
Example:
|
||||
|
||||
atlas@66 {
|
||||
compatible = "atlas,orp-sm";
|
||||
reg = <0x66>;
|
||||
interrupt-parent = <&gpio1>;
|
||||
interrupts = <16 2>;
|
||||
};
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
* Asahi Kasei AK8974 magnetometer sensor
|
||||
|
||||
Required properties:
|
||||
|
||||
- compatible : should be "asahi-kasei,ak8974"
|
||||
- reg : the I2C address of the magnetometer
|
||||
|
||||
Optional properties:
|
||||
|
||||
- avdd-supply: regulator supply for the analog voltage
|
||||
(see regulator/regulator.txt)
|
||||
- dvdd-supply: regulator supply for the digital voltage
|
||||
(see regulator/regulator.txt)
|
||||
- interrupts: data ready (DRDY) and interrupt (INT1) lines
|
||||
from the chip, the DRDY interrupt must be placed first.
|
||||
The interrupts can be triggered on rising or falling
|
||||
edges alike.
|
||||
- mount-matrix: an optional 3x3 mounting rotation matrix
|
||||
|
||||
Example:
|
||||
|
||||
ak8974@0f {
|
||||
compatible = "asahi-kasei,ak8974";
|
||||
reg = <0x0f>;
|
||||
avdd-supply = <&foo_reg>;
|
||||
dvdd-supply = <&bar_reg>;
|
||||
interrupts = <0 IRQ_TYPE_EDGE_RISING>,
|
||||
<1 IRQ_TYPE_EDGE_RISING>;
|
||||
};
|
||||
31
Documentation/devicetree/bindings/iio/pressure/zpa2326.txt
Normal file
31
Documentation/devicetree/bindings/iio/pressure/zpa2326.txt
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
Murata ZPA2326 pressure sensor
|
||||
|
||||
Pressure sensor from Murata with SPI and I2C bus interfaces.
|
||||
|
||||
Required properties:
|
||||
- compatible: "murata,zpa2326"
|
||||
- reg: the I2C address or SPI chip select the device will respond to
|
||||
|
||||
Recommended properties for SPI bus usage:
|
||||
- spi-max-frequency: maximum SPI bus frequency as documented in
|
||||
Documentation/devicetree/bindings/spi/spi-bus.txt
|
||||
|
||||
Optional properties:
|
||||
- vref-supply: an optional regulator that needs to be on to provide VREF
|
||||
power to the sensor
|
||||
- vdd-supply: an optional regulator that needs to be on to provide VDD
|
||||
power to the sensor
|
||||
- interrupt-parent: phandle to the parent interrupt controller as documented in
|
||||
Documentation/devicetree/bindings/interrupt-controller/interrupts.txt
|
||||
- interrupts: interrupt mapping for IRQ as documented in
|
||||
Documentation/devicetree/bindings/interrupt-controller/interrupts.txt
|
||||
|
||||
Example:
|
||||
|
||||
zpa2326@5c {
|
||||
compatible = "murata,zpa2326";
|
||||
reg = <0x5c>;
|
||||
interrupt-parent = <&gpio>;
|
||||
interrupts = <12>;
|
||||
vdd-supply = <&ldo_1v8_gnss>;
|
||||
};
|
||||
24
Documentation/devicetree/bindings/iio/proximity/sx9500.txt
Normal file
24
Documentation/devicetree/bindings/iio/proximity/sx9500.txt
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
Semtech's SX9500 capacitive proximity button device driver
|
||||
|
||||
Required properties:
|
||||
- compatible: must be "semtech,sx9500"
|
||||
- reg: i2c address where to find the device
|
||||
- interrupt-parent : should be the phandle for the interrupt controller
|
||||
- interrupts : the sole interrupt generated by the device
|
||||
|
||||
Refer to interrupt-controller/interrupts.txt for generic
|
||||
interrupt client node bindings.
|
||||
|
||||
Optional properties:
|
||||
- reset-gpios: Reference to the GPIO connected to the device's active
|
||||
low reset pin.
|
||||
|
||||
Example:
|
||||
|
||||
sx9500@28 {
|
||||
compatible = "semtech,sx9500";
|
||||
reg = <0x28>;
|
||||
interrupt-parent = <&gpio2>;
|
||||
interrupts = <16 IRQ_TYPE_LEVEL_LOW>;
|
||||
reset-gpios = <&gpio2 10 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
Maxim thermocouple support
|
||||
|
||||
* https://datasheets.maximintegrated.com/en/ds/MAX6675.pdf
|
||||
* https://datasheets.maximintegrated.com/en/ds/MAX31855.pdf
|
||||
|
||||
Required properties:
|
||||
|
||||
- compatible: must be "maxim,max31855" or "maxim,max6675"
|
||||
- reg: SPI chip select number for the device
|
||||
- spi-max-frequency: must be 4300000
|
||||
- spi-cpha: must be defined for max6675 to enable SPI mode 1
|
||||
|
||||
Refer to spi/spi-bus.txt for generic SPI slave bindings.
|
||||
|
||||
Example:
|
||||
|
||||
max31855@0 {
|
||||
compatible = "maxim,max31855";
|
||||
reg = <0>;
|
||||
spi-max-frequency = <4300000>;
|
||||
};
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
MediaTek AUXADC
|
||||
===============
|
||||
|
||||
The Auxiliary Analog/Digital Converter (AUXADC) is an ADC found
|
||||
in some Mediatek SoCs which among other things measures the temperatures
|
||||
in the SoC. It can be used directly with register accesses, but it is also
|
||||
used by thermal controller which reads the temperatures from the AUXADC
|
||||
directly via its own bus interface. See
|
||||
Documentation/devicetree/bindings/thermal/mediatek-thermal.txt
|
||||
for the Thermal Controller which holds a phandle to the AUXADC.
|
||||
|
||||
Required properties:
|
||||
- compatible: Must be "mediatek,mt8173-auxadc"
|
||||
- reg: Address range of the AUXADC unit
|
||||
|
||||
Example:
|
||||
|
||||
auxadc: auxadc@11001000 {
|
||||
compatible = "mediatek,mt8173-auxadc";
|
||||
reg = <0 0x11001000 0 0x1000>;
|
||||
};
|
||||
|
|
@ -76,6 +76,7 @@ digilent Diglent, Inc.
|
|||
dlg Dialog Semiconductor
|
||||
dlink D-Link Corporation
|
||||
dmo Data Modul AG
|
||||
domintech Domintech Co., Ltd.
|
||||
dptechnics DPTechnics
|
||||
dragino Dragino Technology Co., Limited
|
||||
ea Embedded Artists AB
|
||||
|
|
|
|||
|
|
@ -266,8 +266,12 @@ IIO
|
|||
devm_iio_device_unregister()
|
||||
devm_iio_kfifo_allocate()
|
||||
devm_iio_kfifo_free()
|
||||
devm_iio_triggered_buffer_setup()
|
||||
devm_iio_triggered_buffer_cleanup()
|
||||
devm_iio_trigger_alloc()
|
||||
devm_iio_trigger_free()
|
||||
devm_iio_trigger_register()
|
||||
devm_iio_trigger_unregister()
|
||||
devm_iio_channel_get()
|
||||
devm_iio_channel_release()
|
||||
devm_iio_channel_get_all()
|
||||
|
|
|
|||
96
MAINTAINERS
96
MAINTAINERS
|
|
@ -819,11 +819,11 @@ L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
|||
S: Maintained
|
||||
F: sound/aoa/
|
||||
|
||||
APEX EMBEDDED SYSTEMS STX104 DAC DRIVER
|
||||
APEX EMBEDDED SYSTEMS STX104 IIO DRIVER
|
||||
M: William Breathitt Gray <vilhelm.gray@gmail.com>
|
||||
L: linux-iio@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/iio/dac/stx104.c
|
||||
F: drivers/iio/adc/stx104.c
|
||||
|
||||
APM DRIVER
|
||||
M: Jiri Kosina <jikos@kernel.org>
|
||||
|
|
@ -1993,6 +1993,13 @@ S: Maintained
|
|||
F: drivers/media/i2c/as3645a.c
|
||||
F: include/media/i2c/as3645a.h
|
||||
|
||||
ASAHI KASEI AK8974 DRIVER
|
||||
M: Linus Walleij <linus.walleij@linaro.org>
|
||||
L: linux-iio@vger.kernel.org
|
||||
W: http://www.akm.com/
|
||||
S: Supported
|
||||
F: drivers/iio/magnetometer/ak8974.c
|
||||
|
||||
ASC7621 HARDWARE MONITOR DRIVER
|
||||
M: George Joseph <george.joseph@fairview5.com>
|
||||
L: linux-hwmon@vger.kernel.org
|
||||
|
|
@ -5318,6 +5325,77 @@ L: netdev@vger.kernel.org
|
|||
S: Maintained
|
||||
F: drivers/net/ethernet/aeroflex/
|
||||
|
||||
GREYBUS SUBSYSTEM
|
||||
M: Johan Hovold <johan@kernel.org>
|
||||
M: Alex Elder <elder@kernel.org>
|
||||
M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
S: Maintained
|
||||
F: drivers/staging/greybus/
|
||||
|
||||
GREYBUS AUDIO PROTOCOLS DRIVERS
|
||||
M: Vaibhav Agarwal <vaibhav.sr@gmail.com>
|
||||
M: Mark Greer <mgreer@animalcreek.com>
|
||||
S: Maintained
|
||||
F: drivers/staging/greybus/audio_apbridgea.c
|
||||
F: drivers/staging/greybus/audio_apbridgea.h
|
||||
F: drivers/staging/greybus/audio_codec.c
|
||||
F: drivers/staging/greybus/audio_codec.h
|
||||
F: drivers/staging/greybus/audio_gb.c
|
||||
F: drivers/staging/greybus/audio_manager.c
|
||||
F: drivers/staging/greybus/audio_manager.h
|
||||
F: drivers/staging/greybus/audio_manager_module.c
|
||||
F: drivers/staging/greybus/audio_manager_private.h
|
||||
F: drivers/staging/greybus/audio_manager_sysfs.c
|
||||
F: drivers/staging/greybus/audio_module.c
|
||||
F: drivers/staging/greybus/audio_topology.c
|
||||
|
||||
GREYBUS PROTOCOLS DRIVERS
|
||||
M: Rui Miguel Silva <rmfrfs@gmail.com>
|
||||
S: Maintained
|
||||
F: drivers/staging/greybus/sdio.c
|
||||
F: drivers/staging/greybus/light.c
|
||||
F: drivers/staging/greybus/gpio.c
|
||||
F: drivers/staging/greybus/power_supply.c
|
||||
F: drivers/staging/greybus/spi.c
|
||||
F: drivers/staging/greybus/spilib.c
|
||||
|
||||
GREYBUS PROTOCOLS DRIVERS
|
||||
M: Bryan O'Donoghue <pure.logic@nexus-software.ie>
|
||||
S: Maintained
|
||||
F: drivers/staging/greybus/loopback.c
|
||||
F: drivers/staging/greybus/timesync.c
|
||||
F: drivers/staging/greybus/timesync_platform.c
|
||||
|
||||
GREYBUS PROTOCOLS DRIVERS
|
||||
M: Viresh Kumar <vireshk@kernel.org>
|
||||
S: Maintained
|
||||
F: drivers/staging/greybus/authentication.c
|
||||
F: drivers/staging/greybus/bootrom.c
|
||||
F: drivers/staging/greybus/firmware.h
|
||||
F: drivers/staging/greybus/fw-core.c
|
||||
F: drivers/staging/greybus/fw-download.c
|
||||
F: drivers/staging/greybus/fw-managament.c
|
||||
F: drivers/staging/greybus/greybus_authentication.h
|
||||
F: drivers/staging/greybus/greybus_firmware.h
|
||||
F: drivers/staging/greybus/hid.c
|
||||
F: drivers/staging/greybus/i2c.c
|
||||
F: drivers/staging/greybus/spi.c
|
||||
F: drivers/staging/greybus/spilib.c
|
||||
F: drivers/staging/greybus/spilib.h
|
||||
|
||||
GREYBUS PROTOCOLS DRIVERS
|
||||
M: David Lin <dtwlin@gmail.com>
|
||||
S: Maintained
|
||||
F: drivers/staging/greybus/uart.c
|
||||
F: drivers/staging/greybus/log.c
|
||||
|
||||
GREYBUS PLATFORM DRIVERS
|
||||
M: Vaibhav Hiremath <hvaibhav.linux@gmail.com>
|
||||
S: Maintained
|
||||
F: drivers/staging/greybus/arche-platform.c
|
||||
F: drivers/staging/greybus/arche-apb-ctrl.c
|
||||
F: drivers/staging/greybus/arche_platform.h
|
||||
|
||||
GSPCA FINEPIX SUBDRIVER
|
||||
M: Frank Zago <frank@zago.net>
|
||||
L: linux-media@vger.kernel.org
|
||||
|
|
@ -7548,6 +7626,12 @@ L: linux-iio@vger.kernel.org
|
|||
S: Maintained
|
||||
F: drivers/iio/potentiometer/mcp4531.c
|
||||
|
||||
MEASUREMENT COMPUTING CIO-DAC IIO DRIVER
|
||||
M: William Breathitt Gray <vilhelm.gray@gmail.com>
|
||||
L: linux-iio@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/iio/dac/cio-dac.c
|
||||
|
||||
MEDIA DRIVERS FOR RENESAS - FCP
|
||||
M: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
||||
L: linux-media@vger.kernel.org
|
||||
|
|
@ -11263,6 +11347,7 @@ F: drivers/staging/media/lirc/
|
|||
STAGING - LUSTRE PARALLEL FILESYSTEM
|
||||
M: Oleg Drokin <oleg.drokin@intel.com>
|
||||
M: Andreas Dilger <andreas.dilger@intel.com>
|
||||
M: James Simmons <jsimmons@infradead.org>
|
||||
L: lustre-devel@lists.lustre.org (moderated for non-subscribers)
|
||||
W: http://wiki.lustre.org/
|
||||
S: Maintained
|
||||
|
|
@ -11289,13 +11374,6 @@ M: Florian Schilhabel <florian.c.schilhabel@googlemail.com>.
|
|||
S: Odd Fixes
|
||||
F: drivers/staging/rtl8712/
|
||||
|
||||
STAGING - REALTEK RTL8723U WIRELESS DRIVER
|
||||
M: Larry Finger <Larry.Finger@lwfinger.net>
|
||||
M: Jes Sorensen <Jes.Sorensen@redhat.com>
|
||||
L: linux-wireless@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/staging/rtl8723au/
|
||||
|
||||
STAGING - SILICON MOTION SM750 FRAME BUFFER DRIVER
|
||||
M: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
|
||||
M: Teddy Wang <teddy.wang@siliconmotion.com>
|
||||
|
|
|
|||
|
|
@ -59,7 +59,6 @@ static struct dentry *binder_debugfs_dir_entry_proc;
|
|||
static struct binder_node *binder_context_mgr_node;
|
||||
static kuid_t binder_context_mgr_uid = INVALID_UID;
|
||||
static int binder_last_id;
|
||||
static struct workqueue_struct *binder_deferred_workqueue;
|
||||
|
||||
#define BINDER_DEBUG_ENTRY(name) \
|
||||
static int binder_##name##_open(struct inode *inode, struct file *file) \
|
||||
|
|
@ -3227,7 +3226,7 @@ binder_defer_work(struct binder_proc *proc, enum binder_deferred_state defer)
|
|||
if (hlist_unhashed(&proc->deferred_work_node)) {
|
||||
hlist_add_head(&proc->deferred_work_node,
|
||||
&binder_deferred_list);
|
||||
queue_work(binder_deferred_workqueue, &binder_deferred_work);
|
||||
schedule_work(&binder_deferred_work);
|
||||
}
|
||||
mutex_unlock(&binder_deferred_lock);
|
||||
}
|
||||
|
|
@ -3679,10 +3678,6 @@ static int __init binder_init(void)
|
|||
{
|
||||
int ret;
|
||||
|
||||
binder_deferred_workqueue = create_singlethread_workqueue("binder");
|
||||
if (!binder_deferred_workqueue)
|
||||
return -ENOMEM;
|
||||
|
||||
binder_debugfs_dir_entry_root = debugfs_create_dir("binder", NULL);
|
||||
if (binder_debugfs_dir_entry_root)
|
||||
binder_debugfs_dir_entry_proc = debugfs_create_dir("proc",
|
||||
|
|
|
|||
|
|
@ -17,4 +17,17 @@ config SYNC_FILE
|
|||
Files fds, to the DRM driver for example. More details at
|
||||
Documentation/sync_file.txt.
|
||||
|
||||
config SW_SYNC
|
||||
bool "Sync File Validation Framework"
|
||||
default n
|
||||
depends on SYNC_FILE
|
||||
depends on DEBUG_FS
|
||||
---help---
|
||||
A sync object driver that uses a 32bit counter to coordinate
|
||||
synchronization. Useful when there is no hardware primitive backing
|
||||
the synchronization.
|
||||
|
||||
WARNING: improper use of this can result in deadlocking kernel
|
||||
drivers from userspace. Intended for test and debug only.
|
||||
|
||||
endmenu
|
||||
|
|
|
|||
|
|
@ -1,2 +1,3 @@
|
|||
obj-y := dma-buf.o fence.o reservation.o seqno-fence.o fence-array.o
|
||||
obj-$(CONFIG_SYNC_FILE) += sync_file.o
|
||||
obj-$(CONFIG_SW_SYNC) += sw_sync.o sync_debug.o
|
||||
|
|
|
|||
375
drivers/dma-buf/sw_sync.c
Normal file
375
drivers/dma-buf/sw_sync.c
Normal file
|
|
@ -0,0 +1,375 @@
|
|||
/*
|
||||
* Sync File validation framework
|
||||
*
|
||||
* Copyright (C) 2012 Google, Inc.
|
||||
*
|
||||
* This software is licensed under the terms of the GNU General Public
|
||||
* License version 2, as published by the Free Software Foundation, and
|
||||
* may be copied, distributed, and modified under those terms.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/file.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/sync_file.h>
|
||||
|
||||
#include "sync_debug.h"
|
||||
|
||||
#define CREATE_TRACE_POINTS
|
||||
#include "sync_trace.h"
|
||||
|
||||
/*
|
||||
* SW SYNC validation framework
|
||||
*
|
||||
* A sync object driver that uses a 32bit counter to coordinate
|
||||
* synchronization. Useful when there is no hardware primitive backing
|
||||
* the synchronization.
|
||||
*
|
||||
* To start the framework just open:
|
||||
*
|
||||
* <debugfs>/sync/sw_sync
|
||||
*
|
||||
* That will create a sync timeline, all fences created under this timeline
|
||||
* file descriptor will belong to the this timeline.
|
||||
*
|
||||
* The 'sw_sync' file can be opened many times as to create different
|
||||
* timelines.
|
||||
*
|
||||
* Fences can be created with SW_SYNC_IOC_CREATE_FENCE ioctl with struct
|
||||
* sw_sync_ioctl_create_fence as parameter.
|
||||
*
|
||||
* To increment the timeline counter, SW_SYNC_IOC_INC ioctl should be used
|
||||
* with the increment as u32. This will update the last signaled value
|
||||
* from the timeline and signal any fence that has a seqno smaller or equal
|
||||
* to it.
|
||||
*
|
||||
* struct sw_sync_ioctl_create_fence
|
||||
* @value: the seqno to initialise the fence with
|
||||
* @name: the name of the new sync point
|
||||
* @fence: return the fd of the new sync_file with the created fence
|
||||
*/
|
||||
struct sw_sync_create_fence_data {
|
||||
__u32 value;
|
||||
char name[32];
|
||||
__s32 fence; /* fd of new fence */
|
||||
};
|
||||
|
||||
#define SW_SYNC_IOC_MAGIC 'W'
|
||||
|
||||
#define SW_SYNC_IOC_CREATE_FENCE _IOWR(SW_SYNC_IOC_MAGIC, 0,\
|
||||
struct sw_sync_create_fence_data)
|
||||
|
||||
#define SW_SYNC_IOC_INC _IOW(SW_SYNC_IOC_MAGIC, 1, __u32)
|
||||
|
||||
static const struct fence_ops timeline_fence_ops;
|
||||
|
||||
static inline struct sync_pt *fence_to_sync_pt(struct fence *fence)
|
||||
{
|
||||
if (fence->ops != &timeline_fence_ops)
|
||||
return NULL;
|
||||
return container_of(fence, struct sync_pt, base);
|
||||
}
|
||||
|
||||
/**
|
||||
* sync_timeline_create() - creates a sync object
|
||||
* @name: sync_timeline name
|
||||
*
|
||||
* Creates a new sync_timeline. Returns the sync_timeline object or NULL in
|
||||
* case of error.
|
||||
*/
|
||||
struct sync_timeline *sync_timeline_create(const char *name)
|
||||
{
|
||||
struct sync_timeline *obj;
|
||||
|
||||
obj = kzalloc(sizeof(*obj), GFP_KERNEL);
|
||||
if (!obj)
|
||||
return NULL;
|
||||
|
||||
kref_init(&obj->kref);
|
||||
obj->context = fence_context_alloc(1);
|
||||
strlcpy(obj->name, name, sizeof(obj->name));
|
||||
|
||||
INIT_LIST_HEAD(&obj->child_list_head);
|
||||
INIT_LIST_HEAD(&obj->active_list_head);
|
||||
spin_lock_init(&obj->child_list_lock);
|
||||
|
||||
sync_timeline_debug_add(obj);
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
static void sync_timeline_free(struct kref *kref)
|
||||
{
|
||||
struct sync_timeline *obj =
|
||||
container_of(kref, struct sync_timeline, kref);
|
||||
|
||||
sync_timeline_debug_remove(obj);
|
||||
|
||||
kfree(obj);
|
||||
}
|
||||
|
||||
static void sync_timeline_get(struct sync_timeline *obj)
|
||||
{
|
||||
kref_get(&obj->kref);
|
||||
}
|
||||
|
||||
static void sync_timeline_put(struct sync_timeline *obj)
|
||||
{
|
||||
kref_put(&obj->kref, sync_timeline_free);
|
||||
}
|
||||
|
||||
/**
|
||||
* sync_timeline_signal() - signal a status change on a sync_timeline
|
||||
* @obj: sync_timeline to signal
|
||||
* @inc: num to increment on timeline->value
|
||||
*
|
||||
* A sync implementation should call this any time one of it's fences
|
||||
* has signaled or has an error condition.
|
||||
*/
|
||||
static void sync_timeline_signal(struct sync_timeline *obj, unsigned int inc)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct sync_pt *pt, *next;
|
||||
|
||||
trace_sync_timeline(obj);
|
||||
|
||||
spin_lock_irqsave(&obj->child_list_lock, flags);
|
||||
|
||||
obj->value += inc;
|
||||
|
||||
list_for_each_entry_safe(pt, next, &obj->active_list_head,
|
||||
active_list) {
|
||||
if (fence_is_signaled_locked(&pt->base))
|
||||
list_del_init(&pt->active_list);
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&obj->child_list_lock, flags);
|
||||
}
|
||||
|
||||
/**
|
||||
* sync_pt_create() - creates a sync pt
|
||||
* @parent: fence's parent sync_timeline
|
||||
* @size: size to allocate for this pt
|
||||
* @inc: value of the fence
|
||||
*
|
||||
* Creates a new sync_pt as a child of @parent. @size bytes will be
|
||||
* allocated allowing for implementation specific data to be kept after
|
||||
* the generic sync_timeline struct. Returns the sync_pt object or
|
||||
* NULL in case of error.
|
||||
*/
|
||||
static struct sync_pt *sync_pt_create(struct sync_timeline *obj, int size,
|
||||
unsigned int value)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct sync_pt *pt;
|
||||
|
||||
if (size < sizeof(*pt))
|
||||
return NULL;
|
||||
|
||||
pt = kzalloc(size, GFP_KERNEL);
|
||||
if (!pt)
|
||||
return NULL;
|
||||
|
||||
spin_lock_irqsave(&obj->child_list_lock, flags);
|
||||
sync_timeline_get(obj);
|
||||
fence_init(&pt->base, &timeline_fence_ops, &obj->child_list_lock,
|
||||
obj->context, value);
|
||||
list_add_tail(&pt->child_list, &obj->child_list_head);
|
||||
INIT_LIST_HEAD(&pt->active_list);
|
||||
spin_unlock_irqrestore(&obj->child_list_lock, flags);
|
||||
return pt;
|
||||
}
|
||||
|
||||
static const char *timeline_fence_get_driver_name(struct fence *fence)
|
||||
{
|
||||
return "sw_sync";
|
||||
}
|
||||
|
||||
static const char *timeline_fence_get_timeline_name(struct fence *fence)
|
||||
{
|
||||
struct sync_timeline *parent = fence_parent(fence);
|
||||
|
||||
return parent->name;
|
||||
}
|
||||
|
||||
static void timeline_fence_release(struct fence *fence)
|
||||
{
|
||||
struct sync_pt *pt = fence_to_sync_pt(fence);
|
||||
struct sync_timeline *parent = fence_parent(fence);
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(fence->lock, flags);
|
||||
list_del(&pt->child_list);
|
||||
if (!list_empty(&pt->active_list))
|
||||
list_del(&pt->active_list);
|
||||
spin_unlock_irqrestore(fence->lock, flags);
|
||||
|
||||
sync_timeline_put(parent);
|
||||
fence_free(fence);
|
||||
}
|
||||
|
||||
static bool timeline_fence_signaled(struct fence *fence)
|
||||
{
|
||||
struct sync_timeline *parent = fence_parent(fence);
|
||||
|
||||
return (fence->seqno > parent->value) ? false : true;
|
||||
}
|
||||
|
||||
static bool timeline_fence_enable_signaling(struct fence *fence)
|
||||
{
|
||||
struct sync_pt *pt = fence_to_sync_pt(fence);
|
||||
struct sync_timeline *parent = fence_parent(fence);
|
||||
|
||||
if (timeline_fence_signaled(fence))
|
||||
return false;
|
||||
|
||||
list_add_tail(&pt->active_list, &parent->active_list_head);
|
||||
return true;
|
||||
}
|
||||
|
||||
static void timeline_fence_value_str(struct fence *fence,
|
||||
char *str, int size)
|
||||
{
|
||||
snprintf(str, size, "%d", fence->seqno);
|
||||
}
|
||||
|
||||
static void timeline_fence_timeline_value_str(struct fence *fence,
|
||||
char *str, int size)
|
||||
{
|
||||
struct sync_timeline *parent = fence_parent(fence);
|
||||
|
||||
snprintf(str, size, "%d", parent->value);
|
||||
}
|
||||
|
||||
static const struct fence_ops timeline_fence_ops = {
|
||||
.get_driver_name = timeline_fence_get_driver_name,
|
||||
.get_timeline_name = timeline_fence_get_timeline_name,
|
||||
.enable_signaling = timeline_fence_enable_signaling,
|
||||
.signaled = timeline_fence_signaled,
|
||||
.wait = fence_default_wait,
|
||||
.release = timeline_fence_release,
|
||||
.fence_value_str = timeline_fence_value_str,
|
||||
.timeline_value_str = timeline_fence_timeline_value_str,
|
||||
};
|
||||
|
||||
/*
|
||||
* *WARNING*
|
||||
*
|
||||
* improper use of this can result in deadlocking kernel drivers from userspace.
|
||||
*/
|
||||
|
||||
/* opening sw_sync create a new sync obj */
|
||||
static int sw_sync_debugfs_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
struct sync_timeline *obj;
|
||||
char task_comm[TASK_COMM_LEN];
|
||||
|
||||
get_task_comm(task_comm, current);
|
||||
|
||||
obj = sync_timeline_create(task_comm);
|
||||
if (!obj)
|
||||
return -ENOMEM;
|
||||
|
||||
file->private_data = obj;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sw_sync_debugfs_release(struct inode *inode, struct file *file)
|
||||
{
|
||||
struct sync_timeline *obj = file->private_data;
|
||||
|
||||
smp_wmb();
|
||||
|
||||
sync_timeline_put(obj);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static long sw_sync_ioctl_create_fence(struct sync_timeline *obj,
|
||||
unsigned long arg)
|
||||
{
|
||||
int fd = get_unused_fd_flags(O_CLOEXEC);
|
||||
int err;
|
||||
struct sync_pt *pt;
|
||||
struct sync_file *sync_file;
|
||||
struct sw_sync_create_fence_data data;
|
||||
|
||||
if (fd < 0)
|
||||
return fd;
|
||||
|
||||
if (copy_from_user(&data, (void __user *)arg, sizeof(data))) {
|
||||
err = -EFAULT;
|
||||
goto err;
|
||||
}
|
||||
|
||||
pt = sync_pt_create(obj, sizeof(*pt), data.value);
|
||||
if (!pt) {
|
||||
err = -ENOMEM;
|
||||
goto err;
|
||||
}
|
||||
|
||||
sync_file = sync_file_create(&pt->base);
|
||||
if (!sync_file) {
|
||||
fence_put(&pt->base);
|
||||
err = -ENOMEM;
|
||||
goto err;
|
||||
}
|
||||
|
||||
data.fence = fd;
|
||||
if (copy_to_user((void __user *)arg, &data, sizeof(data))) {
|
||||
fput(sync_file->file);
|
||||
err = -EFAULT;
|
||||
goto err;
|
||||
}
|
||||
|
||||
fd_install(fd, sync_file->file);
|
||||
|
||||
return 0;
|
||||
|
||||
err:
|
||||
put_unused_fd(fd);
|
||||
return err;
|
||||
}
|
||||
|
||||
static long sw_sync_ioctl_inc(struct sync_timeline *obj, unsigned long arg)
|
||||
{
|
||||
u32 value;
|
||||
|
||||
if (copy_from_user(&value, (void __user *)arg, sizeof(value)))
|
||||
return -EFAULT;
|
||||
|
||||
sync_timeline_signal(obj, value);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static long sw_sync_ioctl(struct file *file, unsigned int cmd,
|
||||
unsigned long arg)
|
||||
{
|
||||
struct sync_timeline *obj = file->private_data;
|
||||
|
||||
switch (cmd) {
|
||||
case SW_SYNC_IOC_CREATE_FENCE:
|
||||
return sw_sync_ioctl_create_fence(obj, arg);
|
||||
|
||||
case SW_SYNC_IOC_INC:
|
||||
return sw_sync_ioctl_inc(obj, arg);
|
||||
|
||||
default:
|
||||
return -ENOTTY;
|
||||
}
|
||||
}
|
||||
|
||||
const struct file_operations sw_sync_debugfs_fops = {
|
||||
.open = sw_sync_debugfs_open,
|
||||
.release = sw_sync_debugfs_release,
|
||||
.unlocked_ioctl = sw_sync_ioctl,
|
||||
.compat_ioctl = sw_sync_ioctl,
|
||||
};
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue