From 93ff2f4d511137e8a103661fa01fcfb4167b85cc Mon Sep 17 00:00:00 2001 From: hongmin hua Date: Mon, 16 Jul 2018 14:15:50 +0800 Subject: [PATCH] cec: modify the line check for g12a PD#168682: cec: modify the line check for g12a Change-Id: Id7f318caae3230df9bd6689f566524e05fd512bd Signed-off-by: hongmin hua --- arch/arm64/boot/dts/amlogic/gxl_p212_1g.dts | 1 + .../dts/amlogic/gxl_p212_1g_buildroot.dts | 1 + .../arm64/boot/dts/amlogic/gxl_p212_1g_hd.dts | 1 + arch/arm64/boot/dts/amlogic/gxl_p212_2g.dts | 1 + .../dts/amlogic/gxl_p212_2g_buildroot.dts | 1 + arch/arm64/boot/dts/amlogic/gxl_p230_2g.dts | 1 + .../dts/amlogic/gxl_p230_2g_buildroot.dts | 1 + arch/arm64/boot/dts/amlogic/gxl_p231_1g.dts | 1 + arch/arm64/boot/dts/amlogic/gxl_p231_2g.dts | 1 + .../dts/amlogic/gxl_p231_2g_buildroot.dts | 1 + arch/arm64/boot/dts/amlogic/gxl_p241_1g.dts | 1 + .../dts/amlogic/gxl_p241_1g_buildroot.dts | 1 + .../arm64/boot/dts/amlogic/gxl_p241_v2-1g.dts | 1 + .../dts/amlogic/gxl_p241_v2_1g_buildroot.dts | 1 + arch/arm64/boot/dts/amlogic/gxm_q200_2g.dts | 1 + .../dts/amlogic/gxm_q200_2g_buildroot.dts | 1 + arch/arm64/boot/dts/amlogic/gxm_q201_2g.dts | 1 + arch/arm64/boot/dts/amlogic/gxm_skt.dts | 1 + arch/arm64/boot/dts/amlogic/mesong12a.dtsi | 4 +- arch/arm64/boot/dts/amlogic/mesontxl.dtsi | 1 + .../boot/dts/amlogic/txlx_t962e_r321.dts | 1 + .../dts/amlogic/txlx_t962e_r321_buildroot.dts | 1 + .../boot/dts/amlogic/txlx_t962x_r311_1g.dts | 1 + .../boot/dts/amlogic/txlx_t962x_r311_2g.dts | 1 + .../boot/dts/amlogic/txlx_t962x_r311_720p.dts | 1 + drivers/amlogic/cec/hdmi_ao_cec.c | 88 +++++++++++++------ drivers/amlogic/cec/hdmi_ao_cec.h | 2 + 27 files changed, 89 insertions(+), 29 deletions(-) diff --git a/arch/arm64/boot/dts/amlogic/gxl_p212_1g.dts b/arch/arm64/boot/dts/amlogic/gxl_p212_1g.dts index d76282a6a193..3b465044292d 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_p212_1g.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_p212_1g.dts @@ -639,6 +639,7 @@ pinctrl-0=<&hdmitx_aocec>; reg = <0x0 0xc810023c 0x0 0x4 0x0 0xc8100000 0x0 0x200>; + reg-names = "ao_exit","ao"; }; sysled { 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 7b61b8d4a3a9..13fb0af0c2a7 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_p212_1g_buildroot.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_p212_1g_buildroot.dts @@ -628,6 +628,7 @@ pinctrl-0=<&hdmitx_aocec>; reg = <0x0 0xc810023c 0x0 0x4 0x0 0xc8100000 0x0 0x200>; + reg-names = "ao_exit","ao"; }; sysled { 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 070ebe3c0aaa..2c40f70f0fee 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_p212_1g_hd.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_p212_1g_hd.dts @@ -639,6 +639,7 @@ pinctrl-0=<&hdmitx_aocec>; reg = <0x0 0xc810023c 0x0 0x4 0x0 0xc8100000 0x0 0x200>; + reg-names = "ao_exit","ao"; }; sysled { diff --git a/arch/arm64/boot/dts/amlogic/gxl_p212_2g.dts b/arch/arm64/boot/dts/amlogic/gxl_p212_2g.dts index 4cfe7e46b550..8f130821f1ac 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_p212_2g.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_p212_2g.dts @@ -738,6 +738,7 @@ pinctrl-0=<&hdmitx_aocec>; reg = <0x0 0xc810023c 0x0 0x4 0x0 0xc8100000 0x0 0x200>; + reg-names = "ao_exit","ao"; }; sysled { 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 dc2989b87edf..149cb478c8bb 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_p212_2g_buildroot.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_p212_2g_buildroot.dts @@ -707,6 +707,7 @@ pinctrl-0=<&hdmitx_aocec>; reg = <0x0 0xc810023c 0x0 0x4 0x0 0xc8100000 0x0 0x200>; + reg-names = "ao_exit","ao"; }; sysled { diff --git a/arch/arm64/boot/dts/amlogic/gxl_p230_2g.dts b/arch/arm64/boot/dts/amlogic/gxl_p230_2g.dts index 683c69c7b00f..c8e8b3950f1c 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_p230_2g.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_p230_2g.dts @@ -735,6 +735,7 @@ pinctrl-0=<&hdmitx_aocec>; reg = <0x0 0xc810023c 0x0 0x4 0x0 0xc8100000 0x0 0x200>; + reg-names = "ao_exit","ao"; }; sysled { 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 b3ffda94cbcb..b2e9b9a75f5b 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_p230_2g_buildroot.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_p230_2g_buildroot.dts @@ -722,6 +722,7 @@ pinctrl-0=<&hdmitx_aocec>; reg = <0x0 0xc810023c 0x0 0x4 0x0 0xc8100000 0x0 0x200>; + reg-names = "ao_exit","ao"; }; sysled { diff --git a/arch/arm64/boot/dts/amlogic/gxl_p231_1g.dts b/arch/arm64/boot/dts/amlogic/gxl_p231_1g.dts index a13bd14cb522..770b72c485b9 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_p231_1g.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_p231_1g.dts @@ -661,6 +661,7 @@ pinctrl-0=<&hdmitx_aocec>; reg = <0x0 0xc810023c 0x0 0x4 0x0 0xc8100000 0x0 0x200>; + reg-names = "ao_exit","ao"; }; sysled { diff --git a/arch/arm64/boot/dts/amlogic/gxl_p231_2g.dts b/arch/arm64/boot/dts/amlogic/gxl_p231_2g.dts index 749f2e0ede8a..ad78b2a2fd9a 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_p231_2g.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_p231_2g.dts @@ -661,6 +661,7 @@ pinctrl-0=<&hdmitx_aocec>; reg = <0x0 0xc810023c 0x0 0x4 0x0 0xc8100000 0x0 0x200>; + reg-names = "ao_exit","ao"; }; sysled { 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 510ecbd5a6d7..b4acc1ecca48 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_p231_2g_buildroot.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_p231_2g_buildroot.dts @@ -653,6 +653,7 @@ pinctrl-0=<&hdmitx_aocec>; reg = <0x0 0xc810023c 0x0 0x4 0x0 0xc8100000 0x0 0x200>; + reg-names = "ao_exit","ao"; }; sysled { diff --git a/arch/arm64/boot/dts/amlogic/gxl_p241_1g.dts b/arch/arm64/boot/dts/amlogic/gxl_p241_1g.dts index 7bd2baa285ba..c5a275599fdc 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_p241_1g.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_p241_1g.dts @@ -711,6 +711,7 @@ pinctrl-0=<&hdmitx_aocec>; reg = <0x0 0xc810023c 0x0 0x4 0x0 0xc8100000 0x0 0x200>; + reg-names = "ao_exit","ao"; }; sysled { 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 b6d0bf3ca86c..aa9cce37a318 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_p241_1g_buildroot.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_p241_1g_buildroot.dts @@ -702,6 +702,7 @@ pinctrl-0=<&hdmitx_aocec>; reg = <0x0 0xc810023c 0x0 0x4 0x0 0xc8100000 0x0 0x200>; + reg-names = "ao_exit","ao"; }; sysled { 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 8690af2149a6..b43d90129241 100644 --- a/arch/arm64/boot/dts/amlogic/gxl_p241_v2-1g.dts +++ b/arch/arm64/boot/dts/amlogic/gxl_p241_v2-1g.dts @@ -712,6 +712,7 @@ pinctrl-0=<&hdmitx_aocec>; reg = <0x0 0xc810023c 0x0 0x4 0x0 0xc8100000 0x0 0x200>; + reg-names = "ao_exit","ao"; }; sysled { 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 b3c7b69e880d..bf77a30db461 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 @@ -701,6 +701,7 @@ pinctrl-0=<&hdmitx_aocec>; reg = <0x0 0xc810023c 0x0 0x4 0x0 0xc8100000 0x0 0x200>; + reg-names = "ao_exit","ao"; }; sysled { diff --git a/arch/arm64/boot/dts/amlogic/gxm_q200_2g.dts b/arch/arm64/boot/dts/amlogic/gxm_q200_2g.dts index 80d5d13d074c..d75ee5c34f0f 100644 --- a/arch/arm64/boot/dts/amlogic/gxm_q200_2g.dts +++ b/arch/arm64/boot/dts/amlogic/gxm_q200_2g.dts @@ -750,6 +750,7 @@ pinctrl-0=<&hdmitx_aocec>; reg = <0x0 0xc810023c 0x0 0x4 0x0 0xc8100000 0x0 0x200>; + reg-names = "ao_exit","ao"; }; sysled { 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 343d5966dac6..03ec33124078 100644 --- a/arch/arm64/boot/dts/amlogic/gxm_q200_2g_buildroot.dts +++ b/arch/arm64/boot/dts/amlogic/gxm_q200_2g_buildroot.dts @@ -745,6 +745,7 @@ pinctrl-0=<&hdmitx_aocec>; reg = <0x0 0xc810023c 0x0 0x4 0x0 0xc8100000 0x0 0x200>; + reg-names = "ao_exit","ao"; }; sysled { diff --git a/arch/arm64/boot/dts/amlogic/gxm_q201_2g.dts b/arch/arm64/boot/dts/amlogic/gxm_q201_2g.dts index b98f652dced7..0b0bf702b7b9 100644 --- a/arch/arm64/boot/dts/amlogic/gxm_q201_2g.dts +++ b/arch/arm64/boot/dts/amlogic/gxm_q201_2g.dts @@ -750,6 +750,7 @@ pinctrl-0=<&hdmitx_aocec>; reg = <0x0 0xc810023c 0x0 0x4 0x0 0xc8100000 0x0 0x200>; + reg-names = "ao_exit","ao"; }; sysled { diff --git a/arch/arm64/boot/dts/amlogic/gxm_skt.dts b/arch/arm64/boot/dts/amlogic/gxm_skt.dts index f561949cfb55..5e026ec67b8f 100644 --- a/arch/arm64/boot/dts/amlogic/gxm_skt.dts +++ b/arch/arm64/boot/dts/amlogic/gxm_skt.dts @@ -646,6 +646,7 @@ pinctrl-0=<&hdmitx_aocec>; reg = <0x0 0xc810023c 0x0 0x4 0x0 0xc8100000 0x0 0x200>; + reg-names = "ao_exit","ao"; }; meson-fb { diff --git a/arch/arm64/boot/dts/amlogic/mesong12a.dtsi b/arch/arm64/boot/dts/amlogic/mesong12a.dtsi index cbd933657cff..2da80f4b82b5 100644 --- a/arch/arm64/boot/dts/amlogic/mesong12a.dtsi +++ b/arch/arm64/boot/dts/amlogic/mesong12a.dtsi @@ -1103,7 +1103,9 @@ pinctrl-1=<&eecec_b>; pinctrl-2=<&eecec_b>; reg = <0x0 0xFF80023c 0x0 0x4 - 0x0 0xFF800000 0x0 0x400>; + 0x0 0xFF800000 0x0 0x400 + 0x0 0xFF634400 0x0 0x26>; + reg-names = "ao_exit","ao","periphs"; }; /*if you want to use vdin just modify status to "ok"*/ diff --git a/arch/arm64/boot/dts/amlogic/mesontxl.dtsi b/arch/arm64/boot/dts/amlogic/mesontxl.dtsi index 2aeb76e8459a..6de9a9d390f0 100644 --- a/arch/arm64/boot/dts/amlogic/mesontxl.dtsi +++ b/arch/arm64/boot/dts/amlogic/mesontxl.dtsi @@ -826,6 +826,7 @@ 0x0 0xc8100000 0x0 0x200 0x0 0xda83e000 0x0 0x10 0x0 0xc883c000 0x0 0x400>; + reg-names = "ao_exit","ao","hdmirx","hhi"; }; canvas: canvas{ diff --git a/arch/arm64/boot/dts/amlogic/txlx_t962e_r321.dts b/arch/arm64/boot/dts/amlogic/txlx_t962e_r321.dts index a635ebebd0c4..669df5dbb10c 100644 --- a/arch/arm64/boot/dts/amlogic/txlx_t962e_r321.dts +++ b/arch/arm64/boot/dts/amlogic/txlx_t962e_r321.dts @@ -961,6 +961,7 @@ pinctrl-2=<&hdmitx_aocecb>; reg = <0x0 0xFF80023c 0x0 0x4 0x0 0xFF800000 0x0 0x400>; + reg-names = "ao_exit","ao"; }; 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 440d31cafefa..4b1203e78e8f 100644 --- a/arch/arm64/boot/dts/amlogic/txlx_t962e_r321_buildroot.dts +++ b/arch/arm64/boot/dts/amlogic/txlx_t962e_r321_buildroot.dts @@ -1009,6 +1009,7 @@ pinctrl-2=<&hdmitx_aocecb>; reg = <0x0 0xFF80023c 0x0 0x4 0x0 0xFF800000 0x0 0x400>; + reg-names = "ao_exit","ao"; }; 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 1c5a6159b0d2..f029ec42d2b4 100644 --- a/arch/arm64/boot/dts/amlogic/txlx_t962x_r311_1g.dts +++ b/arch/arm64/boot/dts/amlogic/txlx_t962x_r311_1g.dts @@ -988,6 +988,7 @@ pinctrl-2=<&hdmitx_aocecb>; reg = <0x0 0xFF80023c 0x0 0x4 0x0 0xFF800000 0x0 0x400>; + reg-names = "ao_exit","ao"; }; 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 62aac694e438..00378df6a911 100644 --- a/arch/arm64/boot/dts/amlogic/txlx_t962x_r311_2g.dts +++ b/arch/arm64/boot/dts/amlogic/txlx_t962x_r311_2g.dts @@ -994,6 +994,7 @@ pinctrl-2=<&hdmitx_aocecb>; reg = <0x0 0xFF80023c 0x0 0x4 0x0 0xFF800000 0x0 0x400>; + reg-names = "ao_exit","ao"; }; 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 ee7392170ad3..6ba8530ced15 100644 --- a/arch/arm64/boot/dts/amlogic/txlx_t962x_r311_720p.dts +++ b/arch/arm64/boot/dts/amlogic/txlx_t962x_r311_720p.dts @@ -987,6 +987,7 @@ pinctrl-2=<&hdmitx_aocecb>; reg = <0x0 0xFF80023c 0x0 0x4 0x0 0xFF800000 0x0 0x400>; + reg-names = "ao_exit","ao"; }; diff --git a/drivers/amlogic/cec/hdmi_ao_cec.c b/drivers/amlogic/cec/hdmi_ao_cec.c index 96df6d326080..be497086e9dc 100644 --- a/drivers/amlogic/cec/hdmi_ao_cec.c +++ b/drivers/amlogic/cec/hdmi_ao_cec.c @@ -87,6 +87,7 @@ static struct early_suspend aocec_suspend_handler; #define MAX_INT 0x7ffffff struct cec_platform_data_s { + unsigned char line_reg;/*cec gpio_i reg:0 ao;1 periph*/ unsigned int line_bit;/*cec gpio position in reg*/ bool ee_to_ao;/*ee cec hw module mv to ao;ao cec delete*/ }; @@ -112,6 +113,7 @@ struct ao_cec_dev { void __iomem *cec_reg; void __iomem *hdmi_rxreg; void __iomem *hhi_reg; + void __iomem *periphs_reg; struct hdmitx_dev *tx_dev; struct workqueue_struct *cec_thread; struct device *dbg_dev; @@ -946,7 +948,6 @@ static int cec_ll_trigle_tx(const unsigned char *msg, int len) return 0; } CEC_ERR("error msg sts:0x%x\n", reg); - return -1; } @@ -989,7 +990,10 @@ static int get_line(void) { int reg, ret = -EINVAL; - reg = readl(cec_dev->cec_reg + AO_GPIO_I); + if (cec_dev->plat_data->line_reg == 1) + reg = readl(cec_dev->periphs_reg + PREG_PAD_GPIO3_I); + else + reg = readl(cec_dev->cec_reg + AO_GPIO_I); ret = (reg & (1 << cec_dev->plat_data->line_bit)); return ret; @@ -1375,7 +1379,6 @@ static int cec_late_check_rx_buffer(void) cec_rx_buf_clear(); return 0; } - return 1; } @@ -1895,7 +1898,6 @@ static ssize_t port_status_show(struct class *cla, tmp = tx_hpd; return sprintf(buf, "%x\n", tmp); } - tmp = hdmirx_rd_top(TOP_HPD_PWR5V); CEC_INFO("TOP_HPD_PWR5V:%x\n", tmp); tmp >>= 20; @@ -2512,21 +2514,25 @@ static void aocec_late_resume(struct early_suspend *h) #ifdef CONFIG_OF static const struct cec_platform_data_s cec_gxl_data = { + .line_reg = 0, .line_bit = 8, .ee_to_ao = 0, }; static const struct cec_platform_data_s cec_txlx_data = { + .line_reg = 0, .line_bit = 7, .ee_to_ao = 1, }; static const struct cec_platform_data_s cec_g12a_data = { - .line_bit = 7, + .line_reg = 1, + .line_bit = 3, .ee_to_ao = 1, }; static const struct cec_platform_data_s cec_txl_data = { + .line_reg = 0, .line_bit = 7, .ee_to_ao = 0, }; @@ -2691,39 +2697,63 @@ static int aml_cec_probe(struct platform_device *pdev) if (ret > 0) CEC_ERR("select state error:0x%x\n", ret); } - - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "ao_exit"); if (res) { - base = ioremap(res->start, res->end - res->start); + base = devm_ioremap(&pdev->dev, res->start, + res->end - res->start); + if (!base) { + CEC_ERR("Unable to map ao_exit base\n"); + goto tag_cec_reg_map_err; + } cec_dev->exit_reg = (void *)base; - } else { - CEC_INFO("no memory resource\n"); - cec_dev->exit_reg = NULL; - } - res = platform_get_resource(pdev, IORESOURCE_MEM, 1); + } else + CEC_ERR("no ao_exit regs\n") + res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "ao"); if (res) { - base = ioremap(res->start, res->end - res->start); + base = devm_ioremap(&pdev->dev, res->start, + res->end - res->start); + if (!base) { + CEC_ERR("Unable to map ao base\n"); + goto tag_cec_reg_map_err; + } cec_dev->cec_reg = (void *)base; } else { - CEC_ERR("no CEC reg resource\n"); - cec_dev->cec_reg = NULL; + CEC_ERR("no ao regs\n"); + goto tag_cec_reg_map_err; } - res = platform_get_resource(pdev, IORESOURCE_MEM, 2); + res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "hdmirx"); if (res) { - base = ioremap(res->start, res->end - res->start); + base = devm_ioremap(&pdev->dev, res->start, + res->end - res->start); + if (!base) { + CEC_ERR("Unable to map hdmirx base\n"); + goto tag_cec_reg_map_err; + } cec_dev->hdmi_rxreg = (void *)base; - } else { - CEC_ERR("no hdmirx reg resource\n"); - cec_dev->hdmi_rxreg = NULL; - } - res = platform_get_resource(pdev, IORESOURCE_MEM, 3); + } else + CEC_ERR("no hdmirx regs\n") + res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "hhi"); if (res) { - base = ioremap(res->start, res->end - res->start); + base = devm_ioremap(&pdev->dev, res->start, + res->end - res->start); + if (!base) { + CEC_ERR("Unable to map hhi base\n"); + goto tag_cec_reg_map_err; + } cec_dev->hhi_reg = (void *)base; - } else { - CEC_ERR("no hhi reg resource\n"); - cec_dev->hhi_reg = NULL; - } + } else + CEC_ERR("no hhi regs\n") + res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "periphs"); + if (res) { + base = devm_ioremap(&pdev->dev, res->start, + res->end - res->start); + if (!base) { + CEC_ERR("Unable to map periphs base\n"); + goto tag_cec_reg_map_err; + } + cec_dev->periphs_reg = (void *)base; + } else + CEC_ERR("no periphs regs\n") r = of_property_read_u32(node, "port_num", &(cec_dev->port_num)); if (r) { CEC_ERR("not find 'port_num'\n"); @@ -2822,6 +2852,8 @@ static int aml_cec_probe(struct platform_device *pdev) return 0; tag_cec_msg_alloc_err: + free_irq(cec_dev->irq_cec, (void *)cec_dev); +tag_cec_reg_map_err: input_free_device(cec_dev->cec_info.remote_cec_dev); tag_cec_alloc_input_err: destroy_workqueue(cec_dev->cec_thread); diff --git a/drivers/amlogic/cec/hdmi_ao_cec.h b/drivers/amlogic/cec/hdmi_ao_cec.h index f54c1b113114..4d94c8447352 100644 --- a/drivers/amlogic/cec/hdmi_ao_cec.h +++ b/drivers/amlogic/cec/hdmi_ao_cec.h @@ -39,6 +39,8 @@ #define AO_BASE 0xc8100000 #define AO_GPIO_I ((0x0A << 2)) +#define PREG_PAD_GPIO3_I (0x01b << 2) + #define AO_CEC_GEN_CNTL ((0x40 << 2)) #define AO_CEC_RW_REG ((0x41 << 2)) -- 2.20.1