Skip to content

Commit cc1e663

Browse files
committed
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]>
1 parent 8388eb0 commit cc1e663

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
@@ -2934,16 +2934,33 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, int device)
29342934
return false;
29352935
}
29362936

2937+
static u16 intel_sdvo_filter_output_flags(u16 flags)
2938+
{
2939+
flags &= SDVO_OUTPUT_MASK;
2940+
2941+
/* SDVO requires XXX1 function may not exist unless it has XXX0 function.*/
2942+
if (!(flags & SDVO_OUTPUT_TMDS0))
2943+
flags &= ~SDVO_OUTPUT_TMDS1;
2944+
2945+
if (!(flags & SDVO_OUTPUT_RGB0))
2946+
flags &= ~SDVO_OUTPUT_RGB1;
2947+
2948+
if (!(flags & SDVO_OUTPUT_LVDS0))
2949+
flags &= ~SDVO_OUTPUT_LVDS1;
2950+
2951+
return flags;
2952+
}
2953+
29372954
static bool
29382955
intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo, u16 flags)
29392956
{
2940-
/* SDVO requires XXX1 function may not exist unless it has XXX0 function.*/
2957+
flags = intel_sdvo_filter_output_flags(flags);
29412958

29422959
if (flags & SDVO_OUTPUT_TMDS0)
29432960
if (!intel_sdvo_dvi_init(intel_sdvo, 0))
29442961
return false;
29452962

2946-
if ((flags & SDVO_TMDS_MASK) == SDVO_TMDS_MASK)
2963+
if (flags & SDVO_OUTPUT_TMDS1)
29472964
if (!intel_sdvo_dvi_init(intel_sdvo, 1))
29482965
return false;
29492966

@@ -2964,19 +2981,19 @@ intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo, u16 flags)
29642981
if (!intel_sdvo_analog_init(intel_sdvo, 0))
29652982
return false;
29662983

2967-
if ((flags & SDVO_RGB_MASK) == SDVO_RGB_MASK)
2984+
if (flags & SDVO_OUTPUT_RGB1)
29682985
if (!intel_sdvo_analog_init(intel_sdvo, 1))
29692986
return false;
29702987

29712988
if (flags & SDVO_OUTPUT_LVDS0)
29722989
if (!intel_sdvo_lvds_init(intel_sdvo, 0))
29732990
return false;
29742991

2975-
if ((flags & SDVO_LVDS_MASK) == SDVO_LVDS_MASK)
2992+
if (flags & SDVO_OUTPUT_LVDS1)
29762993
if (!intel_sdvo_lvds_init(intel_sdvo, 1))
29772994
return false;
29782995

2979-
if ((flags & SDVO_OUTPUT_MASK) == 0) {
2996+
if (flags == 0) {
29802997
unsigned char bytes[2];
29812998

29822999
intel_sdvo->controlled_output = 0;

0 commit comments

Comments
 (0)