Lines Matching full:encoder

98  * drm_helper_encoder_in_use - check if a given encoder is in use
99 * @encoder: encoder to check
101 * Checks whether @encoder is with the current mode setting output configuration
106 * True if @encoder is used, false otherwise.
108 bool drm_helper_encoder_in_use(struct drm_encoder *encoder) in drm_helper_encoder_in_use() argument
112 struct drm_device *dev = encoder->dev; in drm_helper_encoder_in_use()
128 if (connector->encoder == encoder) { in drm_helper_encoder_in_use()
151 struct drm_encoder *encoder; in drm_helper_crtc_in_use() local
163 drm_for_each_encoder(encoder, dev) in drm_helper_crtc_in_use()
164 if (encoder->crtc == crtc && drm_helper_encoder_in_use(encoder)) in drm_helper_crtc_in_use()
171 drm_encoder_disable(struct drm_encoder *encoder) in drm_encoder_disable() argument
173 const struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private; in drm_encoder_disable()
179 (*encoder_funcs->disable)(encoder); in drm_encoder_disable()
181 (*encoder_funcs->dpms)(encoder, DRM_MODE_DPMS_OFF); in drm_encoder_disable()
186 struct drm_encoder *encoder; in __drm_helper_disable_unused_functions() local
191 drm_for_each_encoder(encoder, dev) { in __drm_helper_disable_unused_functions()
192 if (!drm_helper_encoder_in_use(encoder)) { in __drm_helper_disable_unused_functions()
193 drm_encoder_disable(encoder); in __drm_helper_disable_unused_functions()
194 /* disconnect encoder from any connector */ in __drm_helper_disable_unused_functions()
195 encoder->crtc = NULL; in __drm_helper_disable_unused_functions()
218 * will remove any CRTC links of unused encoders and encoder links of
251 struct drm_encoder *encoder; in drm_crtc_prepare_encoders() local
253 drm_for_each_encoder(encoder, dev) { in drm_crtc_prepare_encoders()
254 encoder_funcs = encoder->helper_private; in drm_crtc_prepare_encoders()
259 if (encoder->crtc == NULL) in drm_crtc_prepare_encoders()
260 drm_encoder_disable(encoder); in drm_crtc_prepare_encoders()
295 struct drm_encoder *encoder; in drm_crtc_helper_set_mode() local
329 drm_for_each_encoder(encoder, dev) { in drm_crtc_helper_set_mode()
331 if (encoder->crtc != crtc) in drm_crtc_helper_set_mode()
334 encoder_funcs = encoder->helper_private; in drm_crtc_helper_set_mode()
338 encoder_funcs = encoder->helper_private; in drm_crtc_helper_set_mode()
340 if (!(ret = encoder_funcs->mode_fixup(encoder, mode, in drm_crtc_helper_set_mode()
342 DRM_DEBUG_KMS("Encoder fixup failed\n"); in drm_crtc_helper_set_mode()
360 drm_for_each_encoder(encoder, dev) { in drm_crtc_helper_set_mode()
362 if (encoder->crtc != crtc) in drm_crtc_helper_set_mode()
365 encoder_funcs = encoder->helper_private; in drm_crtc_helper_set_mode()
371 encoder_funcs->prepare(encoder); in drm_crtc_helper_set_mode()
385 drm_for_each_encoder(encoder, dev) { in drm_crtc_helper_set_mode()
387 if (encoder->crtc != crtc) in drm_crtc_helper_set_mode()
390 encoder_funcs = encoder->helper_private; in drm_crtc_helper_set_mode()
394 DRM_DEBUG_KMS("[ENCODER:%d:%s] set [MODE:%s]\n", in drm_crtc_helper_set_mode()
395 encoder->base.id, encoder->name, mode->name); in drm_crtc_helper_set_mode()
397 encoder_funcs->mode_set(encoder, mode, adjusted_mode); in drm_crtc_helper_set_mode()
403 drm_for_each_encoder(encoder, dev) { in drm_crtc_helper_set_mode()
405 if (encoder->crtc != crtc) in drm_crtc_helper_set_mode()
408 encoder_funcs = encoder->helper_private; in drm_crtc_helper_set_mode()
413 encoder_funcs->commit(encoder); in drm_crtc_helper_set_mode()
442 struct drm_encoder *encoder; in drm_crtc_helper_disable() local
445 drm_for_each_encoder(encoder, dev) { in drm_crtc_helper_disable()
448 if (encoder->crtc != crtc) in drm_crtc_helper_disable()
453 if (connector->encoder != encoder) in drm_crtc_helper_disable()
456 connector->encoder = NULL; in drm_crtc_helper_disable()
460 * doing this, but since we've decoupled the encoder in drm_crtc_helper_disable()
466 /* we keep a reference while the encoder is bound */ in drm_crtc_helper_disable()
482 struct drm_encoder *encoder; in drm_connector_get_single_encoder() local
485 drm_connector_for_each_possible_encoder(connector, encoder) in drm_connector_get_single_encoder()
486 return encoder; in drm_connector_get_single_encoder()
500 * It first tries to locate the best encoder for each connector by calling the
504 * mode_fixup encoder and CRTC helper operations to adjust the requested mode,
517 * and ->commit() CRTC and encoder helper operations, in that order.
534 struct drm_encoder **save_connector_encoders, *new_encoder, *encoder; in drm_crtc_helper_set_config() local
578 * Allocate space for the backup of all (non-pointer) encoder and in drm_crtc_helper_set_config()
599 drm_for_each_encoder(encoder, dev) { in drm_crtc_helper_set_config()
600 save_encoder_crtcs[count++] = encoder->crtc; in drm_crtc_helper_set_config()
606 save_connector_encoders[count++] = connector->encoder; in drm_crtc_helper_set_config()
642 if (set->connectors[ro]->encoder) in drm_crtc_helper_set_config()
653 new_encoder = connector->encoder; in drm_crtc_helper_set_config()
661 /* if we can't get an encoder for a connector in drm_crtc_helper_set_config()
676 if (new_encoder != connector->encoder) { in drm_crtc_helper_set_config()
677 DRM_DEBUG_KMS("encoder changed, full mode switch\n"); in drm_crtc_helper_set_config()
679 /* If the encoder is reused for another connector, then in drm_crtc_helper_set_config()
682 if (connector->encoder) in drm_crtc_helper_set_config()
683 connector->encoder->crtc = NULL; in drm_crtc_helper_set_config()
684 connector->encoder = new_encoder; in drm_crtc_helper_set_config()
697 if (!connector->encoder) in drm_crtc_helper_set_config()
700 if (connector->encoder->crtc == set->crtc) in drm_crtc_helper_set_config()
703 new_crtc = connector->encoder->crtc; in drm_crtc_helper_set_config()
710 /* Make sure the new CRTC will work with the encoder */ in drm_crtc_helper_set_config()
712 !drm_encoder_crtc_ok(connector->encoder, new_crtc)) { in drm_crtc_helper_set_config()
717 if (new_crtc != connector->encoder->crtc) { in drm_crtc_helper_set_config()
720 connector->encoder->crtc = new_crtc; in drm_crtc_helper_set_config()
781 drm_for_each_encoder(encoder, dev) { in drm_crtc_helper_set_config()
782 encoder->crtc = save_encoder_crtcs[count++]; in drm_crtc_helper_set_config()
788 connector->encoder = save_connector_encoders[count++]; in drm_crtc_helper_set_config()
795 if (set->connectors[ro]->encoder) in drm_crtc_helper_set_config()
812 static int drm_helper_choose_encoder_dpms(struct drm_encoder *encoder) in drm_helper_choose_encoder_dpms() argument
817 struct drm_device *dev = encoder->dev; in drm_helper_choose_encoder_dpms()
821 if (connector->encoder == encoder) in drm_helper_choose_encoder_dpms()
829 /* Helper which handles bridge ordering around encoder dpms */
830 static void drm_helper_encoder_dpms(struct drm_encoder *encoder, int mode) in drm_helper_encoder_dpms() argument
834 encoder_funcs = encoder->helper_private; in drm_helper_encoder_dpms()
839 encoder_funcs->dpms(encoder, mode); in drm_helper_encoder_dpms()
851 if (connector->encoder && connector->encoder->crtc == crtc) in drm_helper_choose_crtc_dpms()
882 struct drm_encoder *encoder = connector->encoder; in drm_helper_connector_dpms() local
883 struct drm_crtc *crtc = encoder ? encoder->crtc : NULL; in drm_helper_connector_dpms()
894 if (encoder) in drm_helper_connector_dpms()
895 encoder_dpms = drm_helper_choose_encoder_dpms(encoder); in drm_helper_connector_dpms()
897 /* from off to on, do crtc then encoder */ in drm_helper_connector_dpms()
906 if (encoder) in drm_helper_connector_dpms()
907 drm_helper_encoder_dpms(encoder, encoder_dpms); in drm_helper_connector_dpms()
910 /* from on to off, do encoder then crtc */ in drm_helper_connector_dpms()
912 if (encoder) in drm_helper_connector_dpms()
913 drm_helper_encoder_dpms(encoder, encoder_dpms); in drm_helper_connector_dpms()
956 struct drm_encoder *encoder; in drm_helper_resume_force_mode() local
978 drm_for_each_encoder(encoder, dev) { in drm_helper_resume_force_mode()
980 if(encoder->crtc != crtc) in drm_helper_resume_force_mode()
984 encoder); in drm_helper_resume_force_mode()
986 drm_helper_encoder_dpms(encoder, encoder_dpms); in drm_helper_resume_force_mode()