diff options
author | Alan Cox <alan@linux.intel.com> | 2011-03-30 08:59:08 (GMT) |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-04-05 18:27:41 (GMT) |
commit | 2627aaa6795753e787e544bbc8be60e38e0b08e6 (patch) | |
tree | 51ac68eac17eaf31a3877f84065b40f6d3f6c9de | |
parent | 427beeb21ad0b4297657d578003b2eb3803f95c9 (diff) | |
download | linux-2627aaa6795753e787e544bbc8be60e38e0b08e6.tar.xz |
staging: gma500: begin adding Moorestown support
The Moorestown systems have some graphics differences we care about and some
we don't need to.
To start with it has a single pipe and that pipe can be used for LVDS
Signed-off-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r-- | drivers/staging/gma500/psb_drv.c | 6 | ||||
-rw-r--r-- | drivers/staging/gma500/psb_drv.h | 6 | ||||
-rw-r--r-- | drivers/staging/gma500/psb_fb.c | 6 | ||||
-rw-r--r-- | drivers/staging/gma500/psb_intel_display.c | 4 | ||||
-rw-r--r-- | drivers/staging/gma500/psb_intel_lvds.c | 8 |
5 files changed, 20 insertions, 10 deletions
diff --git a/drivers/staging/gma500/psb_drv.c b/drivers/staging/gma500/psb_drv.c index 44cd095..a7391c5 100644 --- a/drivers/staging/gma500/psb_drv.c +++ b/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/drivers/staging/gma500/psb_drv.h b/drivers/staging/gma500/psb_drv.h index 29a3605..e7507b1 100644 --- a/drivers/staging/gma500/psb_drv.h +++ b/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/drivers/staging/gma500/psb_fb.c b/drivers/staging/gma500/psb_fb.c index f67f53b..4e5d8a6 100644 --- a/drivers/staging/gma500/psb_fb.c +++ b/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/drivers/staging/gma500/psb_intel_display.c b/drivers/staging/gma500/psb_intel_display.c index 80b37f4..917d37e 100644 --- a/drivers/staging/gma500/psb_intel_display.c +++ b/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/drivers/staging/gma500/psb_intel_lvds.c b/drivers/staging/gma500/psb_intel_lvds.c index d3d210a..2de0524 100644 --- a/drivers/staging/gma500/psb_intel_lvds.c +++ b/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) { |