summaryrefslogtreecommitdiff
path: root/linux-core
diff options
context:
space:
mode:
authorMaarten Maathuis <madman2003@gmail.com>2008-06-25 15:16:38 +0200
committerMaarten Maathuis <madman2003@gmail.com>2008-06-25 15:16:38 +0200
commit09b67dda0bc040860aedce4a2d28bce1c80e56d6 (patch)
tree2fd8e0c292fa511c8be55b94e9963b6835789171 /linux-core
parentbe7276281694145e7c947b91a1c8e6e347de666c (diff)
NV50: Some cleanup and fixes.
Diffstat (limited to 'linux-core')
-rw-r--r--linux-core/nv50_crtc.c10
-rw-r--r--linux-core/nv50_crtc.h1
-rw-r--r--linux-core/nv50_cursor.c18
-rw-r--r--linux-core/nv50_cursor.h1
4 files changed, 25 insertions, 5 deletions
diff --git a/linux-core/nv50_crtc.c b/linux-core/nv50_crtc.c
index 0bcf3058..af2f03d8 100644
--- a/linux-core/nv50_crtc.c
+++ b/linux-core/nv50_crtc.c
@@ -192,10 +192,9 @@ static int nv50_crtc_blank(struct nv50_crtc *crtc, bool blanked)
} else {
OUT_MODE(NV50_CRTC0_FB_OFFSET + offset, crtc->fb->block->start >> 8);
OUT_MODE(0x864 + offset, 0);
- if (crtc->cursor->block)
- OUT_MODE(NV50_CRTC0_CURSOR_OFFSET + offset, crtc->cursor->block->start >> 8);
- else
- OUT_MODE(NV50_CRTC0_CURSOR_OFFSET + offset, 0);
+
+ crtc->cursor->set_offset(crtc);
+
if (dev_priv->chipset != 0x50)
OUT_MODE(NV84_CRTC0_BLANK_UNK2 + offset, NV84_CRTC0_BLANK_UNK2_UNBLANK);
@@ -212,6 +211,9 @@ static int nv50_crtc_blank(struct nv50_crtc *crtc, bool blanked)
OUT_MODE(NV50_CRTC0_BLANK_CTRL + offset, NV50_CRTC0_BLANK_CTRL_UNBLANK);
}
+ /* sometimes you need to know if a screen is already blanked. */
+ crtc->blanked = blanked;
+
return 0;
}
diff --git a/linux-core/nv50_crtc.h b/linux-core/nv50_crtc.h
index 0eadc3d4..b63c5a22 100644
--- a/linux-core/nv50_crtc.h
+++ b/linux-core/nv50_crtc.h
@@ -39,6 +39,7 @@ struct nv50_crtc {
struct drm_device *dev;
int index;
bool active;
+ bool blanked;
struct nouveau_hw_mode *mode;
struct nouveau_hw_mode *native_mode;
diff --git a/linux-core/nv50_cursor.c b/linux-core/nv50_cursor.c
index 47ae11bb..091c94fe 100644
--- a/linux-core/nv50_cursor.c
+++ b/linux-core/nv50_cursor.c
@@ -103,6 +103,21 @@ static int nv50_cursor_set_pos(struct nv50_crtc *crtc, int x, int y)
return 0;
}
+static int nv50_cursor_set_offset(struct nv50_crtc *crtc)
+{
+ struct drm_nouveau_private *dev_priv = crtc->dev->dev_private;
+
+ NV50_DEBUG("\n");
+
+ if (crtc->cursor->block) {
+ OUT_MODE(NV50_CRTC0_CURSOR_OFFSET + crtc->index * 0x400, crtc->cursor->block->start >> 8);
+ } else {
+ OUT_MODE(NV50_CRTC0_CURSOR_OFFSET + crtc->index * 0x400, 0);
+ }
+
+ return 0;
+}
+
static int nv50_cursor_set_bo(struct nv50_crtc *crtc, drm_handle_t handle)
{
struct mem_block *block = NULL;
@@ -121,7 +136,7 @@ static int nv50_cursor_set_bo(struct nv50_crtc *crtc, drm_handle_t handle)
/* set the cursor offset cursor */
if (first_time) {
- OUT_MODE(NV50_CRTC0_CURSOR_OFFSET + crtc->index * 0x400, crtc->cursor->block->start >> 8);
+ crtc->cursor->set_offset(crtc);
if (crtc->cursor->visible)
crtc->cursor->show(crtc);
}
@@ -148,6 +163,7 @@ int nv50_cursor_create(struct nv50_crtc *crtc)
crtc->cursor->show = nv50_cursor_show;
crtc->cursor->hide = nv50_cursor_hide;
crtc->cursor->set_pos = nv50_cursor_set_pos;
+ crtc->cursor->set_offset = nv50_cursor_set_offset;
crtc->cursor->set_bo = nv50_cursor_set_bo;
crtc->cursor->enable = nv50_cursor_enable;
crtc->cursor->disable = nv50_cursor_disable;
diff --git a/linux-core/nv50_cursor.h b/linux-core/nv50_cursor.h
index a2e4632c..4fd0d39a 100644
--- a/linux-core/nv50_cursor.h
+++ b/linux-core/nv50_cursor.h
@@ -40,6 +40,7 @@ struct nv50_cursor {
int (*show) (struct nv50_crtc *crtc);
int (*hide) (struct nv50_crtc *crtc);
int (*set_pos) (struct nv50_crtc *crtc, int x, int y);
+ int (*set_offset) (struct nv50_crtc *crtc);
int (*set_bo) (struct nv50_crtc *crtc, drm_handle_t handle);
int (*enable) (struct nv50_crtc *crtc);
int (*disable) (struct nv50_crtc *crtc);