diff options
Diffstat (limited to 'packages/linux/linux-omap/0001-Implement-downsampling-with-debugs.patch')
-rw-r--r-- | packages/linux/linux-omap/0001-Implement-downsampling-with-debugs.patch | 138 |
1 files changed, 0 insertions, 138 deletions
diff --git a/packages/linux/linux-omap/0001-Implement-downsampling-with-debugs.patch b/packages/linux/linux-omap/0001-Implement-downsampling-with-debugs.patch deleted file mode 100644 index d3608df9cb..0000000000 --- a/packages/linux/linux-omap/0001-Implement-downsampling-with-debugs.patch +++ /dev/null @@ -1,138 +0,0 @@ -From 1ef94095e9399a9a387b7b457b48f6c5de7013d8 Mon Sep 17 00:00:00 2001 -From: Tuomas Kulve <tuomas.kulve@movial.com> -Date: Fri, 31 Oct 2008 14:23:57 +0200 -Subject: [PATCH] Implement downsampling (with debugs). - ---- - drivers/video/omap/dispc.c | 75 +++++++++++++++++++++++++++++++++++++------- - 1 files changed, 63 insertions(+), 12 deletions(-) - -diff --git a/drivers/video/omap/dispc.c b/drivers/video/omap/dispc.c -index 68bc887..3640dbe 100644 ---- a/drivers/video/omap/dispc.c -+++ b/drivers/video/omap/dispc.c -@@ -18,6 +18,8 @@ - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ -+#define DEBUG -+#define VERBOSE_DEBUG - #include <linux/kernel.h> - #include <linux/dma-mapping.h> - #include <linux/mm.h> -@@ -545,6 +547,17 @@ static void write_firhv_reg(int plane, int reg, u32 value) - dispc_write_reg(base + reg * 8, value); - } - -+static void write_firv_reg(int plane, int reg, u32 value) -+{ -+ u32 base; -+ -+ if (plane == 1) -+ base = 0x1E0; -+ else -+ base = 0x1E0 + 0x20; -+ dispc_write_reg(base + reg * 4, value); -+} -+ - static void set_upsampling_coef_table(int plane) - { - const u32 coef[][2] = { -@@ -565,6 +578,27 @@ static void set_upsampling_coef_table(int plane) - } - } - -+static void set_downsampling_coef_table(int plane) -+{ -+ const u32 coef[][3] = { -+ { 0x24382400, 0x24382400, 0x00000000 }, -+ { 0x28371FFE, 0x28391F04, 0x000004FE }, -+ { 0x2C361BFB, 0x2D381B08, 0x000008FB }, -+ { 0x303516F9, 0x3237170C, 0x00000CF9 }, -+ { 0x11343311, 0x123737F7, 0x0000F711 }, -+ { 0x1635300C, 0x173732F9, 0x0000F90C }, -+ { 0x1B362C08, 0x1B382DFB, 0x0000FB08 }, -+ { 0x1F372804, 0x1F3928FE, 0x0000FE04 }, -+ }; -+ int i; -+ -+ for (i = 0; i < 8; i++) { -+ write_firh_reg(plane, i, coef[i][0]); -+ write_firhv_reg(plane, i, coef[i][1]); -+ write_firv_reg(plane, i, coef[i][2]); -+ } -+} -+ - static int omap_dispc_set_scale(int plane, - int orig_width, int orig_height, - int out_width, int out_height) -@@ -592,25 +626,47 @@ static int omap_dispc_set_scale(int plane, - if (orig_height > out_height || - orig_width * 8 < out_width || - orig_height * 8 < out_height) { -+ dev_dbg(dispc.fbdev->dev, -+ "Max upsampling is 8x, " -+ "tried: %dx%d -> %dx%d\n", -+ orig_width, orig_height, -+ out_width, out_height); - enable_lcd_clocks(0); - return -EINVAL; - } - set_upsampling_coef_table(plane); - } else if (orig_width > out_width) { -- /* Downsampling not yet supported -- */ -- -- enable_lcd_clocks(0); -- return -EINVAL; -+ /* -+ * Downsampling. -+ * Currently you can only scale both dimensions in one way. -+ */ -+ if (orig_height < out_height || -+ orig_width > out_width * 4|| -+ orig_height > out_height * 4) { -+ dev_dbg(dispc.fbdev->dev, -+ "Max downsampling is 4x, " -+ "tried: %dx%d -> %dx%d\n", -+ orig_width, orig_height, -+ out_width, out_height); -+ enable_lcd_clocks(0); -+ return -EINVAL; -+ } -+ set_downsampling_coef_table(plane); - } - if (!orig_width || orig_width == out_width) - fir_hinc = 0; - else -- fir_hinc = 1024 * orig_width / out_width; -+ fir_hinc = 1024 * (orig_width -1)/ (out_width -1); - if (!orig_height || orig_height == out_height) - fir_vinc = 0; - else -- fir_vinc = 1024 * orig_height / out_height; -+ fir_vinc = 1024 * (orig_height-1) / (out_height -1 ); -+ -+ dev_dbg(dispc.fbdev->dev, "out_width %d out_height %d orig_width %d " -+ "orig_height %d fir_hinc %d fir_vinc %d\n", -+ out_width, out_height, orig_width, orig_height, -+ fir_hinc, fir_vinc); -+ - dispc.fir_hinc[plane] = fir_hinc; - dispc.fir_vinc[plane] = fir_vinc; - -@@ -619,11 +675,6 @@ static int omap_dispc_set_scale(int plane, - ((fir_vinc & 4095) << 16) | - (fir_hinc & 4095)); - -- dev_dbg(dispc.fbdev->dev, "out_width %d out_height %d orig_width %d " -- "orig_height %d fir_hinc %d fir_vinc %d\n", -- out_width, out_height, orig_width, orig_height, -- fir_hinc, fir_vinc); -- - MOD_REG_FLD(vs_reg[plane], - FLD_MASK(16, 11) | FLD_MASK(0, 11), - ((out_height - 1) << 16) | (out_width - 1)); --- -1.5.6.5 - |