Lines Matching refs:encoder
85 * drm_helper_encoder_in_use - check if a given encoder is in use
86 * @encoder: encoder to check
88 * Checks whether @encoder is with the current mode setting output configuration
93 * True if @encoder is used, false otherwise.
95 bool drm_helper_encoder_in_use(struct drm_encoder *encoder)
99 struct drm_device *dev = encoder->dev;
115 if (connector->encoder == encoder) {
138 struct drm_encoder *encoder;
150 drm_for_each_encoder(encoder, dev)
151 if (encoder->crtc == crtc && drm_helper_encoder_in_use(encoder))
158 drm_encoder_disable(struct drm_encoder *encoder)
160 const struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private;
166 (*encoder_funcs->disable)(encoder);
168 (*encoder_funcs->dpms)(encoder, DRM_MODE_DPMS_OFF);
173 struct drm_encoder *encoder;
178 drm_for_each_encoder(encoder, dev) {
179 if (!drm_helper_encoder_in_use(encoder)) {
180 drm_encoder_disable(encoder);
181 /* disconnect encoder from any connector */
182 encoder->crtc = NULL;
205 * will remove any CRTC links of unused encoders and encoder links of
238 struct drm_encoder *encoder;
240 drm_for_each_encoder(encoder, dev) {
241 encoder_funcs = encoder->helper_private;
246 if (encoder->crtc == NULL)
247 drm_encoder_disable(encoder);
282 struct drm_encoder *encoder;
316 drm_for_each_encoder(encoder, dev) {
318 if (encoder->crtc != crtc)
321 encoder_funcs = encoder->helper_private;
325 encoder_funcs = encoder->helper_private;
327 if (!(ret = encoder_funcs->mode_fixup(encoder, mode,
347 drm_for_each_encoder(encoder, dev) {
349 if (encoder->crtc != crtc)
352 encoder_funcs = encoder->helper_private;
358 encoder_funcs->prepare(encoder);
372 drm_for_each_encoder(encoder, dev) {
374 if (encoder->crtc != crtc)
377 encoder_funcs = encoder->helper_private;
382 encoder->base.id, encoder->name, mode->name);
384 encoder_funcs->mode_set(encoder, mode, adjusted_mode);
390 drm_for_each_encoder(encoder, dev) {
392 if (encoder->crtc != crtc)
395 encoder_funcs = encoder->helper_private;
400 encoder_funcs->commit(encoder);
429 struct drm_encoder *encoder;
432 drm_for_each_encoder(encoder, dev) {
435 if (encoder->crtc != crtc)
440 if (connector->encoder != encoder)
443 connector->encoder = NULL;
447 * doing this, but since we've decoupled the encoder
453 /* we keep a reference while the encoder is bound */
469 struct drm_encoder *encoder;
472 drm_connector_for_each_possible_encoder(connector, encoder)
473 return encoder;
487 * It first tries to locate the best encoder for each connector by calling the
491 * mode_fixup encoder and CRTC helper operations to adjust the requested mode,
504 * and ->commit() CRTC and encoder helper operations, in that order.
521 struct drm_encoder **save_connector_encoders, *new_encoder, *encoder;
565 * Allocate space for the backup of all (non-pointer) encoder and
586 drm_for_each_encoder(encoder, dev) {
587 save_encoder_crtcs[count++] = encoder->crtc;
593 save_connector_encoders[count++] = connector->encoder;
629 if (set->connectors[ro]->encoder)
640 new_encoder = connector->encoder;
648 /* if we can't get an encoder for a connector
663 if (new_encoder != connector->encoder) {
664 DRM_DEBUG_KMS("encoder changed, full mode switch\n");
666 /* If the encoder is reused for another connector, then
669 if (connector->encoder)
670 connector->encoder->crtc = NULL;
671 connector->encoder = new_encoder;
684 if (!connector->encoder)
687 if (connector->encoder->crtc == set->crtc)
690 new_crtc = connector->encoder->crtc;
697 /* Make sure the new CRTC will work with the encoder */
699 !drm_encoder_crtc_ok(connector->encoder, new_crtc)) {
704 if (new_crtc != connector->encoder->crtc) {
707 connector->encoder->crtc = new_crtc;
768 drm_for_each_encoder(encoder, dev) {
769 encoder->crtc = save_encoder_crtcs[count++];
775 connector->encoder = save_connector_encoders[count++];
782 if (set->connectors[ro]->encoder)
799 static int drm_helper_choose_encoder_dpms(struct drm_encoder *encoder)
804 struct drm_device *dev = encoder->dev;
808 if (connector->encoder == encoder)
816 /* Helper which handles bridge ordering around encoder dpms */
817 static void drm_helper_encoder_dpms(struct drm_encoder *encoder, int mode)
821 encoder_funcs = encoder->helper_private;
826 encoder_funcs->dpms(encoder, mode);
838 if (connector->encoder && connector->encoder->crtc == crtc)
869 struct drm_encoder *encoder = connector->encoder;
870 struct drm_crtc *crtc = encoder ? encoder->crtc : NULL;
881 if (encoder)
882 encoder_dpms = drm_helper_choose_encoder_dpms(encoder);
884 /* from off to on, do crtc then encoder */
893 if (encoder)
894 drm_helper_encoder_dpms(encoder, encoder_dpms);
897 /* from on to off, do encoder then crtc */
899 if (encoder)
900 drm_helper_encoder_dpms(encoder, encoder_dpms);
943 struct drm_encoder *encoder;
965 drm_for_each_encoder(encoder, dev) {
967 if(encoder->crtc != crtc)
971 encoder);
973 drm_helper_encoder_dpms(encoder, encoder_dpms);