mirror of https://gitee.com/openkylin/linux.git
drm/i915: Simplify return value from intel_get_load_detect_pipe
... and so remove the confusion as to whether to use the returned crtc or intel_encoder->base.crtc with the subsequent load-detection. Even though they were the same, the two instances of load-detection code disagreed over which was the more correct. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
parent
b259f6730c
commit
7173188d5d
|
@ -305,13 +305,11 @@ static bool intel_crt_detect_ddc(struct drm_connector *connector)
|
||||||
}
|
}
|
||||||
|
|
||||||
static enum drm_connector_status
|
static enum drm_connector_status
|
||||||
intel_crt_load_detect(struct drm_crtc *crtc, struct intel_crt *crt)
|
intel_crt_load_detect(struct intel_crt *crt)
|
||||||
{
|
{
|
||||||
struct drm_encoder *encoder = &crt->base.base;
|
struct drm_device *dev = crt->base.base.dev;
|
||||||
struct drm_device *dev = encoder->dev;
|
|
||||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||||
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
|
uint32_t pipe = to_intel_crtc(crt->base.base.crtc)->pipe;
|
||||||
uint32_t pipe = intel_crtc->pipe;
|
|
||||||
uint32_t save_bclrpat;
|
uint32_t save_bclrpat;
|
||||||
uint32_t save_vtotal;
|
uint32_t save_vtotal;
|
||||||
uint32_t vtotal, vactive;
|
uint32_t vtotal, vactive;
|
||||||
|
@ -454,15 +452,14 @@ intel_crt_detect(struct drm_connector *connector, bool force)
|
||||||
/* for pre-945g platforms use load detect */
|
/* for pre-945g platforms use load detect */
|
||||||
crtc = crt->base.base.crtc;
|
crtc = crt->base.base.crtc;
|
||||||
if (crtc && crtc->enabled) {
|
if (crtc && crtc->enabled) {
|
||||||
status = intel_crt_load_detect(crtc, crt);
|
status = intel_crt_load_detect(crt);
|
||||||
} else {
|
} else {
|
||||||
crtc = intel_get_load_detect_pipe(&crt->base, connector,
|
if (intel_get_load_detect_pipe(&crt->base, connector,
|
||||||
NULL, &dpms_mode);
|
NULL, &dpms_mode)) {
|
||||||
if (crtc) {
|
|
||||||
if (intel_crt_detect_ddc(connector))
|
if (intel_crt_detect_ddc(connector))
|
||||||
status = connector_status_connected;
|
status = connector_status_connected;
|
||||||
else
|
else
|
||||||
status = intel_crt_load_detect(crtc, crt);
|
status = intel_crt_load_detect(crt);
|
||||||
intel_release_load_detect_pipe(&crt->base,
|
intel_release_load_detect_pipe(&crt->base,
|
||||||
connector, dpms_mode);
|
connector, dpms_mode);
|
||||||
} else
|
} else
|
||||||
|
|
|
@ -5481,7 +5481,7 @@ static struct drm_display_mode load_detect_mode = {
|
||||||
704, 832, 0, 480, 489, 491, 520, 0, DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
|
704, 832, 0, 480, 489, 491, 520, 0, DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
|
||||||
};
|
};
|
||||||
|
|
||||||
struct drm_crtc *intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
|
bool intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
|
||||||
struct drm_connector *connector,
|
struct drm_connector *connector,
|
||||||
struct drm_display_mode *mode,
|
struct drm_display_mode *mode,
|
||||||
int *dpms_mode)
|
int *dpms_mode)
|
||||||
|
@ -5517,7 +5517,7 @@ struct drm_crtc *intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
|
||||||
crtc_funcs->dpms(crtc, DRM_MODE_DPMS_ON);
|
crtc_funcs->dpms(crtc, DRM_MODE_DPMS_ON);
|
||||||
encoder_funcs->dpms(encoder, DRM_MODE_DPMS_ON);
|
encoder_funcs->dpms(encoder, DRM_MODE_DPMS_ON);
|
||||||
}
|
}
|
||||||
return crtc;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Find an unused one (if possible) */
|
/* Find an unused one (if possible) */
|
||||||
|
@ -5537,7 +5537,8 @@ struct drm_crtc *intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
|
||||||
* If we didn't find an unused CRTC, don't use any.
|
* If we didn't find an unused CRTC, don't use any.
|
||||||
*/
|
*/
|
||||||
if (!crtc) {
|
if (!crtc) {
|
||||||
return NULL;
|
DRM_DEBUG_KMS("no pipe available for load-detect\n");
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
encoder->crtc = crtc;
|
encoder->crtc = crtc;
|
||||||
|
@ -5561,10 +5562,11 @@ struct drm_crtc *intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
|
||||||
encoder_funcs->mode_set(encoder, &crtc->mode, &crtc->mode);
|
encoder_funcs->mode_set(encoder, &crtc->mode, &crtc->mode);
|
||||||
encoder_funcs->commit(encoder);
|
encoder_funcs->commit(encoder);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* let the connector get through one full cycle before testing */
|
/* let the connector get through one full cycle before testing */
|
||||||
intel_wait_for_vblank(dev, intel_crtc->pipe);
|
intel_wait_for_vblank(dev, intel_crtc->pipe);
|
||||||
|
|
||||||
return crtc;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void intel_release_load_detect_pipe(struct intel_encoder *intel_encoder,
|
void intel_release_load_detect_pipe(struct intel_encoder *intel_encoder,
|
||||||
|
|
|
@ -291,7 +291,7 @@ int intel_get_pipe_from_crtc_id(struct drm_device *dev, void *data,
|
||||||
struct drm_file *file_priv);
|
struct drm_file *file_priv);
|
||||||
extern void intel_wait_for_vblank(struct drm_device *dev, int pipe);
|
extern void intel_wait_for_vblank(struct drm_device *dev, int pipe);
|
||||||
extern void intel_wait_for_pipe_off(struct drm_device *dev, int pipe);
|
extern void intel_wait_for_pipe_off(struct drm_device *dev, int pipe);
|
||||||
extern struct drm_crtc *intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
|
extern bool intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
|
||||||
struct drm_connector *connector,
|
struct drm_connector *connector,
|
||||||
struct drm_display_mode *mode,
|
struct drm_display_mode *mode,
|
||||||
int *dpms_mode);
|
int *dpms_mode);
|
||||||
|
|
|
@ -1361,12 +1361,10 @@ intel_tv_detect(struct drm_connector *connector, bool force)
|
||||||
if (intel_tv->base.base.crtc && intel_tv->base.base.crtc->enabled) {
|
if (intel_tv->base.base.crtc && intel_tv->base.base.crtc->enabled) {
|
||||||
type = intel_tv_detect_type(intel_tv, connector);
|
type = intel_tv_detect_type(intel_tv, connector);
|
||||||
} else if (force) {
|
} else if (force) {
|
||||||
struct drm_crtc *crtc;
|
|
||||||
int dpms_mode;
|
int dpms_mode;
|
||||||
|
|
||||||
crtc = intel_get_load_detect_pipe(&intel_tv->base, connector,
|
if (intel_get_load_detect_pipe(&intel_tv->base, connector,
|
||||||
&mode, &dpms_mode);
|
&mode, &dpms_mode)) {
|
||||||
if (crtc) {
|
|
||||||
type = intel_tv_detect_type(intel_tv, connector);
|
type = intel_tv_detect_type(intel_tv, connector);
|
||||||
intel_release_load_detect_pipe(&intel_tv->base, connector,
|
intel_release_load_detect_pipe(&intel_tv->base, connector,
|
||||||
dpms_mode);
|
dpms_mode);
|
||||||
|
|
Loading…
Reference in New Issue