aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/nouveau/nv17_tv.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/nouveau/nv17_tv.c')
-rw-r--r--drivers/gpu/drm/nouveau/nv17_tv.c27
1 files changed, 17 insertions, 10 deletions
diff --git a/drivers/gpu/drm/nouveau/nv17_tv.c b/drivers/gpu/drm/nouveau/nv17_tv.c
index 81c01353a9f..5fa4242e4c7 100644
--- a/drivers/gpu/drm/nouveau/nv17_tv.c
+++ b/drivers/gpu/drm/nouveau/nv17_tv.c
@@ -33,13 +33,15 @@
33#include "nouveau_hw.h" 33#include "nouveau_hw.h"
34#include "nv17_tv.h" 34#include "nv17_tv.h"
35 35
36enum drm_connector_status nv17_tv_detect(struct drm_encoder *encoder, 36static enum drm_connector_status
37 struct drm_connector *connector, 37nv17_tv_detect(struct drm_encoder *encoder, struct drm_connector *connector)
38 uint32_t pin_mask)
39{ 38{
39 struct drm_device *dev = encoder->dev;
40 struct drm_mode_config *conf = &dev->mode_config;
40 struct nv17_tv_encoder *tv_enc = to_tv_enc(encoder); 41 struct nv17_tv_encoder *tv_enc = to_tv_enc(encoder);
42 struct dcb_entry *dcb = tv_enc->base.dcb;
41 43
42 tv_enc->pin_mask = pin_mask >> 28 & 0xe; 44 tv_enc->pin_mask = nv17_dac_sample_load(encoder) >> 28 & 0xe;
43 45
44 switch (tv_enc->pin_mask) { 46 switch (tv_enc->pin_mask) {
45 case 0x2: 47 case 0x2:
@@ -50,7 +52,7 @@ enum drm_connector_status nv17_tv_detect(struct drm_encoder *encoder,
50 tv_enc->subconnector = DRM_MODE_SUBCONNECTOR_SVIDEO; 52 tv_enc->subconnector = DRM_MODE_SUBCONNECTOR_SVIDEO;
51 break; 53 break;
52 case 0xe: 54 case 0xe:
53 if (nouveau_encoder(encoder)->dcb->tvconf.has_component_output) 55 if (dcb->tvconf.has_component_output)
54 tv_enc->subconnector = DRM_MODE_SUBCONNECTOR_Component; 56 tv_enc->subconnector = DRM_MODE_SUBCONNECTOR_Component;
55 else 57 else
56 tv_enc->subconnector = DRM_MODE_SUBCONNECTOR_SCART; 58 tv_enc->subconnector = DRM_MODE_SUBCONNECTOR_SCART;
@@ -61,11 +63,16 @@ enum drm_connector_status nv17_tv_detect(struct drm_encoder *encoder,
61 } 63 }
62 64
63 drm_connector_property_set_value(connector, 65 drm_connector_property_set_value(connector,
64 encoder->dev->mode_config.tv_subconnector_property, 66 conf->tv_subconnector_property,
65 tv_enc->subconnector); 67 tv_enc->subconnector);
66 68
67 return tv_enc->subconnector ? connector_status_connected : 69 if (tv_enc->subconnector) {
68 connector_status_disconnected; 70 NV_INFO(dev, "Load detected on output %c\n",
71 '@' + ffs(dcb->or));
72 return connector_status_connected;
73 } else {
74 return connector_status_disconnected;
75 }
69} 76}
70 77
71static const struct { 78static const struct {
@@ -633,7 +640,7 @@ static struct drm_encoder_helper_funcs nv17_tv_helper_funcs = {
633 .prepare = nv17_tv_prepare, 640 .prepare = nv17_tv_prepare,
634 .commit = nv17_tv_commit, 641 .commit = nv17_tv_commit,
635 .mode_set = nv17_tv_mode_set, 642 .mode_set = nv17_tv_mode_set,
636 .detect = nv17_dac_detect, 643 .detect = nv17_tv_detect,
637}; 644};
638 645
639static struct drm_encoder_slave_funcs nv17_tv_slave_funcs = { 646static struct drm_encoder_slave_funcs nv17_tv_slave_funcs = {