summaryrefslogtreecommitdiff
path: root/linux-core/intel_display.c
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2008-02-13 15:19:42 +1000
committerDave Airlie <airlied@redhat.com>2008-02-13 15:19:42 +1000
commit0fbee62ec14d08714dbc558dd20cc00b9a79c042 (patch)
tree95d631c4a6d1bc0b42a4094c1340095d36b0cf96 /linux-core/intel_display.c
parentdb85ed25afc616acfaadb21facf6066354f9d490 (diff)
major port of multi-master ideas into modesetting
Diffstat (limited to 'linux-core/intel_display.c')
-rw-r--r--linux-core/intel_display.c31
1 files changed, 20 insertions, 11 deletions
diff --git a/linux-core/intel_display.c b/linux-core/intel_display.c
index 5b7a510b..db3aee83 100644
--- a/linux-core/intel_display.c
+++ b/linux-core/intel_display.c
@@ -363,6 +363,7 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y)
{
struct drm_device *dev = crtc->dev;
struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_i915_master_private *master_priv;
struct intel_crtc *intel_crtc = crtc->driver_private;
int pipe = intel_crtc->pipe;
unsigned long Start, Offset;
@@ -384,17 +385,21 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y)
}
- if (!dev_priv->sarea_priv)
+ if (!dev->primary->master)
+ return;
+
+ master_priv = dev->primary->master->driver_priv;
+ if (!master_priv->sarea_priv)
return;
switch (pipe) {
case 0:
- dev_priv->sarea_priv->planeA_x = x;
- dev_priv->sarea_priv->planeA_y = y;
+ master_priv->sarea_priv->planeA_x = x;
+ master_priv->sarea_priv->planeA_y = y;
break;
case 1:
- dev_priv->sarea_priv->planeB_x = x;
- dev_priv->sarea_priv->planeB_y = y;
+ master_priv->sarea_priv->planeB_x = x;
+ master_priv->sarea_priv->planeB_y = y;
break;
default:
DRM_ERROR("Can't update pipe %d in SAREA\n", pipe);
@@ -413,6 +418,7 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y)
static void intel_crtc_dpms(struct drm_crtc *crtc, int mode)
{
struct drm_device *dev = crtc->dev;
+ struct drm_i915_master_private *master_priv;
struct drm_i915_private *dev_priv = dev->dev_private;
struct intel_crtc *intel_crtc = crtc->driver_private;
int pipe = intel_crtc->pipe;
@@ -506,21 +512,24 @@ static void intel_crtc_dpms(struct drm_crtc *crtc, int mode)
udelay(150);
break;
}
-
- if (!dev_priv->sarea_priv)
+ if (!dev->primary->master)
+ return;
+
+ master_priv = dev->primary->master->driver_priv;
+ if (!master_priv->sarea_priv)
return;
enabled = crtc->enabled && mode != DPMSModeOff;
switch (pipe) {
case 0:
- dev_priv->sarea_priv->planeA_w = enabled ? crtc->mode.hdisplay : 0;
- dev_priv->sarea_priv->planeA_h = enabled ? crtc->mode.vdisplay : 0;
+ master_priv->sarea_priv->planeA_w = enabled ? crtc->mode.hdisplay : 0;
+ master_priv->sarea_priv->planeA_h = enabled ? crtc->mode.vdisplay : 0;
break;
case 1:
- dev_priv->sarea_priv->planeB_w = enabled ? crtc->mode.hdisplay : 0;
- dev_priv->sarea_priv->planeB_h = enabled ? crtc->mode.vdisplay : 0;
+ master_priv->sarea_priv->planeB_w = enabled ? crtc->mode.hdisplay : 0;
+ master_priv->sarea_priv->planeB_h = enabled ? crtc->mode.vdisplay : 0;
break;
default:
DRM_ERROR("Can't update pipe %d in SAREA\n", pipe);