On Sat, Apr 16, 2011 at 8:48 AM, Robert Morell <[email protected]> wrote:
>
> This change adds support for display color dithering configuration in
> the display control structure. Two dithering modes are possible:
> ordered and error-diffusion mode. Error-diffusion dithering is usually
> considered higher quality, but can only be used when the active region
> is less than 640 pixels wide.
>
> This is based on patches from Chao Jiang <[email protected]>
>
> Signed-off-by: Robert Morell <[email protected]>
> ---
> arch/arm/mach-tegra/include/mach/dc.h | 7 +++++++
> drivers/video/tegra/dc/dc.c | 24 ++++++++++++++++++++++++
> 2 files changed, 31 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/mach-tegra/include/mach/dc.h
> b/arch/arm/mach-tegra/include/mach/dc.h
> index 254b732..696e6ed 100644
> --- a/arch/arm/mach-tegra/include/mach/dc.h
> +++ b/arch/arm/mach-tegra/include/mach/dc.h
> @@ -44,6 +44,12 @@ enum {
> TEGRA_DC_OUT_HDMI,
> };
>
> +enum {
> + TEGRA_DC_DISABLE_DITHER = 1,
> + TEGRA_DC_ORDERED_DITHER,
> + TEGRA_DC_ERRDIFF_DITHER,
> +};
> +
> struct tegra_dc_out {
> int type;
> unsigned flags;
> @@ -58,6 +64,7 @@ struct tegra_dc_out {
> unsigned order;
> unsigned align;
> unsigned depth;
> + unsigned dither;
>
> struct tegra_dc_mode *modes;
> int n_modes;
> diff --git a/drivers/video/tegra/dc/dc.c b/drivers/video/tegra/dc/dc.c
> index 16789c2..4241a24 100644
> --- a/drivers/video/tegra/dc/dc.c
> +++ b/drivers/video/tegra/dc/dc.c
> @@ -890,6 +890,30 @@ static void tegra_dc_set_color_control(struct tegra_dc
> *dc)
> break;
> }
>
> + /*
> + * The line buffer for error-diffusion dither is limited to 640 pixels
> + * per line, so we can't use it if the active region is larger than
> 640
> + * pixels. Be nice and fall back to ordered dithering, but warn so
> the
> + * platform data can be corrected.
> + */
> + if (WARN_ON(dc->out->dither == TEGRA_DC_ERRDIFF_DITHER &&
> + dc->mode.h_active > 640)) {
> + dc->out->dither = TEGRA_DC_ORDERED_DITHER;
> + }
> +
> + switch (dc->out->dither) {
> + case TEGRA_DC_DISABLE_DITHER:
> + color_control |= DITHER_CONTROL_DISABLE;
> + break;
> + case TEGRA_DC_ORDERED_DITHER:
> + color_control |= DITHER_CONTROL_ORDERED;
> + break;
> + case TEGRA_DC_ERRDIFF_DITHER:
> + BUG_ON(dc->mode.h_active > 640);
> + color_control |= DITHER_CONTROL_ERRDIFF;
> + break;
If would be a Good idea to add default case here.
> + }
> +
> tegra_dc_writel(dc, color_control, DC_DISP_DISP_COLOR_CONTROL);
> }
>
> --
> 1.7.3.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-tegra" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-tegra" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html