diff options
author | Ray <1458889+Raybuntu@users.noreply.github.com> | 2019-03-28 09:47:47 +0100 |
---|---|---|
committer | Dongjin Kim <tobetter@gmail.com> | 2019-06-20 16:22:03 +0900 |
commit | 5134053b17327b30b38c4369d77b74941837c21f (patch) | |
tree | a8d511d27fb0b1a73c08f78924b2a009210d2c71 /arch | |
parent | a0c6eed5482b91bfb80b0e981c7c790ee2258acc (diff) | |
download | u-boot-odroid-c1-5134053b17327b30b38c4369d77b74941837c21f.tar.gz |
BACKPORT: CE: CEC: only wake when TV is destination
Change-Id: I92d922ff4768c4b002deaf5ec604abb2a8bbdd27
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/cpu/armv8/g12a/firmware/scp_task/hdmi_cec_arc.c | 18 | ||||
-rw-r--r-- | arch/arm/cpu/armv8/g12b/firmware/scp_task/hdmi_cec_arc.c | 18 |
2 files changed, 10 insertions, 26 deletions
diff --git a/arch/arm/cpu/armv8/g12a/firmware/scp_task/hdmi_cec_arc.c b/arch/arm/cpu/armv8/g12a/firmware/scp_task/hdmi_cec_arc.c index 97065436ce..5d86555360 100644 --- a/arch/arm/cpu/armv8/g12a/firmware/scp_task/hdmi_cec_arc.c +++ b/arch/arm/cpu/armv8/g12a/firmware/scp_task/hdmi_cec_arc.c @@ -558,21 +558,12 @@ static int check_addr(int phy_addr) return 1; } -static int is_playback_dev(int addr) -{ - if (addr != CEC_PLAYBACK_DEVICE_1_ADDR && - addr != CEC_PLAYBACK_DEVICE_2_ADDR && - addr != CEC_PLAYBACK_DEVICE_3_ADDR) { - return 0; - } - return 1; -} - static unsigned int cec_handle_message(void) { unsigned char opcode; unsigned char source; unsigned int phy_addr, wake; + unsigned char dest; source = (cec_msg.buf[cec_msg.rx_read_pos].msg[0] >> 4) & 0xf; if (((hdmi_cec_func_config>>CEC_FUNC_MASK) & 0x1) && @@ -620,9 +611,10 @@ static unsigned int cec_handle_message(void) /* TV Wake up by image/text view on */ case CEC_OC_IMAGE_VIEW_ON: case CEC_OC_TEXT_VIEW_ON: + dest = cec_msg.buf[cec_msg.rx_read_pos].msg[0] & 0xf; if (((hdmi_cec_func_config >> CEC_FUNC_MASK) & 0x1) && ((hdmi_cec_func_config >> AUTO_POWER_ON_MASK) & 0x1) && - (!is_playback_dev(cec_msg.log_addr))) { + (dest == CEC_TV_ADDR)) { /* request active source needed */ phy_addr = 0xffff; cec_msg.cec_power = 0x1; @@ -631,14 +623,14 @@ static unsigned int cec_handle_message(void) writel(wake, AO_RTI_STATUS_REG1); } break; - /* TV Wake up by active source*/ case CEC_OC_ACTIVE_SOURCE: + dest = cec_msg.buf[cec_msg.rx_read_pos].msg[0] & 0xf; phy_addr = (cec_msg.buf[cec_msg.rx_read_pos].msg[2] << 8) | (cec_msg.buf[cec_msg.rx_read_pos].msg[3] << 0); if (((hdmi_cec_func_config >> CEC_FUNC_MASK) & 0x1) && ((hdmi_cec_func_config >> AUTO_POWER_ON_MASK) & 0x1) && - (!is_playback_dev(cec_msg.log_addr) && check_addr(phy_addr))) { + (dest == CEC_TV_ADDR && check_addr(phy_addr))) { cec_msg.cec_power = 0x1; wake = (phy_addr << 0) | (source << 16); diff --git a/arch/arm/cpu/armv8/g12b/firmware/scp_task/hdmi_cec_arc.c b/arch/arm/cpu/armv8/g12b/firmware/scp_task/hdmi_cec_arc.c index c20523c0d8..06cb07b451 100644 --- a/arch/arm/cpu/armv8/g12b/firmware/scp_task/hdmi_cec_arc.c +++ b/arch/arm/cpu/armv8/g12b/firmware/scp_task/hdmi_cec_arc.c @@ -553,21 +553,12 @@ static int check_addr(int phy_addr) return 1; } -static int is_playback_dev(int addr) -{ - if (addr != CEC_PLAYBACK_DEVICE_1_ADDR && - addr != CEC_PLAYBACK_DEVICE_2_ADDR && - addr != CEC_PLAYBACK_DEVICE_3_ADDR) { - return 0; - } - return 1; -} - static unsigned int cec_handle_message(void) { unsigned char opcode; unsigned char source; unsigned int phy_addr, wake; + unsigned char dest; source = (cec_msg.buf[cec_msg.rx_read_pos].msg[0] >> 4) & 0xf; if (((hdmi_cec_func_config>>CEC_FUNC_MASK) & 0x1) && @@ -615,9 +606,10 @@ static unsigned int cec_handle_message(void) /* TV Wake up by image/text view on */ case CEC_OC_IMAGE_VIEW_ON: case CEC_OC_TEXT_VIEW_ON: + dest = cec_msg.buf[cec_msg.rx_read_pos].msg[0] & 0xf; if (((hdmi_cec_func_config >> CEC_FUNC_MASK) & 0x1) && ((hdmi_cec_func_config >> AUTO_POWER_ON_MASK) & 0x1) && - (!is_playback_dev(cec_msg.log_addr))) { + (dest == CEC_TV_ADDR)) { /* request active source needed */ phy_addr = 0xffff; cec_msg.cec_power = 0x1; @@ -626,14 +618,14 @@ static unsigned int cec_handle_message(void) writel(wake, AO_RTI_STATUS_REG1); } break; - /* TV Wake up by active source*/ case CEC_OC_ACTIVE_SOURCE: + dest = cec_msg.buf[cec_msg.rx_read_pos].msg[0] & 0xf; phy_addr = (cec_msg.buf[cec_msg.rx_read_pos].msg[2] << 8) | (cec_msg.buf[cec_msg.rx_read_pos].msg[3] << 0); if (((hdmi_cec_func_config >> CEC_FUNC_MASK) & 0x1) && ((hdmi_cec_func_config >> AUTO_POWER_ON_MASK) & 0x1) && - (!is_playback_dev(cec_msg.log_addr) && check_addr(phy_addr))) { + (dest == CEC_TV_ADDR && check_addr(phy_addr))) { cec_msg.cec_power = 0x1; wake = (phy_addr << 0) | (source << 16); |