Lines Matching refs:encoder
46 static uint32_t nv42_tv_sample_load(struct drm_encoder *encoder)
48 struct drm_device *dev = encoder->dev;
51 uint32_t testval, regoffset = nv04_dac_output_offset(encoder);
145 nv17_tv_detect(struct drm_encoder *encoder, struct drm_connector *connector)
147 struct drm_device *dev = encoder->dev;
150 struct nv17_tv_encoder *tv_enc = to_tv_enc(encoder);
154 if (nv04_dac_in_use(encoder))
161 nv42_tv_sample_load(encoder) >> 28 & 0xe;
164 nv17_dac_sample_load(encoder) >> 28 & 0xe;
201 static int nv17_tv_get_ld_modes(struct drm_encoder *encoder,
204 struct nv17_tv_norm_params *tv_norm = get_tv_norm(encoder);
211 mode = drm_mode_duplicate(encoder->dev, tv_mode);
231 static int nv17_tv_get_hd_modes(struct drm_encoder *encoder,
234 struct nv17_tv_norm_params *tv_norm = get_tv_norm(encoder);
260 mode = drm_mode_duplicate(encoder->dev, output_mode);
264 mode = drm_cvt_mode(encoder->dev, modes[i].hdisplay,
293 static int nv17_tv_get_modes(struct drm_encoder *encoder,
296 struct nv17_tv_norm_params *tv_norm = get_tv_norm(encoder);
299 return nv17_tv_get_hd_modes(encoder, connector);
301 return nv17_tv_get_ld_modes(encoder, connector);
304 static int nv17_tv_mode_valid(struct drm_encoder *encoder,
307 struct nv17_tv_norm_params *tv_norm = get_tv_norm(encoder);
337 /* The encoder takes care of the actual interlacing */
345 static bool nv17_tv_mode_fixup(struct drm_encoder *encoder,
349 struct nv17_tv_norm_params *tv_norm = get_tv_norm(encoder);
351 if (nv04_dac_in_use(encoder))
362 static void nv17_tv_dpms(struct drm_encoder *encoder, int mode)
364 struct drm_device *dev = encoder->dev;
367 struct nv17_tv_state *regs = &to_tv_enc(encoder)->state;
368 struct nv17_tv_norm_params *tv_norm = get_tv_norm(encoder);
370 if (nouveau_encoder(encoder)->last_dpms == mode)
372 nouveau_encoder(encoder)->last_dpms = mode;
374 NV_INFO(drm, "Setting dpms mode %d on TV encoder (output %d)\n",
375 mode, nouveau_encoder(encoder)->dcb->index);
380 nv04_dfp_update_fp_control(encoder, mode);
383 nv04_dfp_update_fp_control(encoder, DRM_MODE_DPMS_OFF);
394 nv04_dac_update_dacclk(encoder, mode == DRM_MODE_DPMS_ON);
397 static void nv17_tv_prepare(struct drm_encoder *encoder)
399 struct drm_device *dev = encoder->dev;
401 const struct drm_encoder_helper_funcs *helper = encoder->helper_private;
402 struct nv17_tv_norm_params *tv_norm = get_tv_norm(encoder);
403 int head = nouveau_crtc(encoder->crtc)->index;
407 nv04_dac_output_offset(encoder);
410 helper->dpms(encoder, DRM_MODE_DPMS_OFF);
458 static void nv17_tv_mode_set(struct drm_encoder *encoder,
462 struct drm_device *dev = encoder->dev;
464 int head = nouveau_crtc(encoder->crtc)->index;
466 struct nv17_tv_state *tv_regs = &to_tv_enc(encoder)->state;
467 struct nv17_tv_norm_params *tv_norm = get_tv_norm(encoder);
524 * parameters for the CTV encoder (It's only used for "HD" TV
527 * output of the FP encoder, but it also needs the analog
528 * encoder in its OR enabled and routed to the head it's
573 static void nv17_tv_commit(struct drm_encoder *encoder)
575 struct drm_device *dev = encoder->dev;
577 struct nouveau_crtc *nv_crtc = nouveau_crtc(encoder->crtc);
578 struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder);
579 const struct drm_encoder_helper_funcs *helper = encoder->helper_private;
581 if (get_tv_norm(encoder)->kind == TV_ENC_MODE) {
582 nv17_tv_update_rescaler(encoder);
583 nv17_tv_update_properties(encoder);
585 nv17_ctv_update_rescaler(encoder);
588 nv17_tv_state_load(dev, &to_tv_enc(encoder)->state);
593 nv04_dac_output_offset(encoder),
597 nv04_dac_output_offset(encoder),
600 helper->dpms(encoder, DRM_MODE_DPMS_ON);
607 static void nv17_tv_save(struct drm_encoder *encoder)
609 struct drm_device *dev = encoder->dev;
610 struct nv17_tv_encoder *tv_enc = to_tv_enc(encoder);
612 nouveau_encoder(encoder)->restore.output =
615 nv04_dac_output_offset(encoder));
622 static void nv17_tv_restore(struct drm_encoder *encoder)
624 struct drm_device *dev = encoder->dev;
627 nv04_dac_output_offset(encoder),
628 nouveau_encoder(encoder)->restore.output);
630 nv17_tv_state_load(dev, &to_tv_enc(encoder)->saved_state);
632 nouveau_encoder(encoder)->last_dpms = NV_DPMS_CLEARED;
635 static int nv17_tv_create_resources(struct drm_encoder *encoder,
638 struct drm_device *dev = encoder->dev;
641 struct nv17_tv_encoder *tv_enc = to_tv_enc(encoder);
642 struct dcb_output *dcb = nouveau_encoder(encoder)->dcb;
684 static int nv17_tv_set_property(struct drm_encoder *encoder,
689 struct drm_mode_config *conf = &encoder->dev->mode_config;
690 struct drm_crtc *crtc = encoder->crtc;
691 struct nv17_tv_encoder *tv_enc = to_tv_enc(encoder);
692 struct nv17_tv_norm_params *tv_norm = get_tv_norm(encoder);
697 if (encoder->crtc) {
699 nv17_ctv_update_rescaler(encoder);
701 nv17_tv_update_rescaler(encoder);
709 nv17_tv_update_properties(encoder);
716 nv17_tv_update_properties(encoder);
723 if (encoder->crtc)
724 nv17_tv_update_rescaler(encoder);
739 nv17_tv_update_properties(encoder);
759 static void nv17_tv_destroy(struct drm_encoder *encoder)
761 struct nv17_tv_encoder *tv_enc = to_tv_enc(encoder);
763 drm_encoder_cleanup(encoder);
791 struct drm_encoder *encoder;
807 encoder = to_drm_encoder(&tv_enc->base);
812 drm_encoder_init(dev, encoder, &nv17_tv_funcs, DRM_MODE_ENCODER_TVDAC,
814 drm_encoder_helper_add(encoder, &nv17_tv_helper_funcs);
815 to_encoder_slave(encoder)->slave_funcs = &nv17_tv_slave_funcs;
820 encoder->possible_crtcs = entry->heads;
821 encoder->possible_clones = 0;
823 nv17_tv_create_resources(encoder, connector);
824 drm_connector_attach_encoder(connector, encoder);