Commit 2627aaa6 authored by Alan Cox's avatar Alan Cox Committed by Greg Kroah-Hartman

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: default avatarAlan Cox <alan@linux.intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 427beeb2
...@@ -586,8 +586,10 @@ static int psb_driver_load(struct drm_device *dev, unsigned long chipset) ...@@ -586,8 +586,10 @@ static int psb_driver_load(struct drm_device *dev, unsigned long chipset)
return -ENOMEM; return -ENOMEM;
INIT_LIST_HEAD(&dev_priv->video_ctx); 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; dev_priv->dev = dev;
bdev = &dev_priv->bdev; bdev = &dev_priv->bdev;
......
...@@ -45,6 +45,8 @@ enum { ...@@ -45,6 +45,8 @@ enum {
CHIP_PSB_8109 = 1, CHIP_PSB_8109 = 1,
}; };
#define IS_MRST(dev) (((dev)->pci_device & 0xfffc) == 0x4100)
/* /*
*Hardware bugfixes *Hardware bugfixes
*/ */
...@@ -52,10 +54,6 @@ enum { ...@@ -52,10 +54,6 @@ enum {
#define DRIVER_NAME "pvrsrvkm" #define DRIVER_NAME "pvrsrvkm"
#define DRIVER_DESC "drm driver for the Intel GMA500" #define DRIVER_DESC "drm driver for the Intel GMA500"
#define DRIVER_AUTHOR "Intel Corporation" #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_DATE "2009-03-10"
#define PSB_DRM_DRIVER_MAJOR 8 #define PSB_DRM_DRIVER_MAJOR 8
......
...@@ -716,7 +716,11 @@ static void psb_setup_outputs(struct drm_device *dev) ...@@ -716,7 +716,11 @@ static void psb_setup_outputs(struct drm_device *dev)
break; break;
case INTEL_OUTPUT_LVDS: case INTEL_OUTPUT_LVDS:
PSB_DEBUG_ENTRY("LVDS.\n"); 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); clone_mask = (1 << INTEL_OUTPUT_LVDS);
break; break;
case INTEL_OUTPUT_MIPI: case INTEL_OUTPUT_MIPI:
......
...@@ -569,7 +569,9 @@ static int psb_intel_panel_fitter_pipe(struct drm_device *dev) ...@@ -569,7 +569,9 @@ static int psb_intel_panel_fitter_pipe(struct drm_device *dev)
if ((pfit_control & PFIT_ENABLE) == 0) if ((pfit_control & PFIT_ENABLE) == 0)
return -1; return -1;
/* Must be on PIPE 1 for PSB */ /* 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, static int psb_intel_crtc_mode_set(struct drm_crtc *crtc,
......
...@@ -400,11 +400,15 @@ bool psb_intel_lvds_mode_fixup(struct drm_encoder *encoder, ...@@ -400,11 +400,15 @@ bool psb_intel_lvds_mode_fixup(struct drm_encoder *encoder,
if (psb_intel_output->type == INTEL_OUTPUT_MIPI2) if (psb_intel_output->type == INTEL_OUTPUT_MIPI2)
panel_fixed_mode = mode_dev->panel_fixed_mode2; panel_fixed_mode = mode_dev->panel_fixed_mode2;
/* PSB doesn't appear to be GEN4 */ /* PSB requires the LVDS is on pipe B, MRST has only one pipe anyway */
if (psb_intel_crtc->pipe == 0) { if (!IS_MRST(dev) && psb_intel_crtc->pipe == 0) {
printk(KERN_ERR "Can't support LVDS on pipe A\n"); printk(KERN_ERR "Can't support LVDS on pipe A\n");
return false; return false;
} }
if (IS_MRST(dev) && psb_intel_crtc->pipe != 0) {
printk(KERN_ERR "Must use PIPE A\n");
return false;
}
/* Should never happen!! */ /* Should never happen!! */
list_for_each_entry(tmp_encoder, &dev->mode_config.encoder_list, list_for_each_entry(tmp_encoder, &dev->mode_config.encoder_list,
head) { head) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment