Merge tag 'drm-misc-fixes-2017-11-20' of git://anongit.freedesktop.org/drm/drm-misc into drm-next
4.15 merge window fixes 1 * tag 'drm-misc-fixes-2017-11-20' of git://anongit.freedesktop.org/drm/drm-misc: drm/edid: Don't send non-zero YQ in AVI infoframe for HDMI 1.x sinks drm/vc4: Account for interrupts in flight
This commit is contained in:
commit
c209101fc1
5 changed files with 22 additions and 5 deletions
|
@ -4831,7 +4831,8 @@ void
|
|||
drm_hdmi_avi_infoframe_quant_range(struct hdmi_avi_infoframe *frame,
|
||||
const struct drm_display_mode *mode,
|
||||
enum hdmi_quantization_range rgb_quant_range,
|
||||
bool rgb_quant_range_selectable)
|
||||
bool rgb_quant_range_selectable,
|
||||
bool is_hdmi2_sink)
|
||||
{
|
||||
/*
|
||||
* CEA-861:
|
||||
|
@ -4855,8 +4856,15 @@ drm_hdmi_avi_infoframe_quant_range(struct hdmi_avi_infoframe *frame,
|
|||
* YQ-field to match the RGB Quantization Range being transmitted
|
||||
* (e.g., when Limited Range RGB, set YQ=0 or when Full Range RGB,
|
||||
* set YQ=1) and the Sink shall ignore the YQ-field."
|
||||
*
|
||||
* Unfortunate certain sinks (eg. VIZ Model 67/E261VA) get confused
|
||||
* by non-zero YQ when receiving RGB. There doesn't seem to be any
|
||||
* good way to tell which version of CEA-861 the sink supports, so
|
||||
* we limit non-zero YQ to HDMI 2.0 sinks only as HDMI 2.0 is based
|
||||
* on on CEA-861-F.
|
||||
*/
|
||||
if (rgb_quant_range == HDMI_QUANTIZATION_RANGE_LIMITED)
|
||||
if (!is_hdmi2_sink ||
|
||||
rgb_quant_range == HDMI_QUANTIZATION_RANGE_LIMITED)
|
||||
frame->ycc_quantization_range =
|
||||
HDMI_YCC_QUANTIZATION_RANGE_LIMITED;
|
||||
else
|
||||
|
|
|
@ -487,7 +487,8 @@ static void intel_hdmi_set_avi_infoframe(struct drm_encoder *encoder,
|
|||
crtc_state->limited_color_range ?
|
||||
HDMI_QUANTIZATION_RANGE_LIMITED :
|
||||
HDMI_QUANTIZATION_RANGE_FULL,
|
||||
intel_hdmi->rgb_quant_range_selectable);
|
||||
intel_hdmi->rgb_quant_range_selectable,
|
||||
is_hdmi2_sink);
|
||||
|
||||
/* TODO: handle pixel repetition for YCBCR420 outputs */
|
||||
intel_write_infoframe(encoder, crtc_state, &frame);
|
||||
|
|
|
@ -424,7 +424,8 @@ static void vc4_hdmi_set_avi_infoframe(struct drm_encoder *encoder)
|
|||
vc4_encoder->limited_rgb_range ?
|
||||
HDMI_QUANTIZATION_RANGE_LIMITED :
|
||||
HDMI_QUANTIZATION_RANGE_FULL,
|
||||
vc4_encoder->rgb_range_selectable);
|
||||
vc4_encoder->rgb_range_selectable,
|
||||
false);
|
||||
|
||||
vc4_hdmi_write_infoframe(encoder, &frame);
|
||||
}
|
||||
|
|
|
@ -208,6 +208,9 @@ vc4_irq_postinstall(struct drm_device *dev)
|
|||
{
|
||||
struct vc4_dev *vc4 = to_vc4_dev(dev);
|
||||
|
||||
/* Undo the effects of a previous vc4_irq_uninstall. */
|
||||
enable_irq(dev->irq);
|
||||
|
||||
/* Enable both the render done and out of memory interrupts. */
|
||||
V3D_WRITE(V3D_INTENA, V3D_DRIVER_IRQS);
|
||||
|
||||
|
@ -225,6 +228,9 @@ vc4_irq_uninstall(struct drm_device *dev)
|
|||
/* Clear any pending interrupts we might have left. */
|
||||
V3D_WRITE(V3D_INTCTL, V3D_DRIVER_IRQS);
|
||||
|
||||
/* Finish any interrupt handler still in flight. */
|
||||
disable_irq(dev->irq);
|
||||
|
||||
cancel_work_sync(&vc4->overflow_mem_work);
|
||||
}
|
||||
|
||||
|
|
|
@ -362,7 +362,8 @@ void
|
|||
drm_hdmi_avi_infoframe_quant_range(struct hdmi_avi_infoframe *frame,
|
||||
const struct drm_display_mode *mode,
|
||||
enum hdmi_quantization_range rgb_quant_range,
|
||||
bool rgb_quant_range_selectable);
|
||||
bool rgb_quant_range_selectable,
|
||||
bool is_hdmi2_sink);
|
||||
|
||||
/**
|
||||
* drm_eld_mnl - Get ELD monitor name length in bytes.
|
||||
|
|
Loading…
Reference in a new issue