Skip to content

Commit 73d5232

Browse files
vsyrjalagregkh
authored andcommitted
drm/i915/sdvo: Filter out invalid outputs more sensibly
commit 3e206b6 upstream. 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]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 2219b6a commit 73d5232

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
@@ -2939,16 +2939,33 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, int device)
29392939
return false;
29402940
}
29412941

2942+
static u16 intel_sdvo_filter_output_flags(u16 flags)
2943+
{
2944+
flags &= SDVO_OUTPUT_MASK;
2945+
2946+
/* SDVO requires XXX1 function may not exist unless it has XXX0 function.*/
2947+
if (!(flags & SDVO_OUTPUT_TMDS0))
2948+
flags &= ~SDVO_OUTPUT_TMDS1;
2949+
2950+
if (!(flags & SDVO_OUTPUT_RGB0))
2951+
flags &= ~SDVO_OUTPUT_RGB1;
2952+
2953+
if (!(flags & SDVO_OUTPUT_LVDS0))
2954+
flags &= ~SDVO_OUTPUT_LVDS1;
2955+
2956+
return flags;
2957+
}
2958+
29422959
static bool
29432960
intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo, u16 flags)
29442961
{
2945-
/* SDVO requires XXX1 function may not exist unless it has XXX0 function.*/
2962+
flags = intel_sdvo_filter_output_flags(flags);
29462963

29472964
if (flags & SDVO_OUTPUT_TMDS0)
29482965
if (!intel_sdvo_dvi_init(intel_sdvo, 0))
29492966
return false;
29502967

2951-
if ((flags & SDVO_TMDS_MASK) == SDVO_TMDS_MASK)
2968+
if (flags & SDVO_OUTPUT_TMDS1)
29522969
if (!intel_sdvo_dvi_init(intel_sdvo, 1))
29532970
return false;
29542971

@@ -2969,19 +2986,19 @@ intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo, u16 flags)
29692986
if (!intel_sdvo_analog_init(intel_sdvo, 0))
29702987
return false;
29712988

2972-
if ((flags & SDVO_RGB_MASK) == SDVO_RGB_MASK)
2989+
if (flags & SDVO_OUTPUT_RGB1)
29732990
if (!intel_sdvo_analog_init(intel_sdvo, 1))
29742991
return false;
29752992

29762993
if (flags & SDVO_OUTPUT_LVDS0)
29772994
if (!intel_sdvo_lvds_init(intel_sdvo, 0))
29782995
return false;
29792996

2980-
if ((flags & SDVO_LVDS_MASK) == SDVO_LVDS_MASK)
2997+
if (flags & SDVO_OUTPUT_LVDS1)
29812998
if (!intel_sdvo_lvds_init(intel_sdvo, 1))
29822999
return false;
29833000

2984-
if ((flags & SDVO_OUTPUT_MASK) == 0) {
3001+
if (flags == 0) {
29853002
unsigned char bytes[2];
29863003

29873004
intel_sdvo->controlled_output = 0;

0 commit comments

Comments
 (0)