summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/gma500/psb_intel_sdvo.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/gma500/psb_intel_sdvo.c')
-rw-r--r--drivers/gpu/drm/gma500/psb_intel_sdvo.c53
1 files changed, 25 insertions, 28 deletions
diff --git a/drivers/gpu/drm/gma500/psb_intel_sdvo.c b/drivers/gpu/drm/gma500/psb_intel_sdvo.c
index 19e36603b23b..77841a113617 100644
--- a/drivers/gpu/drm/gma500/psb_intel_sdvo.c
+++ b/drivers/gpu/drm/gma500/psb_intel_sdvo.c
@@ -65,7 +65,7 @@ static const char *tv_format_names[] = {
65#define TV_FORMAT_NUM (sizeof(tv_format_names) / sizeof(*tv_format_names)) 65#define TV_FORMAT_NUM (sizeof(tv_format_names) / sizeof(*tv_format_names))
66 66
67struct psb_intel_sdvo { 67struct psb_intel_sdvo {
68 struct psb_intel_encoder base; 68 struct gma_encoder base;
69 69
70 struct i2c_adapter *i2c; 70 struct i2c_adapter *i2c;
71 u8 slave_addr; 71 u8 slave_addr;
@@ -140,7 +140,7 @@ struct psb_intel_sdvo {
140}; 140};
141 141
142struct psb_intel_sdvo_connector { 142struct psb_intel_sdvo_connector {
143 struct psb_intel_connector base; 143 struct gma_connector base;
144 144
145 /* Mark the type of connector */ 145 /* Mark the type of connector */
146 uint16_t output_flag; 146 uint16_t output_flag;
@@ -200,13 +200,13 @@ static struct psb_intel_sdvo *to_psb_intel_sdvo(struct drm_encoder *encoder)
200 200
201static struct psb_intel_sdvo *intel_attached_sdvo(struct drm_connector *connector) 201static struct psb_intel_sdvo *intel_attached_sdvo(struct drm_connector *connector)
202{ 202{
203 return container_of(psb_intel_attached_encoder(connector), 203 return container_of(gma_attached_encoder(connector),
204 struct psb_intel_sdvo, base); 204 struct psb_intel_sdvo, base);
205} 205}
206 206
207static struct psb_intel_sdvo_connector *to_psb_intel_sdvo_connector(struct drm_connector *connector) 207static struct psb_intel_sdvo_connector *to_psb_intel_sdvo_connector(struct drm_connector *connector)
208{ 208{
209 return container_of(to_psb_intel_connector(connector), struct psb_intel_sdvo_connector, base); 209 return container_of(to_gma_connector(connector), struct psb_intel_sdvo_connector, base);
210} 210}
211 211
212static bool 212static bool
@@ -987,7 +987,7 @@ static void psb_intel_sdvo_mode_set(struct drm_encoder *encoder,
987{ 987{
988 struct drm_device *dev = encoder->dev; 988 struct drm_device *dev = encoder->dev;
989 struct drm_crtc *crtc = encoder->crtc; 989 struct drm_crtc *crtc = encoder->crtc;
990 struct psb_intel_crtc *psb_intel_crtc = to_psb_intel_crtc(crtc); 990 struct gma_crtc *gma_crtc = to_gma_crtc(crtc);
991 struct psb_intel_sdvo *psb_intel_sdvo = to_psb_intel_sdvo(encoder); 991 struct psb_intel_sdvo *psb_intel_sdvo = to_psb_intel_sdvo(encoder);
992 u32 sdvox; 992 u32 sdvox;
993 struct psb_intel_sdvo_in_out_map in_out; 993 struct psb_intel_sdvo_in_out_map in_out;
@@ -1070,7 +1070,7 @@ static void psb_intel_sdvo_mode_set(struct drm_encoder *encoder,
1070 } 1070 }
1071 sdvox |= (9 << 19) | SDVO_BORDER_ENABLE; 1071 sdvox |= (9 << 19) | SDVO_BORDER_ENABLE;
1072 1072
1073 if (psb_intel_crtc->pipe == 1) 1073 if (gma_crtc->pipe == 1)
1074 sdvox |= SDVO_PIPE_B_SELECT; 1074 sdvox |= SDVO_PIPE_B_SELECT;
1075 if (psb_intel_sdvo->has_hdmi_audio) 1075 if (psb_intel_sdvo->has_hdmi_audio)
1076 sdvox |= SDVO_AUDIO_ENABLE; 1076 sdvox |= SDVO_AUDIO_ENABLE;
@@ -1121,7 +1121,7 @@ static void psb_intel_sdvo_dpms(struct drm_encoder *encoder, int mode)
1121 if ((temp & SDVO_ENABLE) == 0) 1121 if ((temp & SDVO_ENABLE) == 0)
1122 psb_intel_sdvo_write_sdvox(psb_intel_sdvo, temp | SDVO_ENABLE); 1122 psb_intel_sdvo_write_sdvox(psb_intel_sdvo, temp | SDVO_ENABLE);
1123 for (i = 0; i < 2; i++) 1123 for (i = 0; i < 2; i++)
1124 psb_intel_wait_for_vblank(dev); 1124 gma_wait_for_vblank(dev);
1125 1125
1126 status = psb_intel_sdvo_get_trained_inputs(psb_intel_sdvo, &input1, &input2); 1126 status = psb_intel_sdvo_get_trained_inputs(psb_intel_sdvo, &input1, &input2);
1127 /* Warn if the device reported failure to sync. 1127 /* Warn if the device reported failure to sync.
@@ -1836,10 +1836,8 @@ done:
1836static void psb_intel_sdvo_save(struct drm_connector *connector) 1836static void psb_intel_sdvo_save(struct drm_connector *connector)
1837{ 1837{
1838 struct drm_device *dev = connector->dev; 1838 struct drm_device *dev = connector->dev;
1839 struct psb_intel_encoder *psb_intel_encoder = 1839 struct gma_encoder *gma_encoder = gma_attached_encoder(connector);
1840 psb_intel_attached_encoder(connector); 1840 struct psb_intel_sdvo *sdvo = to_psb_intel_sdvo(&gma_encoder->base);
1841 struct psb_intel_sdvo *sdvo =
1842 to_psb_intel_sdvo(&psb_intel_encoder->base);
1843 1841
1844 sdvo->saveSDVO = REG_READ(sdvo->sdvo_reg); 1842 sdvo->saveSDVO = REG_READ(sdvo->sdvo_reg);
1845} 1843}
@@ -1847,8 +1845,7 @@ static void psb_intel_sdvo_save(struct drm_connector *connector)
1847static void psb_intel_sdvo_restore(struct drm_connector *connector) 1845static void psb_intel_sdvo_restore(struct drm_connector *connector)
1848{ 1846{
1849 struct drm_device *dev = connector->dev; 1847 struct drm_device *dev = connector->dev;
1850 struct drm_encoder *encoder = 1848 struct drm_encoder *encoder = &gma_attached_encoder(connector)->base;
1851 &psb_intel_attached_encoder(connector)->base;
1852 struct psb_intel_sdvo *sdvo = to_psb_intel_sdvo(encoder); 1849 struct psb_intel_sdvo *sdvo = to_psb_intel_sdvo(encoder);
1853 struct drm_crtc *crtc = encoder->crtc; 1850 struct drm_crtc *crtc = encoder->crtc;
1854 1851
@@ -1864,9 +1861,9 @@ static void psb_intel_sdvo_restore(struct drm_connector *connector)
1864static const struct drm_encoder_helper_funcs psb_intel_sdvo_helper_funcs = { 1861static const struct drm_encoder_helper_funcs psb_intel_sdvo_helper_funcs = {
1865 .dpms = psb_intel_sdvo_dpms, 1862 .dpms = psb_intel_sdvo_dpms,
1866 .mode_fixup = psb_intel_sdvo_mode_fixup, 1863 .mode_fixup = psb_intel_sdvo_mode_fixup,
1867 .prepare = psb_intel_encoder_prepare, 1864 .prepare = gma_encoder_prepare,
1868 .mode_set = psb_intel_sdvo_mode_set, 1865 .mode_set = psb_intel_sdvo_mode_set,
1869 .commit = psb_intel_encoder_commit, 1866 .commit = gma_encoder_commit,
1870}; 1867};
1871 1868
1872static const struct drm_connector_funcs psb_intel_sdvo_connector_funcs = { 1869static const struct drm_connector_funcs psb_intel_sdvo_connector_funcs = {
@@ -1882,7 +1879,7 @@ static const struct drm_connector_funcs psb_intel_sdvo_connector_funcs = {
1882static const struct drm_connector_helper_funcs psb_intel_sdvo_connector_helper_funcs = { 1879static const struct drm_connector_helper_funcs psb_intel_sdvo_connector_helper_funcs = {
1883 .get_modes = psb_intel_sdvo_get_modes, 1880 .get_modes = psb_intel_sdvo_get_modes,
1884 .mode_valid = psb_intel_sdvo_mode_valid, 1881 .mode_valid = psb_intel_sdvo_mode_valid,
1885 .best_encoder = psb_intel_best_encoder, 1882 .best_encoder = gma_best_encoder,
1886}; 1883};
1887 1884
1888static void psb_intel_sdvo_enc_destroy(struct drm_encoder *encoder) 1885static void psb_intel_sdvo_enc_destroy(struct drm_encoder *encoder)
@@ -1894,7 +1891,7 @@ static void psb_intel_sdvo_enc_destroy(struct drm_encoder *encoder)
1894 psb_intel_sdvo->sdvo_lvds_fixed_mode); 1891 psb_intel_sdvo->sdvo_lvds_fixed_mode);
1895 1892
1896 i2c_del_adapter(&psb_intel_sdvo->ddc); 1893 i2c_del_adapter(&psb_intel_sdvo->ddc);
1897 psb_intel_encoder_destroy(encoder); 1894 gma_encoder_destroy(encoder);
1898} 1895}
1899 1896
1900static const struct drm_encoder_funcs psb_intel_sdvo_enc_funcs = { 1897static const struct drm_encoder_funcs psb_intel_sdvo_enc_funcs = {
@@ -2055,7 +2052,7 @@ psb_intel_sdvo_connector_init(struct psb_intel_sdvo_connector *connector,
2055 connector->base.base.doublescan_allowed = 0; 2052 connector->base.base.doublescan_allowed = 0;
2056 connector->base.base.display_info.subpixel_order = SubPixelHorizontalRGB; 2053 connector->base.base.display_info.subpixel_order = SubPixelHorizontalRGB;
2057 2054
2058 psb_intel_connector_attach_encoder(&connector->base, &encoder->base); 2055 gma_connector_attach_encoder(&connector->base, &encoder->base);
2059 drm_sysfs_connector_add(&connector->base.base); 2056 drm_sysfs_connector_add(&connector->base.base);
2060} 2057}
2061 2058
@@ -2075,7 +2072,7 @@ psb_intel_sdvo_dvi_init(struct psb_intel_sdvo *psb_intel_sdvo, int device)
2075{ 2072{
2076 struct drm_encoder *encoder = &psb_intel_sdvo->base.base; 2073 struct drm_encoder *encoder = &psb_intel_sdvo->base.base;
2077 struct drm_connector *connector; 2074 struct drm_connector *connector;
2078 struct psb_intel_connector *intel_connector; 2075 struct gma_connector *intel_connector;
2079 struct psb_intel_sdvo_connector *psb_intel_sdvo_connector; 2076 struct psb_intel_sdvo_connector *psb_intel_sdvo_connector;
2080 2077
2081 psb_intel_sdvo_connector = kzalloc(sizeof(struct psb_intel_sdvo_connector), GFP_KERNEL); 2078 psb_intel_sdvo_connector = kzalloc(sizeof(struct psb_intel_sdvo_connector), GFP_KERNEL);
@@ -2115,7 +2112,7 @@ psb_intel_sdvo_tv_init(struct psb_intel_sdvo *psb_intel_sdvo, int type)
2115{ 2112{
2116 struct drm_encoder *encoder = &psb_intel_sdvo->base.base; 2113 struct drm_encoder *encoder = &psb_intel_sdvo->base.base;
2117 struct drm_connector *connector; 2114 struct drm_connector *connector;
2118 struct psb_intel_connector *intel_connector; 2115 struct gma_connector *intel_connector;
2119 struct psb_intel_sdvo_connector *psb_intel_sdvo_connector; 2116 struct psb_intel_sdvo_connector *psb_intel_sdvo_connector;
2120 2117
2121 psb_intel_sdvo_connector = kzalloc(sizeof(struct psb_intel_sdvo_connector), GFP_KERNEL); 2118 psb_intel_sdvo_connector = kzalloc(sizeof(struct psb_intel_sdvo_connector), GFP_KERNEL);
@@ -2154,7 +2151,7 @@ psb_intel_sdvo_analog_init(struct psb_intel_sdvo *psb_intel_sdvo, int device)
2154{ 2151{
2155 struct drm_encoder *encoder = &psb_intel_sdvo->base.base; 2152 struct drm_encoder *encoder = &psb_intel_sdvo->base.base;
2156 struct drm_connector *connector; 2153 struct drm_connector *connector;
2157 struct psb_intel_connector *intel_connector; 2154 struct gma_connector *intel_connector;
2158 struct psb_intel_sdvo_connector *psb_intel_sdvo_connector; 2155 struct psb_intel_sdvo_connector *psb_intel_sdvo_connector;
2159 2156
2160 psb_intel_sdvo_connector = kzalloc(sizeof(struct psb_intel_sdvo_connector), GFP_KERNEL); 2157 psb_intel_sdvo_connector = kzalloc(sizeof(struct psb_intel_sdvo_connector), GFP_KERNEL);
@@ -2188,7 +2185,7 @@ psb_intel_sdvo_lvds_init(struct psb_intel_sdvo *psb_intel_sdvo, int device)
2188{ 2185{
2189 struct drm_encoder *encoder = &psb_intel_sdvo->base.base; 2186 struct drm_encoder *encoder = &psb_intel_sdvo->base.base;
2190 struct drm_connector *connector; 2187 struct drm_connector *connector;
2191 struct psb_intel_connector *intel_connector; 2188 struct gma_connector *intel_connector;
2192 struct psb_intel_sdvo_connector *psb_intel_sdvo_connector; 2189 struct psb_intel_sdvo_connector *psb_intel_sdvo_connector;
2193 2190
2194 psb_intel_sdvo_connector = kzalloc(sizeof(struct psb_intel_sdvo_connector), GFP_KERNEL); 2191 psb_intel_sdvo_connector = kzalloc(sizeof(struct psb_intel_sdvo_connector), GFP_KERNEL);
@@ -2540,7 +2537,7 @@ psb_intel_sdvo_init_ddc_proxy(struct psb_intel_sdvo *sdvo,
2540bool psb_intel_sdvo_init(struct drm_device *dev, int sdvo_reg) 2537bool psb_intel_sdvo_init(struct drm_device *dev, int sdvo_reg)
2541{ 2538{
2542 struct drm_psb_private *dev_priv = dev->dev_private; 2539 struct drm_psb_private *dev_priv = dev->dev_private;
2543 struct psb_intel_encoder *psb_intel_encoder; 2540 struct gma_encoder *gma_encoder;
2544 struct psb_intel_sdvo *psb_intel_sdvo; 2541 struct psb_intel_sdvo *psb_intel_sdvo;
2545 int i; 2542 int i;
2546 2543
@@ -2557,9 +2554,9 @@ bool psb_intel_sdvo_init(struct drm_device *dev, int sdvo_reg)
2557 } 2554 }
2558 2555
2559 /* encoder type will be decided later */ 2556 /* encoder type will be decided later */
2560 psb_intel_encoder = &psb_intel_sdvo->base; 2557 gma_encoder = &psb_intel_sdvo->base;
2561 psb_intel_encoder->type = INTEL_OUTPUT_SDVO; 2558 gma_encoder->type = INTEL_OUTPUT_SDVO;
2562 drm_encoder_init(dev, &psb_intel_encoder->base, &psb_intel_sdvo_enc_funcs, 0); 2559 drm_encoder_init(dev, &gma_encoder->base, &psb_intel_sdvo_enc_funcs, 0);
2563 2560
2564 /* Read the regs to test if we can talk to the device */ 2561 /* Read the regs to test if we can talk to the device */
2565 for (i = 0; i < 0x40; i++) { 2562 for (i = 0; i < 0x40; i++) {
@@ -2577,7 +2574,7 @@ bool psb_intel_sdvo_init(struct drm_device *dev, int sdvo_reg)
2577 else 2574 else
2578 dev_priv->hotplug_supported_mask |= SDVOC_HOTPLUG_INT_STATUS; 2575 dev_priv->hotplug_supported_mask |= SDVOC_HOTPLUG_INT_STATUS;
2579 2576
2580 drm_encoder_helper_add(&psb_intel_encoder->base, &psb_intel_sdvo_helper_funcs); 2577 drm_encoder_helper_add(&gma_encoder->base, &psb_intel_sdvo_helper_funcs);
2581 2578
2582 /* In default case sdvo lvds is false */ 2579 /* In default case sdvo lvds is false */
2583 if (!psb_intel_sdvo_get_capabilities(psb_intel_sdvo, &psb_intel_sdvo->caps)) 2580 if (!psb_intel_sdvo_get_capabilities(psb_intel_sdvo, &psb_intel_sdvo->caps))
@@ -2620,7 +2617,7 @@ bool psb_intel_sdvo_init(struct drm_device *dev, int sdvo_reg)
2620 return true; 2617 return true;
2621 2618
2622err: 2619err:
2623 drm_encoder_cleanup(&psb_intel_encoder->base); 2620 drm_encoder_cleanup(&gma_encoder->base);
2624 i2c_del_adapter(&psb_intel_sdvo->ddc); 2621 i2c_del_adapter(&psb_intel_sdvo->ddc);
2625 kfree(psb_intel_sdvo); 2622 kfree(psb_intel_sdvo);
2626 2623