summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/gma500/psb_intel_lvds.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/gma500/psb_intel_lvds.c')
-rw-r--r--drivers/gpu/drm/gma500/psb_intel_lvds.c75
1 files changed, 32 insertions, 43 deletions
diff --git a/drivers/gpu/drm/gma500/psb_intel_lvds.c b/drivers/gpu/drm/gma500/psb_intel_lvds.c
index 9fa5fa2e6192..32342f6990d9 100644
--- a/drivers/gpu/drm/gma500/psb_intel_lvds.c
+++ b/drivers/gpu/drm/gma500/psb_intel_lvds.c
@@ -267,10 +267,9 @@ static void psb_intel_lvds_save(struct drm_connector *connector)
267 struct drm_device *dev = connector->dev; 267 struct drm_device *dev = connector->dev;
268 struct drm_psb_private *dev_priv = 268 struct drm_psb_private *dev_priv =
269 (struct drm_psb_private *)dev->dev_private; 269 (struct drm_psb_private *)dev->dev_private;
270 struct psb_intel_encoder *psb_intel_encoder = 270 struct gma_encoder *gma_encoder = gma_attached_encoder(connector);
271 psb_intel_attached_encoder(connector);
272 struct psb_intel_lvds_priv *lvds_priv = 271 struct psb_intel_lvds_priv *lvds_priv =
273 (struct psb_intel_lvds_priv *)psb_intel_encoder->dev_priv; 272 (struct psb_intel_lvds_priv *)gma_encoder->dev_priv;
274 273
275 lvds_priv->savePP_ON = REG_READ(LVDSPP_ON); 274 lvds_priv->savePP_ON = REG_READ(LVDSPP_ON);
276 lvds_priv->savePP_OFF = REG_READ(LVDSPP_OFF); 275 lvds_priv->savePP_OFF = REG_READ(LVDSPP_OFF);
@@ -307,10 +306,9 @@ static void psb_intel_lvds_restore(struct drm_connector *connector)
307{ 306{
308 struct drm_device *dev = connector->dev; 307 struct drm_device *dev = connector->dev;
309 u32 pp_status; 308 u32 pp_status;
310 struct psb_intel_encoder *psb_intel_encoder = 309 struct gma_encoder *gma_encoder = gma_attached_encoder(connector);
311 psb_intel_attached_encoder(connector);
312 struct psb_intel_lvds_priv *lvds_priv = 310 struct psb_intel_lvds_priv *lvds_priv =
313 (struct psb_intel_lvds_priv *)psb_intel_encoder->dev_priv; 311 (struct psb_intel_lvds_priv *)gma_encoder->dev_priv;
314 312
315 dev_dbg(dev->dev, "(0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n", 313 dev_dbg(dev->dev, "(0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",
316 lvds_priv->savePP_ON, 314 lvds_priv->savePP_ON,
@@ -349,12 +347,11 @@ int psb_intel_lvds_mode_valid(struct drm_connector *connector,
349 struct drm_display_mode *mode) 347 struct drm_display_mode *mode)
350{ 348{
351 struct drm_psb_private *dev_priv = connector->dev->dev_private; 349 struct drm_psb_private *dev_priv = connector->dev->dev_private;
352 struct psb_intel_encoder *psb_intel_encoder = 350 struct gma_encoder *gma_encoder = gma_attached_encoder(connector);
353 psb_intel_attached_encoder(connector);
354 struct drm_display_mode *fixed_mode = 351 struct drm_display_mode *fixed_mode =
355 dev_priv->mode_dev.panel_fixed_mode; 352 dev_priv->mode_dev.panel_fixed_mode;
356 353
357 if (psb_intel_encoder->type == INTEL_OUTPUT_MIPI2) 354 if (gma_encoder->type == INTEL_OUTPUT_MIPI2)
358 fixed_mode = dev_priv->mode_dev.panel_fixed_mode2; 355 fixed_mode = dev_priv->mode_dev.panel_fixed_mode2;
359 356
360 /* just in case */ 357 /* just in case */
@@ -381,22 +378,20 @@ bool psb_intel_lvds_mode_fixup(struct drm_encoder *encoder,
381 struct drm_device *dev = encoder->dev; 378 struct drm_device *dev = encoder->dev;
382 struct drm_psb_private *dev_priv = dev->dev_private; 379 struct drm_psb_private *dev_priv = dev->dev_private;
383 struct psb_intel_mode_device *mode_dev = &dev_priv->mode_dev; 380 struct psb_intel_mode_device *mode_dev = &dev_priv->mode_dev;
384 struct psb_intel_crtc *psb_intel_crtc = 381 struct gma_crtc *gma_crtc = to_gma_crtc(encoder->crtc);
385 to_psb_intel_crtc(encoder->crtc);
386 struct drm_encoder *tmp_encoder; 382 struct drm_encoder *tmp_encoder;
387 struct drm_display_mode *panel_fixed_mode = mode_dev->panel_fixed_mode; 383 struct drm_display_mode *panel_fixed_mode = mode_dev->panel_fixed_mode;
388 struct psb_intel_encoder *psb_intel_encoder = 384 struct gma_encoder *gma_encoder = to_gma_encoder(encoder);
389 to_psb_intel_encoder(encoder);
390 385
391 if (psb_intel_encoder->type == INTEL_OUTPUT_MIPI2) 386 if (gma_encoder->type == INTEL_OUTPUT_MIPI2)
392 panel_fixed_mode = mode_dev->panel_fixed_mode2; 387 panel_fixed_mode = mode_dev->panel_fixed_mode2;
393 388
394 /* PSB requires the LVDS is on pipe B, MRST has only one pipe anyway */ 389 /* PSB requires the LVDS is on pipe B, MRST has only one pipe anyway */
395 if (!IS_MRST(dev) && psb_intel_crtc->pipe == 0) { 390 if (!IS_MRST(dev) && gma_crtc->pipe == 0) {
396 printk(KERN_ERR "Can't support LVDS on pipe A\n"); 391 printk(KERN_ERR "Can't support LVDS on pipe A\n");
397 return false; 392 return false;
398 } 393 }
399 if (IS_MRST(dev) && psb_intel_crtc->pipe != 0) { 394 if (IS_MRST(dev) && gma_crtc->pipe != 0) {
400 printk(KERN_ERR "Must use PIPE A\n"); 395 printk(KERN_ERR "Must use PIPE A\n");
401 return false; 396 return false;
402 } 397 }
@@ -525,9 +520,8 @@ static int psb_intel_lvds_get_modes(struct drm_connector *connector)
525 struct drm_device *dev = connector->dev; 520 struct drm_device *dev = connector->dev;
526 struct drm_psb_private *dev_priv = dev->dev_private; 521 struct drm_psb_private *dev_priv = dev->dev_private;
527 struct psb_intel_mode_device *mode_dev = &dev_priv->mode_dev; 522 struct psb_intel_mode_device *mode_dev = &dev_priv->mode_dev;
528 struct psb_intel_encoder *psb_intel_encoder = 523 struct gma_encoder *gma_encoder = gma_attached_encoder(connector);
529 psb_intel_attached_encoder(connector); 524 struct psb_intel_lvds_priv *lvds_priv = gma_encoder->dev_priv;
530 struct psb_intel_lvds_priv *lvds_priv = psb_intel_encoder->dev_priv;
531 int ret = 0; 525 int ret = 0;
532 526
533 if (!IS_MRST(dev)) 527 if (!IS_MRST(dev))
@@ -564,9 +558,8 @@ static int psb_intel_lvds_get_modes(struct drm_connector *connector)
564 */ 558 */
565void psb_intel_lvds_destroy(struct drm_connector *connector) 559void psb_intel_lvds_destroy(struct drm_connector *connector)
566{ 560{
567 struct psb_intel_encoder *psb_intel_encoder = 561 struct gma_encoder *gma_encoder = gma_attached_encoder(connector);
568 psb_intel_attached_encoder(connector); 562 struct psb_intel_lvds_priv *lvds_priv = gma_encoder->dev_priv;
569 struct psb_intel_lvds_priv *lvds_priv = psb_intel_encoder->dev_priv;
570 563
571 if (lvds_priv->ddc_bus) 564 if (lvds_priv->ddc_bus)
572 psb_intel_i2c_destroy(lvds_priv->ddc_bus); 565 psb_intel_i2c_destroy(lvds_priv->ddc_bus);
@@ -585,8 +578,7 @@ int psb_intel_lvds_set_property(struct drm_connector *connector,
585 return -1; 578 return -1;
586 579
587 if (!strcmp(property->name, "scaling mode")) { 580 if (!strcmp(property->name, "scaling mode")) {
588 struct psb_intel_crtc *crtc = 581 struct gma_crtc *crtc = to_gma_crtc(encoder->crtc);
589 to_psb_intel_crtc(encoder->crtc);
590 uint64_t curval; 582 uint64_t curval;
591 583
592 if (!crtc) 584 if (!crtc)
@@ -656,7 +648,7 @@ const struct drm_connector_helper_funcs
656 psb_intel_lvds_connector_helper_funcs = { 648 psb_intel_lvds_connector_helper_funcs = {
657 .get_modes = psb_intel_lvds_get_modes, 649 .get_modes = psb_intel_lvds_get_modes,
658 .mode_valid = psb_intel_lvds_mode_valid, 650 .mode_valid = psb_intel_lvds_mode_valid,
659 .best_encoder = psb_intel_best_encoder, 651 .best_encoder = gma_best_encoder,
660}; 652};
661 653
662const struct drm_connector_funcs psb_intel_lvds_connector_funcs = { 654const struct drm_connector_funcs psb_intel_lvds_connector_funcs = {
@@ -691,8 +683,8 @@ const struct drm_encoder_funcs psb_intel_lvds_enc_funcs = {
691void psb_intel_lvds_init(struct drm_device *dev, 683void psb_intel_lvds_init(struct drm_device *dev,
692 struct psb_intel_mode_device *mode_dev) 684 struct psb_intel_mode_device *mode_dev)
693{ 685{
694 struct psb_intel_encoder *psb_intel_encoder; 686 struct gma_encoder *gma_encoder;
695 struct psb_intel_connector *psb_intel_connector; 687 struct gma_connector *gma_connector;
696 struct psb_intel_lvds_priv *lvds_priv; 688 struct psb_intel_lvds_priv *lvds_priv;
697 struct drm_connector *connector; 689 struct drm_connector *connector;
698 struct drm_encoder *encoder; 690 struct drm_encoder *encoder;
@@ -702,17 +694,15 @@ void psb_intel_lvds_init(struct drm_device *dev,
702 u32 lvds; 694 u32 lvds;
703 int pipe; 695 int pipe;
704 696
705 psb_intel_encoder = 697 gma_encoder = kzalloc(sizeof(struct gma_encoder), GFP_KERNEL);
706 kzalloc(sizeof(struct psb_intel_encoder), GFP_KERNEL); 698 if (!gma_encoder) {
707 if (!psb_intel_encoder) { 699 dev_err(dev->dev, "gma_encoder allocation error\n");
708 dev_err(dev->dev, "psb_intel_encoder allocation error\n");
709 return; 700 return;
710 } 701 }
711 702
712 psb_intel_connector = 703 gma_connector = kzalloc(sizeof(struct gma_connector), GFP_KERNEL);
713 kzalloc(sizeof(struct psb_intel_connector), GFP_KERNEL); 704 if (!gma_connector) {
714 if (!psb_intel_connector) { 705 dev_err(dev->dev, "gma_connector allocation error\n");
715 dev_err(dev->dev, "psb_intel_connector allocation error\n");
716 goto failed_encoder; 706 goto failed_encoder;
717 } 707 }
718 708
@@ -722,10 +712,10 @@ void psb_intel_lvds_init(struct drm_device *dev,
722 goto failed_connector; 712 goto failed_connector;
723 } 713 }
724 714
725 psb_intel_encoder->dev_priv = lvds_priv; 715 gma_encoder->dev_priv = lvds_priv;
726 716
727 connector = &psb_intel_connector->base; 717 connector = &gma_connector->base;
728 encoder = &psb_intel_encoder->base; 718 encoder = &gma_encoder->base;
729 drm_connector_init(dev, connector, 719 drm_connector_init(dev, connector,
730 &psb_intel_lvds_connector_funcs, 720 &psb_intel_lvds_connector_funcs,
731 DRM_MODE_CONNECTOR_LVDS); 721 DRM_MODE_CONNECTOR_LVDS);
@@ -734,9 +724,8 @@ void psb_intel_lvds_init(struct drm_device *dev,
734 &psb_intel_lvds_enc_funcs, 724 &psb_intel_lvds_enc_funcs,
735 DRM_MODE_ENCODER_LVDS); 725 DRM_MODE_ENCODER_LVDS);
736 726
737 psb_intel_connector_attach_encoder(psb_intel_connector, 727 gma_connector_attach_encoder(gma_connector, gma_encoder);
738 psb_intel_encoder); 728 gma_encoder->type = INTEL_OUTPUT_LVDS;
739 psb_intel_encoder->type = INTEL_OUTPUT_LVDS;
740 729
741 drm_encoder_helper_add(encoder, &psb_intel_lvds_helper_funcs); 730 drm_encoder_helper_add(encoder, &psb_intel_lvds_helper_funcs);
742 drm_connector_helper_add(connector, 731 drm_connector_helper_add(connector,
@@ -851,8 +840,8 @@ failed_blc_i2c:
851 drm_encoder_cleanup(encoder); 840 drm_encoder_cleanup(encoder);
852 drm_connector_cleanup(connector); 841 drm_connector_cleanup(connector);
853failed_connector: 842failed_connector:
854 kfree(psb_intel_connector); 843 kfree(gma_connector);
855failed_encoder: 844failed_encoder:
856 kfree(psb_intel_encoder); 845 kfree(gma_encoder);
857} 846}
858 847