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