Skip to content

Commit 3e206b6

Browse files
vsyrjalatursulin
authored andcommitted
drm/i915/sdvo: Filter out invalid outputs more sensibly
We try to filter out the corresponding xxx1 output if the xxx0 output is not present. But the way that is being done is pretty awkward. Make it less so. Cc: [email protected] Signed-off-by: Ville Syrjälä <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] Reviewed-by: Jani Nikula <[email protected]> (cherry picked from commit cc1e663) Signed-off-by: Tvrtko Ursulin <[email protected]>
1 parent d3f6bac commit 3e206b6

File tree

1 file changed

+22
-5
lines changed

1 file changed

+22
-5
lines changed

drivers/gpu/drm/i915/display/intel_sdvo.c

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2926,16 +2926,33 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, int device)
29262926
return false;
29272927
}
29282928

2929+
static u16 intel_sdvo_filter_output_flags(u16 flags)
2930+
{
2931+
flags &= SDVO_OUTPUT_MASK;
2932+
2933+
/* SDVO requires XXX1 function may not exist unless it has XXX0 function.*/
2934+
if (!(flags & SDVO_OUTPUT_TMDS0))
2935+
flags &= ~SDVO_OUTPUT_TMDS1;
2936+
2937+
if (!(flags & SDVO_OUTPUT_RGB0))
2938+
flags &= ~SDVO_OUTPUT_RGB1;
2939+
2940+
if (!(flags & SDVO_OUTPUT_LVDS0))
2941+
flags &= ~SDVO_OUTPUT_LVDS1;
2942+
2943+
return flags;
2944+
}
2945+
29292946
static bool
29302947
intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo, u16 flags)
29312948
{
2932-
/* SDVO requires XXX1 function may not exist unless it has XXX0 function.*/
2949+
flags = intel_sdvo_filter_output_flags(flags);
29332950

29342951
if (flags & SDVO_OUTPUT_TMDS0)
29352952
if (!intel_sdvo_dvi_init(intel_sdvo, 0))
29362953
return false;
29372954

2938-
if ((flags & SDVO_TMDS_MASK) == SDVO_TMDS_MASK)
2955+
if (flags & SDVO_OUTPUT_TMDS1)
29392956
if (!intel_sdvo_dvi_init(intel_sdvo, 1))
29402957
return false;
29412958

@@ -2956,19 +2973,19 @@ intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo, u16 flags)
29562973
if (!intel_sdvo_analog_init(intel_sdvo, 0))
29572974
return false;
29582975

2959-
if ((flags & SDVO_RGB_MASK) == SDVO_RGB_MASK)
2976+
if (flags & SDVO_OUTPUT_RGB1)
29602977
if (!intel_sdvo_analog_init(intel_sdvo, 1))
29612978
return false;
29622979

29632980
if (flags & SDVO_OUTPUT_LVDS0)
29642981
if (!intel_sdvo_lvds_init(intel_sdvo, 0))
29652982
return false;
29662983

2967-
if ((flags & SDVO_LVDS_MASK) == SDVO_LVDS_MASK)
2984+
if (flags & SDVO_OUTPUT_LVDS1)
29682985
if (!intel_sdvo_lvds_init(intel_sdvo, 1))
29692986
return false;
29702987

2971-
if ((flags & SDVO_OUTPUT_MASK) == 0) {
2988+
if (flags == 0) {
29722989
unsigned char bytes[2];
29732990

29742991
intel_sdvo->controlled_output = 0;

0 commit comments

Comments
 (0)