Re: [PATCH 1/2] video: tegra: Add dc color dithering support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, Apr 16, 2011 at 8:48 AM, Robert Morell <rmorell@xxxxxxxxxx> 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 <chaoj@xxxxxxxxxx>
>
> Signed-off-by: Robert Morell <rmorell@xxxxxxxxxx>
> ---
>  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 majordomo@xxxxxxxxxxxxxxx
> 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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [ARM Kernel]     [Linux ARM]     [Linux ARM MSM]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux