summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/gma500/cdv_intel_lvds.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/gma500/cdv_intel_lvds.c')
-rw-r--r--drivers/gpu/drm/gma500/cdv_intel_lvds.c71
1 files changed, 33 insertions, 38 deletions
diff --git a/drivers/gpu/drm/gma500/cdv_intel_lvds.c b/drivers/gpu/drm/gma500/cdv_intel_lvds.c
index d81dbc3368f0..20e08e65d46c 100644
--- a/drivers/gpu/drm/gma500/cdv_intel_lvds.c
+++ b/drivers/gpu/drm/gma500/cdv_intel_lvds.c
@@ -356,8 +356,7 @@ static void cdv_intel_lvds_mode_set(struct drm_encoder *encoder,
356{ 356{
357 struct drm_device *dev = encoder->dev; 357 struct drm_device *dev = encoder->dev;
358 struct drm_psb_private *dev_priv = dev->dev_private; 358 struct drm_psb_private *dev_priv = dev->dev_private;
359 struct psb_intel_crtc *psb_intel_crtc = to_psb_intel_crtc( 359 struct gma_crtc *gma_crtc = to_gma_crtc(encoder->crtc);
360 encoder->crtc);
361 u32 pfit_control; 360 u32 pfit_control;
362 361
363 /* 362 /*
@@ -379,7 +378,7 @@ static void cdv_intel_lvds_mode_set(struct drm_encoder *encoder,
379 else 378 else
380 pfit_control = 0; 379 pfit_control = 0;
381 380
382 pfit_control |= psb_intel_crtc->pipe << PFIT_PIPE_SHIFT; 381 pfit_control |= gma_crtc->pipe << PFIT_PIPE_SHIFT;
383 382
384 if (dev_priv->lvds_dither) 383 if (dev_priv->lvds_dither)
385 pfit_control |= PANEL_8TO6_DITHER_ENABLE; 384 pfit_control |= PANEL_8TO6_DITHER_ENABLE;
@@ -407,12 +406,11 @@ static int cdv_intel_lvds_get_modes(struct drm_connector *connector)
407{ 406{
408 struct drm_device *dev = connector->dev; 407 struct drm_device *dev = connector->dev;
409 struct drm_psb_private *dev_priv = dev->dev_private; 408 struct drm_psb_private *dev_priv = dev->dev_private;
410 struct psb_intel_encoder *psb_intel_encoder = 409 struct gma_encoder *gma_encoder = gma_attached_encoder(connector);
411 psb_intel_attached_encoder(connector);
412 struct psb_intel_mode_device *mode_dev = &dev_priv->mode_dev; 410 struct psb_intel_mode_device *mode_dev = &dev_priv->mode_dev;
413 int ret; 411 int ret;
414 412
415 ret = psb_intel_ddc_get_modes(connector, &psb_intel_encoder->i2c_bus->adapter); 413 ret = psb_intel_ddc_get_modes(connector, &gma_encoder->i2c_bus->adapter);
416 414
417 if (ret) 415 if (ret)
418 return ret; 416 return ret;
@@ -444,11 +442,10 @@ static int cdv_intel_lvds_get_modes(struct drm_connector *connector)
444 */ 442 */
445static void cdv_intel_lvds_destroy(struct drm_connector *connector) 443static void cdv_intel_lvds_destroy(struct drm_connector *connector)
446{ 444{
447 struct psb_intel_encoder *psb_intel_encoder = 445 struct gma_encoder *gma_encoder = gma_attached_encoder(connector);
448 psb_intel_attached_encoder(connector);
449 446
450 if (psb_intel_encoder->i2c_bus) 447 if (gma_encoder->i2c_bus)
451 psb_intel_i2c_destroy(psb_intel_encoder->i2c_bus); 448 psb_intel_i2c_destroy(gma_encoder->i2c_bus);
452 drm_sysfs_connector_remove(connector); 449 drm_sysfs_connector_remove(connector);
453 drm_connector_cleanup(connector); 450 drm_connector_cleanup(connector);
454 kfree(connector); 451 kfree(connector);
@@ -461,8 +458,7 @@ static int cdv_intel_lvds_set_property(struct drm_connector *connector,
461 struct drm_encoder *encoder = connector->encoder; 458 struct drm_encoder *encoder = connector->encoder;
462 459
463 if (!strcmp(property->name, "scaling mode") && encoder) { 460 if (!strcmp(property->name, "scaling mode") && encoder) {
464 struct psb_intel_crtc *crtc = 461 struct gma_crtc *crtc = to_gma_crtc(encoder->crtc);
465 to_psb_intel_crtc(encoder->crtc);
466 uint64_t curValue; 462 uint64_t curValue;
467 463
468 if (!crtc) 464 if (!crtc)
@@ -529,7 +525,7 @@ static const struct drm_connector_helper_funcs
529 cdv_intel_lvds_connector_helper_funcs = { 525 cdv_intel_lvds_connector_helper_funcs = {
530 .get_modes = cdv_intel_lvds_get_modes, 526 .get_modes = cdv_intel_lvds_get_modes,
531 .mode_valid = cdv_intel_lvds_mode_valid, 527 .mode_valid = cdv_intel_lvds_mode_valid,
532 .best_encoder = psb_intel_best_encoder, 528 .best_encoder = gma_best_encoder,
533}; 529};
534 530
535static const struct drm_connector_funcs cdv_intel_lvds_connector_funcs = { 531static const struct drm_connector_funcs cdv_intel_lvds_connector_funcs = {
@@ -612,8 +608,8 @@ static bool lvds_is_present_in_vbt(struct drm_device *dev,
612void cdv_intel_lvds_init(struct drm_device *dev, 608void cdv_intel_lvds_init(struct drm_device *dev,
613 struct psb_intel_mode_device *mode_dev) 609 struct psb_intel_mode_device *mode_dev)
614{ 610{
615 struct psb_intel_encoder *psb_intel_encoder; 611 struct gma_encoder *gma_encoder;
616 struct psb_intel_connector *psb_intel_connector; 612 struct gma_connector *gma_connector;
617 struct cdv_intel_lvds_priv *lvds_priv; 613 struct cdv_intel_lvds_priv *lvds_priv;
618 struct drm_connector *connector; 614 struct drm_connector *connector;
619 struct drm_encoder *encoder; 615 struct drm_encoder *encoder;
@@ -630,24 +626,24 @@ void cdv_intel_lvds_init(struct drm_device *dev,
630 return; 626 return;
631 } 627 }
632 628
633 psb_intel_encoder = kzalloc(sizeof(struct psb_intel_encoder), 629 gma_encoder = kzalloc(sizeof(struct gma_encoder),
634 GFP_KERNEL); 630 GFP_KERNEL);
635 if (!psb_intel_encoder) 631 if (!gma_encoder)
636 return; 632 return;
637 633
638 psb_intel_connector = kzalloc(sizeof(struct psb_intel_connector), 634 gma_connector = kzalloc(sizeof(struct gma_connector),
639 GFP_KERNEL); 635 GFP_KERNEL);
640 if (!psb_intel_connector) 636 if (!gma_connector)
641 goto failed_connector; 637 goto failed_connector;
642 638
643 lvds_priv = kzalloc(sizeof(struct cdv_intel_lvds_priv), GFP_KERNEL); 639 lvds_priv = kzalloc(sizeof(struct cdv_intel_lvds_priv), GFP_KERNEL);
644 if (!lvds_priv) 640 if (!lvds_priv)
645 goto failed_lvds_priv; 641 goto failed_lvds_priv;
646 642
647 psb_intel_encoder->dev_priv = lvds_priv; 643 gma_encoder->dev_priv = lvds_priv;
648 644
649 connector = &psb_intel_connector->base; 645 connector = &gma_connector->base;
650 encoder = &psb_intel_encoder->base; 646 encoder = &gma_encoder->base;
651 647
652 648
653 drm_connector_init(dev, connector, 649 drm_connector_init(dev, connector,
@@ -659,9 +655,8 @@ void cdv_intel_lvds_init(struct drm_device *dev,
659 DRM_MODE_ENCODER_LVDS); 655 DRM_MODE_ENCODER_LVDS);
660 656
661 657
662 psb_intel_connector_attach_encoder(psb_intel_connector, 658 gma_connector_attach_encoder(gma_connector, gma_encoder);
663 psb_intel_encoder); 659 gma_encoder->type = INTEL_OUTPUT_LVDS;
664 psb_intel_encoder->type = INTEL_OUTPUT_LVDS;
665 660
666 drm_encoder_helper_add(encoder, &cdv_intel_lvds_helper_funcs); 661 drm_encoder_helper_add(encoder, &cdv_intel_lvds_helper_funcs);
667 drm_connector_helper_add(connector, 662 drm_connector_helper_add(connector,
@@ -682,16 +677,16 @@ void cdv_intel_lvds_init(struct drm_device *dev,
682 * Set up I2C bus 677 * Set up I2C bus
683 * FIXME: distroy i2c_bus when exit 678 * FIXME: distroy i2c_bus when exit
684 */ 679 */
685 psb_intel_encoder->i2c_bus = psb_intel_i2c_create(dev, 680 gma_encoder->i2c_bus = psb_intel_i2c_create(dev,
686 GPIOB, 681 GPIOB,
687 "LVDSBLC_B"); 682 "LVDSBLC_B");
688 if (!psb_intel_encoder->i2c_bus) { 683 if (!gma_encoder->i2c_bus) {
689 dev_printk(KERN_ERR, 684 dev_printk(KERN_ERR,
690 &dev->pdev->dev, "I2C bus registration failed.\n"); 685 &dev->pdev->dev, "I2C bus registration failed.\n");
691 goto failed_blc_i2c; 686 goto failed_blc_i2c;
692 } 687 }
693 psb_intel_encoder->i2c_bus->slave_addr = 0x2C; 688 gma_encoder->i2c_bus->slave_addr = 0x2C;
694 dev_priv->lvds_i2c_bus = psb_intel_encoder->i2c_bus; 689 dev_priv->lvds_i2c_bus = gma_encoder->i2c_bus;
695 690
696 /* 691 /*
697 * LVDS discovery: 692 * LVDS discovery:
@@ -704,10 +699,10 @@ void cdv_intel_lvds_init(struct drm_device *dev,
704 */ 699 */
705 700
706 /* Set up the DDC bus. */ 701 /* Set up the DDC bus. */
707 psb_intel_encoder->ddc_bus = psb_intel_i2c_create(dev, 702 gma_encoder->ddc_bus = psb_intel_i2c_create(dev,
708 GPIOC, 703 GPIOC,
709 "LVDSDDC_C"); 704 "LVDSDDC_C");
710 if (!psb_intel_encoder->ddc_bus) { 705 if (!gma_encoder->ddc_bus) {
711 dev_printk(KERN_ERR, &dev->pdev->dev, 706 dev_printk(KERN_ERR, &dev->pdev->dev,
712 "DDC bus registration " "failed.\n"); 707 "DDC bus registration " "failed.\n");
713 goto failed_ddc; 708 goto failed_ddc;
@@ -718,7 +713,7 @@ void cdv_intel_lvds_init(struct drm_device *dev,
718 * preferred mode is the right one. 713 * preferred mode is the right one.
719 */ 714 */
720 psb_intel_ddc_get_modes(connector, 715 psb_intel_ddc_get_modes(connector,
721 &psb_intel_encoder->ddc_bus->adapter); 716 &gma_encoder->ddc_bus->adapter);
722 list_for_each_entry(scan, &connector->probed_modes, head) { 717 list_for_each_entry(scan, &connector->probed_modes, head) {
723 if (scan->type & DRM_MODE_TYPE_PREFERRED) { 718 if (scan->type & DRM_MODE_TYPE_PREFERRED) {
724 mode_dev->panel_fixed_mode = 719 mode_dev->panel_fixed_mode =
@@ -782,19 +777,19 @@ out:
782 777
783failed_find: 778failed_find:
784 printk(KERN_ERR "Failed find\n"); 779 printk(KERN_ERR "Failed find\n");
785 if (psb_intel_encoder->ddc_bus) 780 if (gma_encoder->ddc_bus)
786 psb_intel_i2c_destroy(psb_intel_encoder->ddc_bus); 781 psb_intel_i2c_destroy(gma_encoder->ddc_bus);
787failed_ddc: 782failed_ddc:
788 printk(KERN_ERR "Failed DDC\n"); 783 printk(KERN_ERR "Failed DDC\n");
789 if (psb_intel_encoder->i2c_bus) 784 if (gma_encoder->i2c_bus)
790 psb_intel_i2c_destroy(psb_intel_encoder->i2c_bus); 785 psb_intel_i2c_destroy(gma_encoder->i2c_bus);
791failed_blc_i2c: 786failed_blc_i2c:
792 printk(KERN_ERR "Failed BLC\n"); 787 printk(KERN_ERR "Failed BLC\n");
793 drm_encoder_cleanup(encoder); 788 drm_encoder_cleanup(encoder);
794 drm_connector_cleanup(connector); 789 drm_connector_cleanup(connector);
795 kfree(lvds_priv); 790 kfree(lvds_priv);
796failed_lvds_priv: 791failed_lvds_priv:
797 kfree(psb_intel_connector); 792 kfree(gma_connector);
798failed_connector: 793failed_connector:
799 kfree(psb_intel_encoder); 794 kfree(gma_encoder);
800} 795}