summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorRay <1458889+Raybuntu@users.noreply.github.com>2019-03-28 09:47:47 +0100
committerDongjin Kim <tobetter@gmail.com>2019-06-20 16:22:03 +0900
commit5134053b17327b30b38c4369d77b74941837c21f (patch)
treea8d511d27fb0b1a73c08f78924b2a009210d2c71 /arch
parenta0c6eed5482b91bfb80b0e981c7c790ee2258acc (diff)
downloadu-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.c18
-rw-r--r--arch/arm/cpu/armv8/g12b/firmware/scp_task/hdmi_cec_arc.c18
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);