Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

gma500: Convert Oaktrail to work with new output handling

Replace psb_intel_output with psb_intel_encoder and psb_intel_connector

Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
[Changed Moorestown reference to Oaktrail]
Signed-off-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>

authored by

Patrik Jakobsson and committed by
Dave Airlie
9bd81acd a12d6a07

+79 -47
+9 -9
drivers/gpu/drm/gma500/oaktrail_crtc.c
··· 313 313 bool is_crt = false, is_lvds = false, is_tv = false; 314 314 bool is_mipi = false; 315 315 struct drm_mode_config *mode_config = &dev->mode_config; 316 - struct psb_intel_output *psb_intel_output = NULL; 316 + struct psb_intel_encoder *psb_intel_encoder = NULL; 317 317 uint64_t scalingType = DRM_MODE_SCALE_FULLSCREEN; 318 - struct drm_encoder *encoder; 318 + struct drm_connector *connector; 319 319 320 320 if (!gma_power_begin(dev, true)) 321 321 return 0; ··· 327 327 adjusted_mode, 328 328 sizeof(struct drm_display_mode)); 329 329 330 - list_for_each_entry(encoder, &mode_config->encoder_list, head) { 331 - 332 - if (encoder->crtc != crtc) 330 + list_for_each_entry(connector, &mode_config->connector_list, head) { 331 + if (!connector->encoder || connector->encoder->crtc != crtc) 333 332 continue; 334 333 335 - psb_intel_output = enc_to_psb_intel_output(encoder); 336 - switch (psb_intel_output->type) { 334 + psb_intel_encoder = psb_intel_attached_encoder(connector); 335 + 336 + switch (psb_intel_encoder->type) { 337 337 case INTEL_OUTPUT_LVDS: 338 338 is_lvds = true; 339 339 break; ··· 363 363 ((mode->crtc_hdisplay - 1) << 16) | 364 364 (mode->crtc_vdisplay - 1)); 365 365 366 - if (psb_intel_output) 367 - drm_connector_property_get_value(&psb_intel_output->base, 366 + if (psb_intel_encoder) 367 + drm_connector_property_get_value(connector, 368 368 dev->mode_config.scaling_mode_property, &scalingType); 369 369 370 370 if (scalingType == DRM_MODE_SCALE_NO_SCALE) {
+18 -11
drivers/gpu/drm/gma500/oaktrail_hdmi.c
··· 643 643 void oaktrail_hdmi_init(struct drm_device *dev, 644 644 struct psb_intel_mode_device *mode_dev) 645 645 { 646 - struct psb_intel_output *psb_intel_output; 646 + struct psb_intel_encoder *psb_intel_encoder; 647 + struct psb_intel_connector *psb_intel_connector; 647 648 struct drm_connector *connector; 648 649 struct drm_encoder *encoder; 649 650 650 - psb_intel_output = kzalloc(sizeof(struct psb_intel_output), GFP_KERNEL); 651 - if (!psb_intel_output) 651 + psb_intel_encoder = kzalloc(sizeof(struct psb_intel_encoder), GFP_KERNEL); 652 + if (!psb_intel_encoder) 652 653 return; 653 654 654 - psb_intel_output->mode_dev = mode_dev; 655 - connector = &psb_intel_output->base; 656 - encoder = &psb_intel_output->enc; 657 - drm_connector_init(dev, &psb_intel_output->base, 655 + psb_intel_connector = kzalloc(sizeof(struct psb_intel_connector), GFP_KERNEL); 656 + if (!psb_intel_connector) 657 + goto failed_connector; 658 + 659 + connector = &psb_intel_connector->base; 660 + encoder = &psb_intel_encoder->base; 661 + drm_connector_init(dev, connector, 658 662 &oaktrail_hdmi_connector_funcs, 659 663 DRM_MODE_CONNECTOR_DVID); 660 664 661 - drm_encoder_init(dev, &psb_intel_output->enc, 665 + drm_encoder_init(dev, encoder, 662 666 &oaktrail_hdmi_enc_funcs, 663 667 DRM_MODE_ENCODER_TMDS); 664 668 665 - drm_mode_connector_attach_encoder(&psb_intel_output->base, 666 - &psb_intel_output->enc); 669 + psb_intel_connector_attach_encoder(psb_intel_connector, 670 + psb_intel_encoder); 667 671 668 - psb_intel_output->type = INTEL_OUTPUT_HDMI; 672 + psb_intel_encoder->type = INTEL_OUTPUT_HDMI; 669 673 drm_encoder_helper_add(encoder, &oaktrail_hdmi_helper_funcs); 670 674 drm_connector_helper_add(connector, &oaktrail_hdmi_connector_helper_funcs); 671 675 ··· 679 675 drm_sysfs_connector_add(connector); 680 676 681 677 return; 678 + 679 + failed_connector: 680 + kfree(psb_intel_encoder); 682 681 } 683 682 684 683 static DEFINE_PCI_DEVICE_TABLE(hdmi_ids) = {
+52 -27
drivers/gpu/drm/gma500/oaktrail_lvds.c
··· 43 43 * Sets the power state for the panel. 44 44 */ 45 45 static void oaktrail_lvds_set_power(struct drm_device *dev, 46 - struct psb_intel_output *output, bool on) 46 + struct psb_intel_encoder *psb_intel_encoder, 47 + bool on) 47 48 { 48 49 u32 pp_status; 49 50 struct drm_psb_private *dev_priv = dev->dev_private; ··· 78 77 static void oaktrail_lvds_dpms(struct drm_encoder *encoder, int mode) 79 78 { 80 79 struct drm_device *dev = encoder->dev; 81 - struct psb_intel_output *output = enc_to_psb_intel_output(encoder); 80 + struct psb_intel_encoder *psb_intel_encoder = 81 + to_psb_intel_encoder(encoder); 82 82 83 83 if (mode == DRM_MODE_DPMS_ON) 84 - oaktrail_lvds_set_power(dev, output, true); 84 + oaktrail_lvds_set_power(dev, psb_intel_encoder, true); 85 85 else 86 - oaktrail_lvds_set_power(dev, output, false); 86 + oaktrail_lvds_set_power(dev, psb_intel_encoder, false); 87 87 88 88 /* XXX: We never power down the LVDS pairs. */ 89 89 } ··· 93 91 struct drm_display_mode *mode, 94 92 struct drm_display_mode *adjusted_mode) 95 93 { 96 - struct psb_intel_mode_device *mode_dev = 97 - enc_to_psb_intel_output(encoder)->mode_dev; 98 94 struct drm_device *dev = encoder->dev; 99 95 struct drm_psb_private *dev_priv = dev->dev_private; 96 + struct psb_intel_mode_device *mode_dev = &dev_priv->mode_dev; 97 + struct drm_mode_config *mode_config = &dev->mode_config; 98 + struct drm_connector *connector = NULL; 99 + struct drm_crtc *crtc = encoder->crtc; 100 100 u32 lvds_port; 101 101 uint64_t v = DRM_MODE_SCALE_FULLSCREEN; 102 102 ··· 122 118 123 119 REG_WRITE(LVDS, lvds_port); 124 120 121 + /* Find the connector we're trying to set up */ 122 + list_for_each_entry(connector, &mode_config->connector_list, head) { 123 + if (!connector->encoder || connector->encoder->crtc != crtc) 124 + continue; 125 + } 126 + 127 + if (!connector) { 128 + DRM_ERROR("Couldn't find connector when setting mode"); 129 + return; 130 + } 131 + 125 132 drm_connector_property_get_value( 126 - &enc_to_psb_intel_output(encoder)->base, 133 + connector, 127 134 dev->mode_config.scaling_mode_property, 128 135 &v); 129 136 ··· 165 150 static void oaktrail_lvds_prepare(struct drm_encoder *encoder) 166 151 { 167 152 struct drm_device *dev = encoder->dev; 168 - struct psb_intel_output *output = enc_to_psb_intel_output(encoder); 169 - struct psb_intel_mode_device *mode_dev = output->mode_dev; 153 + struct drm_psb_private *dev_priv = dev->dev_private; 154 + struct psb_intel_encoder *psb_intel_encoder = 155 + to_psb_intel_encoder(encoder); 156 + struct psb_intel_mode_device *mode_dev = &dev_priv->mode_dev; 170 157 171 158 if (!gma_power_begin(dev, true)) 172 159 return; ··· 176 159 mode_dev->saveBLC_PWM_CTL = REG_READ(BLC_PWM_CTL); 177 160 mode_dev->backlight_duty_cycle = (mode_dev->saveBLC_PWM_CTL & 178 161 BACKLIGHT_DUTY_CYCLE_MASK); 179 - oaktrail_lvds_set_power(dev, output, false); 162 + oaktrail_lvds_set_power(dev, psb_intel_encoder, false); 180 163 gma_power_end(dev); 181 164 } 182 165 ··· 202 185 static void oaktrail_lvds_commit(struct drm_encoder *encoder) 203 186 { 204 187 struct drm_device *dev = encoder->dev; 205 - struct psb_intel_output *output = enc_to_psb_intel_output(encoder); 206 - struct psb_intel_mode_device *mode_dev = output->mode_dev; 188 + struct drm_psb_private *dev_priv = dev->dev_private; 189 + struct psb_intel_encoder *psb_intel_encoder = 190 + to_psb_intel_encoder(encoder); 191 + struct psb_intel_mode_device *mode_dev = &dev_priv->mode_dev; 207 192 208 193 if (mode_dev->backlight_duty_cycle == 0) 209 194 mode_dev->backlight_duty_cycle = 210 195 oaktrail_lvds_get_max_backlight(dev); 211 - oaktrail_lvds_set_power(dev, output, true); 196 + oaktrail_lvds_set_power(dev, psb_intel_encoder, true); 212 197 } 213 198 214 199 static const struct drm_encoder_helper_funcs oaktrail_lvds_helper_funcs = { ··· 325 306 void oaktrail_lvds_init(struct drm_device *dev, 326 307 struct psb_intel_mode_device *mode_dev) 327 308 { 328 - struct psb_intel_output *psb_intel_output; 309 + struct psb_intel_encoder *psb_intel_encoder; 310 + struct psb_intel_connector *psb_intel_connector; 329 311 struct drm_connector *connector; 330 312 struct drm_encoder *encoder; 331 313 struct drm_psb_private *dev_priv = ··· 336 316 struct i2c_adapter *i2c_adap; 337 317 struct drm_display_mode *scan; /* *modes, *bios_mode; */ 338 318 339 - psb_intel_output = kzalloc(sizeof(struct psb_intel_output), GFP_KERNEL); 340 - if (!psb_intel_output) 319 + psb_intel_encoder = kzalloc(sizeof(struct psb_intel_encoder), GFP_KERNEL); 320 + if (!psb_intel_encoder) 341 321 return; 342 322 343 - psb_intel_output->mode_dev = mode_dev; 344 - connector = &psb_intel_output->base; 345 - encoder = &psb_intel_output->enc; 323 + psb_intel_connector = kzalloc(sizeof(struct psb_intel_encoder), GFP_KERNEL); 324 + if (!psb_intel_connector) 325 + goto failed_connector; 326 + 327 + connector = &psb_intel_connector->base; 328 + encoder = &psb_intel_encoder->base; 346 329 dev_priv->is_lvds_on = true; 347 - drm_connector_init(dev, &psb_intel_output->base, 330 + drm_connector_init(dev, connector, 348 331 &psb_intel_lvds_connector_funcs, 349 332 DRM_MODE_CONNECTOR_LVDS); 350 333 351 - drm_encoder_init(dev, &psb_intel_output->enc, &psb_intel_lvds_enc_funcs, 334 + drm_encoder_init(dev, encoder, &psb_intel_lvds_enc_funcs, 352 335 DRM_MODE_ENCODER_LVDS); 353 336 354 - drm_mode_connector_attach_encoder(&psb_intel_output->base, 355 - &psb_intel_output->enc); 356 - psb_intel_output->type = INTEL_OUTPUT_LVDS; 337 + psb_intel_connector_attach_encoder(psb_intel_connector, 338 + psb_intel_encoder); 339 + psb_intel_encoder->type = INTEL_OUTPUT_LVDS; 357 340 358 341 drm_encoder_helper_add(encoder, &oaktrail_lvds_helper_funcs); 359 342 drm_connector_helper_add(connector, ··· 434 411 435 412 failed_find: 436 413 dev_dbg(dev->dev, "No LVDS modes found, disabling.\n"); 437 - if (psb_intel_output->ddc_bus) 438 - psb_intel_i2c_destroy(psb_intel_output->ddc_bus); 414 + if (psb_intel_encoder->ddc_bus) 415 + psb_intel_i2c_destroy(psb_intel_encoder->ddc_bus); 439 416 440 417 /* failed_ddc: */ 441 418 442 419 drm_encoder_cleanup(encoder); 443 420 drm_connector_cleanup(connector); 444 - kfree(connector); 421 + kfree(psb_intel_connector); 422 + failed_connector: 423 + kfree(psb_intel_encoder); 445 424 } 446 425