Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 488ff207 authored by Ben Skeggs's avatar Ben Skeggs
Browse files

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



Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 63221755
Loading
Loading
Loading
Loading
+5 −12
Original line number Original line Diff line number Diff line
@@ -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,
			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,
			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,
			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,
		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)
+2 −2
Original line number Original line Diff line number Diff line
@@ -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)
+10 −6
Original line number Original line Diff line number Diff line
@@ -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)
	}
	}


	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)
}
}


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)
	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,
	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);
}
}
+9 −8
Original line number Original line Diff line number Diff line
@@ -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)
}
}


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)
		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,
	}
	}


	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;
}
}