Merge pull request #1457 from anholt/rpi-4.4.y-vc4-hpd

Rpi 4.4.y: HDMI hotplug detection, overlay cleanup
This commit is contained in:
popcornmix
2016-05-10 12:19:24 +01:00
7 changed files with 152 additions and 91 deletions

View File

@@ -116,6 +116,10 @@
}; };
}; };
&hdmi {
hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>;
};
/ { / {
__overrides__ { __overrides__ {
uart0 = <&uart0>,"status"; uart0 = <&uart0>,"status";

View File

@@ -110,6 +110,10 @@
}; };
}; };
&hdmi {
hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>;
};
/ { / {
__overrides__ { __overrides__ {
uart0 = <&uart0>,"status"; uart0 = <&uart0>,"status";

View File

@@ -1,4 +1,7 @@
#include "dt-bindings/clock/bcm2835.h"
#include <dt-bindings/clock/bcm2835-aux.h> #include <dt-bindings/clock/bcm2835-aux.h>
#include "dt-bindings/power/raspberrypi-power.h"
#include "dt-bindings/gpio/gpio.h"
#include "skeleton.dtsi" #include "skeleton.dtsi"
/ { / {
@@ -170,6 +173,18 @@
status = "disabled"; status = "disabled";
}; };
pixelvalve0: pixelvalve@7e206000 {
compatible = "brcm,bcm2835-pixelvalve0";
reg = <0x7e206000 0x100>;
status = "disabled";
};
pixelvalve1: pixelvalve@7e207000 {
compatible = "brcm,bcm2835-pixelvalve1";
reg = <0x7e207000 0x100>;
status = "disabled";
};
pwm: pwm@7e20c000 { pwm: pwm@7e20c000 {
compatible = "brcm,bcm2835-pwm"; compatible = "brcm,bcm2835-pwm";
reg = <0x7e20c000 0x28>; reg = <0x7e20c000 0x28>;
@@ -227,6 +242,12 @@
status = "disabled"; status = "disabled";
}; };
hvs: hvs@7e400000 {
compatible = "brcm,bcm2835-hvs";
reg = <0x7e400000 0x6000>;
status = "disabled";
};
i2c1: i2c@7e804000 { i2c1: i2c@7e804000 {
compatible = "brcm,bcm2708-i2c"; compatible = "brcm,bcm2708-i2c";
reg = <0x7e804000 0x1000>; reg = <0x7e804000 0x1000>;
@@ -261,6 +282,25 @@
status = "disabled"; status = "disabled";
}; };
pixelvalve2: pixelvalve@7e807000 {
compatible = "brcm,bcm2835-pixelvalve2";
reg = <0x7e807000 0x100>;
status = "disabled";
};
hdmi: hdmi@7e902000 {
compatible = "brcm,bcm2835-hdmi";
reg = <0x7e902000 0x600>,
<0x7e808000 0x100>;
ddc = <&i2c2>;
hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>;
clocks = <&cprman BCM2835_PLLH_PIX>,
<&cprman BCM2835_CLOCK_HSM>;
clock-names = "pixel", "hdmi";
power-domains = <&power RPI_POWER_DOMAIN_HDMI>;
status = "disabled";
};
usb: usb@7e980000 { usb: usb@7e980000 {
compatible = "brcm,bcm2708-usb"; compatible = "brcm,bcm2708-usb";
reg = <0x7e980000 0x10000>, reg = <0x7e980000 0x10000>,
@@ -269,6 +309,12 @@
<1 9>; <1 9>;
}; };
v3d: v3d@7ec00000 {
compatible = "brcm,vc4-v3d";
reg = <0x7ec00000 0x1000>;
status = "disabled";
};
firmware: firmware { firmware: firmware {
compatible = "raspberrypi,bcm2835-firmware"; compatible = "raspberrypi,bcm2835-firmware";
mboxes = <&mailbox>; mboxes = <&mailbox>;
@@ -303,6 +349,11 @@
firmware = <&firmware>; firmware = <&firmware>;
}; };
gpu: gpu {
compatible = "brcm,bcm2835-vc4";
status = "disabled";
};
/* Onboard audio */ /* Onboard audio */
audio: audio { audio: audio {
compatible = "brcm,bcm2835-audio"; compatible = "brcm,bcm2835-audio";

View File

@@ -116,6 +116,10 @@
}; };
}; };
&hdmi {
hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>;
};
/ { / {
__overrides__ { __overrides__ {
uart0 = <&uart0>,"status"; uart0 = <&uart0>,"status";

View File

@@ -161,6 +161,10 @@
}; };
}; };
&hdmi {
hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>;
};
/ { / {
chosen { chosen {
bootargs = "8250.nr_uarts=1"; bootargs = "8250.nr_uarts=1";

View File

@@ -5,129 +5,125 @@
/dts-v1/; /dts-v1/;
/plugin/; /plugin/;
#include "dt-bindings/clock/bcm2835.h"
#include "dt-bindings/power/raspberrypi-power.h"
#include "dt-bindings/gpio/gpio.h"
/ { / {
compatible = "brcm,bcm2835", "brcm,bcm2708", "brcm,bcm2709"; compatible = "brcm,bcm2835", "brcm,bcm2708", "brcm,bcm2709";
fragment@0 { fragment@0 {
target = <&i2c2>;
__overlay__ {
status = "okay";
};
};
fragment@1 {
target = <&cprman>;
__overlay__ {
status = "okay";
};
};
fragment@2 {
target = <&fb>;
__overlay__ {
status = "disabled";
};
};
fragment@3 {
target = <&soc>;
__overlay__ {
#address-cells = <1>;
#size-cells = <1>;
pixelvalve@7e206000 {
compatible = "brcm,bcm2835-pixelvalve0";
reg = <0x7e206000 0x100>;
interrupts = <2 13>; /* pwa0 */
};
pixelvalve@7e207000 {
compatible = "brcm,bcm2835-pixelvalve1";
reg = <0x7e207000 0x100>;
interrupts = <2 14>; /* pwa1 */
};
hvs@7e400000 {
compatible = "brcm,bcm2835-hvs";
reg = <0x7e400000 0x6000>;
interrupts = <2 1>;
};
pixelvalve@7e807000 {
compatible = "brcm,bcm2835-pixelvalve2";
reg = <0x7e807000 0x100>;
interrupts = <2 10>; /* pixelvalve */
};
hdmi@7e902000 {
compatible = "brcm,bcm2835-hdmi";
reg = <0x7e902000 0x600>,
<0x7e808000 0x100>;
interrupts = <2 8>, <2 9>;
ddc = <&i2c2>;
hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>;
clocks = <&cprman BCM2835_PLLH_PIX>,
<&cprman BCM2835_CLOCK_HSM>;
clock-names = "pixel", "hdmi";
power-domains = <&power RPI_POWER_DOMAIN_HDMI>;
};
v3d@7ec00000 {
compatible = "brcm,vc4-v3d";
reg = <0x7ec00000 0x1000>;
interrupts = <1 10>;
};
gpu@7e4c0000 {
compatible = "brcm,bcm2835-vc4";
};
};
};
fragment@4 {
target-path = "/chosen"; target-path = "/chosen";
__overlay__ { __overlay__ {
bootargs = "cma=256M@256M"; bootargs = "cma=256M@256M";
}; };
}; };
fragment@5 { fragment@1 {
target-path = "/chosen"; target-path = "/chosen";
__dormant__ { __dormant__ {
bootargs = "cma=192M@256M"; bootargs = "cma=192M@256M";
}; };
}; };
fragment@6 { fragment@2 {
target-path = "/chosen"; target-path = "/chosen";
__dormant__ { __dormant__ {
bootargs = "cma=128M@128M"; bootargs = "cma=128M@128M";
}; };
}; };
fragment@7 { fragment@3 {
target-path = "/chosen"; target-path = "/chosen";
__dormant__ { __dormant__ {
bootargs = "cma=96M@128M"; bootargs = "cma=96M@128M";
}; };
}; };
fragment@8 { fragment@4 {
target-path = "/chosen"; target-path = "/chosen";
__dormant__ { __dormant__ {
bootargs = "cma=64M@64M"; bootargs = "cma=64M@64M";
}; };
}; };
fragment@5 {
target = <&i2c2>;
__overlay__ {
status = "okay";
};
};
fragment@6 {
target = <&cprman>;
__overlay__ {
status = "okay";
};
};
fragment@7 {
target = <&fb>;
__overlay__ {
status = "disabled";
};
};
fragment@8 {
target = <&pixelvalve0>;
__overlay__ {
interrupts = <2 13>; /* pwa0 */
status = "okay";
};
};
fragment@9 {
target = <&pixelvalve1>;
__overlay__ {
interrupts = <2 14>; /* pwa1 */
status = "okay";
};
};
fragment@10 {
target = <&pixelvalve2>;
__overlay__ {
interrupts = <2 10>; /* pixelvalve */
status = "okay";
};
};
fragment@11 {
target = <&hvs>;
__overlay__ {
interrupts = <2 1>;
status = "okay";
};
};
fragment@12 {
target = <&hdmi>;
__overlay__ {
interrupts = <2 8>, <2 9>;
status = "okay";
};
};
fragment@13 {
target = <&v3d>;
__overlay__ {
interrupts = <1 10>;
status = "okay";
};
};
fragment@14 {
target = <&gpu>;
__overlay__ {
status = "okay";
};
};
__overrides__ { __overrides__ {
cma-256 = <0>,"+4-5-6-7-8"; cma-256 = <0>,"+0-1-2-3-4";
cma-192 = <0>,"-4+5-6-7-8"; cma-192 = <0>,"-0+1-2-3-4";
cma-128 = <0>,"-4-5+6-7-8"; cma-128 = <0>,"-0-1+2-3-4";
cma-96 = <0>,"-4-5-6+7-8"; cma-96 = <0>,"-0-1-2+3-4";
cma-64 = <0>,"-4-5-6-7+8"; cma-64 = <0>,"-0-1-2-3+4";
}; };
}; };

View File

@@ -166,8 +166,6 @@ vc4_hdmi_connector_detect(struct drm_connector *connector, bool force)
struct drm_device *dev = connector->dev; struct drm_device *dev = connector->dev;
struct vc4_dev *vc4 = to_vc4_dev(dev); struct vc4_dev *vc4 = to_vc4_dev(dev);
return connector_status_connected;
if (vc4->hdmi->hpd_gpio) { if (vc4->hdmi->hpd_gpio) {
if (gpio_get_value_cansleep(vc4->hdmi->hpd_gpio) ^ if (gpio_get_value_cansleep(vc4->hdmi->hpd_gpio) ^
vc4->hdmi->hpd_active_low) vc4->hdmi->hpd_active_low)