From 42def0031c09b4a8763bdb5d39e6ef9edcbfdfea Mon Sep 17 00:00:00 2001 From: Nian Jing Date: Thu, 27 Sep 2018 13:32:14 +0800 Subject: [PATCH] vdac: get cputype from dts PD#174269: get cputype from dts Change-Id: I50e240e8d1f2aa275a2c215989e02e8b51cb6738 Signed-off-by: Nian Jing --- arch/arm/boot/dts/amlogic/mesongxl.dtsi | 5 + arch/arm/boot/dts/amlogic/mesontxl.dtsi | 5 + arch/arm/boot/dts/amlogic/mesontxlx.dtsi | 5 + arch/arm/boot/dts/amlogic/txlx_t962e_r321.dts | 6 - .../boot/dts/amlogic/txlx_t962x_r311_1g.dts | 6 - .../boot/dts/amlogic/txlx_t962x_r311_2g.dts | 6 - arch/arm64/boot/dts/amlogic/gxl_p212_1g.dts | 6 - .../dts/amlogic/gxl_p212_1g_buildroot.dts | 6 - .../arm64/boot/dts/amlogic/gxl_p212_1g_hd.dts | 6 - arch/arm64/boot/dts/amlogic/gxl_p212_2g.dts | 6 - .../dts/amlogic/gxl_p212_2g_buildroot.dts | 6 - arch/arm64/boot/dts/amlogic/gxl_p230_2g.dts | 6 - .../dts/amlogic/gxl_p230_2g_buildroot.dts | 6 - arch/arm64/boot/dts/amlogic/gxl_p231_1g.dts | 6 - arch/arm64/boot/dts/amlogic/gxl_p231_2g.dts | 6 - .../dts/amlogic/gxl_p231_2g_buildroot.dts | 6 - arch/arm64/boot/dts/amlogic/gxl_p241_1g.dts | 6 - .../dts/amlogic/gxl_p241_1g_buildroot.dts | 6 - .../arm64/boot/dts/amlogic/gxl_p241_v2-1g.dts | 6 - .../dts/amlogic/gxl_p241_v2_1g_buildroot.dts | 6 - arch/arm64/boot/dts/amlogic/gxl_sei210_1g.dts | 6 - arch/arm64/boot/dts/amlogic/gxl_sei210_2g.dts | 6 - arch/arm64/boot/dts/amlogic/gxl_skt.dts | 6 - arch/arm64/boot/dts/amlogic/gxm_q200_2g.dts | 6 - .../dts/amlogic/gxm_q200_2g_buildroot.dts | 6 - arch/arm64/boot/dts/amlogic/gxm_skt.dts | 6 - arch/arm64/boot/dts/amlogic/mesong12a.dtsi | 3 +- arch/arm64/boot/dts/amlogic/mesong12b.dtsi | 5 +- arch/arm64/boot/dts/amlogic/mesongxl.dtsi | 5 + .../boot/dts/amlogic/mesongxl_sei210.dtsi | 5 + arch/arm64/boot/dts/amlogic/mesongxm.dtsi | 5 + arch/arm64/boot/dts/amlogic/mesontxl.dtsi | 5 + arch/arm64/boot/dts/amlogic/mesontxlx.dtsi | 5 + .../boot/dts/amlogic/txlx_t962e_r321.dts | 6 - .../dts/amlogic/txlx_t962e_r321_buildroot.dts | 6 - .../boot/dts/amlogic/txlx_t962x_r311_1g.dts | 6 - .../boot/dts/amlogic/txlx_t962x_r311_2g.dts | 6 - .../boot/dts/amlogic/txlx_t962x_r311_720p.dts | 6 - drivers/amlogic/media/vout/vdac/vdac_dev.c | 136 +++++++++++++----- include/linux/amlogic/media/vout/vdac_dev.h | 16 +++ 40 files changed, 163 insertions(+), 205 deletions(-) diff --git a/arch/arm/boot/dts/amlogic/mesongxl.dtsi b/arch/arm/boot/dts/amlogic/mesongxl.dtsi index f534e7ddec4c..88f08e4c1acd 100644 --- a/arch/arm/boot/dts/amlogic/mesongxl.dtsi +++ b/arch/arm/boot/dts/amlogic/mesongxl.dtsi @@ -562,6 +562,11 @@ cpu_ver_name { compatible = "amlogic, cpu-major-id-gxl"; }; + + vdac { + compatible = "amlogic, vdac-gxl"; + status = "okay"; + }; }; /* end of root */ &pinctrl_aobus { diff --git a/arch/arm/boot/dts/amlogic/mesontxl.dtsi b/arch/arm/boot/dts/amlogic/mesontxl.dtsi index 9e47e49ff447..d585dc20636d 100644 --- a/arch/arm/boot/dts/amlogic/mesontxl.dtsi +++ b/arch/arm/boot/dts/amlogic/mesontxl.dtsi @@ -1049,6 +1049,11 @@ reg_base = <0xda838400>; interrupts = <0 51 1>; }; + + vdac { + compatible = "amlogic, vdac-txl"; + status = "okay"; + }; }; /* end of / */ &gpu{ diff --git a/arch/arm/boot/dts/amlogic/mesontxlx.dtsi b/arch/arm/boot/dts/amlogic/mesontxlx.dtsi index 70813bb0e83e..9989091966a1 100644 --- a/arch/arm/boot/dts/amlogic/mesontxlx.dtsi +++ b/arch/arm/boot/dts/amlogic/mesontxlx.dtsi @@ -938,6 +938,11 @@ cpu_ver_name { compatible = "amlogic, cpu-major-id-txlx"; }; + + vdac { + compatible = "amlogic, vdac-txlx"; + status = "okay"; + }; }; /* end of / */ &pinctrl_aobus { diff --git a/arch/arm/boot/dts/amlogic/txlx_t962e_r321.dts b/arch/arm/boot/dts/amlogic/txlx_t962e_r321.dts index 9aa3be67ca8f..e40d78344fd0 100644 --- a/arch/arm/boot/dts/amlogic/txlx_t962e_r321.dts +++ b/arch/arm/boot/dts/amlogic/txlx_t962e_r321.dts @@ -909,12 +909,6 @@ }; }; /* End unifykey */ - vdac { - compatible = "amlogic, vdac"; - dev_name = "vdac"; - status = "okay"; - }; - cvbsout { compatible = "amlogic, cvbsout-txlx"; dev_name = "cvbsout"; diff --git a/arch/arm/boot/dts/amlogic/txlx_t962x_r311_1g.dts b/arch/arm/boot/dts/amlogic/txlx_t962x_r311_1g.dts index 6192078dbebd..b9b6bfe2d56f 100644 --- a/arch/arm/boot/dts/amlogic/txlx_t962x_r311_1g.dts +++ b/arch/arm/boot/dts/amlogic/txlx_t962x_r311_1g.dts @@ -932,12 +932,6 @@ }; }; /* End unifykey */ - vdac { - compatible = "amlogic, vdac"; - dev_name = "vdac"; - status = "okay"; - }; - cvbsout { compatible = "amlogic, cvbsout-txlx"; dev_name = "cvbsout"; diff --git a/arch/arm/boot/dts/amlogic/txlx_t962x_r311_2g.dts b/arch/arm/boot/dts/amlogic/txlx_t962x_r311_2g.dts index 93ab8e94f108..9a39e569cdb8 100644 --- a/arch/arm/boot/dts/amlogic/txlx_t962x_r311_2g.dts +++ b/arch/arm/boot/dts/amlogic/txlx_t962x_r311_2g.dts @@ -938,12 +938,6 @@ }; }; /* End unifykey */ - vdac { - compatible = "amlogic, vdac"; - dev_name = "vdac"; - status = "okay"; - }; - cvbsout { compatible = "amlogic, cvbsout-txlx"; dev_name = "cvbsout"; diff --git a/arch/arm64/boot/dts/amlogic/gxl_p212_1g.dts b/arch/arm64/boot/dts/amlogic/gxl_p212_1g.dts index 4eefc12a7c88..5fa4dbce65df 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_p212_1g.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_p212_1g.dts @@ -582,12 +582,6 @@ fr_auto_policy = <0>; }; - vdac { - compatible = "amlogic, vdac"; - dev_name = "vdac"; - status = "okay"; - }; - cvbsout { compatible = "amlogic, cvbsout-gxl"; dev_name = "cvbsout"; diff --git a/arch/arm64/boot/dts/amlogic/gxl_p212_1g_buildroot.dts b/arch/arm64/boot/dts/amlogic/gxl_p212_1g_buildroot.dts index 13fb0af0c2a7..c2d3b9251a4b 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_p212_1g_buildroot.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_p212_1g_buildroot.dts @@ -561,12 +561,6 @@ fr_auto_policy = <0>; }; - vdac { - compatible = "amlogic, vdac"; - dev_name = "vdac"; - status = "okay"; - }; - cvbsout { compatible = "amlogic, cvbsout-gxl"; dev_name = "cvbsout"; diff --git a/arch/arm64/boot/dts/amlogic/gxl_p212_1g_hd.dts b/arch/arm64/boot/dts/amlogic/gxl_p212_1g_hd.dts index 3a3477770085..6a064bbcfac0 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_p212_1g_hd.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_p212_1g_hd.dts @@ -572,12 +572,6 @@ fr_auto_policy = <0>; }; - vdac { - compatible = "amlogic, vdac"; - dev_name = "vdac"; - status = "okay"; - }; - cvbsout { compatible = "amlogic, cvbsout-gxl"; dev_name = "cvbsout"; diff --git a/arch/arm64/boot/dts/amlogic/gxl_p212_2g.dts b/arch/arm64/boot/dts/amlogic/gxl_p212_2g.dts index 01e81fb9ab7f..2ffd2de29b11 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_p212_2g.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_p212_2g.dts @@ -679,12 +679,6 @@ fr_auto_policy = <0>; }; - vdac { - compatible = "amlogic, vdac"; - dev_name = "vdac"; - status = "okay"; - }; - cvbsout { compatible = "amlogic, cvbsout-gxl"; dev_name = "cvbsout"; diff --git a/arch/arm64/boot/dts/amlogic/gxl_p212_2g_buildroot.dts b/arch/arm64/boot/dts/amlogic/gxl_p212_2g_buildroot.dts index 149cb478c8bb..b2a48e90b5a3 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_p212_2g_buildroot.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_p212_2g_buildroot.dts @@ -640,12 +640,6 @@ fr_auto_policy = <0>; }; - vdac { - compatible = "amlogic, vdac"; - dev_name = "vdac"; - status = "okay"; - }; - cvbsout { compatible = "amlogic, cvbsout-gxl"; dev_name = "cvbsout"; diff --git a/arch/arm64/boot/dts/amlogic/gxl_p230_2g.dts b/arch/arm64/boot/dts/amlogic/gxl_p230_2g.dts index 3ed702f286ac..bbb6ab864abf 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_p230_2g.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_p230_2g.dts @@ -669,12 +669,6 @@ fr_auto_policy = <0>; }; - vdac { - compatible = "amlogic, vdac"; - dev_name = "vdac"; - status = "okay"; - }; - cvbsout { compatible = "amlogic, cvbsout-gxl"; dev_name = "cvbsout"; diff --git a/arch/arm64/boot/dts/amlogic/gxl_p230_2g_buildroot.dts b/arch/arm64/boot/dts/amlogic/gxl_p230_2g_buildroot.dts index b2e9b9a75f5b..bbea7f6ae66e 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_p230_2g_buildroot.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_p230_2g_buildroot.dts @@ -655,12 +655,6 @@ fr_auto_policy = <0>; }; - vdac { - compatible = "amlogic, vdac"; - dev_name = "vdac"; - status = "okay"; - }; - cvbsout { compatible = "amlogic, cvbsout-gxl"; dev_name = "cvbsout"; diff --git a/arch/arm64/boot/dts/amlogic/gxl_p231_1g.dts b/arch/arm64/boot/dts/amlogic/gxl_p231_1g.dts index 69242502667d..0d924c2e9857 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_p231_1g.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_p231_1g.dts @@ -594,12 +594,6 @@ fr_auto_policy = <0>; }; - vdac { - compatible = "amlogic, vdac"; - dev_name = "vdac"; - status = "okay"; - }; - cvbsout { compatible = "amlogic, cvbsout-gxl"; dev_name = "cvbsout"; diff --git a/arch/arm64/boot/dts/amlogic/gxl_p231_2g.dts b/arch/arm64/boot/dts/amlogic/gxl_p231_2g.dts index ad78b2a2fd9a..e66d3e4a856a 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_p231_2g.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_p231_2g.dts @@ -594,12 +594,6 @@ fr_auto_policy = <0>; }; - vdac { - compatible = "amlogic, vdac"; - dev_name = "vdac"; - status = "okay"; - }; - cvbsout { compatible = "amlogic, cvbsout-gxl"; dev_name = "cvbsout"; diff --git a/arch/arm64/boot/dts/amlogic/gxl_p231_2g_buildroot.dts b/arch/arm64/boot/dts/amlogic/gxl_p231_2g_buildroot.dts index b4acc1ecca48..f77ec383d642 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_p231_2g_buildroot.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_p231_2g_buildroot.dts @@ -586,12 +586,6 @@ fr_auto_policy = <0>; }; - vdac { - compatible = "amlogic, vdac"; - dev_name = "vdac"; - status = "okay"; - }; - cvbsout { compatible = "amlogic, cvbsout-gxl"; dev_name = "cvbsout"; diff --git a/arch/arm64/boot/dts/amlogic/gxl_p241_1g.dts b/arch/arm64/boot/dts/amlogic/gxl_p241_1g.dts index ed5256ceadf8..f8e7ff52ba6f 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_p241_1g.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_p241_1g.dts @@ -644,12 +644,6 @@ fr_auto_policy = <0>; }; - vdac { - compatible = "amlogic, vdac"; - dev_name = "vdac"; - status = "okay"; - }; - cvbsout { compatible = "amlogic, cvbsout-gxl"; dev_name = "cvbsout"; diff --git a/arch/arm64/boot/dts/amlogic/gxl_p241_1g_buildroot.dts b/arch/arm64/boot/dts/amlogic/gxl_p241_1g_buildroot.dts index aa9cce37a318..b7104b56c91e 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_p241_1g_buildroot.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_p241_1g_buildroot.dts @@ -635,12 +635,6 @@ fr_auto_policy = <0>; }; - vdac { - compatible = "amlogic, vdac"; - dev_name = "vdac"; - status = "okay"; - }; - cvbsout { compatible = "amlogic, cvbsout-gxl"; dev_name = "cvbsout"; diff --git a/arch/arm64/boot/dts/amlogic/gxl_p241_v2-1g.dts b/arch/arm64/boot/dts/amlogic/gxl_p241_v2-1g.dts index 49605c55a345..25b9fdc82947 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_p241_v2-1g.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_p241_v2-1g.dts @@ -645,12 +645,6 @@ fr_auto_policy = <0>; }; - vdac { - compatible = "amlogic, vdac"; - dev_name = "vdac"; - status = "okay"; - }; - cvbsout { compatible = "amlogic, cvbsout-gxl"; dev_name = "cvbsout"; diff --git a/arch/arm64/boot/dts/amlogic/gxl_p241_v2_1g_buildroot.dts b/arch/arm64/boot/dts/amlogic/gxl_p241_v2_1g_buildroot.dts index bf77a30db461..8118feb732cf 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_p241_v2_1g_buildroot.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_p241_v2_1g_buildroot.dts @@ -634,12 +634,6 @@ fr_auto_policy = <0>; }; - vdac { - compatible = "amlogic, vdac"; - dev_name = "vdac"; - status = "okay"; - }; - cvbsout { compatible = "amlogic, cvbsout-gxl"; dev_name = "cvbsout"; diff --git a/arch/arm64/boot/dts/amlogic/gxl_sei210_1g.dts b/arch/arm64/boot/dts/amlogic/gxl_sei210_1g.dts index b0821d8b1931..2c2f3f89d38b 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_sei210_1g.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_sei210_1g.dts @@ -572,12 +572,6 @@ fr_auto_policy = <0>; }; - vdac { - compatible = "amlogic, vdac"; - dev_name = "vdac"; - status = "okay"; - }; - cvbsout { compatible = "amlogic, cvbsout-gxl"; dev_name = "cvbsout"; diff --git a/arch/arm64/boot/dts/amlogic/gxl_sei210_2g.dts b/arch/arm64/boot/dts/amlogic/gxl_sei210_2g.dts index 9e3d5ac2f0c6..565b84002c4b 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_sei210_2g.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_sei210_2g.dts @@ -668,12 +668,6 @@ fr_auto_policy = <0>; }; - vdac { - compatible = "amlogic, vdac"; - dev_name = "vdac"; - status = "okay"; - }; - cvbsout { compatible = "amlogic, cvbsout-gxl"; dev_name = "cvbsout"; diff --git a/arch/arm64/boot/dts/amlogic/gxl_skt.dts b/arch/arm64/boot/dts/amlogic/gxl_skt.dts index 70cb2e24d4b7..1ab1a077796f 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_skt.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_skt.dts @@ -582,12 +582,6 @@ fr_auto_policy = <0>; }; - vdac { - compatible = "amlogic, vdac"; - dev_name = "vdac"; - status = "okay"; - }; - cvbsout { compatible = "amlogic, cvbsout-gxl"; dev_name = "cvbsout"; diff --git a/arch/arm64/boot/dts/amlogic/gxm_q200_2g.dts b/arch/arm64/boot/dts/amlogic/gxm_q200_2g.dts index d75ee5c34f0f..38214b182158 100644 --- a/arch/arm64/boot/dts/amlogic/gxm_q200_2g.dts +++ b/arch/arm64/boot/dts/amlogic/gxm_q200_2g.dts @@ -684,12 +684,6 @@ fr_auto_policy = <0>; }; - vdac { - compatible = "amlogic, vdac"; - dev_name = "vdac"; - status = "okay"; - }; - cvbsout { compatible = "amlogic, cvbsout-gxm"; dev_name = "cvbsout"; diff --git a/arch/arm64/boot/dts/amlogic/gxm_q200_2g_buildroot.dts b/arch/arm64/boot/dts/amlogic/gxm_q200_2g_buildroot.dts index 03ec33124078..20d0c1361eb4 100644 --- a/arch/arm64/boot/dts/amlogic/gxm_q200_2g_buildroot.dts +++ b/arch/arm64/boot/dts/amlogic/gxm_q200_2g_buildroot.dts @@ -679,12 +679,6 @@ fr_auto_policy = <0>; }; - vdac { - compatible = "amlogic, vdac"; - dev_name = "vdac"; - status = "okay"; - }; - cvbsout { compatible = "amlogic, cvbsout-gxm"; dev_name = "cvbsout"; diff --git a/arch/arm64/boot/dts/amlogic/gxm_skt.dts b/arch/arm64/boot/dts/amlogic/gxm_skt.dts index 5e026ec67b8f..90dde409de72 100644 --- a/arch/arm64/boot/dts/amlogic/gxm_skt.dts +++ b/arch/arm64/boot/dts/amlogic/gxm_skt.dts @@ -584,12 +584,6 @@ fr_auto_policy = <0>; }; - vdac { - compatible = "amlogic, vdac"; - dev_name = "vdac"; - status = "okay"; - }; - cvbsout { compatible = "amlogic, cvbsout-gxm"; dev_name = "cvbsout"; diff --git a/arch/arm64/boot/dts/amlogic/mesong12a.dtsi b/arch/arm64/boot/dts/amlogic/mesong12a.dtsi index 250aa290bbbc..378950d3e413 100644 --- a/arch/arm64/boot/dts/amlogic/mesong12a.dtsi +++ b/arch/arm64/boot/dts/amlogic/mesong12a.dtsi @@ -1163,8 +1163,7 @@ }; vdac { - compatible = "amlogic, vdac"; - dev_name = "vdac"; + compatible = "amlogic, vdac-g12a"; status = "okay"; }; diff --git a/arch/arm64/boot/dts/amlogic/mesong12b.dtsi b/arch/arm64/boot/dts/amlogic/mesong12b.dtsi index fc1651286935..a5be3ea0f9dc 100644 --- a/arch/arm64/boot/dts/amlogic/mesong12b.dtsi +++ b/arch/arm64/boot/dts/amlogic/mesong12b.dtsi @@ -1201,9 +1201,8 @@ }; vdac { - compatible = "amlogic, vdac"; - dev_name = "vdac"; - status = "disabled"; + compatible = "amlogic, vdac-g12b"; + status = "okay"; }; canvas: canvas{ diff --git a/arch/arm64/boot/dts/amlogic/mesongxl.dtsi b/arch/arm64/boot/dts/amlogic/mesongxl.dtsi index e06f4c8004d4..42fdd83123ca 100644 --- a/arch/arm64/boot/dts/amlogic/mesongxl.dtsi +++ b/arch/arm64/boot/dts/amlogic/mesongxl.dtsi @@ -549,6 +549,11 @@ cpu_ver_name { compatible = "amlogic, cpu-major-id-gxl"; }; + + vdac { + compatible = "amlogic, vdac-gxl"; + status = "okay"; + }; }; /* end of root */ &pinctrl_aobus { diff --git a/arch/arm64/boot/dts/amlogic/mesongxl_sei210.dtsi b/arch/arm64/boot/dts/amlogic/mesongxl_sei210.dtsi index 77c62b908026..b2e72ec2f32f 100644 --- a/arch/arm64/boot/dts/amlogic/mesongxl_sei210.dtsi +++ b/arch/arm64/boot/dts/amlogic/mesongxl_sei210.dtsi @@ -539,6 +539,11 @@ ranges = <0x0 0x0 0x0 0xd0000000 0x0 0x200000>; }; }; /* end of soc */ + + vdac { + compatible = "amlogic, vdac-gxl"; + status = "okay"; + }; }; /* end of root */ &pinctrl_aobus { diff --git a/arch/arm64/boot/dts/amlogic/mesongxm.dtsi b/arch/arm64/boot/dts/amlogic/mesongxm.dtsi index d127e64855a5..22cbefdd4a4c 100644 --- a/arch/arm64/boot/dts/amlogic/mesongxm.dtsi +++ b/arch/arm64/boot/dts/amlogic/mesongxm.dtsi @@ -637,6 +637,11 @@ cpu_ver_name { compatible = "amlogic, cpu-major-id-gxm"; }; + + vdac { + compatible = "amlogic, vdac-gxm"; + status = "okay"; + }; }; /* end of root */ &pinctrl_aobus { diff --git a/arch/arm64/boot/dts/amlogic/mesontxl.dtsi b/arch/arm64/boot/dts/amlogic/mesontxl.dtsi index ba294f27f6d5..43885b0e5554 100644 --- a/arch/arm64/boot/dts/amlogic/mesontxl.dtsi +++ b/arch/arm64/boot/dts/amlogic/mesontxl.dtsi @@ -1049,6 +1049,11 @@ reg_base = <0xda838400>; interrupts = <0 51 1>; }; + + vdac { + compatible = "amlogic, vdac-txl"; + status = "okay"; + }; }; /* end of / */ &gpu{ diff --git a/arch/arm64/boot/dts/amlogic/mesontxlx.dtsi b/arch/arm64/boot/dts/amlogic/mesontxlx.dtsi index c2c9eb720716..11424d09e16d 100644 --- a/arch/arm64/boot/dts/amlogic/mesontxlx.dtsi +++ b/arch/arm64/boot/dts/amlogic/mesontxlx.dtsi @@ -938,6 +938,11 @@ cpu_ver_name { compatible = "amlogic, cpu-major-id-txlx"; }; + + vdac { + compatible = "amlogic, vdac-txlx"; + status = "okay"; + }; }; /* end of / */ &pinctrl_aobus { diff --git a/arch/arm64/boot/dts/amlogic/txlx_t962e_r321.dts b/arch/arm64/boot/dts/amlogic/txlx_t962e_r321.dts index e8eb091779ce..87ec785a61f7 100644 --- a/arch/arm64/boot/dts/amlogic/txlx_t962e_r321.dts +++ b/arch/arm64/boot/dts/amlogic/txlx_t962e_r321.dts @@ -908,12 +908,6 @@ }; }; /* End unifykey */ - vdac { - compatible = "amlogic, vdac"; - dev_name = "vdac"; - status = "okay"; - }; - cvbsout { compatible = "amlogic, cvbsout-txlx"; dev_name = "cvbsout"; diff --git a/arch/arm64/boot/dts/amlogic/txlx_t962e_r321_buildroot.dts b/arch/arm64/boot/dts/amlogic/txlx_t962e_r321_buildroot.dts index 76c5a37d6f11..8564ca382fbd 100644 --- a/arch/arm64/boot/dts/amlogic/txlx_t962e_r321_buildroot.dts +++ b/arch/arm64/boot/dts/amlogic/txlx_t962e_r321_buildroot.dts @@ -946,12 +946,6 @@ }; }; /* End unifykey */ - vdac { - compatible = "amlogic, vdac"; - dev_name = "vdac"; - status = "okay"; - }; - cvbsout { compatible = "amlogic, cvbsout-txlx"; dev_name = "cvbsout"; diff --git a/arch/arm64/boot/dts/amlogic/txlx_t962x_r311_1g.dts b/arch/arm64/boot/dts/amlogic/txlx_t962x_r311_1g.dts index 7d37fd6af609..017e54b37ed4 100644 --- a/arch/arm64/boot/dts/amlogic/txlx_t962x_r311_1g.dts +++ b/arch/arm64/boot/dts/amlogic/txlx_t962x_r311_1g.dts @@ -929,12 +929,6 @@ }; }; /* End unifykey */ - vdac { - compatible = "amlogic, vdac"; - dev_name = "vdac"; - status = "okay"; - }; - cvbsout { compatible = "amlogic, cvbsout-txlx"; dev_name = "cvbsout"; diff --git a/arch/arm64/boot/dts/amlogic/txlx_t962x_r311_2g.dts b/arch/arm64/boot/dts/amlogic/txlx_t962x_r311_2g.dts index b0b5f7fb7356..fb3aaacc77c4 100644 --- a/arch/arm64/boot/dts/amlogic/txlx_t962x_r311_2g.dts +++ b/arch/arm64/boot/dts/amlogic/txlx_t962x_r311_2g.dts @@ -935,12 +935,6 @@ }; }; /* End unifykey */ - vdac { - compatible = "amlogic, vdac"; - dev_name = "vdac"; - status = "okay"; - }; - cvbsout { compatible = "amlogic, cvbsout-txlx"; dev_name = "cvbsout"; diff --git a/arch/arm64/boot/dts/amlogic/txlx_t962x_r311_720p.dts b/arch/arm64/boot/dts/amlogic/txlx_t962x_r311_720p.dts index 2d009751a042..c6e9fdd6abbb 100644 --- a/arch/arm64/boot/dts/amlogic/txlx_t962x_r311_720p.dts +++ b/arch/arm64/boot/dts/amlogic/txlx_t962x_r311_720p.dts @@ -928,12 +928,6 @@ }; }; /* End unifykey */ - vdac { - compatible = "amlogic, vdac"; - dev_name = "vdac"; - status = "okay"; - }; - cvbsout { compatible = "amlogic, cvbsout-txlx"; dev_name = "cvbsout"; diff --git a/drivers/amlogic/media/vout/vdac/vdac_dev.c b/drivers/amlogic/media/vout/vdac/vdac_dev.c index ea13a56f3ed5..a1a1548b9626 100644 --- a/drivers/amlogic/media/vout/vdac/vdac_dev.c +++ b/drivers/amlogic/media/vout/vdac/vdac_dev.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -52,6 +53,7 @@ struct amvdac_dev_s { struct class *clsp; }; static struct amvdac_dev_s amvdac_dev; +static struct meson_vdac_data *s_vdac_data; static struct mutex vdac_mutex; #define HHI_VDAC_CNTL0 0xbd @@ -152,7 +154,8 @@ void ana_ref_cntl0_bit9(bool on, unsigned int module_sel) vdac_cntl0_bit9 &= ~VDAC_MODULE_CVBS_OUT; break; case VDAC_MODULE_AUDIO_OUT: /* audio out ctrl*/ - if (is_meson_txl_cpu() || is_meson_txlx_cpu()) { + if (s_vdac_data->cpu_id == CPU_TYPE_TXL || + s_vdac_data->cpu_id == CPU_TYPE_TXLX) { if (on) vdac_cntl0_bit9 |= VDAC_MODULE_AUDIO_OUT; else @@ -170,10 +173,10 @@ void ana_ref_cntl0_bit9(bool on, unsigned int module_sel) else enable = 1; - if (is_meson_txl_cpu() || is_meson_txlx_cpu()) + if (s_vdac_data->cpu_id == CPU_TYPE_TXL || + s_vdac_data->cpu_id == CPU_TYPE_TXLX) vdac_hiu_reg_setb(HHI_VDAC_CNTL0, enable, 9, 1); - else if (is_meson_g12a_cpu() || - is_meson_g12b_cpu()) + else if (s_vdac_data->cpu_id >= CPU_TYPE_G12AB) vdac_hiu_reg_setb(HHI_VDAC_CNTL0_G12A, ~enable, 9, 1); else vdac_hiu_reg_setb(HHI_VDAC_CNTL0, ~enable, 9, 1); @@ -188,7 +191,7 @@ void vdac_out_cntl0_bit10(bool on, unsigned int module_sel) bool enable = 0; /*bit10 is for bandgap startup setting in g12a*/ - if (is_meson_g12a_cpu() || is_meson_g12b_cpu()) + if (s_vdac_data->cpu_id >= CPU_TYPE_G12AB) return; switch (module_sel & 0xf) { @@ -274,7 +277,7 @@ void vdac_out_cntl0_bit0(bool on, unsigned int module_sel) else enable = 1; - if (is_meson_g12a_cpu() || is_meson_g12b_cpu()) + if (s_vdac_data->cpu_id >= CPU_TYPE_G12AB) vdac_hiu_reg_setb(HHI_VDAC_CNTL0_G12A, enable, 0, 1); else vdac_hiu_reg_setb(HHI_VDAC_CNTL0, enable, 0, 1); @@ -324,9 +327,10 @@ void vdac_out_cntl1_bit3(bool on, unsigned int module_sel) else enable = 1; - if (is_meson_txl_cpu() || is_meson_txlx_cpu()) + if (s_vdac_data->cpu_id == CPU_TYPE_TXL || + s_vdac_data->cpu_id == CPU_TYPE_TXLX) vdac_hiu_reg_setb(HHI_VDAC_CNTL1, enable, 3, 1); - else if (is_meson_g12a_cpu() || is_meson_g12b_cpu()) + else if (s_vdac_data->cpu_id >= CPU_TYPE_G12AB) vdac_hiu_reg_setb(HHI_VDAC_CNTL1_G12A, ~enable, 3, 1); else vdac_hiu_reg_setb(HHI_VDAC_CNTL1, ~enable, 3, 1); @@ -335,7 +339,7 @@ EXPORT_SYMBOL(vdac_out_cntl1_bit3); void vdac_set_ctrl0_ctrl1(unsigned int ctrl0, unsigned int ctrl1) { - if (is_meson_g12a_cpu() || is_meson_g12b_cpu()) { + if (s_vdac_data->cpu_id >= CPU_TYPE_G12AB) { vdac_hiu_reg_write(HHI_VDAC_CNTL0_G12A, ctrl0); vdac_hiu_reg_write(HHI_VDAC_CNTL1_G12A, ctrl1); } else { @@ -359,7 +363,7 @@ void vdac_enable(bool on, unsigned int module_sel) ana_ref_cntl0_bit9(1, VDAC_MODULE_ATV_DEMOD); /*after txlx need reset bandgap after bit9 enabled*/ /*bit10 reset bandgap in g12a*/ - if (is_meson_txlx_cpu()) { + if (s_vdac_data->cpu_id == CPU_TYPE_TXLX) { vdac_hiu_reg_setb(HHI_VDAC_CNTL0, 1, 13, 1); udelay(5); vdac_hiu_reg_setb(HHI_VDAC_CNTL0, 0, 13, 1); @@ -371,7 +375,7 @@ void vdac_enable(bool on, unsigned int module_sel) /*Cdac pwd*/ vdac_out_cntl1_bit3(1, VDAC_MODULE_ATV_DEMOD); /* enable AFE output buffer */ - if (!is_meson_g12a_cpu() && !is_meson_g12b_cpu()) + if (s_vdac_data->cpu_id < CPU_TYPE_G12AB) vdac_hiu_reg_setb(HHI_VDAC_CNTL0, 0, 10, 1); vdac_out_cntl0_bit0(1, VDAC_MODULE_ATV_DEMOD); } else { @@ -381,7 +385,7 @@ void vdac_enable(bool on, unsigned int module_sel) break; vdac_out_cntl0_bit0(0, VDAC_MODULE_ATV_DEMOD); /* Disable AFE output buffer */ - if (!is_meson_g12a_cpu() && !is_meson_g12b_cpu()) + if (s_vdac_data->cpu_id < CPU_TYPE_G12AB) vdac_hiu_reg_setb(HHI_VDAC_CNTL0, 0, 10, 1); /* enable dac output */ vdac_out_cntl1_bit3(0, VDAC_MODULE_ATV_DEMOD); @@ -389,10 +393,10 @@ void vdac_enable(bool on, unsigned int module_sel) break; case VDAC_MODULE_DTV_DEMOD: /* dtv demod */ if (on) { - if (is_meson_gxlx_cpu()) + if (s_vdac_data->cpu_id == CPU_TYPE_GXLX) vdac_out_cntl1_bit3(1, VDAC_MODULE_DTV_DEMOD); ana_ref_cntl0_bit9(1, VDAC_MODULE_DTV_DEMOD); - if (is_meson_txlx_cpu()) { + if (s_vdac_data->cpu_id == CPU_TYPE_TXLX) { vdac_hiu_reg_setb(HHI_VDAC_CNTL0, 1, 13, 1); udelay(5); vdac_hiu_reg_setb(HHI_VDAC_CNTL0, 0, 13, 1); @@ -400,7 +404,7 @@ void vdac_enable(bool on, unsigned int module_sel) pri_flag |= VDAC_MODULE_DTV_DEMOD; } else { ana_ref_cntl0_bit9(0, VDAC_MODULE_DTV_DEMOD); - if (is_meson_gxlx_cpu()) + if (s_vdac_data->cpu_id == CPU_TYPE_GXLX) vdac_out_cntl1_bit3(0, VDAC_MODULE_DTV_DEMOD); pri_flag &= ~VDAC_MODULE_DTV_DEMOD; } @@ -409,7 +413,7 @@ void vdac_enable(bool on, unsigned int module_sel) if (on) { ana_ref_cntl0_bit9(1, VDAC_MODULE_TVAFE); /*after txlx need reset bandgap after bit9 enabled*/ - if (is_meson_txlx_cpu()) { + if (s_vdac_data->cpu_id == CPU_TYPE_TXLX) { vdac_hiu_reg_setb(HHI_VDAC_CNTL0, 1, 13, 1); udelay(5); vdac_hiu_reg_setb(HHI_VDAC_CNTL0, 0, 13, 1); @@ -436,7 +440,7 @@ void vdac_enable(bool on, unsigned int module_sel) vdac_out_cntl1_bit3(1, VDAC_MODULE_CVBS_OUT); vdac_out_cntl0_bit0(1, VDAC_MODULE_CVBS_OUT); ana_ref_cntl0_bit9(1, VDAC_MODULE_CVBS_OUT); - if (is_meson_txlx_cpu()) { + if (s_vdac_data->cpu_id == CPU_TYPE_TXLX) { vdac_hiu_reg_setb(HHI_VDAC_CNTL0, 1, 13, 1); udelay(5); vdac_hiu_reg_setb(HHI_VDAC_CNTL0, 0, 13, 1); @@ -451,8 +455,7 @@ void vdac_enable(bool on, unsigned int module_sel) pri_flag &= ~VDAC_MODULE_CVBS_OUT; if (pri_flag & VDAC_MODULE_ATV_DEMOD) { vdac_out_cntl1_bit3(1, VDAC_MODULE_ATV_DEMOD); - if (!is_meson_g12a_cpu() && - !is_meson_g12b_cpu()) + if (s_vdac_data->cpu_id < CPU_TYPE_G12AB) vdac_hiu_reg_setb(HHI_VDAC_CNTL0, 0, 10, 1); vdac_out_cntl0_bit0(1, VDAC_MODULE_ATV_DEMOD); @@ -460,7 +463,7 @@ void vdac_enable(bool on, unsigned int module_sel) vdac_out_cntl1_bit3(0, VDAC_MODULE_TVAFE); vdac_out_cntl0_bit10(1, VDAC_MODULE_TVAFE); } else if (pri_flag & VDAC_MODULE_DTV_DEMOD) { - if (is_meson_gxlx_cpu()) + if (s_vdac_data->cpu_id == CPU_TYPE_GXLX) vdac_out_cntl1_bit3(1, VDAC_MODULE_DTV_DEMOD); ana_ref_cntl0_bit9(1, VDAC_MODULE_DTV_DEMOD); @@ -469,10 +472,12 @@ void vdac_enable(bool on, unsigned int module_sel) break; case VDAC_MODULE_AUDIO_OUT: /* audio demod */ /*Bandgap optimization*/ - if (is_meson_txlx_cpu() || is_meson_txhd_cpu()) + if (s_vdac_data->cpu_id == CPU_TYPE_TXHD || + s_vdac_data->cpu_id == CPU_TYPE_TXLX) vdac_hiu_reg_setb(HHI_VDAC_CNTL0, 0xe, 3, 5); - if (is_meson_txl_cpu() || is_meson_txlx_cpu()) { + if (s_vdac_data->cpu_id == CPU_TYPE_TXL || + s_vdac_data->cpu_id == CPU_TYPE_TXLX) { if (on) ana_ref_cntl0_bit9(1, VDAC_MODULE_AUDIO_OUT); else @@ -515,14 +520,89 @@ static const struct file_operations amvdac_fops = { .release = amvdac_release, }; +struct meson_vdac_data meson_gxtvbb_vdac_data = { + .cpu_id = CPU_TYPE_GXTVBB, + .name = "meson-gxtvbb-vdac", +}; + +struct meson_vdac_data meson_gx_l_m_vdac_data = { + .cpu_id = CPU_TYPE_GX_L_M, + .name = "meson-gx_l_m-vdac", +}; + +struct meson_vdac_data meson_txl_vdac_data = { + .cpu_id = CPU_TYPE_TXL, + .name = "meson-txl-vdac", +}; + +struct meson_vdac_data meson_txlx_vdac_data = { + .cpu_id = CPU_TYPE_TXLX, + .name = "meson-txlx-vdac", +}; + +struct meson_vdac_data meson_gxlx_vdac_data = { + .cpu_id = CPU_TYPE_GXLX, + .name = "meson-gxlx-vdac", +}; + +struct meson_vdac_data meson_txhd_vdac_data = { + .cpu_id = CPU_TYPE_TXHD, + .name = "meson-txhd-vdac", +}; + +struct meson_vdac_data meson_g12ab_vdac_data = { + .cpu_id = CPU_TYPE_G12AB, + .name = "meson-g12ab-vdac", +}; + +static const struct of_device_id meson_vdac_dt_match[] = { + { + .compatible = "amlogic, vdac-gxtvbb", + .data = &meson_gxtvbb_vdac_data, + }, { + .compatible = "amlogic, vdac-gxl", + .data = &meson_gx_l_m_vdac_data, + }, { + .compatible = "amlogic, vdac-gxm", + .data = &meson_gx_l_m_vdac_data, + }, { + .compatible = "amlogic, vdac-txl", + .data = &meson_txl_vdac_data, + }, { + .compatible = "amlogic, vdac-txlx", + .data = &meson_txlx_vdac_data, + }, { + .compatible = "amlogic, vdac-gxlx", + .data = &meson_gxlx_vdac_data, + }, { + .compatible = "amlogic, vdac-txhd", + .data = &meson_txhd_vdac_data, + }, { + .compatible = "amlogic, vdac-g12a", + .data = &meson_g12ab_vdac_data, + }, { + .compatible = "amlogic, vdac-g12b", + .data = &meson_g12ab_vdac_data, + }, + {}, +}; + static int aml_vdac_probe(struct platform_device *pdev) { int ret = 0; + const struct of_device_id *match; struct amvdac_dev_s *devp = &amvdac_dev; memset(devp, 0, (sizeof(struct amvdac_dev_s))); - pr_info("\n%s: probe start\n", __func__); + match = of_match_device(meson_vdac_dt_match, &pdev->dev); + if (match == NULL) { + pr_err("%s,no matched table\n", __func__); + return -1; + } + s_vdac_data = (struct meson_vdac_data *)match->data; + pr_info("%s:probe start.cpu_id:%d,name:%s\n", __func__, + s_vdac_data->cpu_id, s_vdac_data->name); ret = alloc_chrdev_region(&devp->devno, 0, 1, AMVDAC_NAME); if (ret < 0) @@ -608,19 +688,11 @@ static void amvdac_drv_shutdown(struct platform_device *pdev) vdac_set_ctrl0_ctrl1(cntl0, cntl1); } - -static const struct of_device_id aml_vdac_dt_match[] = { - { - .compatible = "amlogic, vdac", - }, - {}, -}; - static struct platform_driver aml_vdac_driver = { .driver = { .name = "aml_vdac", .owner = THIS_MODULE, - .of_match_table = aml_vdac_dt_match, + .of_match_table = meson_vdac_dt_match, }, .probe = aml_vdac_probe, .remove = __exit_p(aml_vdac_remove), diff --git a/include/linux/amlogic/media/vout/vdac_dev.h b/include/linux/amlogic/media/vout/vdac_dev.h index c6fa495a6609..21971ff463e7 100644 --- a/include/linux/amlogic/media/vout/vdac_dev.h +++ b/include/linux/amlogic/media/vout/vdac_dev.h @@ -18,6 +18,22 @@ #ifndef _VDAC_DEV_H_ #define _VDAC_DEV_H_ +enum vdac_cpu_type { + CPU_TYPE_GXTVBB = 0, + CPU_TYPE_GX_L_M = 1, + CPU_TYPE_TXL = 2, + CPU_TYPE_TXLX = 3, + CPU_TYPE_GXLX = 4, + CPU_TYPE_TXHD = 5, + CPU_TYPE_G12AB = 6, + CPU_TYPE_TL1 = 7, +}; + +struct meson_vdac_data { + enum vdac_cpu_type cpu_id; + const char *name; +}; + extern void vdac_set_ctrl0_ctrl1(unsigned int ctrl0, unsigned int ctrl1); #endif