/*
 * arch/arm/boot/dts/amlogic/mesong12a_drm.dtsi
 *
 * Copyright (C) 2015 Amlogic, Inc. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 * more details.
 *
 */
#include <dt-bindings/display/meson-drm-ids.h>

/ {
	venc-cvbs {
		status = "okay";
		compatible = "amlogic, meson-g12a-cvbs";

		ports {
			#address-cells = <1>;
			#size-cells = <0>;

			enc_cvbs_in: port@0 {
				 #address-cells = <1>;
				 #size-cells = <0>;
				 reg = <0>;

				 //venc_cvbs_in_vpu: endpoint@0 {
				//	 reg = <0>;
				//	 remote-endpoint = <&vpu_out_venc_cvbs>;
				//};
			};
		};
	};

	drm_amhdmitx: drm-amhdmitx {
		status = "disabled";
		hdcp = "disabled";
		compatible = "amlogic,drm-amhdmitx";
		dev_name = "meson-amhdmitx";
		interrupts = <GIC_SPI 57 IRQ_TYPE_EDGE_RISING>;
		ports {
			port {
				#address-cells = <1>;
				#size-cells = <0>;
				hdmi_in_vpu: endpoint@0 {
					reg = <0>;
					remote-endpoint = <&vpu_out_hdmi>;
				};
			};
		};
	};

	drm_amcvbsout: drm-amcvbsout {
		status = "disabled";
		compatible = "amlogic,drm-cvbsout";
		dev_name = "meson-amcvbsout";
		ports {
			port {
				#address-cells = <1>;
				#size-cells = <0>;
				cvbs_in_vpu: endpoint@0 {
					reg = <0>;
					remote-endpoint = <&vpu_out_cvbs>;
				};
			};
		};
	};

	drm_lcd: drm-lcd {
		status = "disabled";
		compatible = "amlogic,drm-lcd";
		dev_name = "meson-lcd";
		ports {
			port {
				#address-cells = <1>;
				#size-cells = <0>;
				lcd_in_vpu: endpoint@0 {
					reg = <0>;
					remote-endpoint = <&vpu_out_lcd>;
				};
			};
		};
	};

	drm_vpu: drm-vpu@0xff900000  {
		status = "disabled";
		compatible = "amlogic,meson-g12a-vpu";
		memory-region = <&logo_reserved>;
		osd_ver = /bits/ 8 <OSD_V1>;
		reg = <0xff900000 0x40000>,
			  <0xff63c000 0x2000>,
			  <0xff638000 0x2000>;
		reg-names = "base", "hhi", "dmc";
		interrupts = <GIC_SPI 3 IRQ_TYPE_EDGE_RISING>,
			<GIC_SPI 56 IRQ_TYPE_EDGE_RISING>;
		interrupt-names = "viu-vsync", "viu2-vsync";
		clocks = <&clkc CLKID_VPU_CLKC_MUX>;
		clock-names = "vpu_clkc";
		dma-coherent;
		vpu_out: port {
			#address-cells = <1>;
			#size-cells = <0>;

			vpu_out_hdmi: endpoint@0 {
				reg = <0>;
				remote-endpoint = <&hdmi_in_vpu>;
			};
			vpu_out_cvbs: endpoint@1 {
				reg = <0>;
				remote-endpoint = <&cvbs_in_vpu>;
			};
			vpu_out_lcd: endpoint@2 {
				reg = <1>;
				remote-endpoint = <&lcd_in_vpu>;
			};
		};
	};

	drm_subsystem: drm-subsystem {
		status = "okay";
		compatible = "amlogic,drm-subsystem";
		ports = <&vpu_out>;
		fbdev_ui_w = <1920>;
		fbdev_ui_h = <1080>;
		fbdev_fb_w = <1920>;
		fbdev_fb_h = <2160>;
		fbdev_fb_bpp = <32>;

		vpu_topology: vpu_topology {
			vpu_blocks {
				osd1_block: block@0 {
					id = /bits/ 8 <OSD1_BLOCK>;
					index = /bits/ 8  <0>;
					type = /bits/ 8  <0>;
					block_name = "osd1_block";
					num_in_links = /bits/ 8  <0x0>;
					num_out_links = /bits/ 8  <0x1>;
					out_links = <0 &afbc_osd1_block>;
				};
				osd2_block: block@1 {
					id = /bits/ 8  <OSD2_BLOCK>;
					index = /bits/ 8  <1>;
					type = /bits/ 8  <0>;
					block_name = "osd2_block";
					num_in_links = /bits/ 8  <0x0>;
					num_out_links = /bits/ 8  <0x1>;
					out_links = <0 &afbc_osd2_block>;
				};
				osd3_block: block@2 {
					id = /bits/ 8  <OSD3_BLOCK>;
					index = /bits/ 8  <2>;
					type = /bits/ 8  <0>;
					block_name = "osd3_block";
					num_in_links = /bits/ 8  <0x0>;
					num_out_links = /bits/ 8  <0x1>;
					out_links = <0 &afbc_osd3_block>;
				};
				afbc_osd1_block: block@3 {
					id = /bits/ 8  <AFBC_OSD1_BLOCK>;
					index = /bits/ 8  <0>;
					type = /bits/ 8  <1>;
					block_name = "afbc_osd1_block";
					num_in_links = /bits/ 8  <0x1>;
					in_links = <0 &osd1_block>;
					num_out_links = /bits/ 8  <0x1>;
					out_links = <0 &osd_blend_block>;
				};
				afbc_osd2_block: block@4 {
					id = /bits/ 8  <AFBC_OSD2_BLOCK>;
					index = /bits/ 8  <1>;
					type = /bits/ 8  <1>;
					block_name = "afbc_osd2_block";
					num_in_links = /bits/ 8  <0x1>;
					in_links = <0 &osd2_block>;
					num_out_links = /bits/ 8  <0x1>;
					out_links = <0 &scaler_osd2_block>;
				};
				afbc_osd3_block: block@5 {
					id = /bits/ 8  <AFBC_OSD3_BLOCK>;
					index = /bits/ 8  <2>;
					type = /bits/ 8  <1>;
					block_name = "afbc_osd3_block";
					num_in_links = /bits/ 8  <0x1>;
					in_links = <0 &osd3_block>;
					num_out_links = /bits/ 8  <0x1>;
					out_links = <0 &scaler_osd3_block>;
				};
				scaler_osd1_block: block@6 {
					id = /bits/ 8  <SCALER_OSD1_BLOCK>;
					index = /bits/ 8  <0>;
					type = /bits/ 8  <2>;
					block_name = "scaler_osd1_block";
					num_in_links = /bits/ 8  <0x1>;
					in_links = <0 &osd1_hdr_dolby_block>;
					num_out_links = /bits/ 8  <0x1>;
					out_links = <0 &vpp_postblend_block>;
				};
				scaler_osd2_block: block@7 {
					id = /bits/ 8  <SCALER_OSD2_BLOCK>;
					index = /bits/ 8  <1>;
					type = /bits/ 8  <2>;
					block_name = "scaler_osd2_block";
					num_in_links = /bits/ 8  <0x1>;
					in_links = <0 &afbc_osd2_block>;
					num_out_links = /bits/ 8  <0x1>;
					out_links = <2 &osd_blend_block>;
				};
				scaler_osd3_block: block@8 {
					id = /bits/ 8  <SCALER_OSD3_BLOCK>;
					index = /bits/ 8  <2>;
					type = /bits/ 8  <2>;
					block_name = "scaler_osd3_block";
					num_in_links = /bits/ 8  <0x1>;
					in_links = <0 &afbc_osd3_block>;
					num_out_links = /bits/ 8  <0x1>;
					out_links = <3 &osd_blend_block>;
				};
				osd_blend_block: block@9 {
					id = /bits/ 8  <OSD_BLEND_BLOCK>;
					block_name = "osd_blend_block";
					type = /bits/ 8  <3>;
					num_in_links = /bits/ 8  <0x3>;
					in_links = <0 &afbc_osd1_block>,
						<0 &scaler_osd2_block>,
						<0 &scaler_osd3_block>;
					num_out_links = /bits/ 8  <0x2>;
					out_links = <0 &osd1_hdr_dolby_block>,
						<1 &vpp_postblend_block>;
				};
				osd1_hdr_dolby_block: block@10 {
					id = /bits/ 8  <OSD1_HDR_BLOCK>;
					block_name = "osd1_hdr_dolby_block";
					type = /bits/ 8  <4>;
					num_in_links = /bits/ 8  <0x1>;
					in_links = <0 &osd_blend_block>;
					num_out_links = /bits/ 8  <0x1>;
					out_links = <0 &scaler_osd1_block>;
				};
				vpp_postblend_block: block@12 {
					id = /bits/ 8  <VPP_POSTBLEND_BLOCK>;
					block_name = "vpp_postblend_block";
					type = /bits/ 8  <6>;
					num_in_links = /bits/ 8  <0x2>;
					in_links = <0 &scaler_osd1_block>,
						<1 &osd_blend_block>;
					num_out_links = <0x0>;
				};
				video1_block: block@13 {
					id = /bits/ 8 <VIDEO1_BLOCK>;
					index = /bits/ 8  <0>;
					type = /bits/ 8  <7>;
					block_name = "video1_block";
					num_in_links = /bits/ 8  <0x0>;
					num_out_links = /bits/ 8  <0x0>;
				};
				video2_block: block@14 {
					id = /bits/ 8 <VIDEO2_BLOCK>;
					index = /bits/ 8  <1>;
					type = /bits/ 8  <7>;
					block_name = "video2_block";
					num_in_links = /bits/ 8  <0x0>;
					num_out_links = /bits/ 8  <0x0>;
				};
			};
		};

		vpu_hw_para: vpu_hw_para@0 {
			osd_ver = /bits/ 8 <0x2>;
			afbc_type = /bits/ 8 <0x2>;
			has_deband = /bits/ 8 <0x1>;
			has_lut = /bits/ 8 <0x1>;
			has_rdma = /bits/ 8 <0x1>;
			osd_fifo_len = /bits/ 8 <64>;
			vpp_fifo_len = /bits/ 32 <0xfff>;
		};
	};
};

&gpu{
	/*gpu max freq is 850M*/
	def_clk = <1>;
	tbl = <&dvfs285_cfg &dvfs666_cfg &dvfs850_cfg &dvfs850_cfg>;

	dvfs285_cfg:dvfs285_cfg {
		 keep_count = <2>;
		 threshold = <100 200>;
	};

	dvfs666_cfg:dvfs666_cfg {
		 keep_count = <1>;
		 threshold = <85 200>;
	};

	dvfs850_cfg:dvfs850_cfg {
		 keep_count = <1>;
		 threshold = <179 255>;
	};

};
