From d629134c2e85f8eddb6cee44ac7713936aaeddf6 Mon Sep 17 00:00:00 2001 From: Jamie Coldhill Date: Sun, 12 Jun 2016 12:37:23 +0800 Subject: [PATCH 1/3] Kodi video: Modify S905 display drivers to fix black screens when dynamic Refresh Switching and playing back Fractional Refresh Rate video using amcodec decoding with Kodi. Orignal fix for v3.10 Kernel by Codesnake and modded for v3.14 by Alex (surkovalex) --- drivers/amlogic/amports/video.c | 10 +++++++++- drivers/amlogic/display/vout/tv_vout.c | 6 +++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/amlogic/amports/video.c b/drivers/amlogic/amports/video.c index 24361dfd0aed8c..c549fd6520ec6f 100644 --- a/drivers/amlogic/amports/video.c +++ b/drivers/amlogic/amports/video.c @@ -4442,6 +4442,8 @@ static void video_vf_light_unreg_provider(void) spin_unlock_irqrestore(&lock, flags); } +static int frame_duration = 0; + static int video_receiver_event_fun(int type, void *data, void *private_data) { #ifdef CONFIG_AM_VIDEO2 @@ -4488,10 +4490,14 @@ static int video_receiver_event_fun(int type, void *data, void *private_data) } else if (type == VFRAME_EVENT_PROVIDER_FR_HINT) { #ifdef CONFIG_AM_VOUT if (data != NULL) - set_vframe_rate_hint((unsigned long)(data)); + { + frame_duration = (int)data; + set_vframe_rate_hint(frame_duration); + } #endif } else if (type == VFRAME_EVENT_PROVIDER_FR_END_HINT) { #ifdef CONFIG_AM_VOUT + frame_duration = 0; set_vframe_rate_end_hint(); #endif } @@ -6701,6 +6707,8 @@ int vout_notify_callback(struct notifier_block *block, unsigned long cmd, vsync_pts_inc_scale_base = vinfo->sync_duration_num; spin_unlock_irqrestore(&lock, flags); new_vmode = vinfo->mode; + if (frame_duration > 0) + set_vframe_rate_hint(frame_duration); break; case VOUT_EVENT_OSD_PREBLEND_ENABLE: vpp_set_osd_layer_preblend(para); diff --git a/drivers/amlogic/display/vout/tv_vout.c b/drivers/amlogic/display/vout/tv_vout.c index e74bf59f097d5a..30e00bf8b19839 100644 --- a/drivers/amlogic/display/vout/tv_vout.c +++ b/drivers/amlogic/display/vout/tv_vout.c @@ -757,7 +757,7 @@ static int get_vsource_frame_rate(int duration) break; case 1601: case 1602: - frame_rate = 5994; + frame_rate = 6000; break; case 1920: frame_rate = 5000; @@ -766,7 +766,7 @@ static int get_vsource_frame_rate(int duration) frame_rate = 3000; break; case 3203: - frame_rate = 2997; + frame_rate = 3000; break; case 3840: frame_rate = 2500; @@ -775,7 +775,7 @@ static int get_vsource_frame_rate(int duration) frame_rate = 2400; break; case 4004: - frame_rate = 2397; + frame_rate = 2400; break; default: break; From 1978984d42e6fadb24ba70c4b412550a7772a838 Mon Sep 17 00:00:00 2001 From: Jamie Coldhill Date: Sun, 12 Jun 2016 13:01:32 +0800 Subject: [PATCH 2/3] Kodi audio: workaround for DTS-HD MA HDMI Audio Passthrough when using ALSA audio in Kodi. --- drivers/amlogic/audiodsp/audiodsp_module.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/amlogic/audiodsp/audiodsp_module.c b/drivers/amlogic/audiodsp/audiodsp_module.c index b30f8dd1e689bb..990274b87ce6d6 100644 --- a/drivers/amlogic/audiodsp/audiodsp_module.c +++ b/drivers/amlogic/audiodsp/audiodsp_module.c @@ -808,6 +808,10 @@ static ssize_t digital_codec_store(struct class *class, if (buf) { if (kstrtoint(buf, 10, &digital_codec)) pr_info("kstrtoint err %s\n", __func__); + if (digital_codec == 5) { + digital_codec = 8; + pr_info("fixed IEC958 type %s to %s\n", codec_str[5], codec_str[digital_codec]); + } if (digital_codec < SUPPORT_TYPE_NUM) { IEC958_mode_codec = digital_codec; pr_info("IEC958_mode_codec= %d, IEC958 type %s\n", From 69f6dccb45d8ddea77d6d0fb208c37ba6cedc609 Mon Sep 17 00:00:00 2001 From: Jamie Coldhill Date: Sun, 12 Jun 2016 14:01:08 +0800 Subject: [PATCH 3/3] Revert "Kodi video: Modify S905 display drivers to fix black screens when dynamic Refresh Switching" Un-neccessary addition to pull request. This reverts commit d629134c2e85f8eddb6cee44ac7713936aaeddf6. --- drivers/amlogic/amports/video.c | 10 +--------- drivers/amlogic/display/vout/tv_vout.c | 6 +++--- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/drivers/amlogic/amports/video.c b/drivers/amlogic/amports/video.c index c549fd6520ec6f..24361dfd0aed8c 100644 --- a/drivers/amlogic/amports/video.c +++ b/drivers/amlogic/amports/video.c @@ -4442,8 +4442,6 @@ static void video_vf_light_unreg_provider(void) spin_unlock_irqrestore(&lock, flags); } -static int frame_duration = 0; - static int video_receiver_event_fun(int type, void *data, void *private_data) { #ifdef CONFIG_AM_VIDEO2 @@ -4490,14 +4488,10 @@ static int video_receiver_event_fun(int type, void *data, void *private_data) } else if (type == VFRAME_EVENT_PROVIDER_FR_HINT) { #ifdef CONFIG_AM_VOUT if (data != NULL) - { - frame_duration = (int)data; - set_vframe_rate_hint(frame_duration); - } + set_vframe_rate_hint((unsigned long)(data)); #endif } else if (type == VFRAME_EVENT_PROVIDER_FR_END_HINT) { #ifdef CONFIG_AM_VOUT - frame_duration = 0; set_vframe_rate_end_hint(); #endif } @@ -6707,8 +6701,6 @@ int vout_notify_callback(struct notifier_block *block, unsigned long cmd, vsync_pts_inc_scale_base = vinfo->sync_duration_num; spin_unlock_irqrestore(&lock, flags); new_vmode = vinfo->mode; - if (frame_duration > 0) - set_vframe_rate_hint(frame_duration); break; case VOUT_EVENT_OSD_PREBLEND_ENABLE: vpp_set_osd_layer_preblend(para); diff --git a/drivers/amlogic/display/vout/tv_vout.c b/drivers/amlogic/display/vout/tv_vout.c index 30e00bf8b19839..e74bf59f097d5a 100644 --- a/drivers/amlogic/display/vout/tv_vout.c +++ b/drivers/amlogic/display/vout/tv_vout.c @@ -757,7 +757,7 @@ static int get_vsource_frame_rate(int duration) break; case 1601: case 1602: - frame_rate = 6000; + frame_rate = 5994; break; case 1920: frame_rate = 5000; @@ -766,7 +766,7 @@ static int get_vsource_frame_rate(int duration) frame_rate = 3000; break; case 3203: - frame_rate = 3000; + frame_rate = 2997; break; case 3840: frame_rate = 2500; @@ -775,7 +775,7 @@ static int get_vsource_frame_rate(int duration) frame_rate = 2400; break; case 4004: - frame_rate = 2400; + frame_rate = 2397; break; default: break;