pinctrl-names="default", "hdmitx_i2c";
pinctrl-0=<&hdmitx_hpd &hdmitx_ddc>;
pinctrl-1=<&hdmitx_hpd_gpio &i2c3_master_pins1>;
- clocks = <&clkc CLKID_VAPB_MUX>,
- <&clkc CLKID_VPU_MUX>;
- clock-names = "hdmi_vapb_clk",
- "hdmi_vpu_clk";
+ clocks = <&clkc CLKID_VCLK2_ENCI
+ &clkc CLKID_VCLK2_VENCI0
+ &clkc CLKID_VCLK2_VENCI1
+ &clkc CLKID_VAPB_MUX
+ &clkc CLKID_VPU_MUX>;
+ clock-names = "venci_top_gate",
+ "venci_0_gate",
+ "venci_1_gate",
+ "hdmi_vapb_clk",
+ "hdmi_vpu_clk";
/* HPD, 57 + 32 = 89; CEC, 151 + 32 = 183*/
interrupts = <0 57 1>;
interrupt-names = "hdmitx_hpd";
#include <linux/amlogic/media/vout/hdmi_tx/hdmi_config.h>
#include "hw/tvenc_conf.h"
#include "hw/common.h"
+#include "hw/hw_clk.h"
#include "hdmi_tx_hdcp.h"
#define DEVICE_NAME "amhdmitx"
/* support format lists */
const char *disp_mode_t[] = {
-#if 0
+#if 1
"480i60hz",
"576i50hz",
#endif
hdev->HWOp.CntlConfig(hdev, CONF_CLR_AVI_PACKET, 0);
hdev->HWOp.CntlConfig(hdev, CONF_CLR_VSDB_PACKET, 0);
hdev->HWOp.CntlMisc(hdev, MISC_TMDS_PHY_OP, TMDS_PHY_DISABLE);
+ if (hdev->para->hdmitx_vinfo.viu_mux == VIU_MUX_ENCI)
+ hdmitx_disable_vclk2_enci(hdev);
hdev->para = hdmi_get_fmt_name("invalid", hdev->fmt_attr);
hdmitx_validate_vmode("null");
{
struct clk *hdmi_clk_vapb, *hdmi_clk_vpu;
struct clk *hdcp22_tx_skp, *hdcp22_tx_esm;
+ struct clk *venci_top_gate, *venci_0_gate, *venci_1_gate;
hdmi_clk_vapb = devm_clk_get(hdmitx_dev, "hdmi_vapb_clk");
if (IS_ERR(hdmi_clk_vapb))
- pr_err(SYS "vapb_clk failed to probe\n");
+ pr_warn(SYS "vapb_clk failed to probe\n");
else {
hdmitx_device.hdmitx_clk_tree.hdmi_clk_vapb = hdmi_clk_vapb;
clk_prepare_enable(hdmitx_device.hdmitx_clk_tree.hdmi_clk_vapb);
hdmi_clk_vpu = devm_clk_get(hdmitx_dev, "hdmi_vpu_clk");
if (IS_ERR(hdmi_clk_vpu))
- pr_err(SYS "vpu_clk failed to probe\n");
+ pr_warn(SYS "vpu_clk failed to probe\n");
else {
hdmitx_device.hdmitx_clk_tree.hdmi_clk_vpu = hdmi_clk_vpu;
clk_prepare_enable(hdmitx_device.hdmitx_clk_tree.hdmi_clk_vpu);
hdcp22_tx_skp = devm_clk_get(hdmitx_dev, "hdcp22_tx_skp");
if (IS_ERR(hdcp22_tx_skp))
- pr_err(SYS "hdcp22_tx_skp failed to probe\n");
+ pr_warn(SYS "hdcp22_tx_skp failed to probe\n");
else
hdmitx_device.hdmitx_clk_tree.hdcp22_tx_skp = hdcp22_tx_skp;
hdcp22_tx_esm = devm_clk_get(hdmitx_dev, "hdcp22_tx_esm");
if (IS_ERR(hdcp22_tx_esm))
- pr_err(SYS "hdcp22_tx_esm failed to probe\n");
+ pr_warn(SYS "hdcp22_tx_esm failed to probe\n");
else
hdmitx_device.hdmitx_clk_tree.hdcp22_tx_esm = hdcp22_tx_esm;
+
+ venci_top_gate = devm_clk_get(hdmitx_dev, "venci_top_gate");
+ if (IS_ERR(venci_top_gate))
+ pr_warn(SYS "venci_top_gate failed to probe\n");
+ else
+ hdmitx_device.hdmitx_clk_tree.venci_top_gate = venci_top_gate;
+
+ venci_0_gate = devm_clk_get(hdmitx_dev, "venci_0_gate");
+ if (IS_ERR(venci_0_gate))
+ pr_warn(SYS "venci_0_gate failed to probe\n");
+ else
+ hdmitx_device.hdmitx_clk_tree.venci_0_gate = venci_0_gate;
+
+ venci_1_gate = devm_clk_get(hdmitx_dev, "venci_1_gate");
+ if (IS_ERR(venci_1_gate))
+ pr_warn(SYS "venci_0_gate failed to probe\n");
+ else
+ hdmitx_device.hdmitx_clk_tree.venci_1_gate = venci_1_gate;
}
static int amhdmitx_probe(struct platform_device *pdev)
#include "common.h"
#include "mach_reg.h"
#include "hw_clk.h"
+#ifdef CONFIG_AMLOGIC_VPU
+#include <linux/amlogic/media/vpu/vpu.h>
+#endif
/*
* HDMITX Clock configuration
hd_read_reg(P_HHI_GCLK_OTHER)|(1<<17));
}
+void hdmitx_disable_vclk2_enci(struct hdmitx_dev *hdev)
+{
+ if (hdev->hdmitx_clk_tree.venci_top_gate)
+ clk_disable_unprepare(hdev->hdmitx_clk_tree.venci_top_gate);
+
+ if (hdev->hdmitx_clk_tree.venci_0_gate)
+ clk_disable_unprepare(hdev->hdmitx_clk_tree.venci_0_gate);
+
+ if (hdev->hdmitx_clk_tree.venci_1_gate)
+ clk_disable_unprepare(hdev->hdmitx_clk_tree.venci_1_gate);
+
+#ifdef CONFIG_AMLOGIC_VPU
+ switch_vpu_clk_gate_vmod(VPU_VENCI, VPU_CLK_GATE_OFF);
+ switch_vpu_mem_pd_vmod(VPU_VENCI, VPU_MEM_POWER_DOWN);
+#endif
+
+}
+
void hdmitx_set_vclk2_enci(struct hdmitx_dev *hdev)
{
- hd_set_reg_bits(P_HHI_GCLK_OTHER, 1, 8, 1);
+ if (hdev->hdmitx_clk_tree.venci_top_gate)
+ clk_prepare_enable(hdev->hdmitx_clk_tree.venci_top_gate);
+
+ if (hdev->hdmitx_clk_tree.venci_0_gate)
+ clk_prepare_enable(hdev->hdmitx_clk_tree.venci_0_gate);
+
+ if (hdev->hdmitx_clk_tree.venci_1_gate)
+ clk_prepare_enable(hdev->hdmitx_clk_tree.venci_1_gate);
+
+#ifdef CONFIG_AMLOGIC_VPU
+ switch_vpu_clk_gate_vmod(VPU_VENCI, VPU_CLK_GATE_ON);
+ switch_vpu_mem_pd_vmod(VPU_VENCI, VPU_MEM_POWER_ON);
+#endif
+
}
void hdmitx_set_cts_sys_clk(struct hdmitx_dev *hdev)