diff options
Diffstat (limited to 'drivers/gpu/drm/nouveau/nv17_tv.c')
-rw-r--r-- | drivers/gpu/drm/nouveau/nv17_tv.c | 27 |
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 | ||
36 | enum drm_connector_status nv17_tv_detect(struct drm_encoder *encoder, | 36 | static enum drm_connector_status |
37 | struct drm_connector *connector, | 37 | nv17_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 | ||
71 | static const struct { | 78 | static 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 | ||
639 | static struct drm_encoder_slave_funcs nv17_tv_slave_funcs = { | 646 | static struct drm_encoder_slave_funcs nv17_tv_slave_funcs = { |