Add RPi3 GPIO expander, RPi fixes, OMAP serial update, general ARM fixes

This commit is contained in:
Peter Robinson 2018-03-03 22:51:13 +00:00
parent 5860e766a6
commit 60e272367a
36 changed files with 987 additions and 35 deletions

109
bcm2835-fix-bluetooth.patch Normal file
View File

@ -0,0 +1,109 @@
From patchwork Sun Feb 25 14:10:52 2018
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: [1/4] Bluetooth: hci_bcm: Make shutdown and device wake GPIO optional
From: Stefan Wahren <stefan.wahren@i2se.com>
X-Patchwork-Id: 10240917
Message-Id: <1519567855-26105-2-git-send-email-stefan.wahren@i2se.com>
To: Loic Poulain <loic.poulain@gmail.com>,
=?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Danis?= <frederic.danis.oss@gmail.com>,
Marcel Holtmann <marcel@holtmann.org>,
Johan Hedberg <johan.hedberg@gmail.com>, Eric Anholt <eric@anholt.net>,
Rob Herring <robh+dt@kernel.org>, Mark Rutland <mark.rutland@arm.com>
Cc: Stefan Wahren <stefan.wahren@i2se.com>, devicetree@vger.kernel.org,
Florian Fainelli <f.fainelli@gmail.com>,
Phil Elwell <phil@raspberrypi.org>,
linux-bluetooth@vger.kernel.org, Lukas Wunner <lukas@wunner.de>,
linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org
Date: Sun, 25 Feb 2018 15:10:52 +0100
According to the devicetree binding the shutdown and device wake
GPIOs are optional. Since commit 3e81a4ca51a1 ("Bluetooth: hci_bcm:
Mandate presence of shutdown and device wake GPIO") this driver
won't probe anymore on Raspberry Pi 3 and Zero W (no device wake GPIO
connected). So fix this regression by reverting this commit partially.
Cc: Lukas Wunner <lukas@wunner.de>
Fixes: 3e81a4ca51a1 ("Bluetooth: hci_bcm: Mandate presence of shutdown and device wake GPIO")
Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
---
drivers/bluetooth/hci_bcm.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/drivers/bluetooth/hci_bcm.c b/drivers/bluetooth/hci_bcm.c
index 0438a64..f8728eb 100644
--- a/drivers/bluetooth/hci_bcm.c
+++ b/drivers/bluetooth/hci_bcm.c
@@ -922,12 +922,14 @@ static int bcm_get_resources(struct bcm_device *dev)
dev->clk = devm_clk_get(dev->dev, NULL);
- dev->device_wakeup = devm_gpiod_get(dev->dev, "device-wakeup",
- GPIOD_OUT_LOW);
+ dev->device_wakeup = devm_gpiod_get_optional(dev->dev,
+ "device-wakeup",
+ GPIOD_OUT_LOW);
if (IS_ERR(dev->device_wakeup))
return PTR_ERR(dev->device_wakeup);
- dev->shutdown = devm_gpiod_get(dev->dev, "shutdown", GPIOD_OUT_LOW);
+ dev->shutdown = devm_gpiod_get_optional(dev->dev, "shutdown",
+ GPIOD_OUT_LOW);
if (IS_ERR(dev->shutdown))
return PTR_ERR(dev->shutdown);
From patchwork Sun Feb 25 14:10:53 2018
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: [2/4] ARM: dts: bcm283x: Apply pull settings to Zero W relevant groups
From: Stefan Wahren <stefan.wahren@i2se.com>
X-Patchwork-Id: 10240919
Message-Id: <1519567855-26105-3-git-send-email-stefan.wahren@i2se.com>
To: Loic Poulain <loic.poulain@gmail.com>,
=?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Danis?= <frederic.danis.oss@gmail.com>,
Marcel Holtmann <marcel@holtmann.org>,
Johan Hedberg <johan.hedberg@gmail.com>, Eric Anholt <eric@anholt.net>,
Rob Herring <robh+dt@kernel.org>, Mark Rutland <mark.rutland@arm.com>
Cc: Stefan Wahren <stefan.wahren@i2se.com>, devicetree@vger.kernel.org,
Florian Fainelli <f.fainelli@gmail.com>,
Phil Elwell <phil@raspberrypi.org>,
linux-bluetooth@vger.kernel.org, Lukas Wunner <lukas@wunner.de>,
linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org
Date: Sun, 25 Feb 2018 15:10:53 +0100
Instead of keeping the firmware's pull settings, we better apply
them via the devicetree pin control. Start with the RPi Zero W relevant
first to keep the effort low.
Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
---
arch/arm/boot/dts/bcm283x.dtsi | 3 +++
1 file changed, 3 insertions(+)
diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi
index 8d9a0df..1a50b67 100644
--- a/arch/arm/boot/dts/bcm283x.dtsi
+++ b/arch/arm/boot/dts/bcm283x.dtsi
@@ -223,6 +223,7 @@
gpclk2_gpio43: gpclk2_gpio43 {
brcm,pins = <43>;
brcm,function = <BCM2835_FSEL_ALT0>;
+ brcm,pull = <BCM2835_PUD_OFF>;
};
i2c0_gpio0: i2c0_gpio0 {
@@ -335,10 +336,12 @@
uart0_ctsrts_gpio30: uart0_ctsrts_gpio30 {
brcm,pins = <30 31>;
brcm,function = <BCM2835_FSEL_ALT3>;
+ brcm,pull = <BCM2835_PUD_UP BCM2835_PUD_OFF>;
};
uart0_gpio32: uart0_gpio32 {
brcm,pins = <32 33>;
brcm,function = <BCM2835_FSEL_ALT3>;
+ brcm,pull = <BCM2835_PUD_OFF BCM2835_PUD_UP>;
};
uart0_gpio36: uart0_gpio36 {
brcm,pins = <36 37>;

View File

@ -0,0 +1,42 @@
From patchwork Mon Feb 12 20:11:36 2018
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: hwrng: bcm2835: Handle deferred clock properly
From: Stefan Wahren <stefan.wahren@i2se.com>
X-Patchwork-Id: 10214385
Message-Id: <1518466296-30161-1-git-send-email-stefan.wahren@i2se.com>
To: Herbert Xu <herbert@gondor.apana.org.au>, Matt Mackall <mpm@selenic.com>
Cc: Stefan Wahren <stefan.wahren@i2se.com>,
Florian Fainelli <f.fainelli@gmail.com>, Arnd Bergmann <arnd@arndb.de>,
Scott Branden <sbranden@broadcom.com>, Jon Mason <jonmason@broadcom.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Eric Anholt <eric@anholt.net>,
bcm-kernel-feedback-list@broadcom.com, linux-crypto@vger.kernel.org,
Ray Jui <rjui@broadcom.com>, linux-arm-kernel@lists.infradead.org
Date: Mon, 12 Feb 2018 21:11:36 +0100
In case the probe of the clock is deferred, we would assume it is
optional. This is wrong, so defer the probe of this driver until
the clock is available.
Fixes: 791af4f4907a ("hwrng: bcm2835 - Manage an optional clock")
Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
Acked-by: Florian Fainelli <f.fainelli@gmail.com>
---
drivers/char/hw_random/bcm2835-rng.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/char/hw_random/bcm2835-rng.c b/drivers/char/hw_random/bcm2835-rng.c
index 7a84cec..6767d96 100644
--- a/drivers/char/hw_random/bcm2835-rng.c
+++ b/drivers/char/hw_random/bcm2835-rng.c
@@ -163,6 +163,8 @@ static int bcm2835_rng_probe(struct platform_device *pdev)
/* Clock is optional on most platforms */
priv->clk = devm_clk_get(dev, NULL);
+ if (IS_ERR(priv->clk) && PTR_ERR(priv->clk) == -EPROBE_DEFER)
+ return -EPROBE_DEFER;
priv->rng.name = pdev->name;
priv->rng.init = bcm2835_rng_init;

View File

@ -0,0 +1,118 @@
From patchwork Fri Feb 16 10:55:33 2018
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: [V3, 1/2,
RESEND] dt-bindings: bcm283x: Fix register ranges of bcm2835-i2s
From: Stefan Wahren <stefan.wahren@i2se.com>
X-Patchwork-Id: 10224429
Message-Id: <1518778534-3328-2-git-send-email-stefan.wahren@i2se.com>
To: Rob Herring <robh+dt@kernel.org>, Mark Rutland <mark.rutland@arm.com>,
Eric Anholt <eric@anholt.net>
Cc: Stefan Wahren <stefan.wahren@i2se.com>, devicetree@vger.kernel.org,
alsa-devel@alsa-project.org, Liam Girdwood <lgirdwood@gmail.com>,
Mark Brown <broonie@kernel.org>, linux-rpi-kernel@lists.infradead.org,
linux-arm-kernel@lists.infradead.org
Date: Fri, 16 Feb 2018 11:55:33 +0100
Since 517e7a1537a ("ASoC: bcm2835: move to use the clock framework")
the bcm2835-i2s requires a clock as DT property. Unfortunately
the necessary DT change has never been applied. While we are at it
also fix the first PCM register range to cover the PCM_GRAY register.
This patch only fixes the affected dt-bindings.
Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Rob Herring <robh@kernel.org>
---
Documentation/devicetree/bindings/dma/brcm,bcm2835-dma.txt | 4 ++--
Documentation/devicetree/bindings/sound/brcm,bcm2835-i2s.txt | 9 ++++-----
2 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/Documentation/devicetree/bindings/dma/brcm,bcm2835-dma.txt b/Documentation/devicetree/bindings/dma/brcm,bcm2835-dma.txt
index baf9b34..b6a8cc0 100644
--- a/Documentation/devicetree/bindings/dma/brcm,bcm2835-dma.txt
+++ b/Documentation/devicetree/bindings/dma/brcm,bcm2835-dma.txt
@@ -74,8 +74,8 @@ Example:
bcm2835_i2s: i2s@7e203000 {
compatible = "brcm,bcm2835-i2s";
- reg = < 0x7e203000 0x20>,
- < 0x7e101098 0x02>;
+ reg = < 0x7e203000 0x24>;
+ clocks = <&clocks BCM2835_CLOCK_PCM>;
dmas = <&dma 2>,
<&dma 3>;
diff --git a/Documentation/devicetree/bindings/sound/brcm,bcm2835-i2s.txt b/Documentation/devicetree/bindings/sound/brcm,bcm2835-i2s.txt
index 65783de..7bb0362 100644
--- a/Documentation/devicetree/bindings/sound/brcm,bcm2835-i2s.txt
+++ b/Documentation/devicetree/bindings/sound/brcm,bcm2835-i2s.txt
@@ -2,9 +2,8 @@
Required properties:
- compatible: "brcm,bcm2835-i2s"
-- reg: A list of base address and size entries:
- * The first entry should cover the PCM registers
- * The second entry should cover the PCM clock registers
+- reg: Should contain PCM registers location and length.
+- clocks: the (PCM) clock to use
- dmas: List of DMA controller phandle and DMA request line ordered pairs.
- dma-names: Identifier string for each DMA request line in the dmas property.
These strings correspond 1:1 with the ordered pairs in dmas.
@@ -16,8 +15,8 @@ Example:
bcm2835_i2s: i2s@7e203000 {
compatible = "brcm,bcm2835-i2s";
- reg = <0x7e203000 0x20>,
- <0x7e101098 0x02>;
+ reg = <0x7e203000 0x24>;
+ clocks = <&clocks BCM2835_CLOCK_PCM>;
dmas = <&dma 2>,
<&dma 3>;
From patchwork Fri Feb 16 10:55:34 2018
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: [V3,2/2,RESEND] ARM: dts: bcm283x: Fix probing of bcm2835-i2s
From: Stefan Wahren <stefan.wahren@i2se.com>
X-Patchwork-Id: 10224427
Message-Id: <1518778534-3328-3-git-send-email-stefan.wahren@i2se.com>
To: Rob Herring <robh+dt@kernel.org>, Mark Rutland <mark.rutland@arm.com>,
Eric Anholt <eric@anholt.net>
Cc: Stefan Wahren <stefan.wahren@i2se.com>, devicetree@vger.kernel.org,
alsa-devel@alsa-project.org, Liam Girdwood <lgirdwood@gmail.com>,
Mark Brown <broonie@kernel.org>, linux-rpi-kernel@lists.infradead.org,
linux-arm-kernel@lists.infradead.org
Date: Fri, 16 Feb 2018 11:55:34 +0100
Since 517e7a1537a ("ASoC: bcm2835: move to use the clock framework")
the bcm2835-i2s requires a clock as DT property. Unfortunately
the necessary DT change has never been applied. While we are at it
also fix the first PCM register range to cover the PCM_GRAY register.
Fixes: 517e7a1537a ("ASoC: bcm2835: move to use the clock framework")
Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
Tested-by: Matthias Reichl <hias@horus.com>
---
arch/arm/boot/dts/bcm283x.dtsi | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi
index 013431e..e08203c 100644
--- a/arch/arm/boot/dts/bcm283x.dtsi
+++ b/arch/arm/boot/dts/bcm283x.dtsi
@@ -396,8 +396,8 @@
i2s: i2s@7e203000 {
compatible = "brcm,bcm2835-i2s";
- reg = <0x7e203000 0x20>,
- <0x7e101098 0x02>;
+ reg = <0x7e203000 0x24>;
+ clocks = <&clocks BCM2835_CLOCK_PCM>;
dmas = <&dma 2>,
<&dma 3>;

638
bcm283x-gpio-expander.patch Normal file
View File

@ -0,0 +1,638 @@
From patchwork Tue Feb 20 12:19:31 2018
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: [v5,1/5] ARM: bcm2835: sync firmware properties with downstream
From: Baruch Siach <baruch@tkos.co.il>
X-Patchwork-Id: 10229963
Message-Id: <e7d1f1d0789f11d37957a8998bee23d035115aeb.1519128054.git.baruch@tkos.co.il>
To: Linus Walleij <linus.walleij@linaro.org>,
Dave Stevenson <dave.stevenson@raspberrypi.org>,
Eric Anholt <eric@anholt.net>, Stefan Wahren <stefan.wahren@i2se.com>
Cc: devicetree@vger.kernel.org, Baruch Siach <baruch@tkos.co.il>,
linux-gpio@vger.kernel.org, Michael Zoran <mzoran@crowfest.net>,
Rob Herring <robh+dt@kernel.org>, linux-rpi-kernel@lists.infradead.org,
Frank Rowand <frowand.list@gmail.com>, linux-arm-kernel@lists.infradead.org
Date: Tue, 20 Feb 2018 14:19:31 +0200
Add latest firmware property tags from the latest Raspberry Pi downstream
kernel. This is needed for the GPIO tags, so we can control the GPIO
multiplexor lines.
Acked-by: Stefan Wahren <stefan.wahren@i2se.com>
Signed-off-by: Baruch Siach <baruch@tkos.co.il>
---
v4: No change
v3: Add Stefan's ack
v2: No change
---
include/soc/bcm2835/raspberrypi-firmware.h | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/include/soc/bcm2835/raspberrypi-firmware.h b/include/soc/bcm2835/raspberrypi-firmware.h
index cb979ad90401..50df5b28d2c9 100644
--- a/include/soc/bcm2835/raspberrypi-firmware.h
+++ b/include/soc/bcm2835/raspberrypi-firmware.h
@@ -63,6 +63,7 @@ enum rpi_firmware_property_tag {
RPI_FIRMWARE_GET_MIN_VOLTAGE = 0x00030008,
RPI_FIRMWARE_GET_TURBO = 0x00030009,
RPI_FIRMWARE_GET_MAX_TEMPERATURE = 0x0003000a,
+ RPI_FIRMWARE_GET_STC = 0x0003000b,
RPI_FIRMWARE_ALLOCATE_MEMORY = 0x0003000c,
RPI_FIRMWARE_LOCK_MEMORY = 0x0003000d,
RPI_FIRMWARE_UNLOCK_MEMORY = 0x0003000e,
@@ -72,12 +73,22 @@ enum rpi_firmware_property_tag {
RPI_FIRMWARE_SET_ENABLE_QPU = 0x00030012,
RPI_FIRMWARE_GET_DISPMANX_RESOURCE_MEM_HANDLE = 0x00030014,
RPI_FIRMWARE_GET_EDID_BLOCK = 0x00030020,
+ RPI_FIRMWARE_GET_CUSTOMER_OTP = 0x00030021,
RPI_FIRMWARE_GET_DOMAIN_STATE = 0x00030030,
RPI_FIRMWARE_SET_CLOCK_STATE = 0x00038001,
RPI_FIRMWARE_SET_CLOCK_RATE = 0x00038002,
RPI_FIRMWARE_SET_VOLTAGE = 0x00038003,
RPI_FIRMWARE_SET_TURBO = 0x00038009,
+ RPI_FIRMWARE_SET_CUSTOMER_OTP = 0x00038021,
RPI_FIRMWARE_SET_DOMAIN_STATE = 0x00038030,
+ RPI_FIRMWARE_GET_GPIO_STATE = 0x00030041,
+ RPI_FIRMWARE_SET_GPIO_STATE = 0x00038041,
+ RPI_FIRMWARE_SET_SDHOST_CLOCK = 0x00038042,
+ RPI_FIRMWARE_GET_GPIO_CONFIG = 0x00030043,
+ RPI_FIRMWARE_SET_GPIO_CONFIG = 0x00038043,
+ RPI_FIRMWARE_GET_PERIPH_REG = 0x00030045,
+ RPI_FIRMWARE_SET_PERIPH_REG = 0x00038045,
+
/* Dispmanx TAGS */
RPI_FIRMWARE_FRAMEBUFFER_ALLOCATE = 0x00040001,
@@ -91,6 +102,8 @@ enum rpi_firmware_property_tag {
RPI_FIRMWARE_FRAMEBUFFER_GET_VIRTUAL_OFFSET = 0x00040009,
RPI_FIRMWARE_FRAMEBUFFER_GET_OVERSCAN = 0x0004000a,
RPI_FIRMWARE_FRAMEBUFFER_GET_PALETTE = 0x0004000b,
+ RPI_FIRMWARE_FRAMEBUFFER_GET_TOUCHBUF = 0x0004000f,
+ RPI_FIRMWARE_FRAMEBUFFER_GET_GPIOVIRTBUF = 0x00040010,
RPI_FIRMWARE_FRAMEBUFFER_RELEASE = 0x00048001,
RPI_FIRMWARE_FRAMEBUFFER_TEST_PHYSICAL_WIDTH_HEIGHT = 0x00044003,
RPI_FIRMWARE_FRAMEBUFFER_TEST_VIRTUAL_WIDTH_HEIGHT = 0x00044004,
@@ -100,6 +113,7 @@ enum rpi_firmware_property_tag {
RPI_FIRMWARE_FRAMEBUFFER_TEST_VIRTUAL_OFFSET = 0x00044009,
RPI_FIRMWARE_FRAMEBUFFER_TEST_OVERSCAN = 0x0004400a,
RPI_FIRMWARE_FRAMEBUFFER_TEST_PALETTE = 0x0004400b,
+ RPI_FIRMWARE_FRAMEBUFFER_TEST_VSYNC = 0x0004400e,
RPI_FIRMWARE_FRAMEBUFFER_SET_PHYSICAL_WIDTH_HEIGHT = 0x00048003,
RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_WIDTH_HEIGHT = 0x00048004,
RPI_FIRMWARE_FRAMEBUFFER_SET_DEPTH = 0x00048005,
@@ -108,6 +122,10 @@ enum rpi_firmware_property_tag {
RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_OFFSET = 0x00048009,
RPI_FIRMWARE_FRAMEBUFFER_SET_OVERSCAN = 0x0004800a,
RPI_FIRMWARE_FRAMEBUFFER_SET_PALETTE = 0x0004800b,
+ RPI_FIRMWARE_FRAMEBUFFER_SET_TOUCHBUF = 0x0004801f,
+ RPI_FIRMWARE_FRAMEBUFFER_SET_GPIOVIRTBUF = 0x00048020,
+ RPI_FIRMWARE_FRAMEBUFFER_SET_VSYNC = 0x0004800e,
+ RPI_FIRMWARE_FRAMEBUFFER_SET_BACKLIGHT = 0x0004800f,
RPI_FIRMWARE_VCHIQ_INIT = 0x00048010,
From patchwork Tue Feb 20 12:19:32 2018
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: [v5,2/5] dt-bindings: gpio: add raspberry pi GPIO expander binding
From: Baruch Siach <baruch@tkos.co.il>
X-Patchwork-Id: 10229965
Message-Id: <f400b48cbcd8a138c39d4e8f63d6c1f569090dcc.1519128054.git.baruch@tkos.co.il>
To: Linus Walleij <linus.walleij@linaro.org>,
Dave Stevenson <dave.stevenson@raspberrypi.org>,
Eric Anholt <eric@anholt.net>, Stefan Wahren <stefan.wahren@i2se.com>
Cc: devicetree@vger.kernel.org, Baruch Siach <baruch@tkos.co.il>,
linux-gpio@vger.kernel.org, Michael Zoran <mzoran@crowfest.net>,
Rob Herring <robh+dt@kernel.org>, linux-rpi-kernel@lists.infradead.org,
Frank Rowand <frowand.list@gmail.com>, linux-arm-kernel@lists.infradead.org
Date: Tue, 20 Feb 2018 14:19:32 +0200
The Raspberry Pi 3 GPIO expander is controlled by the VC4 firmware over
I2C. The firmware mailbox interface allows the ARM core to control the
GPIO lines.
Signed-off-by: Baruch Siach <baruch@tkos.co.il>
Reviewed-by: Rob Herring <robh@kernel.org>
---
v5:
* Remove the 'firmware' property
* Note that the gpio node is a child of the firmware node
v4:
* Move the example gpio node under the firmware node
* Rename gpio node name to plain 'gpio'
v3:
* Rename node name.
v2:
* Rename compatible string to raspberrypi,firmware-gpio
---
.../bindings/gpio/raspberrypi,firmware-gpio.txt | 30 ++++++++++++++++++++++
1 file changed, 30 insertions(+)
create mode 100644 Documentation/devicetree/bindings/gpio/raspberrypi,firmware-gpio.txt
diff --git a/Documentation/devicetree/bindings/gpio/raspberrypi,firmware-gpio.txt b/Documentation/devicetree/bindings/gpio/raspberrypi,firmware-gpio.txt
new file mode 100644
index 000000000000..ce97265e23ba
--- /dev/null
+++ b/Documentation/devicetree/bindings/gpio/raspberrypi,firmware-gpio.txt
@@ -0,0 +1,30 @@
+Raspberry Pi GPIO expander
+
+The Raspberry Pi 3 GPIO expander is controlled by the VC4 firmware. The
+firmware exposes a mailbox interface that allows the ARM core to control the
+GPIO lines on the expander.
+
+The Raspberry Pi GPIO expander node must be a child node of the Raspberry Pi
+firmware node.
+
+Required properties:
+
+- compatible : Should be "raspberrypi,firmware-gpio"
+- gpio-controller : Marks the device node as a gpio controller
+- #gpio-cells : Should be two. The first cell is the pin number, and
+ the second cell is used to specify the gpio polarity:
+ 0 = active high
+ 1 = active low
+
+Example:
+
+firmware: firmware-rpi {
+ compatible = "raspberrypi,bcm2835-firmware";
+ mboxes = <&mailbox>;
+
+ expgpio: gpio {
+ compatible = "raspberrypi,firmware-gpio";
+ gpio-controller;
+ #gpio-cells = <2>;
+ };
+};
From patchwork Tue Feb 20 12:19:33 2018
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: [v5,
3/5] gpio: raspberrypi-exp: Driver for RPi3 GPIO expander via mailbox
service
From: Baruch Siach <baruch@tkos.co.il>
X-Patchwork-Id: 10229967
Message-Id: <8c34f287ee72b340fa9d693aa0e304b25541c74c.1519128054.git.baruch@tkos.co.il>
To: Linus Walleij <linus.walleij@linaro.org>,
Dave Stevenson <dave.stevenson@raspberrypi.org>,
Eric Anholt <eric@anholt.net>, Stefan Wahren <stefan.wahren@i2se.com>
Cc: devicetree@vger.kernel.org, Baruch Siach <baruch@tkos.co.il>,
linux-gpio@vger.kernel.org, Michael Zoran <mzoran@crowfest.net>,
Rob Herring <robh+dt@kernel.org>, linux-rpi-kernel@lists.infradead.org,
Frank Rowand <frowand.list@gmail.com>, linux-arm-kernel@lists.infradead.org
Date: Tue, 20 Feb 2018 14:19:33 +0200
From: Dave Stevenson <dave.stevenson@raspberrypi.org>
Pi3 and Compute Module 3 have a GPIO expander that the
VPU communicates with.
There is a mailbox service that now allows control of this
expander, so add a kernel driver that can make use of it.
Reviewed-by: Stefan Wahren <stefan.wahren@i2se.com>
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
Signed-off-by: Baruch Siach <baruch@tkos.co.il>
---
v5:
* Use the parent node to find the firmware
v4:
* Don't set the .owner driver field
* Add Stefan's review tag
v3:
* Tweak Kconfig driver prompt
* Make GPIO_RASPBERRYPI_EXP tristate
* Make COMPILE_TEST independent of RASPBERRYPI_FIRMWARE
* Remove redundant DMA header
* Use less code lines for dev_err()
* Check rpi_exp_gpio_get_polarity() return value
* Remove redundant platform_set_drvdata() call
v2:
* Rename driver to gpio-raspberrypi-exp
* Populate the gpiochip parent device pointer
* Use macro for the mailbox base GPIO number
* Drop linux/gpio.h and GPIOF_DIR_*
* Check and print firmware error value
* Use devm_gpiochip_add_data(); drop .remove
* A few more minor tweaks
---
drivers/gpio/Kconfig | 9 ++
drivers/gpio/Makefile | 1 +
drivers/gpio/gpio-raspberrypi-exp.c | 252 ++++++++++++++++++++++++++++++++++++
3 files changed, 262 insertions(+)
create mode 100644 drivers/gpio/gpio-raspberrypi-exp.c
diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig
index 8dbb2280538d..fd0562a37f68 100644
--- a/drivers/gpio/Kconfig
+++ b/drivers/gpio/Kconfig
@@ -122,6 +122,15 @@ config GPIO_ATH79
Select this option to enable GPIO driver for
Atheros AR71XX/AR724X/AR913X SoC devices.
+config GPIO_RASPBERRYPI_EXP
+ tristate "Raspberry Pi 3 GPIO Expander"
+ default RASPBERRYPI_FIRMWARE
+ depends on OF_GPIO
+ depends on (ARCH_BCM2835 && RASPBERRYPI_FIRMWARE) || COMPILE_TEST
+ help
+ Turn on GPIO support for the expander on Raspberry Pi 3 boards, using
+ the firmware mailbox to communicate with VideoCore on BCM283x chips.
+
config GPIO_BCM_KONA
bool "Broadcom Kona GPIO"
depends on OF_GPIO && (ARCH_BCM_MOBILE || COMPILE_TEST)
diff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile
index cccb0d40846c..76dc0a02bd56 100644
--- a/drivers/gpio/Makefile
+++ b/drivers/gpio/Makefile
@@ -32,6 +32,7 @@ obj-$(CONFIG_GPIO_AMDPT) += gpio-amdpt.o
obj-$(CONFIG_GPIO_ARIZONA) += gpio-arizona.o
obj-$(CONFIG_GPIO_ATH79) += gpio-ath79.o
obj-$(CONFIG_GPIO_ASPEED) += gpio-aspeed.o
+obj-$(CONFIG_GPIO_RASPBERRYPI_EXP) += gpio-raspberrypi-exp.o
obj-$(CONFIG_GPIO_BCM_KONA) += gpio-bcm-kona.o
obj-$(CONFIG_GPIO_BD9571MWV) += gpio-bd9571mwv.o
obj-$(CONFIG_GPIO_BRCMSTB) += gpio-brcmstb.o
diff --git a/drivers/gpio/gpio-raspberrypi-exp.c b/drivers/gpio/gpio-raspberrypi-exp.c
new file mode 100644
index 000000000000..d6d36d537e37
--- /dev/null
+++ b/drivers/gpio/gpio-raspberrypi-exp.c
@@ -0,0 +1,252 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Raspberry Pi 3 expander GPIO driver
+ *
+ * Uses the firmware mailbox service to communicate with the
+ * GPIO expander on the VPU.
+ *
+ * Copyright (C) 2017 Raspberry Pi Trading Ltd.
+ */
+
+#include <linux/err.h>
+#include <linux/gpio/driver.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <soc/bcm2835/raspberrypi-firmware.h>
+
+#define MODULE_NAME "raspberrypi-exp-gpio"
+#define NUM_GPIO 8
+
+#define RPI_EXP_GPIO_BASE 128
+
+#define RPI_EXP_GPIO_DIR_IN 0
+#define RPI_EXP_GPIO_DIR_OUT 1
+
+struct rpi_exp_gpio {
+ struct gpio_chip gc;
+ struct rpi_firmware *fw;
+};
+
+/* VC4 firmware mailbox interface data structures */
+
+struct gpio_set_config {
+ u32 gpio;
+ u32 direction;
+ u32 polarity;
+ u32 term_en;
+ u32 term_pull_up;
+ u32 state;
+};
+
+struct gpio_get_config {
+ u32 gpio;
+ u32 direction;
+ u32 polarity;
+ u32 term_en;
+ u32 term_pull_up;
+};
+
+struct gpio_get_set_state {
+ u32 gpio;
+ u32 state;
+};
+
+static int rpi_exp_gpio_get_polarity(struct gpio_chip *gc, unsigned int off)
+{
+ struct rpi_exp_gpio *gpio;
+ struct gpio_get_config get;
+ int ret;
+
+ gpio = gpiochip_get_data(gc);
+
+ get.gpio = off + RPI_EXP_GPIO_BASE; /* GPIO to update */
+
+ ret = rpi_firmware_property(gpio->fw, RPI_FIRMWARE_GET_GPIO_CONFIG,
+ &get, sizeof(get));
+ if (ret || get.gpio != 0) {
+ dev_err(gc->parent, "Failed to get GPIO %u config (%d %x)\n",
+ off, ret, get.gpio);
+ return ret ? ret : -EIO;
+ }
+ return get.polarity;
+}
+
+static int rpi_exp_gpio_dir_in(struct gpio_chip *gc, unsigned int off)
+{
+ struct rpi_exp_gpio *gpio;
+ struct gpio_set_config set_in;
+ int ret;
+
+ gpio = gpiochip_get_data(gc);
+
+ set_in.gpio = off + RPI_EXP_GPIO_BASE; /* GPIO to update */
+ set_in.direction = RPI_EXP_GPIO_DIR_IN;
+ set_in.term_en = 0; /* termination disabled */
+ set_in.term_pull_up = 0; /* n/a as termination disabled */
+ set_in.state = 0; /* n/a as configured as an input */
+
+ ret = rpi_exp_gpio_get_polarity(gc, off);
+ if (ret < 0)
+ return ret;
+ set_in.polarity = ret; /* Retain existing setting */
+
+ ret = rpi_firmware_property(gpio->fw, RPI_FIRMWARE_SET_GPIO_CONFIG,
+ &set_in, sizeof(set_in));
+ if (ret || set_in.gpio != 0) {
+ dev_err(gc->parent, "Failed to set GPIO %u to input (%d %x)\n",
+ off, ret, set_in.gpio);
+ return ret ? ret : -EIO;
+ }
+ return 0;
+}
+
+static int rpi_exp_gpio_dir_out(struct gpio_chip *gc, unsigned int off, int val)
+{
+ struct rpi_exp_gpio *gpio;
+ struct gpio_set_config set_out;
+ int ret;
+
+ gpio = gpiochip_get_data(gc);
+
+ set_out.gpio = off + RPI_EXP_GPIO_BASE; /* GPIO to update */
+ set_out.direction = RPI_EXP_GPIO_DIR_OUT;
+ set_out.term_en = 0; /* n/a as an output */
+ set_out.term_pull_up = 0; /* n/a as termination disabled */
+ set_out.state = val; /* Output state */
+
+ ret = rpi_exp_gpio_get_polarity(gc, off);
+ if (ret < 0)
+ return ret;
+ set_out.polarity = ret; /* Retain existing setting */
+
+ ret = rpi_firmware_property(gpio->fw, RPI_FIRMWARE_SET_GPIO_CONFIG,
+ &set_out, sizeof(set_out));
+ if (ret || set_out.gpio != 0) {
+ dev_err(gc->parent, "Failed to set GPIO %u to output (%d %x)\n",
+ off, ret, set_out.gpio);
+ return ret ? ret : -EIO;
+ }
+ return 0;
+}
+
+static int rpi_exp_gpio_get_direction(struct gpio_chip *gc, unsigned int off)
+{
+ struct rpi_exp_gpio *gpio;
+ struct gpio_get_config get;
+ int ret;
+
+ gpio = gpiochip_get_data(gc);
+
+ get.gpio = off + RPI_EXP_GPIO_BASE; /* GPIO to update */
+
+ ret = rpi_firmware_property(gpio->fw, RPI_FIRMWARE_GET_GPIO_CONFIG,
+ &get, sizeof(get));
+ if (ret || get.gpio != 0) {
+ dev_err(gc->parent,
+ "Failed to get GPIO %u config (%d %x)\n", off, ret,
+ get.gpio);
+ return ret ? ret : -EIO;
+ }
+ return !get.direction;
+}
+
+static int rpi_exp_gpio_get(struct gpio_chip *gc, unsigned int off)
+{
+ struct rpi_exp_gpio *gpio;
+ struct gpio_get_set_state get;
+ int ret;
+
+ gpio = gpiochip_get_data(gc);
+
+ get.gpio = off + RPI_EXP_GPIO_BASE; /* GPIO to update */
+ get.state = 0; /* storage for returned value */
+
+ ret = rpi_firmware_property(gpio->fw, RPI_FIRMWARE_GET_GPIO_STATE,
+ &get, sizeof(get));
+ if (ret || get.gpio != 0) {
+ dev_err(gc->parent,
+ "Failed to get GPIO %u state (%d %x)\n", off, ret,
+ get.gpio);
+ return ret ? ret : -EIO;
+ }
+ return !!get.state;
+}
+
+static void rpi_exp_gpio_set(struct gpio_chip *gc, unsigned int off, int val)
+{
+ struct rpi_exp_gpio *gpio;
+ struct gpio_get_set_state set;
+ int ret;
+
+ gpio = gpiochip_get_data(gc);
+
+ set.gpio = off + RPI_EXP_GPIO_BASE; /* GPIO to update */
+ set.state = val; /* Output state */
+
+ ret = rpi_firmware_property(gpio->fw, RPI_FIRMWARE_SET_GPIO_STATE,
+ &set, sizeof(set));
+ if (ret || set.gpio != 0)
+ dev_err(gc->parent,
+ "Failed to set GPIO %u state (%d %x)\n", off, ret,
+ set.gpio);
+}
+
+static int rpi_exp_gpio_probe(struct platform_device *pdev)
+{
+ struct device *dev = &pdev->dev;
+ struct device_node *np = dev->of_node;
+ struct device_node *fw_node;
+ struct rpi_firmware *fw;
+ struct rpi_exp_gpio *rpi_gpio;
+
+ fw_node = of_get_parent(np);
+ if (!fw_node) {
+ dev_err(dev, "Missing firmware node\n");
+ return -ENOENT;
+ }
+
+ fw = rpi_firmware_get(fw_node);
+ if (!fw)
+ return -EPROBE_DEFER;
+
+ rpi_gpio = devm_kzalloc(dev, sizeof(*rpi_gpio), GFP_KERNEL);
+ if (!rpi_gpio)
+ return -ENOMEM;
+
+ rpi_gpio->fw = fw;
+ rpi_gpio->gc.parent = dev;
+ rpi_gpio->gc.label = MODULE_NAME;
+ rpi_gpio->gc.owner = THIS_MODULE;
+ rpi_gpio->gc.of_node = np;
+ rpi_gpio->gc.base = -1;
+ rpi_gpio->gc.ngpio = NUM_GPIO;
+
+ rpi_gpio->gc.direction_input = rpi_exp_gpio_dir_in;
+ rpi_gpio->gc.direction_output = rpi_exp_gpio_dir_out;
+ rpi_gpio->gc.get_direction = rpi_exp_gpio_get_direction;
+ rpi_gpio->gc.get = rpi_exp_gpio_get;
+ rpi_gpio->gc.set = rpi_exp_gpio_set;
+ rpi_gpio->gc.can_sleep = true;
+
+ return devm_gpiochip_add_data(dev, &rpi_gpio->gc, rpi_gpio);
+}
+
+static const struct of_device_id rpi_exp_gpio_ids[] = {
+ { .compatible = "raspberrypi,firmware-gpio" },
+ { }
+};
+MODULE_DEVICE_TABLE(of, rpi_exp_gpio_ids);
+
+static struct platform_driver rpi_exp_gpio_driver = {
+ .driver = {
+ .name = MODULE_NAME,
+ .of_match_table = of_match_ptr(rpi_exp_gpio_ids),
+ },
+ .probe = rpi_exp_gpio_probe,
+};
+module_platform_driver(rpi_exp_gpio_driver);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Dave Stevenson <dave.stevenson@raspberrypi.org>");
+MODULE_DESCRIPTION("Raspberry Pi 3 expander GPIO driver");
+MODULE_ALIAS("platform:rpi-exp-gpio");
From patchwork Tue Feb 20 12:19:34 2018
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: [v5,4/5] ARM: dts: bcm2835: make the firmware node into a bus
From: Baruch Siach <baruch@tkos.co.il>
X-Patchwork-Id: 10229961
Message-Id: <43f9082a6835df6d7bcd3e16d79db687c52826d2.1519128054.git.baruch@tkos.co.il>
To: Linus Walleij <linus.walleij@linaro.org>,
Dave Stevenson <dave.stevenson@raspberrypi.org>,
Eric Anholt <eric@anholt.net>, Stefan Wahren <stefan.wahren@i2se.com>
Cc: devicetree@vger.kernel.org, Baruch Siach <baruch@tkos.co.il>,
linux-gpio@vger.kernel.org, Michael Zoran <mzoran@crowfest.net>,
Rob Herring <robh+dt@kernel.org>, linux-rpi-kernel@lists.infradead.org,
Frank Rowand <frowand.list@gmail.com>, linux-arm-kernel@lists.infradead.org
Date: Tue, 20 Feb 2018 14:19:34 +0200
This allows adding devices for which the firmware exposes control interface
via the mailbox. An example of such device is the GPIO expander.
Signed-off-by: Baruch Siach <baruch@tkos.co.il>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
---
v4: New patch in this series
---
arch/arm/boot/dts/bcm2835-rpi.dtsi | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/arch/arm/boot/dts/bcm2835-rpi.dtsi b/arch/arm/boot/dts/bcm2835-rpi.dtsi
index e36c392a2b8f..0198bd46ef7c 100644
--- a/arch/arm/boot/dts/bcm2835-rpi.dtsi
+++ b/arch/arm/boot/dts/bcm2835-rpi.dtsi
@@ -18,7 +18,9 @@
soc {
firmware: firmware {
- compatible = "raspberrypi,bcm2835-firmware";
+ compatible = "raspberrypi,bcm2835-firmware", "simple-bus";
+ #address-cells = <0>;
+ #size-cells = <0>;
mboxes = <&mailbox>;
};
From patchwork Tue Feb 20 12:19:35 2018
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: [v5,5/5] ARM: dts: bcm2837-rpi-3-b: add GPIO expander
From: Baruch Siach <baruch@tkos.co.il>
X-Patchwork-Id: 10229995
Message-Id: <a6d59692dc4847e0b1639a26542e28c95ad5240f.1519128054.git.baruch@tkos.co.il>
To: Linus Walleij <linus.walleij@linaro.org>,
Dave Stevenson <dave.stevenson@raspberrypi.org>,
Eric Anholt <eric@anholt.net>, Stefan Wahren <stefan.wahren@i2se.com>
Cc: devicetree@vger.kernel.org, Baruch Siach <baruch@tkos.co.il>,
linux-gpio@vger.kernel.org, Michael Zoran <mzoran@crowfest.net>,
Rob Herring <robh+dt@kernel.org>, linux-rpi-kernel@lists.infradead.org,
Frank Rowand <frowand.list@gmail.com>, linux-arm-kernel@lists.infradead.org
Date: Tue, 20 Feb 2018 14:19:35 +0200
Add a description of the RPi3 GPIO expander that the VC4 firmware controls.
Acked-by: Stefan Wahren <stefan.wahren@i2se.com>
Signed-off-by: Baruch Siach <baruch@tkos.co.il>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
---
v5:
* Drop the 'firmware' property
v4:
* Move the gpio node under the firmware node
* Rename the gpio node to plain 'gpio'
* Add Stefan's ack
v3:
* List GPIO names one per line.
v2:
* Move GPIO expander node out of the soc container
* Rename compatible string
* Add gpio-line-names property
---
arch/arm/boot/dts/bcm2837-rpi-3-b.dts | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/arch/arm/boot/dts/bcm2837-rpi-3-b.dts b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts
index 3e4ed7c5b0b3..0b31d995a066 100644
--- a/arch/arm/boot/dts/bcm2837-rpi-3-b.dts
+++ b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts
@@ -25,6 +25,23 @@
};
};
+&firmware {
+ expgpio: gpio {
+ compatible = "raspberrypi,firmware-gpio";
+ gpio-controller;
+ #gpio-cells = <2>;
+ gpio-line-names = "BT_ON",
+ "WL_ON",
+ "STATUS_LED",
+ "LAN_RUN",
+ "HPD_N",
+ "CAM_GPIO0",
+ "CAM_GPIO1",
+ "PWR_LOW_N";
+ status = "okay";
+ };
+};
+
/* uart0 communicates with the BT module */
&uart0 {
pinctrl-names = "default";

View File

@ -1 +0,0 @@
# CONFIG_TIMER_STATS is not set

View File

@ -0,0 +1 @@
CONFIG_GPIO_RASPBERRYPI_EXP=m

View File

@ -1 +0,0 @@
CONFIG_HW_RANDOM_OMAP=m

View File

@ -1 +0,0 @@
CONFIG_HW_RANDOM_OMAP=m

View File

@ -1 +0,0 @@
CONFIG_HW_RANDOM_OMAP=m

View File

@ -0,0 +1 @@
CONFIG_MFD_TI_LMU=m

View File

@ -0,0 +1 @@
CONFIG_REGULATOR_LM363X=m

View File

@ -1 +0,0 @@
CONFIG_REMOTEPROC=m

View File

@ -1 +1 @@
CONFIG_SERIAL_8250_OMAP=m CONFIG_SERIAL_8250_OMAP=y

View File

@ -0,0 +1 @@
CONFIG_SERIAL_8250_OMAP_TTYO_FIXUP=y

View File

@ -1 +1 @@
CONFIG_SERIAL_OMAP=y # CONFIG_SERIAL_OMAP is not set

View File

@ -1 +0,0 @@
CONFIG_SERIAL_OMAP_CONSOLE=y

View File

@ -1810,6 +1810,7 @@ CONFIG_GPIO_PCF857X=m
CONFIG_GPIO_PCI_IDIO_16=m CONFIG_GPIO_PCI_IDIO_16=m
# CONFIG_GPIO_PISOSR is not set # CONFIG_GPIO_PISOSR is not set
CONFIG_GPIO_PL061=y CONFIG_GPIO_PL061=y
CONFIG_GPIO_RASPBERRYPI_EXP=m
# CONFIG_GPIO_RDC321X is not set # CONFIG_GPIO_RDC321X is not set
# CONFIG_GPIO_SCH311X is not set # CONFIG_GPIO_SCH311X is not set
# CONFIG_GPIO_SX150X is not set # CONFIG_GPIO_SX150X is not set
@ -5805,7 +5806,6 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set # CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
CONFIG_TINYDRM_ILI9225=m CONFIG_TINYDRM_ILI9225=m
CONFIG_TINYDRM_MI0283QT=m CONFIG_TINYDRM_MI0283QT=m
CONFIG_TINYDRM_MIPI_DBI=m CONFIG_TINYDRM_MIPI_DBI=m

View File

@ -1792,6 +1792,7 @@ CONFIG_GPIO_PCF857X=m
CONFIG_GPIO_PCI_IDIO_16=m CONFIG_GPIO_PCI_IDIO_16=m
# CONFIG_GPIO_PISOSR is not set # CONFIG_GPIO_PISOSR is not set
CONFIG_GPIO_PL061=y CONFIG_GPIO_PL061=y
CONFIG_GPIO_RASPBERRYPI_EXP=m
# CONFIG_GPIO_RDC321X is not set # CONFIG_GPIO_RDC321X is not set
# CONFIG_GPIO_SCH311X is not set # CONFIG_GPIO_SCH311X is not set
# CONFIG_GPIO_SX150X is not set # CONFIG_GPIO_SX150X is not set
@ -5781,7 +5782,6 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set # CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
CONFIG_TINYDRM_ILI9225=m CONFIG_TINYDRM_ILI9225=m
CONFIG_TINYDRM_MI0283QT=m CONFIG_TINYDRM_MI0283QT=m
CONFIG_TINYDRM_MIPI_DBI=m CONFIG_TINYDRM_MIPI_DBI=m

View File

@ -1927,6 +1927,7 @@ CONFIG_GPIO_PCF857X=m
CONFIG_GPIO_PCI_IDIO_16=m CONFIG_GPIO_PCI_IDIO_16=m
# CONFIG_GPIO_PISOSR is not set # CONFIG_GPIO_PISOSR is not set
CONFIG_GPIO_PL061=y CONFIG_GPIO_PL061=y
CONFIG_GPIO_RASPBERRYPI_EXP=m
# CONFIG_GPIO_RDC321X is not set # CONFIG_GPIO_RDC321X is not set
# CONFIG_GPIO_SCH311X is not set # CONFIG_GPIO_SCH311X is not set
CONFIG_GPIO_STMPE=y CONFIG_GPIO_STMPE=y
@ -3288,7 +3289,7 @@ CONFIG_MFD_T7L66XB=y
CONFIG_MFD_TC6387XB=y CONFIG_MFD_TC6387XB=y
# CONFIG_MFD_TC6393XB is not set # CONFIG_MFD_TC6393XB is not set
CONFIG_MFD_TI_AM335X_TSCADC=m CONFIG_MFD_TI_AM335X_TSCADC=m
# CONFIG_MFD_TI_LMU is not set CONFIG_MFD_TI_LMU=m
# CONFIG_MFD_TI_LP873X is not set # CONFIG_MFD_TI_LP873X is not set
# CONFIG_MFD_TI_LP87565 is not set # CONFIG_MFD_TI_LP87565 is not set
# CONFIG_MFD_TIMBERDALE is not set # CONFIG_MFD_TIMBERDALE is not set
@ -4765,6 +4766,7 @@ CONFIG_REGULATOR_FIXED_VOLTAGE=y
CONFIG_REGULATOR_GPIO=m CONFIG_REGULATOR_GPIO=m
CONFIG_REGULATOR_ISL6271A=m CONFIG_REGULATOR_ISL6271A=m
CONFIG_REGULATOR_ISL9305=m CONFIG_REGULATOR_ISL9305=m
CONFIG_REGULATOR_LM363X=m
CONFIG_REGULATOR_LP3971=m CONFIG_REGULATOR_LP3971=m
CONFIG_REGULATOR_LP3972=m CONFIG_REGULATOR_LP3972=m
CONFIG_REGULATOR_LP872X=y CONFIG_REGULATOR_LP872X=y
@ -5416,7 +5418,8 @@ CONFIG_SERIAL_8250_MANY_PORTS=y
# CONFIG_SERIAL_8250_MID is not set # CONFIG_SERIAL_8250_MID is not set
CONFIG_SERIAL_8250_MOXA=m CONFIG_SERIAL_8250_MOXA=m
CONFIG_SERIAL_8250_NR_UARTS=32 CONFIG_SERIAL_8250_NR_UARTS=32
CONFIG_SERIAL_8250_OMAP=m CONFIG_SERIAL_8250_OMAP_TTYO_FIXUP=y
CONFIG_SERIAL_8250_OMAP=y
CONFIG_SERIAL_8250_PCI=y CONFIG_SERIAL_8250_PCI=y
CONFIG_SERIAL_8250_RSA=y CONFIG_SERIAL_8250_RSA=y
CONFIG_SERIAL_8250_RT288X=y CONFIG_SERIAL_8250_RT288X=y
@ -5455,8 +5458,7 @@ CONFIG_SERIAL_MVEBU_CONSOLE=y
CONFIG_SERIAL_MVEBU_UART=y CONFIG_SERIAL_MVEBU_UART=y
# CONFIG_SERIAL_NONSTANDARD is not set # CONFIG_SERIAL_NONSTANDARD is not set
CONFIG_SERIAL_OF_PLATFORM=y CONFIG_SERIAL_OF_PLATFORM=y
CONFIG_SERIAL_OMAP_CONSOLE=y # CONFIG_SERIAL_OMAP is not set
CONFIG_SERIAL_OMAP=y
# CONFIG_SERIAL_PCH_UART is not set # CONFIG_SERIAL_PCH_UART is not set
CONFIG_SERIAL_PXA_CONSOLE=y CONFIG_SERIAL_PXA_CONSOLE=y
CONFIG_SERIAL_PXA=y CONFIG_SERIAL_PXA=y
@ -6283,7 +6285,6 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set # CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
CONFIG_TINYDRM_ILI9225=m CONFIG_TINYDRM_ILI9225=m
CONFIG_TINYDRM_MI0283QT=m CONFIG_TINYDRM_MI0283QT=m
CONFIG_TINYDRM_MIPI_DBI=m CONFIG_TINYDRM_MIPI_DBI=m

View File

@ -1828,6 +1828,7 @@ CONFIG_GPIO_PCF857X=m
CONFIG_GPIO_PCI_IDIO_16=m CONFIG_GPIO_PCI_IDIO_16=m
# CONFIG_GPIO_PISOSR is not set # CONFIG_GPIO_PISOSR is not set
CONFIG_GPIO_PL061=y CONFIG_GPIO_PL061=y
CONFIG_GPIO_RASPBERRYPI_EXP=m
# CONFIG_GPIO_RDC321X is not set # CONFIG_GPIO_RDC321X is not set
# CONFIG_GPIO_SCH311X is not set # CONFIG_GPIO_SCH311X is not set
# CONFIG_GPIO_SX150X is not set # CONFIG_GPIO_SX150X is not set
@ -5874,7 +5875,6 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set # CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
CONFIG_TI_MESSAGE_MANAGER=m CONFIG_TI_MESSAGE_MANAGER=m
CONFIG_TINYDRM_ILI9225=m CONFIG_TINYDRM_ILI9225=m
CONFIG_TINYDRM_MI0283QT=m CONFIG_TINYDRM_MI0283QT=m

View File

@ -1810,6 +1810,7 @@ CONFIG_GPIO_PCF857X=m
CONFIG_GPIO_PCI_IDIO_16=m CONFIG_GPIO_PCI_IDIO_16=m
# CONFIG_GPIO_PISOSR is not set # CONFIG_GPIO_PISOSR is not set
CONFIG_GPIO_PL061=y CONFIG_GPIO_PL061=y
CONFIG_GPIO_RASPBERRYPI_EXP=m
# CONFIG_GPIO_RDC321X is not set # CONFIG_GPIO_RDC321X is not set
# CONFIG_GPIO_SCH311X is not set # CONFIG_GPIO_SCH311X is not set
# CONFIG_GPIO_SX150X is not set # CONFIG_GPIO_SX150X is not set
@ -5850,7 +5851,6 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set # CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
CONFIG_TI_MESSAGE_MANAGER=m CONFIG_TI_MESSAGE_MANAGER=m
CONFIG_TINYDRM_ILI9225=m CONFIG_TINYDRM_ILI9225=m
CONFIG_TINYDRM_MI0283QT=m CONFIG_TINYDRM_MI0283QT=m

View File

@ -1909,6 +1909,7 @@ CONFIG_GPIO_PCF857X=m
CONFIG_GPIO_PCI_IDIO_16=m CONFIG_GPIO_PCI_IDIO_16=m
# CONFIG_GPIO_PISOSR is not set # CONFIG_GPIO_PISOSR is not set
CONFIG_GPIO_PL061=y CONFIG_GPIO_PL061=y
CONFIG_GPIO_RASPBERRYPI_EXP=m
# CONFIG_GPIO_RDC321X is not set # CONFIG_GPIO_RDC321X is not set
# CONFIG_GPIO_SCH311X is not set # CONFIG_GPIO_SCH311X is not set
CONFIG_GPIO_STMPE=y CONFIG_GPIO_STMPE=y
@ -3267,7 +3268,7 @@ CONFIG_MFD_T7L66XB=y
CONFIG_MFD_TC6387XB=y CONFIG_MFD_TC6387XB=y
# CONFIG_MFD_TC6393XB is not set # CONFIG_MFD_TC6393XB is not set
CONFIG_MFD_TI_AM335X_TSCADC=m CONFIG_MFD_TI_AM335X_TSCADC=m
# CONFIG_MFD_TI_LMU is not set CONFIG_MFD_TI_LMU=m
# CONFIG_MFD_TI_LP873X is not set # CONFIG_MFD_TI_LP873X is not set
# CONFIG_MFD_TI_LP87565 is not set # CONFIG_MFD_TI_LP87565 is not set
# CONFIG_MFD_TIMBERDALE is not set # CONFIG_MFD_TIMBERDALE is not set
@ -4742,6 +4743,7 @@ CONFIG_REGULATOR_FIXED_VOLTAGE=y
CONFIG_REGULATOR_GPIO=m CONFIG_REGULATOR_GPIO=m
CONFIG_REGULATOR_ISL6271A=m CONFIG_REGULATOR_ISL6271A=m
CONFIG_REGULATOR_ISL9305=m CONFIG_REGULATOR_ISL9305=m
CONFIG_REGULATOR_LM363X=m
CONFIG_REGULATOR_LP3971=m CONFIG_REGULATOR_LP3971=m
CONFIG_REGULATOR_LP3972=m CONFIG_REGULATOR_LP3972=m
CONFIG_REGULATOR_LP872X=y CONFIG_REGULATOR_LP872X=y
@ -5393,7 +5395,8 @@ CONFIG_SERIAL_8250_MANY_PORTS=y
# CONFIG_SERIAL_8250_MID is not set # CONFIG_SERIAL_8250_MID is not set
CONFIG_SERIAL_8250_MOXA=m CONFIG_SERIAL_8250_MOXA=m
CONFIG_SERIAL_8250_NR_UARTS=32 CONFIG_SERIAL_8250_NR_UARTS=32
CONFIG_SERIAL_8250_OMAP=m CONFIG_SERIAL_8250_OMAP_TTYO_FIXUP=y
CONFIG_SERIAL_8250_OMAP=y
CONFIG_SERIAL_8250_PCI=y CONFIG_SERIAL_8250_PCI=y
CONFIG_SERIAL_8250_RSA=y CONFIG_SERIAL_8250_RSA=y
CONFIG_SERIAL_8250_RT288X=y CONFIG_SERIAL_8250_RT288X=y
@ -5432,8 +5435,7 @@ CONFIG_SERIAL_MVEBU_CONSOLE=y
CONFIG_SERIAL_MVEBU_UART=y CONFIG_SERIAL_MVEBU_UART=y
# CONFIG_SERIAL_NONSTANDARD is not set # CONFIG_SERIAL_NONSTANDARD is not set
CONFIG_SERIAL_OF_PLATFORM=y CONFIG_SERIAL_OF_PLATFORM=y
CONFIG_SERIAL_OMAP_CONSOLE=y # CONFIG_SERIAL_OMAP is not set
CONFIG_SERIAL_OMAP=y
# CONFIG_SERIAL_PCH_UART is not set # CONFIG_SERIAL_PCH_UART is not set
CONFIG_SERIAL_PXA_CONSOLE=y CONFIG_SERIAL_PXA_CONSOLE=y
CONFIG_SERIAL_PXA=y CONFIG_SERIAL_PXA=y
@ -6259,7 +6261,6 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set # CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
CONFIG_TINYDRM_ILI9225=m CONFIG_TINYDRM_ILI9225=m
CONFIG_TINYDRM_MI0283QT=m CONFIG_TINYDRM_MI0283QT=m
CONFIG_TINYDRM_MIPI_DBI=m CONFIG_TINYDRM_MIPI_DBI=m

View File

@ -5440,7 +5440,6 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set # CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
CONFIG_TIPC=m CONFIG_TIPC=m
# CONFIG_TIPC_MEDIA_IB is not set # CONFIG_TIPC_MEDIA_IB is not set
CONFIG_TIPC_MEDIA_UDP=y CONFIG_TIPC_MEDIA_UDP=y

View File

@ -5463,7 +5463,6 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set # CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
CONFIG_TIPC=m CONFIG_TIPC=m
# CONFIG_TIPC_MEDIA_IB is not set # CONFIG_TIPC_MEDIA_IB is not set
CONFIG_TIPC_MEDIA_UDP=y CONFIG_TIPC_MEDIA_UDP=y

View File

@ -5463,7 +5463,6 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set # CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
CONFIG_TIPC=m CONFIG_TIPC=m
# CONFIG_TIPC_MEDIA_IB is not set # CONFIG_TIPC_MEDIA_IB is not set
CONFIG_TIPC_MEDIA_UDP=y CONFIG_TIPC_MEDIA_UDP=y

View File

@ -5440,7 +5440,6 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set # CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
CONFIG_TIPC=m CONFIG_TIPC=m
# CONFIG_TIPC_MEDIA_IB is not set # CONFIG_TIPC_MEDIA_IB is not set
CONFIG_TIPC_MEDIA_UDP=y CONFIG_TIPC_MEDIA_UDP=y

View File

@ -5227,7 +5227,6 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set # CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
CONFIG_TIPC=m CONFIG_TIPC=m
# CONFIG_TIPC_MEDIA_IB is not set # CONFIG_TIPC_MEDIA_IB is not set
CONFIG_TIPC_MEDIA_UDP=y CONFIG_TIPC_MEDIA_UDP=y

View File

@ -5202,7 +5202,6 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set # CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
CONFIG_TIPC=m CONFIG_TIPC=m
# CONFIG_TIPC_MEDIA_IB is not set # CONFIG_TIPC_MEDIA_IB is not set
CONFIG_TIPC_MEDIA_UDP=y CONFIG_TIPC_MEDIA_UDP=y

View File

@ -5155,7 +5155,6 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set # CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
CONFIG_TIPC=m CONFIG_TIPC=m
# CONFIG_TIPC_MEDIA_IB is not set # CONFIG_TIPC_MEDIA_IB is not set
CONFIG_TIPC_MEDIA_UDP=y CONFIG_TIPC_MEDIA_UDP=y

View File

@ -5130,7 +5130,6 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set # CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
CONFIG_TIPC=m CONFIG_TIPC=m
# CONFIG_TIPC_MEDIA_IB is not set # CONFIG_TIPC_MEDIA_IB is not set
CONFIG_TIPC_MEDIA_UDP=y CONFIG_TIPC_MEDIA_UDP=y

View File

@ -5049,7 +5049,6 @@ CONFIG_TIFM_7XX1=m
CONFIG_TIGON3_HWMON=y CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set # CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
CONFIG_TIPC=m CONFIG_TIPC=m
# CONFIG_TIPC_MEDIA_IB is not set # CONFIG_TIPC_MEDIA_IB is not set
CONFIG_TIPC_MEDIA_UDP=y CONFIG_TIPC_MEDIA_UDP=y

View File

@ -5024,7 +5024,6 @@ CONFIG_TIFM_7XX1=m
CONFIG_TIGON3_HWMON=y CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set # CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
CONFIG_TIPC=m CONFIG_TIPC=m
# CONFIG_TIPC_MEDIA_IB is not set # CONFIG_TIPC_MEDIA_IB is not set
CONFIG_TIPC_MEDIA_UDP=y CONFIG_TIPC_MEDIA_UDP=y

View File

@ -5553,7 +5553,6 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set # CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
CONFIG_TIPC=m CONFIG_TIPC=m
# CONFIG_TIPC_MEDIA_IB is not set # CONFIG_TIPC_MEDIA_IB is not set
CONFIG_TIPC_MEDIA_UDP=y CONFIG_TIPC_MEDIA_UDP=y

View File

@ -5530,7 +5530,6 @@ CONFIG_TIFM_CORE=m
CONFIG_TIGON3_HWMON=y CONFIG_TIGON3_HWMON=y
CONFIG_TIGON3=m CONFIG_TIGON3=m
# CONFIG_TIMB_DMA is not set # CONFIG_TIMB_DMA is not set
# CONFIG_TIMER_STATS is not set
CONFIG_TIPC=m CONFIG_TIPC=m
# CONFIG_TIPC_MEDIA_IB is not set # CONFIG_TIPC_MEDIA_IB is not set
CONFIG_TIPC_MEDIA_UDP=y CONFIG_TIPC_MEDIA_UDP=y

View File

@ -24,7 +24,7 @@ Summary: The Linux kernel
%global zipsed -e 's/\.ko$/\.ko.xz/' %global zipsed -e 's/\.ko$/\.ko.xz/'
%endif %endif
# define buildid .local %define buildid .rpi3
# baserelease defines which build revision of this kernel version we're # baserelease defines which build revision of this kernel version we're
# building. We used to call this fedora_build, but the magical name # building. We used to call this fedora_build, but the magical name
@ -595,6 +595,20 @@ Patch311: arm-clk-bcm2835-hdmi-fixes.patch
# https://www.spinics.net/lists/arm-kernel/msg632925.html # https://www.spinics.net/lists/arm-kernel/msg632925.html
Patch313: arm-crypto-sunxi-ss-Add-MODULE_ALIAS-to-sun4i-ss.patch Patch313: arm-crypto-sunxi-ss-Add-MODULE_ALIAS-to-sun4i-ss.patch
Patch314: bcm283x-gpio-expander.patch
# https://www.spinics.net/lists/arm-kernel/msg621982.html
Patch315: bcm283x-Fix-probing-of-bcm2835-i2s.patch
# https://www.spinics.net/lists/arm-kernel/msg633942.html
Patch316: mmc-sdhci-iproc-Disable-preset-values-for-BCM2835.patch
# https://www.spinics.net/lists/arm-kernel/msg633945.html
Patch317: bcm2835-hwrng-Handle-deferred-clock-properly.patch
# https://www.spinics.net/lists/linux-bluetooth/msg74414.html
Patch318: bcm2835-fix-bluetooth.patch
# 400 - IBM (ppc/s390x) patches # 400 - IBM (ppc/s390x) patches
# 500 - Temp fixes/CVEs etc # 500 - Temp fixes/CVEs etc
@ -1863,6 +1877,12 @@ fi
# #
# #
%changelog %changelog
* Sat Mar 3 2018 Peter Robinson <pbrobinson@fedoraproject.org>
- Add GPIO expander driver for Raspberry Pi 3
- Some Raspberry Pi fixes
- Switch OMAP serial driver to new 8250 driver
- General ARM updates
* Fri Mar 02 2018 Jeremy Cline <jeremy@jcline.org> - 4.16.0-0.rc3.git4.1 * Fri Mar 02 2018 Jeremy Cline <jeremy@jcline.org> - 4.16.0-0.rc3.git4.1
- Linux v4.16-rc3-245-g5d60e057d127 - Linux v4.16-rc3-245-g5d60e057d127

View File

@ -0,0 +1,37 @@
From patchwork Mon Feb 12 20:02:44 2018
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: mmc: sdhci-iproc: Disable preset values for BCM2835
From: Stefan Wahren <stefan.wahren@i2se.com>
X-Patchwork-Id: 10214367
Message-Id: <1518465764-30051-1-git-send-email-stefan.wahren@i2se.com>
To: Adrian Hunter <adrian.hunter@intel.com>,
Ulf Hansson <ulf.hansson@linaro.org>
Cc: Eric Anholt <eric@anholt.net>, Ray Jui <rjui@broadcom.com>,
Scott Branden <sbranden@broadcom.com>, Jon Mason <jonmason@broadcom.com>,
linux-arm-kernel@lists.infradead.org,
bcm-kernel-feedback-list@broadcom.com, linux-mmc@vger.kernel.org,
Stefan Wahren <stefan.wahren@i2se.com>
Date: Mon, 12 Feb 2018 21:02:44 +0100
According to the BCM2835 datasheet there are no preset value registers.
This wasn't an issue before, because we didn't propagate 1.8V support.
Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
---
drivers/mmc/host/sdhci-iproc.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/mmc/host/sdhci-iproc.c b/drivers/mmc/host/sdhci-iproc.c
index 61666d2..0ef741b 100644
--- a/drivers/mmc/host/sdhci-iproc.c
+++ b/drivers/mmc/host/sdhci-iproc.c
@@ -214,6 +214,7 @@ static const struct sdhci_pltfm_data sdhci_bcm2835_pltfm_data = {
SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK |
SDHCI_QUIRK_MISSING_CAPS |
SDHCI_QUIRK_NO_HISPD_BIT,
+ .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN,
.ops = &sdhci_iproc_32only_ops,
};