drm/gma500: Stop using mode->private_flags
gma500 only uses mode->private_flags to convey the sdvo pixel multiplier from the encoder .mode_fixup() hook to the encoder .mode_set() hook. Those always seems get called as a pair so let's just stuff the pixel multiplier into the encoder itself as there are no state objects we could use in this non-atomic driver. Paves the way for nuking mode->private_flag. Cc: Patrik Jakobsson <patrik.r.jakobsson@gmail.com> CC: Sam Ravnborg <sam@ravnborg.org> Cc: Daniel Vetter <daniel.vetter@ffwll.ch> Cc: Emil Velikov <emil.l.velikov@gmail.com> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20200428171940.19552-15-ville.syrjala@linux.intel.com
This commit is contained in:
parent
920dd1b142
commit
269cb04a40
|
@ -56,25 +56,6 @@
|
||||||
#define INTEL_OUTPUT_DISPLAYPORT 9
|
#define INTEL_OUTPUT_DISPLAYPORT 9
|
||||||
#define INTEL_OUTPUT_EDP 10
|
#define INTEL_OUTPUT_EDP 10
|
||||||
|
|
||||||
#define INTEL_MODE_PIXEL_MULTIPLIER_SHIFT (0x0)
|
|
||||||
#define INTEL_MODE_PIXEL_MULTIPLIER_MASK (0xf << INTEL_MODE_PIXEL_MULTIPLIER_SHIFT)
|
|
||||||
|
|
||||||
static inline void
|
|
||||||
psb_intel_mode_set_pixel_multiplier(struct drm_display_mode *mode,
|
|
||||||
int multiplier)
|
|
||||||
{
|
|
||||||
mode->clock *= multiplier;
|
|
||||||
mode->private_flags |= multiplier;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int
|
|
||||||
psb_intel_mode_get_pixel_multiplier(const struct drm_display_mode *mode)
|
|
||||||
{
|
|
||||||
return (mode->private_flags & INTEL_MODE_PIXEL_MULTIPLIER_MASK)
|
|
||||||
>> INTEL_MODE_PIXEL_MULTIPLIER_SHIFT;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Hold information useally put on the device driver privates here,
|
* Hold information useally put on the device driver privates here,
|
||||||
* since it needs to be shared across multiple of devices drivers privates.
|
* since it needs to be shared across multiple of devices drivers privates.
|
||||||
|
|
|
@ -132,6 +132,8 @@ struct psb_intel_sdvo {
|
||||||
/* DDC bus used by this SDVO encoder */
|
/* DDC bus used by this SDVO encoder */
|
||||||
uint8_t ddc_bus;
|
uint8_t ddc_bus;
|
||||||
|
|
||||||
|
u8 pixel_multiplier;
|
||||||
|
|
||||||
/* Input timings for adjusted_mode */
|
/* Input timings for adjusted_mode */
|
||||||
struct psb_intel_sdvo_dtd input_dtd;
|
struct psb_intel_sdvo_dtd input_dtd;
|
||||||
|
|
||||||
|
@ -928,7 +930,6 @@ static bool psb_intel_sdvo_mode_fixup(struct drm_encoder *encoder,
|
||||||
struct drm_display_mode *adjusted_mode)
|
struct drm_display_mode *adjusted_mode)
|
||||||
{
|
{
|
||||||
struct psb_intel_sdvo *psb_intel_sdvo = to_psb_intel_sdvo(encoder);
|
struct psb_intel_sdvo *psb_intel_sdvo = to_psb_intel_sdvo(encoder);
|
||||||
int multiplier;
|
|
||||||
|
|
||||||
/* We need to construct preferred input timings based on our
|
/* We need to construct preferred input timings based on our
|
||||||
* output timings. To do that, we have to set the output
|
* output timings. To do that, we have to set the output
|
||||||
|
@ -955,8 +956,9 @@ static bool psb_intel_sdvo_mode_fixup(struct drm_encoder *encoder,
|
||||||
/* Make the CRTC code factor in the SDVO pixel multiplier. The
|
/* Make the CRTC code factor in the SDVO pixel multiplier. The
|
||||||
* SDVO device will factor out the multiplier during mode_set.
|
* SDVO device will factor out the multiplier during mode_set.
|
||||||
*/
|
*/
|
||||||
multiplier = psb_intel_sdvo_get_pixel_multiplier(adjusted_mode);
|
psb_intel_sdvo->pixel_multiplier =
|
||||||
psb_intel_mode_set_pixel_multiplier(adjusted_mode, multiplier);
|
psb_intel_sdvo_get_pixel_multiplier(adjusted_mode);
|
||||||
|
adjusted_mode->clock *= psb_intel_sdvo->pixel_multiplier;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -972,7 +974,6 @@ static void psb_intel_sdvo_mode_set(struct drm_encoder *encoder,
|
||||||
u32 sdvox;
|
u32 sdvox;
|
||||||
struct psb_intel_sdvo_in_out_map in_out;
|
struct psb_intel_sdvo_in_out_map in_out;
|
||||||
struct psb_intel_sdvo_dtd input_dtd;
|
struct psb_intel_sdvo_dtd input_dtd;
|
||||||
int pixel_multiplier = psb_intel_mode_get_pixel_multiplier(adjusted_mode);
|
|
||||||
int rate;
|
int rate;
|
||||||
int need_aux = IS_MRST(dev) ? 1 : 0;
|
int need_aux = IS_MRST(dev) ? 1 : 0;
|
||||||
|
|
||||||
|
@ -1030,7 +1031,7 @@ static void psb_intel_sdvo_mode_set(struct drm_encoder *encoder,
|
||||||
|
|
||||||
(void) psb_intel_sdvo_set_input_timing(psb_intel_sdvo, &input_dtd);
|
(void) psb_intel_sdvo_set_input_timing(psb_intel_sdvo, &input_dtd);
|
||||||
|
|
||||||
switch (pixel_multiplier) {
|
switch (psb_intel_sdvo->pixel_multiplier) {
|
||||||
default:
|
default:
|
||||||
case 1: rate = SDVO_CLOCK_RATE_MULT_1X; break;
|
case 1: rate = SDVO_CLOCK_RATE_MULT_1X; break;
|
||||||
case 2: rate = SDVO_CLOCK_RATE_MULT_2X; break;
|
case 2: rate = SDVO_CLOCK_RATE_MULT_2X; break;
|
||||||
|
|
Loading…
Reference in New Issue