mirror of
https://github.com/archr-linux/Arch-R.git
synced 2026-03-31 14:41:55 -07:00
Merge pull request #3761 from jernejsk/from-next
Allwinner: A64/H6 IR support and sort patches
This commit is contained in:
@@ -1,135 +0,0 @@
|
||||
From c642dca33a893b38770003f92de5708b2ef82878 Mon Sep 17 00:00:00 2001
|
||||
From: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
Date: Thu, 10 Jan 2019 20:00:25 +0100
|
||||
Subject: [PATCH 1/4] media: dt: bindings: sunxi-ir: Add A64 compatible
|
||||
|
||||
A64 IR is compatible with A13, so add A64 compatible with A13 as a
|
||||
fallback.
|
||||
|
||||
Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
---
|
||||
Documentation/devicetree/bindings/media/sunxi-ir.txt | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Documentation/devicetree/bindings/media/sunxi-ir.txt b/Documentation/devicetree/bindings/media/sunxi-ir.txt
|
||||
index 278098987edb..ecac6964b69b 100644
|
||||
--- a/Documentation/devicetree/bindings/media/sunxi-ir.txt
|
||||
+++ b/Documentation/devicetree/bindings/media/sunxi-ir.txt
|
||||
@@ -1,7 +1,10 @@
|
||||
Device-Tree bindings for SUNXI IR controller found in sunXi SoC family
|
||||
|
||||
Required properties:
|
||||
-- compatible : "allwinner,sun4i-a10-ir" or "allwinner,sun5i-a13-ir"
|
||||
+- compatible : value must be one of:
|
||||
+ * "allwinner,sun4i-a10-ir"
|
||||
+ * "allwinner,sun5i-a13-ir"
|
||||
+ * "allwinner,sun50i-a64-ir", "allwinner,sun5i-a13-ir"
|
||||
- clocks : list of clock specifiers, corresponding to
|
||||
entries in clock-names property;
|
||||
- clock-names : should contain "apb" and "ir" entries;
|
||||
--
|
||||
2.20.1
|
||||
|
||||
|
||||
From 85923b765bbd31be033a7b7d8bf0018accb386dd Mon Sep 17 00:00:00 2001
|
||||
From: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
Date: Thu, 10 Jan 2019 20:50:15 +0100
|
||||
Subject: [PATCH 2/4] arm64: dts: allwinner: a64: Add IR pinmux
|
||||
|
||||
IR on A64 has a dedicated pin. Add pinmux setting for it.
|
||||
|
||||
Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
---
|
||||
arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
|
||||
index 839b2ae88583..86ff1d3a4ffa 100644
|
||||
--- a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
|
||||
+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
|
||||
@@ -1043,6 +1043,11 @@
|
||||
function = "s_i2c";
|
||||
};
|
||||
|
||||
+ r_ir_pins: ir-pins {
|
||||
+ pins = "PL11";
|
||||
+ function = "s_cir_rx";
|
||||
+ };
|
||||
+
|
||||
r_pwm_pin: r-pwm-pin {
|
||||
pins = "PL10";
|
||||
function = "s_pwm";
|
||||
--
|
||||
2.20.1
|
||||
|
||||
|
||||
From 943855104927268a641bd4f5f35c0592398e39ec Mon Sep 17 00:00:00 2001
|
||||
From: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
Date: Thu, 10 Jan 2019 20:19:32 +0100
|
||||
Subject: [PATCH 3/4] arm64: dts: allwinner: a64: Add IR node
|
||||
|
||||
IR is similar to that in A13 and can use same driver.
|
||||
|
||||
Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
---
|
||||
arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi | 11 +++++++++++
|
||||
1 file changed, 11 insertions(+)
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
|
||||
index 86ff1d3a4ffa..8238caedd90e 100644
|
||||
--- a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
|
||||
+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
|
||||
@@ -1004,6 +1004,17 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
+ r_ir: ir@1f02000 {
|
||||
+ compatible = "allwinner,sun50i-a64-ir",
|
||||
+ "allwinner,sun5i-a13-ir";
|
||||
+ reg = <0x01f02000 0x400>;
|
||||
+ clocks = <&r_ccu CLK_APB0_IR>, <&r_ccu CLK_IR>;
|
||||
+ clock-names = "apb", "ir";
|
||||
+ resets = <&r_ccu RST_APB0_IR>;
|
||||
+ interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>;
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
+
|
||||
r_i2c: i2c@1f02400 {
|
||||
compatible = "allwinner,sun50i-a64-i2c",
|
||||
"allwinner,sun6i-a31-i2c";
|
||||
--
|
||||
2.20.1
|
||||
|
||||
|
||||
From 3020e7d85fe574cda8e6803330ffd75fffdbbf6b Mon Sep 17 00:00:00 2001
|
||||
From: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
Date: Thu, 10 Jan 2019 20:25:18 +0100
|
||||
Subject: [PATCH 4/4] arm64: dts: allwinner: a64: Orange Pi Win: Enable IR
|
||||
|
||||
OrangePi Win board contains IR receiver. Enable it.
|
||||
|
||||
Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
---
|
||||
arch/arm64/boot/dts/allwinner/sun50i-a64-orangepi-win.dts | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-orangepi-win.dts b/arch/arm64/boot/dts/allwinner/sun50i-a64-orangepi-win.dts
|
||||
index b0c64f75792c..c6c759511f5e 100644
|
||||
--- a/arch/arm64/boot/dts/allwinner/sun50i-a64-orangepi-win.dts
|
||||
+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-orangepi-win.dts
|
||||
@@ -144,6 +144,12 @@
|
||||
};
|
||||
};
|
||||
|
||||
+&r_ir {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&r_ir_pins>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
&mdio {
|
||||
ext_rgmii_phy: ethernet-phy@1 {
|
||||
compatible = "ethernet-phy-ieee802.3-c22";
|
||||
--
|
||||
2.20.1
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -367,223 +367,6 @@ index 17d4969901086..6d6b1f66796d9 100644
|
||||
vmmc-supply = <®_cldo1>;
|
||||
cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>; /* PF6 */
|
||||
|
||||
From b641bc59468e93ab57fd016ad36b037f3890b994 Mon Sep 17 00:00:00 2001
|
||||
From: Ondrej Jirman <megous@megous.com>
|
||||
Date: Tue, 26 Mar 2019 15:06:37 +0100
|
||||
Subject: [PATCH 15/34] drm: sun4i: Add support for enabling DDC I2C bus power
|
||||
to dw_hdmi glue
|
||||
|
||||
Orange Pi 3 board requires enabling DDC I2C bus via some GPIO connected
|
||||
transistors, before the bus can be used.
|
||||
|
||||
Model this as a power supply for DDC bus on the HDMI connector connected
|
||||
to the output port (port 1) of the HDMI controller.
|
||||
|
||||
Signed-off-by: Ondrej Jirman <megous@megous.com>
|
||||
---
|
||||
drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c | 60 ++++++++++++++++++++++++++-
|
||||
drivers/gpu/drm/sun4i/sun8i_dw_hdmi.h | 2 +
|
||||
2 files changed, 60 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c b/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c
|
||||
index 39d8509d96a0d..1b6ffba41177f 100644
|
||||
--- a/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c
|
||||
+++ b/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c
|
||||
@@ -98,6 +98,30 @@ static u32 sun8i_dw_hdmi_find_possible_crtcs(struct drm_device *drm,
|
||||
return crtcs;
|
||||
}
|
||||
|
||||
+static int sun8i_dw_hdmi_find_connector_pdev(struct device *dev,
|
||||
+ struct platform_device **pdev_out)
|
||||
+{
|
||||
+ struct platform_device* pdev;
|
||||
+ struct device_node *remote;
|
||||
+
|
||||
+ remote = of_graph_get_remote_node(dev->of_node, 1, -1);
|
||||
+ if (!remote)
|
||||
+ return -ENODEV;
|
||||
+
|
||||
+ if (!of_device_is_compatible(remote, "hdmi-connector")) {
|
||||
+ of_node_put(remote);
|
||||
+ return -ENODEV;
|
||||
+ }
|
||||
+
|
||||
+ pdev = of_find_device_by_node(remote);
|
||||
+ of_node_put(remote);
|
||||
+ if (!pdev)
|
||||
+ return -ENODEV;
|
||||
+
|
||||
+ *pdev_out = pdev;
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int sun8i_dw_hdmi_bind(struct device *dev, struct device *master,
|
||||
void *data)
|
||||
{
|
||||
@@ -151,16 +175,34 @@ static int sun8i_dw_hdmi_bind(struct device *dev, struct device *master,
|
||||
return PTR_ERR(hdmi->regulator);
|
||||
}
|
||||
|
||||
+ ret = sun8i_dw_hdmi_find_connector_pdev(dev, &hdmi->connector_pdev);
|
||||
+ if (!ret) {
|
||||
+ hdmi->ddc_regulator = regulator_get(&hdmi->connector_pdev->dev, "ddc");
|
||||
+ if (IS_ERR(hdmi->ddc_regulator)) {
|
||||
+ platform_device_put(hdmi->connector_pdev);
|
||||
+ dev_err(dev, "Couldn't get ddc regulator\n");
|
||||
+ return PTR_ERR(hdmi->ddc_regulator);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
ret = regulator_enable(hdmi->regulator);
|
||||
if (ret) {
|
||||
dev_err(dev, "Failed to enable regulator\n");
|
||||
- return ret;
|
||||
+ goto err_unref_ddc_regulator;
|
||||
+ }
|
||||
+
|
||||
+ if (hdmi->ddc_regulator) {
|
||||
+ ret = regulator_enable(hdmi->ddc_regulator);
|
||||
+ if (ret) {
|
||||
+ dev_err(dev, "Failed to enable ddc regulator\n");
|
||||
+ goto err_disable_regulator;
|
||||
+ }
|
||||
}
|
||||
|
||||
ret = reset_control_deassert(hdmi->rst_ctrl);
|
||||
if (ret) {
|
||||
dev_err(dev, "Could not deassert ctrl reset control\n");
|
||||
- goto err_disable_regulator;
|
||||
+ goto err_disable_ddc_regulator;
|
||||
}
|
||||
|
||||
ret = clk_prepare_enable(hdmi->clk_tmds);
|
||||
@@ -213,8 +255,15 @@ static int sun8i_dw_hdmi_bind(struct device *dev, struct device *master,
|
||||
clk_disable_unprepare(hdmi->clk_tmds);
|
||||
err_assert_ctrl_reset:
|
||||
reset_control_assert(hdmi->rst_ctrl);
|
||||
+err_disable_ddc_regulator:
|
||||
+ if (hdmi->ddc_regulator)
|
||||
+ regulator_disable(hdmi->ddc_regulator);
|
||||
err_disable_regulator:
|
||||
regulator_disable(hdmi->regulator);
|
||||
+err_unref_ddc_regulator:
|
||||
+ if (hdmi->ddc_regulator)
|
||||
+ regulator_put(hdmi->ddc_regulator);
|
||||
+ platform_device_put(hdmi->connector_pdev);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -229,6 +278,13 @@ static void sun8i_dw_hdmi_unbind(struct device *dev, struct device *master,
|
||||
clk_disable_unprepare(hdmi->clk_tmds);
|
||||
reset_control_assert(hdmi->rst_ctrl);
|
||||
regulator_disable(hdmi->regulator);
|
||||
+
|
||||
+ if (hdmi->ddc_regulator) {
|
||||
+ regulator_disable(hdmi->ddc_regulator);
|
||||
+ regulator_put(hdmi->ddc_regulator);
|
||||
+ }
|
||||
+
|
||||
+ platform_device_put(hdmi->connector_pdev);
|
||||
}
|
||||
|
||||
static const struct component_ops sun8i_dw_hdmi_ops = {
|
||||
diff --git a/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.h b/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.h
|
||||
index 720c5aa8adc14..60f5200aee73b 100644
|
||||
--- a/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.h
|
||||
+++ b/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.h
|
||||
@@ -188,8 +188,10 @@ struct sun8i_dw_hdmi {
|
||||
struct sun8i_hdmi_phy *phy;
|
||||
struct dw_hdmi_plat_data plat_data;
|
||||
struct regulator *regulator;
|
||||
+ struct regulator *ddc_regulator;
|
||||
const struct sun8i_dw_hdmi_quirks *quirks;
|
||||
struct reset_control *rst_ctrl;
|
||||
+ struct platform_device *connector_pdev;
|
||||
};
|
||||
|
||||
static inline struct sun8i_dw_hdmi *
|
||||
|
||||
From c1d7c7796ea7e76829c71b993c7531f23c0f5913 Mon Sep 17 00:00:00 2001
|
||||
From: Ondrej Jirman <megous@megous.com>
|
||||
Date: Tue, 9 Apr 2019 01:41:58 +0200
|
||||
Subject: [PATCH 16/34] arm64: dts: allwinner: orange-pi-3: Enable HDMI output
|
||||
|
||||
Orange Pi 3 has a DDC_CEC_EN signal connected to PH2, that enables the DDC
|
||||
I2C bus voltage shifter. Before EDID can be read, we need to pull PH2 high.
|
||||
|
||||
Signed-off-by: Ondrej Jirman <megous@megous.com>
|
||||
---
|
||||
.../dts/allwinner/sun50i-h6-orangepi-3.dts | 35 +++++++++++++++++++
|
||||
1 file changed, 35 insertions(+)
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h6-orangepi-3.dts b/arch/arm64/boot/dts/allwinner/sun50i-h6-orangepi-3.dts
|
||||
index 6d6b1f66796d9..58a6635c909e3 100644
|
||||
--- a/arch/arm64/boot/dts/allwinner/sun50i-h6-orangepi-3.dts
|
||||
+++ b/arch/arm64/boot/dts/allwinner/sun50i-h6-orangepi-3.dts
|
||||
@@ -22,6 +22,18 @@
|
||||
stdout-path = "serial0:115200n8";
|
||||
};
|
||||
|
||||
+ connector {
|
||||
+ compatible = "hdmi-connector";
|
||||
+ type = "a";
|
||||
+ ddc-supply = <®_ddc>;
|
||||
+
|
||||
+ port {
|
||||
+ hdmi_con_in: endpoint {
|
||||
+ remote-endpoint = <&hdmi_out_con>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
|
||||
@@ -37,6 +49,15 @@
|
||||
};
|
||||
};
|
||||
|
||||
+ reg_ddc: ddc-io {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "ddc-io";
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5000000>;
|
||||
+ enable-active-high;
|
||||
+ gpio = <&pio 7 2 GPIO_ACTIVE_HIGH>; /* PH2 */
|
||||
+ };
|
||||
+
|
||||
reg_vcc5v: vcc5v {
|
||||
/* board wide 5V supply directly from the DC jack */
|
||||
compatible = "regulator-fixed";
|
||||
@@ -72,6 +93,10 @@
|
||||
cpu-supply = <®_dcdca>;
|
||||
};
|
||||
|
||||
+&de {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
&ehci0 {
|
||||
status = "okay";
|
||||
};
|
||||
@@ -91,6 +116,16 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
+&hdmi {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&hdmi_out {
|
||||
+ hdmi_out_con: endpoint {
|
||||
+ remote-endpoint = <&hdmi_con_in>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
&mdio {
|
||||
ext_rgmii_phy: ethernet-phy@1 {
|
||||
compatible = "ethernet-phy-ieee802.3-c22";
|
||||
|
||||
From 200cf18794214700f023440021cb7fd40dcc0f01 Mon Sep 17 00:00:00 2001
|
||||
From: Ondrej Jirman <megous@megous.com>
|
||||
Date: Tue, 9 Apr 2019 00:16:35 +0200
|
||||
|
||||
@@ -2,7 +2,7 @@ diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h6-orangepi-one-plus.dts b/arc
|
||||
index 12e17567ab56..fd9dcefcd223 100644
|
||||
--- a/arch/arm64/boot/dts/allwinner/sun50i-h6-orangepi-one-plus.dts
|
||||
+++ b/arch/arm64/boot/dts/allwinner/sun50i-h6-orangepi-one-plus.dts
|
||||
@@ -9,4 +9,86 @@
|
||||
@@ -9,4 +9,77 @@
|
||||
/ {
|
||||
model = "OrangePi One Plus";
|
||||
compatible = "xunlong,orangepi-one-plus", "allwinner,sun50i-h6";
|
||||
@@ -14,7 +14,7 @@ index 12e17567ab56..fd9dcefcd223 100644
|
||||
+ connector {
|
||||
+ compatible = "hdmi-connector";
|
||||
+ type = "a";
|
||||
+ ddc-supply = <®_ddc>;
|
||||
+ ddc-en-gpios = <&pio 7 2 GPIO_ACTIVE_HIGH>; /* PH2 */
|
||||
+
|
||||
+ port {
|
||||
+ hdmi_con_in: endpoint {
|
||||
@@ -23,15 +23,6 @@ index 12e17567ab56..fd9dcefcd223 100644
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ reg_ddc: ddc-io {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "ddc-io";
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5000000>;
|
||||
+ enable-active-high;
|
||||
+ gpio = <&pio 7 2 GPIO_ACTIVE_HIGH>; /* PH2 */
|
||||
+ };
|
||||
+
|
||||
+ reg_gmac_3v3: gmac-3v3 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "vcc-gmac-3v3";
|
||||
|
||||
@@ -38,3 +38,30 @@ index 0dc33c90dd60..ef595e6a0cd6 100644
|
||||
--
|
||||
2.20.1
|
||||
|
||||
From: =?utf-8?b?Q2zDqW1lbnQgUMOpcm9u?= <peron.clem@gmail.com>
|
||||
Subject: [PATCH] arm64: dts: allwinner: Enable DDC regulator for Beelink GS1
|
||||
Date: Mon, 12 Aug 2019 12:23:55 +0200
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
|
||||
Beelink GS1 has a DDC I2C bus voltage shifter. This is actually missing
|
||||
and video is limited to 1024x768 due to missing EDID information.
|
||||
|
||||
Add the DDC regulator in the device-tree.
|
||||
|
||||
Signed-off-by: Clément Péron <peron.clem@gmail.com>
|
||||
---
|
||||
arch/arm64/boot/dts/allwinner/sun50i-h6-beelink-gs1.dts | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h6-beelink-gs1.dts b/arch/arm64/boot/dts/allwinner/sun50i-h6-beelink-gs1.dts
|
||||
index 680dc29cb089..67d7f269c5da 100644
|
||||
--- a/arch/arm64/boot/dts/allwinner/sun50i-h6-beelink-gs1.dts
|
||||
+++ b/arch/arm64/boot/dts/allwinner/sun50i-h6-beelink-gs1.dts
|
||||
@@ -25,6 +25,7 @@
|
||||
connector {
|
||||
compatible = "hdmi-connector";
|
||||
type = "a";
|
||||
+ ddc-en-gpios = <&pio 7 2 GPIO_ACTIVE_HIGH>; /* PH2 */
|
||||
|
||||
port {
|
||||
hdmi_con_in: endpoint {
|
||||
@@ -1,40 +0,0 @@
|
||||
From ad3b90a4e8009cc87cfdaf1bf08ba7fd85422b17 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Cl=C3=A9ment=20P=C3=A9ron?= <peron.clem@gmail.com>
|
||||
Date: Sun, 11 Aug 2019 19:34:25 +0200
|
||||
Subject: [PATCH] ARM: dts: allwinner: Beelink GS1 enable DDC regulator
|
||||
|
||||
---
|
||||
.../arm64/boot/dts/allwinner/sun50i-h6-beelink-gs1.dts | 10 ++++++++++
|
||||
1 file changed, 10 insertions(+)
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h6-beelink-gs1.dts b/arch/arm64/boot/dts/allwinner/sun50i-h6-beelink-gs1.dts
|
||||
index 680dc29cb089..bc67dda37690 100644
|
||||
--- a/arch/arm64/boot/dts/allwinner/sun50i-h6-beelink-gs1.dts
|
||||
+++ b/arch/arm64/boot/dts/allwinner/sun50i-h6-beelink-gs1.dts
|
||||
@@ -25,6 +25,7 @@
|
||||
connector {
|
||||
compatible = "hdmi-connector";
|
||||
type = "a";
|
||||
+ ddc-supply = <®_ddc>;
|
||||
|
||||
port {
|
||||
hdmi_con_in: endpoint {
|
||||
@@ -43,6 +44,15 @@
|
||||
};
|
||||
};
|
||||
|
||||
+ reg_ddc: ddc-io {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ regulator-name = "ddc-io";
|
||||
+ regulator-min-microvolt = <5000000>;
|
||||
+ regulator-max-microvolt = <5000000>;
|
||||
+ enable-active-high;
|
||||
+ gpio = <&pio 7 2 GPIO_ACTIVE_HIGH>; /* PH2 */
|
||||
+ };
|
||||
+
|
||||
reg_vcc5v: vcc5v {
|
||||
/* board wide 5V supply directly from the DC jack */
|
||||
compatible = "regulator-fixed";
|
||||
--
|
||||
2.20.1
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
1224
projects/Allwinner/patches/linux/0003-backport-from-5.4.patch
Normal file
1224
projects/Allwinner/patches/linux/0003-backport-from-5.4.patch
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,417 +0,0 @@
|
||||
From fc81bf6b49bea503653e5cdba5392ffd878c1453 Mon Sep 17 00:00:00 2001
|
||||
From: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
Date: Thu, 27 Jun 2019 19:30:44 +0200
|
||||
Subject: [PATCH 1/4] drm/sun4i: Introduce color encoding and range properties
|
||||
|
||||
In order to correctly convert YUV color space to RGB, we have to know
|
||||
color encoding and range.
|
||||
|
||||
Introduce these two properties using helper method.
|
||||
|
||||
Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
---
|
||||
drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 17 +++++++++++++++++
|
||||
1 file changed, 17 insertions(+)
|
||||
|
||||
diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
|
||||
index bd0e6a52d1d8..240a800217df 100644
|
||||
--- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
|
||||
+++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
|
||||
@@ -441,6 +441,7 @@ struct sun8i_vi_layer *sun8i_vi_layer_init_one(struct drm_device *drm,
|
||||
struct sun8i_mixer *mixer,
|
||||
int index)
|
||||
{
|
||||
+ u32 supported_encodings, supported_ranges;
|
||||
struct sun8i_vi_layer *layer;
|
||||
unsigned int plane_cnt;
|
||||
int ret;
|
||||
@@ -469,6 +470,22 @@ struct sun8i_vi_layer *sun8i_vi_layer_init_one(struct drm_device *drm,
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
+ supported_encodings = BIT(DRM_COLOR_YCBCR_BT601) |
|
||||
+ BIT(DRM_COLOR_YCBCR_BT709);
|
||||
+
|
||||
+ supported_ranges = BIT(DRM_COLOR_YCBCR_LIMITED_RANGE) |
|
||||
+ BIT(DRM_COLOR_YCBCR_FULL_RANGE);
|
||||
+
|
||||
+ ret = drm_plane_create_color_properties(&layer->plane,
|
||||
+ supported_encodings,
|
||||
+ supported_ranges,
|
||||
+ DRM_COLOR_YCBCR_BT709,
|
||||
+ DRM_COLOR_YCBCR_LIMITED_RANGE);
|
||||
+ if (ret) {
|
||||
+ dev_err(drm->dev, "Couldn't add encoding and range properties!\n");
|
||||
+ return ERR_PTR(ret);
|
||||
+ }
|
||||
+
|
||||
drm_plane_helper_add(&layer->plane, &sun8i_vi_layer_helper_funcs);
|
||||
layer->mixer = mixer;
|
||||
layer->channel = index;
|
||||
--
|
||||
2.22.0
|
||||
|
||||
|
||||
From 0067d439358510393ac42d454a2c9efee2546cd9 Mon Sep 17 00:00:00 2001
|
||||
From: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
Date: Thu, 27 Jun 2019 19:33:54 +0200
|
||||
Subject: [PATCH 2/4] drm/sun4i: sun8i_csc: Simplify register writes
|
||||
|
||||
It turns out addition of 0x200 to constant parts (+0.5) is not really
|
||||
necessary. Besides, we can consider that before and fix value in CSC
|
||||
matrix.
|
||||
|
||||
This simplifies register writes quiet a bit.
|
||||
|
||||
Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
---
|
||||
drivers/gpu/drm/sun4i/sun8i_csc.c | 11 +++--------
|
||||
1 file changed, 3 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/sun4i/sun8i_csc.c b/drivers/gpu/drm/sun4i/sun8i_csc.c
|
||||
index b8c059f1a118..e07b7876d89b 100644
|
||||
--- a/drivers/gpu/drm/sun4i/sun8i_csc.c
|
||||
+++ b/drivers/gpu/drm/sun4i/sun8i_csc.c
|
||||
@@ -69,7 +69,7 @@ static void sun8i_csc_set_coefficients(struct regmap *map, u32 base,
|
||||
enum sun8i_csc_mode mode)
|
||||
{
|
||||
const u32 *table;
|
||||
- int i, data;
|
||||
+ u32 base_reg;
|
||||
|
||||
switch (mode) {
|
||||
case SUN8I_CSC_MODE_YUV2RGB:
|
||||
@@ -83,13 +83,8 @@ static void sun8i_csc_set_coefficients(struct regmap *map, u32 base,
|
||||
return;
|
||||
}
|
||||
|
||||
- for (i = 0; i < 12; i++) {
|
||||
- data = table[i];
|
||||
- /* For some reason, 0x200 must be added to constant parts */
|
||||
- if (((i + 1) & 3) == 0)
|
||||
- data += 0x200;
|
||||
- regmap_write(map, SUN8I_CSC_COEFF(base, i), data);
|
||||
- }
|
||||
+ base_reg = SUN8I_CSC_COEFF(base, 0);
|
||||
+ regmap_bulk_write(map, base_reg, table, 12);
|
||||
}
|
||||
|
||||
static void sun8i_de3_ccsc_set_coefficients(struct regmap *map, int layer,
|
||||
--
|
||||
2.22.0
|
||||
|
||||
|
||||
From b0533429bd778930fa71683f9f8b241895b9e239 Mon Sep 17 00:00:00 2001
|
||||
From: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
Date: Thu, 27 Jun 2019 19:21:16 +0200
|
||||
Subject: [PATCH 3/4] drm/sun4i: sun8i-csc: Add support for color encoding and
|
||||
range
|
||||
|
||||
Conversion from YUV to RGB depends on range (limited or full) and
|
||||
encoding (BT.601 or BT.709). Current code doesn't consider this and
|
||||
always uses BT.601 encoding and limited range.
|
||||
|
||||
Fix this by introducing new CSC matrices, which are selected based on
|
||||
range and encoding parameters.
|
||||
|
||||
Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
---
|
||||
drivers/gpu/drm/sun4i/sun8i_csc.c | 144 ++++++++++++++++++++-----
|
||||
drivers/gpu/drm/sun4i/sun8i_csc.h | 6 +-
|
||||
drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 4 +-
|
||||
3 files changed, 126 insertions(+), 28 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/sun4i/sun8i_csc.c b/drivers/gpu/drm/sun4i/sun8i_csc.c
|
||||
index e07b7876d89b..70c792d052fe 100644
|
||||
--- a/drivers/gpu/drm/sun4i/sun8i_csc.c
|
||||
+++ b/drivers/gpu/drm/sun4i/sun8i_csc.c
|
||||
@@ -18,16 +18,59 @@ static const u32 ccsc_base[2][2] = {
|
||||
* First tree values in each line are multiplication factor and last
|
||||
* value is constant, which is added at the end.
|
||||
*/
|
||||
-static const u32 yuv2rgb[] = {
|
||||
- 0x000004A8, 0x00000000, 0x00000662, 0xFFFC845A,
|
||||
- 0x000004A8, 0xFFFFFE6F, 0xFFFFFCBF, 0x00021DF4,
|
||||
- 0x000004A8, 0x00000813, 0x00000000, 0xFFFBAC4A,
|
||||
+
|
||||
+static const u32 yuv2rgb[2][2][12] = {
|
||||
+ [DRM_COLOR_YCBCR_LIMITED_RANGE] = {
|
||||
+ [DRM_COLOR_YCBCR_BT601] = {
|
||||
+ 0x000004A8, 0x00000000, 0x00000662, 0xFFFC8451,
|
||||
+ 0x000004A8, 0xFFFFFE6F, 0xFFFFFCC0, 0x00021E4D,
|
||||
+ 0x000004A8, 0x00000811, 0x00000000, 0xFFFBACA9,
|
||||
+ },
|
||||
+ [DRM_COLOR_YCBCR_BT709] = {
|
||||
+ 0x000004A8, 0x00000000, 0x0000072B, 0xFFFC1F99,
|
||||
+ 0x000004A8, 0xFFFFFF26, 0xFFFFFDDF, 0x00013383,
|
||||
+ 0x000004A8, 0x00000873, 0x00000000, 0xFFFB7BEF,
|
||||
+ }
|
||||
+ },
|
||||
+ [DRM_COLOR_YCBCR_FULL_RANGE] = {
|
||||
+ [DRM_COLOR_YCBCR_BT601] = {
|
||||
+ 0x00000400, 0x00000000, 0x0000059B, 0xFFFD322E,
|
||||
+ 0x00000400, 0xFFFFFEA0, 0xFFFFFD25, 0x00021DD5,
|
||||
+ 0x00000400, 0x00000716, 0x00000000, 0xFFFC74BD,
|
||||
+ },
|
||||
+ [DRM_COLOR_YCBCR_BT709] = {
|
||||
+ 0x00000400, 0x00000000, 0x0000064C, 0xFFFCD9B4,
|
||||
+ 0x00000400, 0xFFFFFF41, 0xFFFFFE21, 0x00014F96,
|
||||
+ 0x00000400, 0x0000076C, 0x00000000, 0xFFFC49EF,
|
||||
+ }
|
||||
+ },
|
||||
};
|
||||
|
||||
-static const u32 yvu2rgb[] = {
|
||||
- 0x000004A8, 0x00000662, 0x00000000, 0xFFFC845A,
|
||||
- 0x000004A8, 0xFFFFFCBF, 0xFFFFFE6F, 0x00021DF4,
|
||||
- 0x000004A8, 0x00000000, 0x00000813, 0xFFFBAC4A,
|
||||
+static const u32 yvu2rgb[2][2][12] = {
|
||||
+ [DRM_COLOR_YCBCR_LIMITED_RANGE] = {
|
||||
+ [DRM_COLOR_YCBCR_BT601] = {
|
||||
+ 0x000004A8, 0x00000662, 0x00000000, 0xFFFC8451,
|
||||
+ 0x000004A8, 0xFFFFFCC0, 0xFFFFFE6F, 0x00021E4D,
|
||||
+ 0x000004A8, 0x00000000, 0x00000811, 0xFFFBACA9,
|
||||
+ },
|
||||
+ [DRM_COLOR_YCBCR_BT709] = {
|
||||
+ 0x000004A8, 0x0000072B, 0x00000000, 0xFFFC1F99,
|
||||
+ 0x000004A8, 0xFFFFFDDF, 0xFFFFFF26, 0x00013383,
|
||||
+ 0x000004A8, 0x00000000, 0x00000873, 0xFFFB7BEF,
|
||||
+ }
|
||||
+ },
|
||||
+ [DRM_COLOR_YCBCR_FULL_RANGE] = {
|
||||
+ [DRM_COLOR_YCBCR_BT601] = {
|
||||
+ 0x00000400, 0x0000059B, 0x00000000, 0xFFFD322E,
|
||||
+ 0x00000400, 0xFFFFFD25, 0xFFFFFEA0, 0x00021DD5,
|
||||
+ 0x00000400, 0x00000000, 0x00000716, 0xFFFC74BD,
|
||||
+ },
|
||||
+ [DRM_COLOR_YCBCR_BT709] = {
|
||||
+ 0x00000400, 0x0000064C, 0x00000000, 0xFFFCD9B4,
|
||||
+ 0x00000400, 0xFFFFFE21, 0xFFFFFF41, 0x00014F96,
|
||||
+ 0x00000400, 0x00000000, 0x0000076C, 0xFFFC49EF,
|
||||
+ }
|
||||
+ },
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -53,30 +96,74 @@ static const u32 yvu2rgb[] = {
|
||||
* c20 c21 c22 [d2 const2]
|
||||
*/
|
||||
|
||||
-static const u32 yuv2rgb_de3[] = {
|
||||
- 0x0002542a, 0x00000000, 0x0003312a, 0xffc00000,
|
||||
- 0x0002542a, 0xffff376b, 0xfffe5fc3, 0xfe000000,
|
||||
- 0x0002542a, 0x000408d3, 0x00000000, 0xfe000000,
|
||||
+static const u32 yuv2rgb_de3[2][2][12] = {
|
||||
+ [DRM_COLOR_YCBCR_LIMITED_RANGE] = {
|
||||
+ [DRM_COLOR_YCBCR_BT601] = {
|
||||
+ 0x0002542A, 0x00000000, 0x0003312A, 0xFFC00000,
|
||||
+ 0x0002542A, 0xFFFF376B, 0xFFFE5FC3, 0xFE000000,
|
||||
+ 0x0002542A, 0x000408D2, 0x00000000, 0xFE000000,
|
||||
+ },
|
||||
+ [DRM_COLOR_YCBCR_BT709] = {
|
||||
+ 0x0002542A, 0x00000000, 0x000395E2, 0xFFC00000,
|
||||
+ 0x0002542A, 0xFFFF92D2, 0xFFFEEF27, 0xFE000000,
|
||||
+ 0x0002542A, 0x0004398C, 0x00000000, 0xFE000000,
|
||||
+ }
|
||||
+ },
|
||||
+ [DRM_COLOR_YCBCR_FULL_RANGE] = {
|
||||
+ [DRM_COLOR_YCBCR_BT601] = {
|
||||
+ 0x00020000, 0x00000000, 0x0002CDD2, 0x00000000,
|
||||
+ 0x00020000, 0xFFFF4FCE, 0xFFFE925D, 0xFE000000,
|
||||
+ 0x00020000, 0x00038B43, 0x00000000, 0xFE000000,
|
||||
+ },
|
||||
+ [DRM_COLOR_YCBCR_BT709] = {
|
||||
+ 0x00020000, 0x00000000, 0x0003264C, 0x00000000,
|
||||
+ 0x00020000, 0xFFFFA018, 0xFFFF1053, 0xFE000000,
|
||||
+ 0x00020000, 0x0003B611, 0x00000000, 0xFE000000,
|
||||
+ }
|
||||
+ },
|
||||
};
|
||||
|
||||
-static const u32 yvu2rgb_de3[] = {
|
||||
- 0x0002542a, 0x0003312a, 0x00000000, 0xffc00000,
|
||||
- 0x0002542a, 0xfffe5fc3, 0xffff376b, 0xfe000000,
|
||||
- 0x0002542a, 0x00000000, 0x000408d3, 0xfe000000,
|
||||
+static const u32 yvu2rgb_de3[2][2][12] = {
|
||||
+ [DRM_COLOR_YCBCR_LIMITED_RANGE] = {
|
||||
+ [DRM_COLOR_YCBCR_BT601] = {
|
||||
+ 0x0002542A, 0x0003312A, 0x00000000, 0xFFC00000,
|
||||
+ 0x0002542A, 0xFFFE5FC3, 0xFFFF376B, 0xFE000000,
|
||||
+ 0x0002542A, 0x00000000, 0x000408D2, 0xFE000000,
|
||||
+ },
|
||||
+ [DRM_COLOR_YCBCR_BT709] = {
|
||||
+ 0x0002542A, 0x000395E2, 0x00000000, 0xFFC00000,
|
||||
+ 0x0002542A, 0xFFFEEF27, 0xFFFF92D2, 0xFE000000,
|
||||
+ 0x0002542A, 0x00000000, 0x0004398C, 0xFE000000,
|
||||
+ }
|
||||
+ },
|
||||
+ [DRM_COLOR_YCBCR_FULL_RANGE] = {
|
||||
+ [DRM_COLOR_YCBCR_BT601] = {
|
||||
+ 0x00020000, 0x0002CDD2, 0x00000000, 0x00000000,
|
||||
+ 0x00020000, 0xFFFE925D, 0xFFFF4FCE, 0xFE000000,
|
||||
+ 0x00020000, 0x00000000, 0x00038B43, 0xFE000000,
|
||||
+ },
|
||||
+ [DRM_COLOR_YCBCR_BT709] = {
|
||||
+ 0x00020000, 0x0003264C, 0x00000000, 0x00000000,
|
||||
+ 0x00020000, 0xFFFF1053, 0xFFFFA018, 0xFE000000,
|
||||
+ 0x00020000, 0x00000000, 0x0003B611, 0xFE000000,
|
||||
+ }
|
||||
+ },
|
||||
};
|
||||
|
||||
static void sun8i_csc_set_coefficients(struct regmap *map, u32 base,
|
||||
- enum sun8i_csc_mode mode)
|
||||
+ enum sun8i_csc_mode mode,
|
||||
+ enum drm_color_encoding encoding,
|
||||
+ enum drm_color_range range)
|
||||
{
|
||||
const u32 *table;
|
||||
u32 base_reg;
|
||||
|
||||
switch (mode) {
|
||||
case SUN8I_CSC_MODE_YUV2RGB:
|
||||
- table = yuv2rgb;
|
||||
+ table = yuv2rgb[range][encoding];
|
||||
break;
|
||||
case SUN8I_CSC_MODE_YVU2RGB:
|
||||
- table = yvu2rgb;
|
||||
+ table = yvu2rgb[range][encoding];
|
||||
break;
|
||||
default:
|
||||
DRM_WARN("Wrong CSC mode specified.\n");
|
||||
@@ -88,17 +175,19 @@ static void sun8i_csc_set_coefficients(struct regmap *map, u32 base,
|
||||
}
|
||||
|
||||
static void sun8i_de3_ccsc_set_coefficients(struct regmap *map, int layer,
|
||||
- enum sun8i_csc_mode mode)
|
||||
+ enum sun8i_csc_mode mode,
|
||||
+ enum drm_color_encoding encoding,
|
||||
+ enum drm_color_range range)
|
||||
{
|
||||
const u32 *table;
|
||||
u32 base_reg;
|
||||
|
||||
switch (mode) {
|
||||
case SUN8I_CSC_MODE_YUV2RGB:
|
||||
- table = yuv2rgb_de3;
|
||||
+ table = yuv2rgb_de3[range][encoding];
|
||||
break;
|
||||
case SUN8I_CSC_MODE_YVU2RGB:
|
||||
- table = yvu2rgb_de3;
|
||||
+ table = yvu2rgb_de3[range][encoding];
|
||||
break;
|
||||
default:
|
||||
DRM_WARN("Wrong CSC mode specified.\n");
|
||||
@@ -137,19 +226,22 @@ static void sun8i_de3_ccsc_enable(struct regmap *map, int layer, bool enable)
|
||||
}
|
||||
|
||||
void sun8i_csc_set_ccsc_coefficients(struct sun8i_mixer *mixer, int layer,
|
||||
- enum sun8i_csc_mode mode)
|
||||
+ enum sun8i_csc_mode mode,
|
||||
+ enum drm_color_encoding encoding,
|
||||
+ enum drm_color_range range)
|
||||
{
|
||||
u32 base;
|
||||
|
||||
if (mixer->cfg->is_de3) {
|
||||
- sun8i_de3_ccsc_set_coefficients(mixer->engine.regs,
|
||||
- layer, mode);
|
||||
+ sun8i_de3_ccsc_set_coefficients(mixer->engine.regs, layer,
|
||||
+ mode, encoding, range);
|
||||
return;
|
||||
}
|
||||
|
||||
base = ccsc_base[mixer->cfg->ccsc][layer];
|
||||
|
||||
- sun8i_csc_set_coefficients(mixer->engine.regs, base, mode);
|
||||
+ sun8i_csc_set_coefficients(mixer->engine.regs, base,
|
||||
+ mode, encoding, range);
|
||||
}
|
||||
|
||||
void sun8i_csc_enable_ccsc(struct sun8i_mixer *mixer, int layer, bool enable)
|
||||
diff --git a/drivers/gpu/drm/sun4i/sun8i_csc.h b/drivers/gpu/drm/sun4i/sun8i_csc.h
|
||||
index dce4c444bcd6..f42441b1b14d 100644
|
||||
--- a/drivers/gpu/drm/sun4i/sun8i_csc.h
|
||||
+++ b/drivers/gpu/drm/sun4i/sun8i_csc.h
|
||||
@@ -6,6 +6,8 @@
|
||||
#ifndef _SUN8I_CSC_H_
|
||||
#define _SUN8I_CSC_H_
|
||||
|
||||
+#include <drm/drm_color_mgmt.h>
|
||||
+
|
||||
struct sun8i_mixer;
|
||||
|
||||
/* VI channel CSC units offsets */
|
||||
@@ -26,7 +28,9 @@ enum sun8i_csc_mode {
|
||||
};
|
||||
|
||||
void sun8i_csc_set_ccsc_coefficients(struct sun8i_mixer *mixer, int layer,
|
||||
- enum sun8i_csc_mode mode);
|
||||
+ enum sun8i_csc_mode mode,
|
||||
+ enum drm_color_encoding encoding,
|
||||
+ enum drm_color_range range);
|
||||
void sun8i_csc_enable_ccsc(struct sun8i_mixer *mixer, int layer, bool enable);
|
||||
|
||||
#endif
|
||||
diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
|
||||
index 240a800217df..011924a75263 100644
|
||||
--- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
|
||||
+++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
|
||||
@@ -232,7 +232,9 @@ static int sun8i_vi_layer_update_formats(struct sun8i_mixer *mixer, int channel,
|
||||
SUN8I_MIXER_CHAN_VI_LAYER_ATTR_FBFMT_MASK, val);
|
||||
|
||||
if (fmt_info->csc != SUN8I_CSC_MODE_OFF) {
|
||||
- sun8i_csc_set_ccsc_coefficients(mixer, channel, fmt_info->csc);
|
||||
+ sun8i_csc_set_ccsc_coefficients(mixer, channel, fmt_info->csc,
|
||||
+ state->color_encoding,
|
||||
+ state->color_range);
|
||||
sun8i_csc_enable_ccsc(mixer, channel, true);
|
||||
} else {
|
||||
sun8i_csc_enable_ccsc(mixer, channel, false);
|
||||
--
|
||||
2.22.0
|
||||
|
||||
|
||||
From c8217462c6c143a9fada595bf3e34af83eb15f87 Mon Sep 17 00:00:00 2001
|
||||
From: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
Date: Thu, 27 Jun 2019 21:50:16 +0200
|
||||
Subject: [PATCH 4/4] HACK: Force full range
|
||||
|
||||
Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
---
|
||||
drivers/gpu/drm/sun4i/sun8i_csc.c | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/sun4i/sun8i_csc.c b/drivers/gpu/drm/sun4i/sun8i_csc.c
|
||||
index 70c792d052fe..7b60fce1a8c6 100644
|
||||
--- a/drivers/gpu/drm/sun4i/sun8i_csc.c
|
||||
+++ b/drivers/gpu/drm/sun4i/sun8i_csc.c
|
||||
@@ -160,10 +160,10 @@ static void sun8i_csc_set_coefficients(struct regmap *map, u32 base,
|
||||
|
||||
switch (mode) {
|
||||
case SUN8I_CSC_MODE_YUV2RGB:
|
||||
- table = yuv2rgb[range][encoding];
|
||||
+ table = yuv2rgb[DRM_COLOR_YCBCR_FULL_RANGE][encoding];
|
||||
break;
|
||||
case SUN8I_CSC_MODE_YVU2RGB:
|
||||
- table = yvu2rgb[range][encoding];
|
||||
+ table = yvu2rgb[DRM_COLOR_YCBCR_FULL_RANGE][encoding];
|
||||
break;
|
||||
default:
|
||||
DRM_WARN("Wrong CSC mode specified.\n");
|
||||
@@ -184,10 +184,10 @@ static void sun8i_de3_ccsc_set_coefficients(struct regmap *map, int layer,
|
||||
|
||||
switch (mode) {
|
||||
case SUN8I_CSC_MODE_YUV2RGB:
|
||||
- table = yuv2rgb_de3[range][encoding];
|
||||
+ table = yuv2rgb_de3[DRM_COLOR_YCBCR_FULL_RANGE][encoding];
|
||||
break;
|
||||
case SUN8I_CSC_MODE_YVU2RGB:
|
||||
- table = yvu2rgb_de3[range][encoding];
|
||||
+ table = yvu2rgb_de3[DRM_COLOR_YCBCR_FULL_RANGE][encoding];
|
||||
break;
|
||||
default:
|
||||
DRM_WARN("Wrong CSC mode specified.\n");
|
||||
--
|
||||
2.22.0
|
||||
|
||||
43
projects/Allwinner/patches/linux/0013-force-full-range.patch
Normal file
43
projects/Allwinner/patches/linux/0013-force-full-range.patch
Normal file
@@ -0,0 +1,43 @@
|
||||
From c8217462c6c143a9fada595bf3e34af83eb15f87 Mon Sep 17 00:00:00 2001
|
||||
From: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
Date: Thu, 27 Jun 2019 21:50:16 +0200
|
||||
Subject: [PATCH 4/4] HACK: Force full range
|
||||
|
||||
Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
---
|
||||
drivers/gpu/drm/sun4i/sun8i_csc.c | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/sun4i/sun8i_csc.c b/drivers/gpu/drm/sun4i/sun8i_csc.c
|
||||
index 70c792d052fe..7b60fce1a8c6 100644
|
||||
--- a/drivers/gpu/drm/sun4i/sun8i_csc.c
|
||||
+++ b/drivers/gpu/drm/sun4i/sun8i_csc.c
|
||||
@@ -160,10 +160,10 @@ static void sun8i_csc_set_coefficients(struct regmap *map, u32 base,
|
||||
|
||||
switch (mode) {
|
||||
case SUN8I_CSC_MODE_YUV2RGB:
|
||||
- table = yuv2rgb[range][encoding];
|
||||
+ table = yuv2rgb[DRM_COLOR_YCBCR_FULL_RANGE][encoding];
|
||||
break;
|
||||
case SUN8I_CSC_MODE_YVU2RGB:
|
||||
- table = yvu2rgb[range][encoding];
|
||||
+ table = yvu2rgb[DRM_COLOR_YCBCR_FULL_RANGE][encoding];
|
||||
break;
|
||||
default:
|
||||
DRM_WARN("Wrong CSC mode specified.\n");
|
||||
@@ -184,10 +184,10 @@ static void sun8i_de3_ccsc_set_coefficients(struct regmap *map, int layer,
|
||||
|
||||
switch (mode) {
|
||||
case SUN8I_CSC_MODE_YUV2RGB:
|
||||
- table = yuv2rgb_de3[range][encoding];
|
||||
+ table = yuv2rgb_de3[DRM_COLOR_YCBCR_FULL_RANGE][encoding];
|
||||
break;
|
||||
case SUN8I_CSC_MODE_YVU2RGB:
|
||||
- table = yvu2rgb_de3[range][encoding];
|
||||
+ table = yvu2rgb_de3[DRM_COLOR_YCBCR_FULL_RANGE][encoding];
|
||||
break;
|
||||
default:
|
||||
DRM_WARN("Wrong CSC mode specified.\n");
|
||||
--
|
||||
2.22.0
|
||||
|
||||
@@ -1,75 +0,0 @@
|
||||
From 95b579d069348a59d0fa6463a2f821089876ebfd Mon Sep 17 00:00:00 2001
|
||||
From: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
Date: Sat, 6 Jul 2019 11:07:49 +0200
|
||||
Subject: [PATCH 1/2] regulator: axp20x: fix DCDCA and DCDCD for AXP806
|
||||
|
||||
Refactoring of the driver introduced few bugs in AXP806's DCDCA and
|
||||
DCDCD regulator definitions.
|
||||
|
||||
Fix them.
|
||||
|
||||
Fixes: db4a555f7c4cf ("regulator: axp20x: use defines for masks")
|
||||
Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
---
|
||||
drivers/regulator/axp20x-regulator.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/regulator/axp20x-regulator.c b/drivers/regulator/axp20x-regulator.c
|
||||
index 152053361862..c951568994a1 100644
|
||||
--- a/drivers/regulator/axp20x-regulator.c
|
||||
+++ b/drivers/regulator/axp20x-regulator.c
|
||||
@@ -240,7 +240,7 @@
|
||||
#define AXP806_DCDCA_600mV_END \
|
||||
(AXP806_DCDCA_600mV_START + AXP806_DCDCA_600mV_STEPS)
|
||||
#define AXP806_DCDCA_1120mV_START 0x33
|
||||
-#define AXP806_DCDCA_1120mV_STEPS 14
|
||||
+#define AXP806_DCDCA_1120mV_STEPS 20
|
||||
#define AXP806_DCDCA_1120mV_END \
|
||||
(AXP806_DCDCA_1120mV_START + AXP806_DCDCA_1120mV_STEPS)
|
||||
#define AXP806_DCDCA_NUM_VOLTAGES 72
|
||||
@@ -774,8 +774,8 @@ static const struct regulator_linear_range axp806_dcdcd_ranges[] = {
|
||||
AXP806_DCDCD_600mV_END,
|
||||
20000),
|
||||
REGULATOR_LINEAR_RANGE(1600000,
|
||||
- AXP806_DCDCD_600mV_START,
|
||||
- AXP806_DCDCD_600mV_END,
|
||||
+ AXP806_DCDCD_1600mV_START,
|
||||
+ AXP806_DCDCD_1600mV_END,
|
||||
100000),
|
||||
};
|
||||
|
||||
--
|
||||
2.22.0
|
||||
|
||||
From a8e790b1850f368daff2d3c35b52f8a69978be6e Mon Sep 17 00:00:00 2001
|
||||
From: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
Date: Sat, 6 Jul 2019 11:15:13 +0200
|
||||
Subject: [PATCH 2/2] regulator: axp20x: fix DCDC6 for AXP803
|
||||
|
||||
Refactoring of axp20x driver introduced a bug in AXP803's DCDC6
|
||||
regulator definition.
|
||||
|
||||
Fix it.
|
||||
|
||||
Fixes: db4a555f7c4cf ("regulator: axp20x: use defines for masks")
|
||||
Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
---
|
||||
drivers/regulator/axp20x-regulator.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/regulator/axp20x-regulator.c b/drivers/regulator/axp20x-regulator.c
|
||||
index c951568994a1..29b92ce521b7 100644
|
||||
--- a/drivers/regulator/axp20x-regulator.c
|
||||
+++ b/drivers/regulator/axp20x-regulator.c
|
||||
@@ -181,7 +181,7 @@
|
||||
#define AXP803_DCDC6_600mV_END \
|
||||
(AXP803_DCDC6_600mV_START + AXP803_DCDC6_600mV_STEPS)
|
||||
#define AXP803_DCDC6_1120mV_START 0x33
|
||||
-#define AXP803_DCDC6_1120mV_STEPS 14
|
||||
+#define AXP803_DCDC6_1120mV_STEPS 20
|
||||
#define AXP803_DCDC6_1120mV_END \
|
||||
(AXP803_DCDC6_1120mV_START + AXP803_DCDC6_1120mV_STEPS)
|
||||
#define AXP803_DCDC6_NUM_VOLTAGES 72
|
||||
--
|
||||
2.22.0
|
||||
|
||||
Reference in New Issue
Block a user