提交 488ff207 编写于 作者: B Ben Skeggs

drm/nouveau: no need to pass parameters into set_scale/dither

Signed-off-by: NBen Skeggs <bskeggs@redhat.com>
上级 63221755
...@@ -471,7 +471,7 @@ nouveau_connector_set_property(struct drm_connector *connector, ...@@ -471,7 +471,7 @@ nouveau_connector_set_property(struct drm_connector *connector,
if (!ret) if (!ret)
return -EINVAL; return -EINVAL;
} else { } else {
ret = nv_crtc->set_scale(nv_crtc, value, true); ret = nv_crtc->set_scale(nv_crtc, true);
if (ret) if (ret)
return ret; return ret;
} }
...@@ -486,9 +486,7 @@ nouveau_connector_set_property(struct drm_connector *connector, ...@@ -486,9 +486,7 @@ nouveau_connector_set_property(struct drm_connector *connector,
if (!nv_crtc || !nv_crtc->set_scale) if (!nv_crtc || !nv_crtc->set_scale)
return 0; return 0;
return nv_crtc->set_scale(nv_crtc, return nv_crtc->set_scale(nv_crtc, true);
nv_connector->scaling_mode,
true);
} }
return 0; return 0;
...@@ -500,9 +498,7 @@ nouveau_connector_set_property(struct drm_connector *connector, ...@@ -500,9 +498,7 @@ nouveau_connector_set_property(struct drm_connector *connector,
if (!nv_crtc || !nv_crtc->set_scale) if (!nv_crtc || !nv_crtc->set_scale)
return 0; return 0;
return nv_crtc->set_scale(nv_crtc, return nv_crtc->set_scale(nv_crtc, true);
nv_connector->scaling_mode,
true);
} }
return 0; return 0;
...@@ -514,9 +510,7 @@ nouveau_connector_set_property(struct drm_connector *connector, ...@@ -514,9 +510,7 @@ nouveau_connector_set_property(struct drm_connector *connector,
if (!nv_crtc || !nv_crtc->set_scale) if (!nv_crtc || !nv_crtc->set_scale)
return 0; return 0;
return nv_crtc->set_scale(nv_crtc, return nv_crtc->set_scale(nv_crtc, true);
nv_connector->scaling_mode,
true);
} }
return 0; return 0;
...@@ -532,8 +526,7 @@ nouveau_connector_set_property(struct drm_connector *connector, ...@@ -532,8 +526,7 @@ nouveau_connector_set_property(struct drm_connector *connector,
if (!nv_crtc || !nv_crtc->set_dither) if (!nv_crtc || !nv_crtc->set_dither)
return 0; return 0;
return nv_crtc->set_dither(nv_crtc, nv_connector->use_dithering, return nv_crtc->set_dither(nv_crtc, true);
true);
} }
if (nv_encoder && nv_encoder->dcb->type == OUTPUT_TV) if (nv_encoder && nv_encoder->dcb->type == OUTPUT_TV)
......
...@@ -67,8 +67,8 @@ struct nouveau_crtc { ...@@ -67,8 +67,8 @@ struct nouveau_crtc {
int depth; int depth;
} lut; } lut;
int (*set_dither)(struct nouveau_crtc *crtc, bool on, bool update); int (*set_dither)(struct nouveau_crtc *crtc, bool update);
int (*set_scale)(struct nouveau_crtc *crtc, int mode, bool update); int (*set_scale)(struct nouveau_crtc *crtc, bool update);
}; };
static inline struct nouveau_crtc *nouveau_crtc(struct drm_crtc *crtc) static inline struct nouveau_crtc *nouveau_crtc(struct drm_crtc *crtc)
......
...@@ -132,10 +132,12 @@ nv50_crtc_blank(struct nouveau_crtc *nv_crtc, bool blanked) ...@@ -132,10 +132,12 @@ nv50_crtc_blank(struct nouveau_crtc *nv_crtc, bool blanked)
} }
static int static int
nv50_crtc_set_dither(struct nouveau_crtc *nv_crtc, bool on, bool update) nv50_crtc_set_dither(struct nouveau_crtc *nv_crtc, bool update)
{ {
struct drm_device *dev = nv_crtc->base.dev; struct drm_device *dev = nv_crtc->base.dev;
struct nouveau_channel *evo = nv50_display(dev)->master; struct nouveau_channel *evo = nv50_display(dev)->master;
struct nouveau_connector *nv_connector =
nouveau_crtc_connector_get(nv_crtc);
int ret; int ret;
NV_DEBUG_KMS(dev, "\n"); NV_DEBUG_KMS(dev, "\n");
...@@ -147,7 +149,7 @@ nv50_crtc_set_dither(struct nouveau_crtc *nv_crtc, bool on, bool update) ...@@ -147,7 +149,7 @@ nv50_crtc_set_dither(struct nouveau_crtc *nv_crtc, bool on, bool update)
} }
BEGIN_RING(evo, 0, NV50_EVO_CRTC(nv_crtc->index, DITHER_CTRL), 1); BEGIN_RING(evo, 0, NV50_EVO_CRTC(nv_crtc->index, DITHER_CTRL), 1);
if (on) if (nv_connector->use_dithering)
OUT_RING(evo, NV50_EVO_CRTC_DITHER_CTRL_ON); OUT_RING(evo, NV50_EVO_CRTC_DITHER_CTRL_ON);
else else
OUT_RING(evo, NV50_EVO_CRTC_DITHER_CTRL_OFF); OUT_RING(evo, NV50_EVO_CRTC_DITHER_CTRL_OFF);
...@@ -180,15 +182,15 @@ nouveau_crtc_connector_get(struct nouveau_crtc *nv_crtc) ...@@ -180,15 +182,15 @@ nouveau_crtc_connector_get(struct nouveau_crtc *nv_crtc)
} }
static int static int
nv50_crtc_set_scale(struct nouveau_crtc *nv_crtc, int scaling_mode, bool update) nv50_crtc_set_scale(struct nouveau_crtc *nv_crtc, bool update)
{ {
struct nouveau_connector *nv_connector; struct nouveau_connector *nv_connector;
struct drm_crtc *crtc = &nv_crtc->base; struct drm_crtc *crtc = &nv_crtc->base;
struct drm_device *dev = crtc->dev; struct drm_device *dev = crtc->dev;
struct nouveau_channel *evo = nv50_display(dev)->master; struct nouveau_channel *evo = nv50_display(dev)->master;
struct drm_display_mode *mode = &crtc->mode; struct drm_display_mode *mode = &crtc->mode;
int scaling_mode, ret;
u32 ctrl = 0, oX, oY; u32 ctrl = 0, oX, oY;
int ret;
NV_DEBUG_KMS(dev, "\n"); NV_DEBUG_KMS(dev, "\n");
...@@ -196,6 +198,8 @@ nv50_crtc_set_scale(struct nouveau_crtc *nv_crtc, int scaling_mode, bool update) ...@@ -196,6 +198,8 @@ nv50_crtc_set_scale(struct nouveau_crtc *nv_crtc, int scaling_mode, bool update)
if (!nv_connector || !nv_connector->native_mode) { if (!nv_connector || !nv_connector->native_mode) {
NV_ERROR(dev, "no native mode, forcing panel scaling\n"); NV_ERROR(dev, "no native mode, forcing panel scaling\n");
scaling_mode = DRM_MODE_SCALE_NONE; scaling_mode = DRM_MODE_SCALE_NONE;
} else {
scaling_mode = nv_connector->scaling_mode;
} }
/* start off at the resolution we programmed the crtc for, this /* start off at the resolution we programmed the crtc for, this
...@@ -663,8 +667,8 @@ nv50_crtc_mode_set(struct drm_crtc *crtc, struct drm_display_mode *mode, ...@@ -663,8 +667,8 @@ nv50_crtc_mode_set(struct drm_crtc *crtc, struct drm_display_mode *mode,
BEGIN_RING(evo, 0, NV50_EVO_CRTC(nv_crtc->index, SCALE_CENTER_OFFSET), 1); BEGIN_RING(evo, 0, NV50_EVO_CRTC(nv_crtc->index, SCALE_CENTER_OFFSET), 1);
OUT_RING(evo, NV50_EVO_CRTC_SCALE_CENTER_OFFSET_VAL(0, 0)); OUT_RING(evo, NV50_EVO_CRTC_SCALE_CENTER_OFFSET_VAL(0, 0));
nv_crtc->set_dither(nv_crtc, nv_connector->use_dithering, false); nv_crtc->set_dither(nv_crtc, false);
nv_crtc->set_scale(nv_crtc, nv_connector->scaling_mode, false); nv_crtc->set_scale(nv_crtc, false);
return nv50_crtc_do_mode_set_base(crtc, old_fb, x, y, false); return nv50_crtc_do_mode_set_base(crtc, old_fb, x, y, false);
} }
......
...@@ -107,13 +107,14 @@ nvd0_display_crtc_get(struct drm_encoder *encoder) ...@@ -107,13 +107,14 @@ nvd0_display_crtc_get(struct drm_encoder *encoder)
* CRTC * CRTC
*****************************************************************************/ *****************************************************************************/
static int static int
nvd0_crtc_set_dither(struct nouveau_crtc *nv_crtc, bool on, bool update) nvd0_crtc_set_dither(struct nouveau_crtc *nv_crtc, bool update)
{ {
struct nouveau_connector *nv_connector;
struct drm_device *dev = nv_crtc->base.dev; struct drm_device *dev = nv_crtc->base.dev;
u32 *push, mode; u32 *push, mode = 0;
mode = 0x00000000; nv_connector = nouveau_crtc_connector_get(nv_crtc);
if (on) { if (nv_connector->use_dithering) {
/* 0x11: 6bpc dynamic 2x2 /* 0x11: 6bpc dynamic 2x2
* 0x13: 8bpc dynamic 2x2 * 0x13: 8bpc dynamic 2x2
* 0x19: 6bpc static 2x2 * 0x19: 6bpc static 2x2
...@@ -139,7 +140,7 @@ nvd0_crtc_set_dither(struct nouveau_crtc *nv_crtc, bool on, bool update) ...@@ -139,7 +140,7 @@ nvd0_crtc_set_dither(struct nouveau_crtc *nv_crtc, bool on, bool update)
} }
static int static int
nvd0_crtc_set_scale(struct nouveau_crtc *nv_crtc, int type, bool update) nvd0_crtc_set_scale(struct nouveau_crtc *nv_crtc, bool update)
{ {
struct drm_display_mode *mode = &nv_crtc->base.mode; struct drm_display_mode *mode = &nv_crtc->base.mode;
struct drm_device *dev = nv_crtc->base.dev; struct drm_device *dev = nv_crtc->base.dev;
...@@ -155,7 +156,7 @@ nvd0_crtc_set_scale(struct nouveau_crtc *nv_crtc, int type, bool update) ...@@ -155,7 +156,7 @@ nvd0_crtc_set_scale(struct nouveau_crtc *nv_crtc, int type, bool update)
u32 xratio = (native->hdisplay << 19) / mode->hdisplay; u32 xratio = (native->hdisplay << 19) / mode->hdisplay;
u32 yratio = (native->vdisplay << 19) / mode->vdisplay; u32 yratio = (native->vdisplay << 19) / mode->vdisplay;
switch (type) { switch (nv_connector->scaling_mode) {
case DRM_MODE_SCALE_ASPECT: case DRM_MODE_SCALE_ASPECT:
if (xratio > yratio) { if (xratio > yratio) {
outX = (mode->hdisplay * yratio) >> 19; outX = (mode->hdisplay * yratio) >> 19;
...@@ -378,8 +379,8 @@ nvd0_crtc_mode_set(struct drm_crtc *crtc, struct drm_display_mode *umode, ...@@ -378,8 +379,8 @@ nvd0_crtc_mode_set(struct drm_crtc *crtc, struct drm_display_mode *umode,
} }
nv_connector = nouveau_crtc_connector_get(nv_crtc); nv_connector = nouveau_crtc_connector_get(nv_crtc);
nvd0_crtc_set_dither(nv_crtc, nv_connector->use_dithering, false); nvd0_crtc_set_dither(nv_crtc, false);
nvd0_crtc_set_scale(nv_crtc, nv_connector->scaling_mode, false); nvd0_crtc_set_scale(nv_crtc, false);
nvd0_crtc_set_image(nv_crtc, crtc->fb, x, y, false); nvd0_crtc_set_image(nv_crtc, crtc->fb, x, y, false);
return 0; return 0;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册