From 491a4dd671808f2b8e40b60297aebfb7a4bb4f6a Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Wed, 30 Mar 2011 09:59:08 +0100 Subject: [PATCH] --- yaml --- r: 249019 b: refs/heads/master c: 2627aaa6795753e787e544bbc8be60e38e0b08e6 h: refs/heads/master i: 249017: c58169e5085834a8f44c08d9a3047832d09955d8 249015: e89da2d0b9d533e6bddd061e42d7779a24d08aed v: v3 --- [refs] | 2 +- trunk/drivers/staging/gma500/psb_drv.c | 6 ++++-- trunk/drivers/staging/gma500/psb_drv.h | 6 ++---- trunk/drivers/staging/gma500/psb_fb.c | 6 +++++- trunk/drivers/staging/gma500/psb_intel_display.c | 4 +++- trunk/drivers/staging/gma500/psb_intel_lvds.c | 8 ++++++-- 6 files changed, 21 insertions(+), 11 deletions(-) diff --git a/[refs] b/[refs] index d40695adf907..380f6ddb811e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 427beeb21ad0b4297657d578003b2eb3803f95c9 +refs/heads/master: 2627aaa6795753e787e544bbc8be60e38e0b08e6 diff --git a/trunk/drivers/staging/gma500/psb_drv.c b/trunk/drivers/staging/gma500/psb_drv.c index 44cd095d2862..a7391c5853fd 100644 --- a/trunk/drivers/staging/gma500/psb_drv.c +++ b/trunk/drivers/staging/gma500/psb_drv.c @@ -586,8 +586,10 @@ static int psb_driver_load(struct drm_device *dev, unsigned long chipset) return -ENOMEM; INIT_LIST_HEAD(&dev_priv->video_ctx); - dev_priv->num_pipe = 2; - + if (IS_MRST(dev)) + dev_priv->num_pipe = 1; + else + dev_priv->num_pipe = 2; dev_priv->dev = dev; bdev = &dev_priv->bdev; diff --git a/trunk/drivers/staging/gma500/psb_drv.h b/trunk/drivers/staging/gma500/psb_drv.h index 29a36056d664..e7507b1aceb4 100644 --- a/trunk/drivers/staging/gma500/psb_drv.h +++ b/trunk/drivers/staging/gma500/psb_drv.h @@ -45,6 +45,8 @@ enum { CHIP_PSB_8109 = 1, }; +#define IS_MRST(dev) (((dev)->pci_device & 0xfffc) == 0x4100) + /* *Hardware bugfixes */ @@ -52,10 +54,6 @@ enum { #define DRIVER_NAME "pvrsrvkm" #define DRIVER_DESC "drm driver for the Intel GMA500" #define DRIVER_AUTHOR "Intel Corporation" -#define OSPM_PROC_ENTRY "ospm" -#define RTPM_PROC_ENTRY "rtpm" -#define BLC_PROC_ENTRY "mrst_blc" -#define DISPLAY_PROC_ENTRY "display_status" #define PSB_DRM_DRIVER_DATE "2009-03-10" #define PSB_DRM_DRIVER_MAJOR 8 diff --git a/trunk/drivers/staging/gma500/psb_fb.c b/trunk/drivers/staging/gma500/psb_fb.c index f67f53b12937..4e5d8a6b7e26 100644 --- a/trunk/drivers/staging/gma500/psb_fb.c +++ b/trunk/drivers/staging/gma500/psb_fb.c @@ -716,7 +716,11 @@ static void psb_setup_outputs(struct drm_device *dev) break; case INTEL_OUTPUT_LVDS: PSB_DEBUG_ENTRY("LVDS.\n"); - crtc_mask = (1 << 1); + if (IS_MRST(dev)) + crtc_mask = (1 << 0); + else + crtc_mask = (1 << 1); + clone_mask = (1 << INTEL_OUTPUT_LVDS); break; case INTEL_OUTPUT_MIPI: diff --git a/trunk/drivers/staging/gma500/psb_intel_display.c b/trunk/drivers/staging/gma500/psb_intel_display.c index 80b37f4ca10a..917d37ef92bc 100644 --- a/trunk/drivers/staging/gma500/psb_intel_display.c +++ b/trunk/drivers/staging/gma500/psb_intel_display.c @@ -569,7 +569,9 @@ static int psb_intel_panel_fitter_pipe(struct drm_device *dev) if ((pfit_control & PFIT_ENABLE) == 0) return -1; /* Must be on PIPE 1 for PSB */ - return 1; + if (!IS_MRST(dev)) + return 1; + return (pfit_control >> 29) & 3; } static int psb_intel_crtc_mode_set(struct drm_crtc *crtc, diff --git a/trunk/drivers/staging/gma500/psb_intel_lvds.c b/trunk/drivers/staging/gma500/psb_intel_lvds.c index d3d210a1026a..2de05245ec9b 100644 --- a/trunk/drivers/staging/gma500/psb_intel_lvds.c +++ b/trunk/drivers/staging/gma500/psb_intel_lvds.c @@ -400,11 +400,15 @@ bool psb_intel_lvds_mode_fixup(struct drm_encoder *encoder, if (psb_intel_output->type == INTEL_OUTPUT_MIPI2) panel_fixed_mode = mode_dev->panel_fixed_mode2; - /* PSB doesn't appear to be GEN4 */ - if (psb_intel_crtc->pipe == 0) { + /* PSB requires the LVDS is on pipe B, MRST has only one pipe anyway */ + if (!IS_MRST(dev) && psb_intel_crtc->pipe == 0) { printk(KERN_ERR "Can't support LVDS on pipe A\n"); return false; } + if (IS_MRST(dev) && psb_intel_crtc->pipe != 0) { + printk(KERN_ERR "Must use PIPE A\n"); + return false; + } /* Should never happen!! */ list_for_each_entry(tmp_encoder, &dev->mode_config.encoder_list, head) {