summaryrefslogtreecommitdiff
path: root/extra/xf86-video-siliconmotion
diff options
context:
space:
mode:
authorNicolas Reynolds <fauno@kiwwwi.com.ar>2012-02-17 16:39:45 -0300
committerNicolas Reynolds <fauno@kiwwwi.com.ar>2012-02-17 16:39:45 -0300
commit5d31d921448006722d790d84e727c2f2844c35d5 (patch)
treeee73139732faf66db776eee6d690640f8e64da72 /extra/xf86-video-siliconmotion
parent184903e07aa7b573b0acf162424afc969c07bd4b (diff)
missing patches for siliconmotion
Diffstat (limited to 'extra/xf86-video-siliconmotion')
-rw-r--r--extra/xf86-video-siliconmotion/98_sm712_CRT_enable.diff14
-rw-r--r--extra/xf86-video-siliconmotion/99_xf86-video-siliconmotion-1.7.3-fix-loongson.diff160
-rw-r--r--extra/xf86-video-siliconmotion/medanr04.diff81
-rw-r--r--extra/xf86-video-siliconmotion/xf86-video-siliconmotion-1.7.5-loongson-video-accl.patch139
-rw-r--r--extra/xf86-video-siliconmotion/xserver-xorg-video-siliconmotion-2.2.8-medan.r04.patch104
-rw-r--r--extra/xf86-video-siliconmotion/xserver-xorg-video-siliconmotion_1.7.5-1loongson2.diff707
6 files changed, 1205 insertions, 0 deletions
diff --git a/extra/xf86-video-siliconmotion/98_sm712_CRT_enable.diff b/extra/xf86-video-siliconmotion/98_sm712_CRT_enable.diff
new file mode 100644
index 000000000..9ff473aff
--- /dev/null
+++ b/extra/xf86-video-siliconmotion/98_sm712_CRT_enable.diff
@@ -0,0 +1,14 @@
+--- ../xx/xserver-xorg-video-siliconmotion-1.7.3/src/smi_driver.c 2010-03-09 23:39:23.451798382 +0800
++++ xserver-xorg-video-siliconmotion-1.7.3/src/smi_driver.c 2010-03-10 10:36:58.835798871 +0800
+@@ -1805,6 +1797,11 @@
+ pScreen->SaveScreen = SMI_SaveScreen;
+ pSmi->CloseScreen = pScreen->CloseScreen;
+ pScreen->CloseScreen = SMI_CloseScreen;
++ /* Added by Belcon to enable LCD Panel Control Select */
++ if (pSmi->Chipset == SMI_LYNXEMplus)
++ {
++ VGAOUT8_INDEX (pSmi, VGA_SEQ_INDEX, VGA_SEQ_DATA, 0x22, 2);
++ }
+
+ if ((IS_MSOC(pSmi) &&
+ !xf86DPMSInit(pScreen, SMI501_DisplayPowerManagementSet, 0)) ||
diff --git a/extra/xf86-video-siliconmotion/99_xf86-video-siliconmotion-1.7.3-fix-loongson.diff b/extra/xf86-video-siliconmotion/99_xf86-video-siliconmotion-1.7.3-fix-loongson.diff
new file mode 100644
index 000000000..4be6d6469
--- /dev/null
+++ b/extra/xf86-video-siliconmotion/99_xf86-video-siliconmotion-1.7.3-fix-loongson.diff
@@ -0,0 +1,160 @@
+rixed@happyleptic.org
+ 发送至 loongson-dev
+
+A patch for siliconmotion 1.7.3 is available in the bug trackers
+at freedesktop.org, but a better one will be available monday.
+Still, it lacks the most interresting part : the MMX pack function,
+which should not be implemented there but probably either directly
+in Xv or in pixman (and make Xv use pixman).
+
+So for now the simpliest is to fix these manually.
+For the impatient I attach a patch against SM 1.7.3
+With it, 16bpp and AccelMethod = "XAA" works quite well.
+
+Just an ugly hack really.
+diff -ur orig/src/smi_video.c mod/src/smi_video.c
+--- orig/src/smi_video.c 2010-02-05 13:11:18.000000000 +0100
++++ mod/src/smi_video.c 2010-02-05 13:20:36.000000000 +0100
+@@ -276,6 +276,7 @@
+ XVIMAGE_YUY2,
+ XVIMAGE_YV12,
+ XVIMAGE_I420,
++ XVIMAGE_UYVY,
+ {
+ FOURCC_RV15, /* id */
+ XvRGB, /* type */
+@@ -1462,6 +1463,117 @@
+ LEAVE();
+ }
+
++static void myXVCopyYUV12ToPacked(const unsigned char *srcy, const unsigned char *srcv, const unsigned char *srcu,
++ unsigned char *dst, int srcPitchy, int srcPitchuv, int dstPitch, int h, int w)
++{
++ int i, j;
++ unsigned char const *y, *u, *v;
++ int dstinc, yinc, uinc, vinc;
++
++ y = srcy;
++ u = srcu;
++ v = srcv;
++
++ dstinc = dstPitch - 2*w;
++ yinc = srcPitchy - w;
++ uinc = srcPitchuv - w/2;
++ vinc = srcPitchuv - w/2;
++
++ for (i = 0; i < h; i++) {
++ asm (
++// ".set arch=loongson2f\n\t"
++ ".set noreorder\n\t"
++ "move $8, %8 \n\t"
++ "1: \n\t"
++ "beqz $8, 2f \n\t"
++ "xor $f0, $f0, $f0 \n\t"
++ "ldc1 $f4, (%0) \n\t"
++ "punpcklbh $f2, $f4, $f0 \n\t"
++ "punpckhbh $f4, $f4, $f0 \n\t"
++ "ldc1 $f16, 8(%0) \n\t"
++ "punpcklbh $f14, $f16, $f0 \n\t"
++ "punpckhbh $f16, $f16, $f0 \n\t"
++
++ "lwc1 $f8, (%1) \n\t"
++ "lwc1 $f12, (%2) \n\t"
++ "punpcklbh $f8, $f8, $f12 \n\t"
++ "punpcklbh $f6, $f0, $f8 \n\t"
++ "punpckhbh $f8, $f0, $f8 \n\t"
++ "lwc1 $f18, 4(%1) \n\t"
++ "lwc1 $f12, 4(%2) \n\t"
++ "punpcklbh $f18, $f18, $f12 \n\t"
++ "punpcklbh $f10, $f0, $f18 \n\t"
++ "punpckhbh $f12, $f0, $f18 \n\t"
++
++ "or $f2, $f2, $f6 \n\t"
++ "or $f4, $f4, $f8 \n\t"
++ "or $f14, $f14, $f10 \n\t"
++ "or $f16, $f16, $f12 \n\t"
++
++ "sdc1 $f2, (%3) \n\t"
++ "sdc1 $f4, 8(%3) \n\t"
++ "add %0, 16 \n\t"
++ "add %1, 8 \n\t"
++ "add %2, 8 \n\t"
++ "sdc1 $f14, 0x10(%3) \n\t"
++ "sdc1 $f16, 0x18(%3) \n\t"
++ "add $8, -1 \n\t"
++ "b 1b \n\t"
++ "add %3, 32 \n\t"
++ "2: \n\t"
++ ".set reorder\n\t"
++ : "=r" (y), "=r" (u), "=r" (v), "=r" (dst)
++ : "0" (y), "1" (u), "2" (v), "3" (dst), "r" (w>>4)
++ : "memory","$8"
++ );
++
++ asm (
++// ".set arch=loongson2f\n\t"
++ ".set noreorder\n\t"
++ "move $8, %8 \n\t"
++ "1: \n\t"
++ "beqz $8, 2f \n\t"
++ "xor $f0, $f0, $f0 \n\t"
++ "ldc1 $f4, (%0) \n\t"
++ "punpcklbh $f2, $f4, $f0 \n\t"
++ "punpckhbh $f4, $f4, $f0 \n\t"
++
++ "lwc1 $f8, (%1) \n\t"
++ "lwc1 $f12, (%2) \n\t"
++ "punpcklbh $f8, $f8, $f12 \n\t"
++ "punpcklbh $f6, $f0, $f8 \n\t"
++ "punpckhbh $f8, $f0, $f8 \n\t"
++
++ "or $f2, $f2, $f6 \n\t"
++ "or $f4, $f4, $f8 \n\t"
++
++ "sdc1 $f2, (%3) \n\t"
++ "sdc1 $f4, 8(%3) \n\t"
++ "add %0, 8 \n\t"
++ "add %1, 4 \n\t"
++ "add %2, 4 \n\t"
++ "add $8, -1 \n\t"
++ "b 1b \n\t"
++ "add %3, 16 \n\t"
++ "2:\n\t"
++ ".set reorder\n\t"
++ : "=r" (y), "=r" (u), "=r" (v), "=r" (dst)
++ : "0" (y), "1" (u), "2" (v), "3" (dst), "r" ((w&0xf)/8)
++ : "memory","$8"
++ );
++
++ for (j = (w&7)/2; j; j--) {
++ *dst++ = *y++;
++ *dst++ = *u++;
++ *dst++ = *y++;
++ *dst++ = *v++;
++ }
++ y += yinc;
++ u = (i%2) ? (u + uinc): (u - w/2);
++ v = (i%2) ? (v + vinc): (v - w/2);
++ dst += dstinc;
++ }
++}
+
+ static int
+ SMI_PutImage(
+@@ -1593,7 +1705,7 @@
+ offset3 = tmp;
+ }
+ nLines = ((((y2 + 0xffff) >> 16) + 1) & ~1) - top;
+- xf86XVCopyYUV12ToPacked(buf + (top * srcPitch) + (left >> 1),
++ myXVCopyYUV12ToPacked(buf + (top * srcPitch) + (left >> 1),
+ buf + offset2, buf + offset3, dstStart,
+ srcPitch, srcPitch2, dstPitch, nLines,
+ nPixels);
+@@ -1793,6 +1905,7 @@
+ WRITE_VPR(pSmi, 0x1C, offset >> 3);
+ WRITE_VPR(pSmi, 0x20, (pitch >> 3) | ((pitch >> 3) << 16));
+ WRITE_VPR(pSmi, 0x24, (hstretch & 0xff00) | ((vstretch & 0xff00) >> 8));
++ WRITE_VPR(pSmi, 0x68, ((hstretch & 0xff) << 8) | (vstretch & 0xff));
+ if (pSmi->Chipset == SMI_LYNXEMplus) { /* This one can store additional precision */
+ WRITE_VPR(pSmi, 0x68, ((hstretch & 0xff) << 8) | (vstretch & 0xff));
+ }
diff --git a/extra/xf86-video-siliconmotion/medanr04.diff b/extra/xf86-video-siliconmotion/medanr04.diff
new file mode 100644
index 000000000..85a15f393
--- /dev/null
+++ b/extra/xf86-video-siliconmotion/medanr04.diff
@@ -0,0 +1,81 @@
+--- orig/src/smi_video.c 2009-07-27 09:42:44.000000000 +0600
++++ new/src/smi_video.c 2011-04-02 19:21:53.545665717 +0600
+@@ -223,7 +223,7 @@
+
+ /**************************************************************************/
+ /* number of (generated) XV_ENCODING vaulues */
+-#define N_ENCODINGS ((N_VIDEO_NORMS) * (N_COMPOSITE_CHANNELS + N_SVIDEO_CHANNELS))
++#define N_ENCODINGS (((N_VIDEO_NORMS) * (N_COMPOSITE_CHANNELS + N_SVIDEO_CHANNELS)) +1)
+
+
+ /**************************************************************************/
+@@ -288,7 +288,7 @@
+ XvPacked, /* format */
+ 1, /* num_planes */
+ 15, /* depth */
+- 0x001F, 0x03E0, 0x7C00, /* red_mask, green, blue */
++ 0x7C00, 0x03E0, 0x001F, /* red_mask, green, blue */
+ 0, 0, 0, /* y_sample_bits, u, v */
+ 0, 0, 0, /* horz_y_period, u, v */
+ 0, 0, 0, /* vert_y_period, u, v */
+@@ -307,7 +307,7 @@
+ XvPacked, /* format */
+ 1, /* num_planes */
+ 16, /* depth */
+- 0x001F, 0x07E0, 0xF800, /* red_mask, green, blue */
++ 0xF800, 0x07E0, 0x001F, /* red_mask, green, blue */
+ 0, 0, 0, /* y_sample_bits, u, v */
+ 0, 0, 0, /* horz_y_period, u, v */
+ 0, 0, 0, /* vert_y_period, u, v */
+@@ -326,7 +326,7 @@
+ XvPacked, /* format */
+ 1, /* num_planes */
+ 24, /* depth */
+- 0x0000FF, 0x00FF00, 0xFF0000, /* red_mask, green, blue */
++ 0xFF0000, 0x00FF00, 0x0000FF, /* red_mask, green, blue */
+ 0, 0, 0, /* y_sample_bits, u, v */
+ 0, 0, 0, /* horz_y_period, u, v */
+ 0, 0, 0, /* vert_y_period, u, v */
+@@ -345,7 +345,7 @@
+ XvPacked, /* format */
+ 1, /* num_planes */
+ 24, /* depth */
+- 0x0000FF, 0x00FF00, 0xFF0000, /* red_mask, green, blue */
++ 0xFF0000, 0x00FF00, 0x0000FF, /* red_mask, green, blue */
+ 0, 0, 0, /* y_sample_bits, u, v */
+ 0, 0, 0, /* horz_y_period, u, v */
+ 0, 0, 0, /* vert_y_period, u, v */
+@@ -372,7 +372,7 @@
+ XvPacked, /* format */
+ 1, /* num_planes */
+ 16, /* depth */
+- 0x001F, 0x07E0, 0xF800, /* red_mask, green, blue */
++ 0xF800, 0x07E0, 0x001F, /* red_mask, green, blue */
+ 0, 0, 0, /* y_sample_bits, u, v */
+ 0, 0, 0, /* horz_y_period, u, v */
+ 0, 0, 0, /* vert_y_period, u, v */
+@@ -391,7 +391,7 @@
+ XvPacked, /* format */
+ 1, /* num_planes */
+ 24, /* depth */
+- 0x0000FF, 0x00FF00, 0xFF0000, /* red_mask, green, blue */
++ 0xFF0000, 0x00FF00, 0x0000FF, /* red_mask, green, blue */
+ 0, 0, 0, /* y_sample_bits, u, v */
+ 0, 0, 0, /* horz_y_period, u, v */
+ 0, 0, 0, /* vert_y_period, u, v */
+@@ -569,6 +569,15 @@
+
+ /* fill arrays */
+ p->nenc = 0;
++ /* force XV_IMAGE at 0 */
++ p->enc[0].width = 2048;
++ p->enc[0].height = 2048;
++ p->enc[0].rate.numerator = 1;
++ p->enc[0].rate.denominator = 1;
++ p->enc[0].name = xalloc(strlen("XV_IMAGE")+1);
++ sprintf(p->enc[0].name, "% s", "XV_IMAGE");
++
++ p->nenc = 1;
+ for (ch = 0; ch < N_COMPOSITE_CHANNELS; ch++) {
+ for (n = 0; n < N_VIDEO_NORMS; n++) {
+ SMI_AddEncoding(p->enc, p->nenc, n, VID_COMPOSITE, ch);
diff --git a/extra/xf86-video-siliconmotion/xf86-video-siliconmotion-1.7.5-loongson-video-accl.patch b/extra/xf86-video-siliconmotion/xf86-video-siliconmotion-1.7.5-loongson-video-accl.patch
new file mode 100644
index 000000000..e31044473
--- /dev/null
+++ b/extra/xf86-video-siliconmotion/xf86-video-siliconmotion-1.7.5-loongson-video-accl.patch
@@ -0,0 +1,139 @@
+diff --git a/src/smi_video.c b/src/smi_video.c
+index c2e8868..3e128fa 100644
+--- a/src/smi_video.c
++++ b/src/smi_video.c
+@@ -276,6 +276,7 @@ static XF86ImageRec SMI_VideoImages[] =
+ XVIMAGE_YUY2,
+ XVIMAGE_YV12,
+ XVIMAGE_I420,
++ XVIMAGE_UYVY,
+ {
+ FOURCC_RV15, /* id */
+ XvRGB, /* type */
+@@ -1464,6 +1465,117 @@ SMI_QueryBestSize(
+ LEAVE();
+ }
+
++static void myXVCopyYUV12ToPacked(const unsigned char *srcy, const unsigned char *srcv, const unsigned char *srcu,
++ unsigned char *dst, int srcPitchy, int srcPitchuv, int dstPitch, int h, int w)
++{
++ int i, j;
++ unsigned char const *y, *u, *v;
++ int dstinc, yinc, uinc, vinc;
++
++ y = srcy;
++ u = srcu;
++ v = srcv;
++
++ dstinc = dstPitch - 2*w;
++ yinc = srcPitchy - w;
++ uinc = srcPitchuv - w/2;
++ vinc = srcPitchuv - w/2;
++
++ for (i = 0; i < h; i++) {
++ asm (
++// ".set arch=loongson2f\n\t"
++ ".set noreorder\n\t"
++ "move $8, %8 \n\t"
++ "1: \n\t"
++ "beqz $8, 2f \n\t"
++ "xor $f0, $f0, $f0 \n\t"
++ "ldc1 $f4, (%0) \n\t"
++ "punpcklbh $f2, $f4, $f0 \n\t"
++ "punpckhbh $f4, $f4, $f0 \n\t"
++ "ldc1 $f16, 8(%0) \n\t"
++ "punpcklbh $f14, $f16, $f0 \n\t"
++ "punpckhbh $f16, $f16, $f0 \n\t"
++
++ "lwc1 $f8, (%1) \n\t"
++ "lwc1 $f12, (%2) \n\t"
++ "punpcklbh $f8, $f8, $f12 \n\t"
++ "punpcklbh $f6, $f0, $f8 \n\t"
++ "punpckhbh $f8, $f0, $f8 \n\t"
++ "lwc1 $f18, 4(%1) \n\t"
++ "lwc1 $f12, 4(%2) \n\t"
++ "punpcklbh $f18, $f18, $f12 \n\t"
++ "punpcklbh $f10, $f0, $f18 \n\t"
++ "punpckhbh $f12, $f0, $f18 \n\t"
++
++ "or $f2, $f2, $f6 \n\t"
++ "or $f4, $f4, $f8 \n\t"
++ "or $f14, $f14, $f10 \n\t"
++ "or $f16, $f16, $f12 \n\t"
++
++ "sdc1 $f2, (%3) \n\t"
++ "sdc1 $f4, 8(%3) \n\t"
++ "add %0, 16 \n\t"
++ "add %1, 8 \n\t"
++ "add %2, 8 \n\t"
++ "sdc1 $f14, 0x10(%3) \n\t"
++ "sdc1 $f16, 0x18(%3) \n\t"
++ "add $8, -1 \n\t"
++ "b 1b \n\t"
++ "add %3, 32 \n\t"
++ "2: \n\t"
++ ".set reorder\n\t"
++ : "=r" (y), "=r" (u), "=r" (v), "=r" (dst)
++ : "0" (y), "1" (u), "2" (v), "3" (dst), "r" (w>>4)
++ : "memory","$8"
++ );
++
++ asm (
++// ".set arch=loongson2f\n\t"
++ ".set noreorder\n\t"
++ "move $8, %8 \n\t"
++ "1: \n\t"
++ "beqz $8, 2f \n\t"
++ "xor $f0, $f0, $f0 \n\t"
++ "ldc1 $f4, (%0) \n\t"
++ "punpcklbh $f2, $f4, $f0 \n\t"
++ "punpckhbh $f4, $f4, $f0 \n\t"
++
++ "lwc1 $f8, (%1) \n\t"
++ "lwc1 $f12, (%2) \n\t"
++ "punpcklbh $f8, $f8, $f12 \n\t"
++ "punpcklbh $f6, $f0, $f8 \n\t"
++ "punpckhbh $f8, $f0, $f8 \n\t"
++
++ "or $f2, $f2, $f6 \n\t"
++ "or $f4, $f4, $f8 \n\t"
++
++ "sdc1 $f2, (%3) \n\t"
++ "sdc1 $f4, 8(%3) \n\t"
++ "add %0, 8 \n\t"
++ "add %1, 4 \n\t"
++ "add %2, 4 \n\t"
++ "add $8, -1 \n\t"
++ "b 1b \n\t"
++ "add %3, 16 \n\t"
++ "2:\n\t"
++ ".set reorder\n\t"
++ : "=r" (y), "=r" (u), "=r" (v), "=r" (dst)
++ : "0" (y), "1" (u), "2" (v), "3" (dst), "r" ((w&0xf)/8)
++ : "memory","$8"
++ );
++
++ for (j = (w&7)/2; j; j--) {
++ *dst++ = *y++;
++ *dst++ = *u++;
++ *dst++ = *y++;
++ *dst++ = *v++;
++ }
++ y += yinc;
++ u = (i%2) ? (u + uinc): (u - w/2);
++ v = (i%2) ? (v + vinc): (v - w/2);
++ dst += dstinc;
++ }
++}
+
+ static int
+ SMI_PutImage(
+@@ -1592,7 +1704,7 @@ SMI_PutImage(
+ offset3 = tmp;
+ }
+ nLines = ((((y2 + 0xffff) >> 16) + 1) & ~1) - top;
+- xf86XVCopyYUV12ToPacked(buf + (top * srcPitch) + (left >> 1),
++ myXVCopyYUV12ToPacked(buf + (top * srcPitch) + (left >> 1),
+ buf + offset2, buf + offset3, dstStart,
+ srcPitch, srcPitch2, dstPitch, nLines,
+ nPixels);
diff --git a/extra/xf86-video-siliconmotion/xserver-xorg-video-siliconmotion-2.2.8-medan.r04.patch b/extra/xf86-video-siliconmotion/xserver-xorg-video-siliconmotion-2.2.8-medan.r04.patch
new file mode 100644
index 000000000..acb9716be
--- /dev/null
+++ b/extra/xf86-video-siliconmotion/xserver-xorg-video-siliconmotion-2.2.8-medan.r04.patch
@@ -0,0 +1,104 @@
+diff -Naur xserver-xorg-video-siliconmotion-2.2.8/debian/changelog xserver-xorg-video-siliconmotion-2.2.8-new/debian/changelog
+--- xserver-xorg-video-siliconmotion-2.2.8/debian/changelog 2009-02-22 02:19:30.000000000 +0800
++++ xserver-xorg-video-siliconmotion-2.2.8-new/debian/changelog 2009-02-21 07:36:10.000000000 +0800
+@@ -1,3 +1,18 @@
++xserver-xorg-video-siliconmotion (2:2.2.8-medan.r04) unstable; urgency=low
++
++ * Fixed Xv not reporting any imaging modes. Caused all SDL overlays to
++ be software scaled and drawn in xshm.
++
++ -- Derrick Sobodash <derrick@cinnamonpirate.com> Sat, 21 Feb 2009 06:49:11 +0000
++
++xserver-xorg-video-siliconmotion (2:2.2.8-medan.r03) unstable; urgency=low
++
++ * Hacked Xv to fix driver reporting RGB colorspaces as BGR.
++ * Forked from 2:2.2.8-lemote.r02. Next revision writes Loongson opcodes,
++ which GCC is not supporting. How do you compile it!?
++
++ -- Derrick Sobodash <derrick@cinnamonpirate.com> Sat, 14 Feb 2009 06:49:11 +0000
++
+ xserver-xorg-video-siliconmotion (2:2.2.8-lemote.r02) unstable; urgency=low
+
+ * Add fast Xv packed ouput for YeeLoong notebook without lost of quality.
+diff -Naur xserver-xorg-video-siliconmotion-2.2.8/src/smi_video.c xserver-xorg-video-siliconmotion-2.2.8-new/src/smi_video.c
+--- xserver-xorg-video-siliconmotion-2.2.8/src/smi_video.c 2009-02-22 02:19:30.000000000 +0800
++++ xserver-xorg-video-siliconmotion-2.2.8-new/src/smi_video.c 2009-02-22 02:23:55.000000000 +0800
+@@ -245,7 +245,7 @@
+
+ /**************************************************************************/
+ /* number of (generated) XV_ENCODING vaulues */
+-#define N_ENCODINGS ((N_VIDEO_NORMS) * (N_COMPOSITE_CHANNELS + N_SVIDEO_CHANNELS))
++#define N_ENCODINGS (((N_VIDEO_NORMS) * (N_COMPOSITE_CHANNELS + N_SVIDEO_CHANNELS)) +1)
+
+
+ /**************************************************************************/
+@@ -310,7 +310,7 @@
+ XvPacked, /* format */
+ 1, /* num_planes */
+ 15, /* depth */
+- 0x001F, 0x03E0, 0x7C00, /* red_mask, green, blue */
++ 0x7C00, 0x03E0, 0x001F, /* red_mask, green, blue */
+ 0, 0, 0, /* y_sample_bits, u, v */
+ 0, 0, 0, /* horz_y_period, u, v */
+ 0, 0, 0, /* vert_y_period, u, v */
+@@ -329,7 +329,7 @@
+ XvPacked, /* format */
+ 1, /* num_planes */
+ 16, /* depth */
+- 0x001F, 0x07E0, 0xF800, /* red_mask, green, blue */
++ 0xF800, 0x07E0, 0x001F, /* red_mask, green, blue */
+ 0, 0, 0, /* y_sample_bits, u, v */
+ 0, 0, 0, /* horz_y_period, u, v */
+ 0, 0, 0, /* vert_y_period, u, v */
+@@ -348,7 +348,7 @@
+ XvPacked, /* format */
+ 1, /* num_planes */
+ 24, /* depth */
+- 0x0000FF, 0x00FF00, 0xFF0000, /* red_mask, green, blue */
++ 0xFF0000, 0x00FF00, 0x0000FF, /* red_mask, green, blue */
+ 0, 0, 0, /* y_sample_bits, u, v */
+ 0, 0, 0, /* horz_y_period, u, v */
+ 0, 0, 0, /* vert_y_period, u, v */
+@@ -367,7 +367,7 @@
+ XvPacked, /* format */
+ 1, /* num_planes */
+ 24, /* depth */
+- 0x0000FF, 0x00FF00, 0xFF0000, /* red_mask, green, blue */
++ 0xFF0000, 0x00FF00, 0x0000FF, /* red_mask, green, blue */
+ 0, 0, 0, /* y_sample_bits, u, v */
+ 0, 0, 0, /* horz_y_period, u, v */
+ 0, 0, 0, /* vert_y_period, u, v */
+@@ -394,7 +394,7 @@
+ XvPacked, /* format */
+ 1, /* num_planes */
+ 16, /* depth */
+- 0x001F, 0x07E0, 0xF800, /* red_mask, green, blue */
++ 0xF800, 0x07E0, 0x001F, /* red_mask, green, blue */
+ 0, 0, 0, /* y_sample_bits, u, v */
+ 0, 0, 0, /* horz_y_period, u, v */
+ 0, 0, 0, /* vert_y_period, u, v */
+@@ -413,7 +413,7 @@
+ XvPacked, /* format */
+ 1, /* num_planes */
+ 24, /* depth */
+- 0x0000FF, 0x00FF00, 0xFF0000, /* red_mask, green, blue */
++ 0xFF0000, 0x00FF00, 0x0000FF, /* red_mask, green, blue */
+ 0, 0, 0, /* y_sample_bits, u, v */
+ 0, 0, 0, /* horz_y_period, u, v */
+ 0, 0, 0, /* vert_y_period, u, v */
+@@ -589,6 +589,15 @@
+
+ /* fill arrays */
+ p->nenc = 0;
++ /* force XV_IMAGE at 0 */
++ p->enc[0].width = 2048;
++ p->enc[0].height = 2048;
++ p->enc[0].rate.numerator = 1;
++ p->enc[0].rate.denominator = 1;
++ p->enc[0].name = xalloc(strlen("XV_IMAGE")+1);
++ sprintf(p->enc[0].name, "% s", "XV_IMAGE");
++
++ p->nenc = 1;
+ for (ch = 0; ch < N_COMPOSITE_CHANNELS; ch++) {
+ for (n = 0; n < N_VIDEO_NORMS; n++) {
+ SMI_AddEncoding(p->enc, p->nenc, n, VID_COMPOSITE, ch);
diff --git a/extra/xf86-video-siliconmotion/xserver-xorg-video-siliconmotion_1.7.5-1loongson2.diff b/extra/xf86-video-siliconmotion/xserver-xorg-video-siliconmotion_1.7.5-1loongson2.diff
new file mode 100644
index 000000000..8b9f49395
--- /dev/null
+++ b/extra/xf86-video-siliconmotion/xserver-xorg-video-siliconmotion_1.7.5-1loongson2.diff
@@ -0,0 +1,707 @@
+--- xserver-xorg-video-siliconmotion-1.7.5.orig/autogen.sh
++++ xserver-xorg-video-siliconmotion-1.7.5/autogen.sh
+@@ -0,0 +1,12 @@
++#! /bin/sh
++
++srcdir=`dirname $0`
++test -z "$srcdir" && srcdir=.
++
++ORIGDIR=`pwd`
++cd $srcdir
++
++autoreconf -v --install || exit 1
++cd $ORIGDIR || exit $?
++
++$srcdir/configure --enable-maintainer-mode "$@"
+--- xserver-xorg-video-siliconmotion-1.7.5.orig/debian/README.source
++++ xserver-xorg-video-siliconmotion-1.7.5/debian/README.source
+@@ -0,0 +1,49 @@
++------------------------------------------------------
++Quick Guide To Patching This Package For The Impatient
++------------------------------------------------------
++
++1. Make sure you have quilt installed
++2. Unpack the package as usual with "dpkg-source -x"
++3. Run the "patch" target in debian/rules
++4. Create a new patch with "quilt new" (see quilt(1))
++5. Edit all the files you want to include in the patch with "quilt edit"
++ (see quilt(1)).
++6. Write the patch with "quilt refresh" (see quilt(1))
++7. Run the "clean" target in debian/rules
++
++Alternatively, instead of using quilt directly, you can drop the patch in to
++debian/patches and add the name of the patch to debian/patches/series.
++
++------------------------------------
++Guide To The X Strike Force Packages
++------------------------------------
++
++The X Strike Force team maintains X packages in git repositories on
++git.debian.org in the pkg-xorg subdirectory. Most upstream packages
++are actually maintained in git repositories as well, so they often
++just need to be pulled into git.debian.org in a "upstream-*" branch.
++Otherwise, the upstream sources are manually installed in the Debian
++git repository.
++
++The .orig.tar.gz upstream source file could be generated using this
++"upstream-*" branch in the Debian git repository but it is actually
++copied from upstream tarballs directly.
++
++Due to X.org being highly modular, packaging all X.org applications
++as their own independent packages would have created too many Debian
++packages. For this reason, some X.org applications have been grouped
++into larger packages: xutils, xutils-dev, x11-apps, x11-session-utils,
++x11-utils, x11-xfs-utils, x11-xkb-utils, x11-xserver-utils.
++Most packages, including the X.org server itself and all libraries
++and drivers are, however maintained independently.
++
++The Debian packaging is added by creating the "debian-*" git branch
++which contains the aforementioned "upstream-*" branch plus the debian/
++repository files.
++When a patch has to be applied to the Debian package, two solutions
++are involved:
++* If the patch is available in one of the upstream branches, it
++ may be git'cherry-picked into the Debian repository. In this
++ case, it appears directly in the .diff.gz.
++* Otherwise, the patch is added to debian/patches/ which is managed
++ with quilt as documented in /usr/share/doc/quilt/README.source.
+--- xserver-xorg-video-siliconmotion-1.7.5.orig/debian/changelog
++++ xserver-xorg-video-siliconmotion-1.7.5/debian/changelog
+@@ -0,0 +1,287 @@
++xserver-xorg-video-siliconmotion (1:1.7.5-1loongson2) unstable; urgency=low
++
++ * Non-maintainer upload.
++ * enable CRT output,
++ * loongson2f
++
++ -- liu shiwei <liushiwei@gmail.com> Sun, 15 May 2011 21:35:08 +0800
++
++xserver-xorg-video-siliconmotion (1:1.7.5-1) unstable; urgency=low
++
++ * New upstream release.
++ * Bump xutils-dev build-dep for new macros.
++ * Update debian/copyright from upstream COPYING.
++
++ -- Cyril Brulebois <kibi@debian.org> Wed, 09 Mar 2011 00:31:34 +0100
++
++xserver-xorg-video-siliconmotion (1:1.7.4-3) unstable; urgency=low
++
++ * Switch to dh:
++ - Use debhelper 8.
++ - Use dh-autoreconf.
++ - Bump xserver-xorg-dev build-dep for dh_xsf_substvars and xsf
++ debhelper sequence.
++ * Remove xsfbs accordingly.
++ * Update Uploaders list. Thanks, David & Brice!
++ * Remove long obsolete Replaces/Conflicts.
++ * Wrap Depends/Provides.
++ * Bump Standards-Version to 3.9.1 (no changes needed).
++
++ -- Cyril Brulebois <kibi@debian.org> Sat, 05 Feb 2011 14:55:28 +0100
++
++xserver-xorg-video-siliconmotion (1:1.7.4-2) experimental; urgency=low
++
++ [ Julien Cristau ]
++ * Drop 01_siliconmotion_rotate_option_disables_randr.diff, it was disabled
++ since 1.7.0 and most likely obsoleted by randr 1.2 support in that
++ release.
++
++ [ Cyril Brulebois ]
++ * Build against Xserver 1.9.1 rc1.
++
++ -- Cyril Brulebois <kibi@debian.org> Sat, 16 Oct 2010 21:03:39 +0200
++
++xserver-xorg-video-siliconmotion (1:1.7.4-1) experimental; urgency=low
++
++ [ Christopher James Halse Rogers ]
++ * New upstream release
++ - Fixes FTBFS against Xserver 1.8
++
++ -- Julien Cristau <jcristau@debian.org> Thu, 10 Jun 2010 11:32:50 +0200
++
++xserver-xorg-video-siliconmotion (1:1.7.3-2) unstable; urgency=low
++
++ [ Julien Cristau ]
++ * Rename the build directory to not include DEB_BUILD_GNU_TYPE for no
++ good reason. Thanks, Colin Watson!
++ * Remove myself from Uploaders
++
++ [ Cyril Brulebois ]
++ * Update to new xsfbs, replace deprecated ${xserver:Depends} with
++ ${xviddriver:Depends} in Depends, and bump B-D on xserver-xorg-dev
++ accordingly.
++ * Add myself to Uploaders.
++ * Bump Standards-Version from 3.8.3 to 3.8.4 (no changes needed).
++
++ -- Cyril Brulebois <kibi@debian.org> Tue, 04 May 2010 00:19:15 +0200
++
++xserver-xorg-video-siliconmotion (1:1.7.3-1) experimental; urgency=low
++
++ [ Timo Aaltonen ]
++ * New upstream release.
++ * Bump Standards-Version to 3.8.3.
++ * Build against Xserver 1.7.
++
++ [ Cyril Brulebois ]
++ * Upload to experimental.
++
++ -- Cyril Brulebois <kibi@debian.org> Sun, 06 Dec 2009 01:50:22 +0100
++
++xserver-xorg-video-siliconmotion (1:1.7.2-1) unstable; urgency=low
++
++ * New upstream release.
++ * Bump Standards-Version to 3.8.2.
++ * Remove 01_gen_pci_ids.diff. The X server now uses an internal table to
++ choose a driver during autoconfiguration.
++
++ -- Brice Goglin <bgoglin@debian.org> Mon, 20 Jul 2009 00:13:38 +0200
++
++xserver-xorg-video-siliconmotion (1:1.7.1-1) unstable; urgency=low
++
++ * New upstream release.
++
++ -- Brice Goglin <bgoglin@debian.org> Wed, 29 Apr 2009 18:33:55 +0200
++
++xserver-xorg-video-siliconmotion (1:1.7.0-2) unstable; urgency=low
++
++ * Upload to unstable.
++
++ -- Julien Cristau <jcristau@debian.org> Thu, 09 Apr 2009 11:38:48 +0100
++
++xserver-xorg-video-siliconmotion (1:1.7.0-1) experimental; urgency=low
++
++ * New upstream release.
++ + Add support for EXA, RandR 1.2 and some smi 50x chipsets.
++ + Disable 01_siliconmotion_rotate_option_disables_randr.diff.
++ * Build against xserver 1.6 rc1.
++ * Allow parallel builds.
++ * Run autoreconf on build; add build-deps on automake, libtool and
++ xutils-dev.
++ * Add myself to Uploaders.
++
++ -- Brice Goglin <bgoglin@debian.org> Sun, 01 Feb 2009 16:15:46 +0100
++
++xserver-xorg-video-siliconmotion (1:1.6.0-2) experimental; urgency=low
++
++ * Build against xserver 1.5.
++
++ -- Julien Cristau <jcristau@debian.org> Mon, 08 Sep 2008 19:37:00 +0100
++
++xserver-xorg-video-siliconmotion (1:1.6.0-1) unstable; urgency=low
++
++ [ Brice Goglin ]
++ * Add upstream URL to debian/copyright.
++
++ [ Julien Cristau ]
++ * New upstream release.
++ * Refresh patches.
++ * Remove Branden from Uploaders with his permission, and add myself.
++ * Bump Standards-Version to 3.7.3.
++ * Drop the XS- prefix from Vcs-* control fields.
++ * Run dpkg-shlibdeps with --warnings=6. Drivers reference symbols from
++ /usr/bin/Xorg and other modules, and that's not a bug, so we want
++ dpkg-shlibdeps to shut up about symbols it can't find. Build-depend on
++ dpkg-dev >= 1.14.17.
++
++ -- Julien Cristau <jcristau@debian.org> Fri, 06 Jun 2008 12:19:48 +0200
++
++xserver-xorg-video-siliconmotion (1:1.5.1-3) unstable; urgency=low
++
++ * Upload to unstable
++
++ -- David Nusinow <dnusinow@debian.org> Sun, 16 Sep 2007 15:43:48 -0400
++
++xserver-xorg-video-siliconmotion (1:1.5.1-2) experimental; urgency=low
++
++ * Build against xserver 1.4 and build-dep on it
++ * Add 02_gen_pci_ids.diff. This patch provides a set of pci id's supported
++ by this driver so that it can be automatically loaded by the server.
++
++ -- David Nusinow <dnusinow@debian.org> Thu, 13 Sep 2007 20:20:40 -0400
++
++xserver-xorg-video-siliconmotion (1:1.5.1-1) unstable; urgency=low
++
++ [ Julien Cristau ]
++ * Add link to xserver-xorg-core bug script, so that bugreports contain
++ the user's config and log files.
++ * Bump dependency on xserver-xorg-core to >= 2:1.1.1-11, as previous
++ versions don't have the bug script.
++
++ [ Timo Aaltonen ]
++ * Replaces/Conflicts: xserver-xorg-driver-siliconmotion.
++
++ [ Brice Goglin ]
++ * New upstream version
++ + Pull more upstream fixes up-to 1a803a8f91a931c00106f9d3d41cfa5d74c19f55
++ + Refresh 01_siliconmotion_rotate_option_disables_randr.diff
++ * Install the upstream changelog.
++ * Bump Build-Depends: xserver-xorg-dev to >= 2:1.2.99.902
++ (needed to let xsfbs get access to serverminver).
++ * Add XS-Vcs-*.
++ * Add a link to www.X.org and a reference to the xf86-video-siliconmotion
++ module in the long description.
++ * Remove Fabio from uploaders with his permission. He's always welcome back.
++
++ -- Julien Cristau <jcristau@debian.org> Wed, 02 May 2007 15:08:45 +0200
++
++xserver-xorg-video-siliconmotion (1:1.4.2-1) experimental; urgency=low
++
++ * New upstream version
++ * Generate server dependencies automatically from the ABI
++
++ -- David Nusinow <dnusinow@debian.org> Wed, 21 Feb 2007 22:54:34 -0500
++
++xserver-xorg-video-siliconmotion (1:1.4.1-4) unstable; urgency=low
++
++ * Add quilt to build-depends. Thanks lamont. closes: #388641
++ * Bump standards version to 3.7.2.0. No changes needed.
++
++ -- David Nusinow <dnusinow@debian.org> Thu, 21 Sep 2006 22:20:51 -0400
++
++xserver-xorg-video-siliconmotion (1:1.4.1-3) unstable; urgency=low
++
++ [ Steve Langasek ]
++ * Upload to unstable
++
++ -- David Nusinow <dnusinow@debian.org> Mon, 18 Sep 2006 19:57:51 -0400
++
++xserver-xorg-video-siliconmotion (1:1.4.1-2) experimental; urgency=low
++
++ [ Drew Parsons ]
++ * Provides: xserver-xorg-video-1.0 not xserver-xorg-video.
++
++ [ David Nusinow ]
++ * Bump xserver (build-)depends epochs to 2: to deal with botched
++ server upload
++
++ -- David Nusinow <dnusinow@debian.org> Tue, 22 Aug 2006 23:46:40 +0000
++
++xserver-xorg-video-siliconmotion (1:1.4.1-1) experimental; urgency=low
++
++ [ Andres Salomon ]
++ * Test for obj-$(DEB_BUILD_GNU_TYPE) before creating it during build;
++ idempotency fix.
++ * Run dh_install w/ --list-missing.
++
++ [ David Nusinow ]
++ * New upstream release
++ * Add dependency on xserver-xorg-core to >= 1:1.1.1. Bump version for
++ the build-dep on xserver-xorg-dev.
++ * Bump debhelper compat to 5
++
++ -- David Nusinow <dnusinow@debian.org> Tue, 15 Aug 2006 23:45:05 +0000
++
++xserver-xorg-video-siliconmotion (1:1.3.1.5-3) unstable; urgency=low
++
++ * Upload to modular
++
++ -- David Nusinow <dnusinow@debian.org> Sun, 26 Mar 2006 20:25:54 -0500
++
++xserver-xorg-video-siliconmotion (1:1.3.1.5-2) experimental; urgency=low
++
++ * Port patches from trunk:
++ + general/083_siliconmotion_rotate_option_disables_randr.diff
++
++ -- David Nusinow <dnusinow@debian.org> Sun, 26 Feb 2006 17:53:12 -0500
++
++xserver-xorg-video-siliconmotion (1:1.3.1.5-1) experimental; urgency=low
++
++ * First upload to Debian
++ * Change source package, package, and provides names to denote the
++ type of driver and that they are for xserver-xorg
++
++ -- David Nusinow <dnusinow@debian.org> Fri, 13 Jan 2006 00:40:05 -0500
++
++xserver-xorg-driver-siliconmotion (1:1.3.1.5-0ubuntu1) dapper; urgency=low
++
++ * New upstream release.
++ * Add provides on xserver-xorg-driver.
++
++ -- Daniel Stone <daniel.stone@ubuntu.com> Wed, 4 Jan 2006 20:02:33 +1100
++
++xserver-xorg-driver-siliconmotion (1:1.3.1.4-0ubuntu1) dapper; urgency=low
++
++ * New upstream release.
++
++ -- Daniel Stone <daniel.stone@ubuntu.com> Mon, 19 Dec 2005 09:11:22 +1100
++
++xserver-xorg-driver-siliconmotion (1:1.3.1.3-0ubuntu1) dapper; urgency=low
++
++ * New upstream release.
++
++ -- Daniel Stone <daniel.stone@ubuntu.com> Mon, 12 Dec 2005 13:07:11 +1100
++
++xserver-xorg-driver-siliconmotion (1:1.3.1.2-0ubuntu2) dapper; urgency=low
++
++ * Add missing Build-Depends (x11proto-core-dev, x11proto-fonts-dev,
++ x11proto-randr-dev, x11proto-render-dev).
++
++ -- Daniel Stone <daniel.stone@ubuntu.com> Mon, 5 Dec 2005 12:57:32 +1100
++
++xserver-xorg-driver-siliconmotion (1:1.3.1.2-0ubuntu1) dapper; urgency=low
++
++ * New upstream release.
++
++ -- Daniel Stone <daniel.stone@ubuntu.com> Tue, 22 Nov 2005 13:36:09 +1100
++
++xserver-xorg-driver-siliconmotion (1:1.3.1.1-1) dapper; urgency=low
++
++ * New upstream release.
++
++ -- Daniel Stone <daniel.stone@ubuntu.com> Tue, 25 Oct 2005 17:10:12 +1000
++
++xserver-xorg-driver-siliconmotion (1:1.3.1-1) breezy; urgency=low
++
++ * First xserver-xorg-driver-siliconmotion release.
++
++ -- Daniel Stone <daniel.stone@ubuntu.com> Wed, 6 Jul 2005 15:48:17 +1000
+--- xserver-xorg-video-siliconmotion-1.7.5.orig/debian/xserver-xorg-video-siliconmotion.install
++++ xserver-xorg-video-siliconmotion-1.7.5/debian/xserver-xorg-video-siliconmotion.install
+@@ -0,0 +1,2 @@
++usr/lib/xorg/modules/drivers/*.so
++usr/share/man/man4/*
+--- xserver-xorg-video-siliconmotion-1.7.5.orig/debian/copyright
++++ xserver-xorg-video-siliconmotion-1.7.5/debian/copyright
+@@ -0,0 +1,75 @@
++This package was downloaded from
++http://xorg.freedesktop.org/releases/individual/driver/
++
++Copyright (C) 1994-2000 The XFree86 Project, Inc. All Rights Reserved.
++Copyright (C) 2000,2008 Silicon Motion, Inc. All Rights Reserved.
++Copyright (C) 2001 Corvin Zahn. All Rights Reserved.
++Copyright (C) 2008 Francisco Jerez. All Rights Reserved.
++Copyright (C) 2008 Mandriva Linux. All Rights Reserved.
++
++Permission is hereby granted, free of charge, to any person obtaining a copy of
++this software and associated documentation files (the "Software"), to deal in
++the Software without restriction, including without limitation the rights to
++use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
++of the Software, and to permit persons to whom the Software is furnished to do
++so, subject to the following conditions:
++
++The above copyright notice and this permission notice shall be included in all
++copies or substantial portions of the Software.
++
++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
++NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
++XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
++AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
++WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++
++Except as contained in this notice, the names of The XFree86 Project and
++Silicon Motion shall not be used in advertising or otherwise to promote the
++sale, use or other dealings in this Software without prior written
++authorization from The XFree86 Project or Silicon Motion.
++
++******************************************************************************
++
++Copyright 2007 George Sapountzis
++
++Permission is hereby granted, free of charge, to any person obtaining a
++copy of this software and associated documentation files (the "Software"),
++to deal in the Software without restriction, including without limitation
++the rights to use, copy, modify, merge, publish, distribute, sublicense,
++and/or sell copies of the Software, and to permit persons to whom the
++Software is furnished to do so, subject to the following conditions:
++
++The above copyright notice and this permission notice (including the next
++paragraph) shall be included in all copies or substantial portions of the
++Software.
++
++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
++SOFTWARE.
++
++******************************************************************************
++
++Copyright (C) 2006 Dennis De Winter All Rights Reserved.
++Copyright (C) 2007 Alex Deucher All Rights Reserved.
++
++Permission is hereby granted, free of charge, to any person obtaining a copy of
++this software and associated documentation files (the "Software"), to deal in
++the Software without restriction, including without limitation the rights to
++use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
++of the Software, and to permit persons to whom the Software is furnished to do
++so, subject to the following conditions:
++
++The above copyright notice and this permission notice shall be included in all
++copies or substantial portions of the Software.
++
++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
++NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
++XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
++AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
++WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+--- xserver-xorg-video-siliconmotion-1.7.5.orig/debian/watch
++++ xserver-xorg-video-siliconmotion-1.7.5/debian/watch
+@@ -0,0 +1,3 @@
++#git=git://anongit.freedesktop.org/xorg/driver/xf86-video-siliconmotion
++version=3
++http://xorg.freedesktop.org/releases/individual/driver/ xf86-video-siliconmotion-(.*)\.tar\.gz
+--- xserver-xorg-video-siliconmotion-1.7.5.orig/debian/gbp.conf
++++ xserver-xorg-video-siliconmotion-1.7.5/debian/gbp.conf
+@@ -0,0 +1,4 @@
++[DEFAULT]
++upstream-branch=upstream-experimental
++debian-branch=debian-experimental
++pristine-tar = True
+--- xserver-xorg-video-siliconmotion-1.7.5.orig/debian/rules
++++ xserver-xorg-video-siliconmotion-1.7.5/debian/rules
+@@ -0,0 +1,17 @@
++#!/usr/bin/make -f
++
++# Install in debian/tmp to retain control through dh_install:
++override_dh_auto_install:
++ dh_auto_install --destdir=debian/tmp
++
++# Kill *.la files, and forget no-one:
++override_dh_install:
++ find debian/tmp -name '*.la' -delete
++ dh_install --fail-missing
++
++# That's a plugin, use appropriate warning level:
++override_dh_shlibdeps:
++ dh_shlibdeps -- --warnings=6
++
++%:
++ dh $@ --with quilt,autoreconf,xsf --builddirectory=build/
+--- xserver-xorg-video-siliconmotion-1.7.5.orig/debian/control
++++ xserver-xorg-video-siliconmotion-1.7.5/debian/control
+@@ -0,0 +1,38 @@
++Source: xserver-xorg-video-siliconmotion
++Section: x11
++Priority: optional
++Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
++Uploaders: Cyril Brulebois <kibi@debian.org>
++Build-Depends:
++ debhelper (>= 8),
++ dh-autoreconf,
++ pkg-config,
++ xserver-xorg-dev (>= 2:1.9.4),
++ x11proto-video-dev,
++ x11proto-xext-dev,
++ x11proto-core-dev,
++ x11proto-fonts-dev,
++ x11proto-randr-dev (>= 1.2),
++ x11proto-render-dev,
++ quilt,
++ xutils-dev (>= 1:7.5+4),
++Standards-Version: 3.9.1
++Vcs-Git: git://git.debian.org/git/pkg-xorg/driver/xserver-xorg-video-siliconmotion
++Vcs-Browser: http://git.debian.org/?p=pkg-xorg/driver/xserver-xorg-video-siliconmotion.git
++
++Package: xserver-xorg-video-siliconmotion
++Architecture: any
++Depends:
++ ${shlibs:Depends},
++ ${misc:Depends},
++ ${xviddriver:Depends},
++Provides:
++ ${xviddriver:Provides}
++Description: X.Org X server -- SiliconMotion display driver
++ This package provides the driver for the SiliconMotion Lynx and Cougar family
++ of chipsets, commonly found in laptops.
++ .
++ More information about X.Org can be found at:
++ <URL:http://www.X.org>
++ .
++ This package is built from the X.org xf86-video-siliconmotion driver module.
+--- xserver-xorg-video-siliconmotion-1.7.5.orig/debian/xserver-xorg-video-siliconmotion.links
++++ xserver-xorg-video-siliconmotion-1.7.5/debian/xserver-xorg-video-siliconmotion.links
+@@ -0,0 +1 @@
++usr/share/bug/xserver-xorg-core/script usr/share/bug/xserver-xorg-video-siliconmotion/script
+--- xserver-xorg-video-siliconmotion-1.7.5.orig/debian/compat
++++ xserver-xorg-video-siliconmotion-1.7.5/debian/compat
+@@ -0,0 +1 @@
++8
+--- xserver-xorg-video-siliconmotion-1.7.5.orig/debian/patches/98_sm712_CRT_enable.diff
++++ xserver-xorg-video-siliconmotion-1.7.5/debian/patches/98_sm712_CRT_enable.diff
+@@ -0,0 +1,14 @@
++--- ../xx/xserver-xorg-video-siliconmotion-1.7.3/src/smi_driver.c 2010-03-09 23:39:23.451798382 +0800
+++++ xserver-xorg-video-siliconmotion-1.7.3/src/smi_driver.c 2010-03-10 10:36:58.835798871 +0800
++@@ -1805,6 +1797,11 @@
++ pScreen->SaveScreen = SMI_SaveScreen;
++ pSmi->CloseScreen = pScreen->CloseScreen;
++ pScreen->CloseScreen = SMI_CloseScreen;
+++ /* Added by Belcon to enable LCD Panel Control Select */
+++ if (pSmi->Chipset == SMI_LYNXEMplus)
+++ {
+++ VGAOUT8_INDEX (pSmi, VGA_SEQ_INDEX, VGA_SEQ_DATA, 0x22, 2);
+++ }
++
++ if ((IS_MSOC(pSmi) &&
++ !xf86DPMSInit(pScreen, SMI501_DisplayPowerManagementSet, 0)) ||
+--- xserver-xorg-video-siliconmotion-1.7.5.orig/debian/patches/series
++++ xserver-xorg-video-siliconmotion-1.7.5/debian/patches/series
+@@ -0,0 +1,2 @@
++98_sm712_CRT_enable.diff
++99_xf86-video-siliconmotion-1.7.3-fix-loongson.diff
+--- xserver-xorg-video-siliconmotion-1.7.5.orig/debian/patches/99_xf86-video-siliconmotion-1.7.3-fix-loongson.diff
++++ xserver-xorg-video-siliconmotion-1.7.5/debian/patches/99_xf86-video-siliconmotion-1.7.3-fix-loongson.diff
+@@ -0,0 +1,160 @@
++rixed@happyleptic.org
++ 发送至 loongson-dev
++
++A patch for siliconmotion 1.7.3 is available in the bug trackers
++at freedesktop.org, but a better one will be available monday.
++Still, it lacks the most interresting part : the MMX pack function,
++which should not be implemented there but probably either directly
++in Xv or in pixman (and make Xv use pixman).
++
++So for now the simpliest is to fix these manually.
++For the impatient I attach a patch against SM 1.7.3
++With it, 16bpp and AccelMethod = "XAA" works quite well.
++
++Just an ugly hack really.
++diff -ur orig/src/smi_video.c mod/src/smi_video.c
++--- orig/src/smi_video.c 2010-02-05 13:11:18.000000000 +0100
+++++ mod/src/smi_video.c 2010-02-05 13:20:36.000000000 +0100
++@@ -276,6 +276,7 @@
++ XVIMAGE_YUY2,
++ XVIMAGE_YV12,
++ XVIMAGE_I420,
+++ XVIMAGE_UYVY,
++ {
++ FOURCC_RV15, /* id */
++ XvRGB, /* type */
++@@ -1462,6 +1463,117 @@
++ LEAVE();
++ }
++
+++static void myXVCopyYUV12ToPacked(const unsigned char *srcy, const unsigned char *srcv, const unsigned char *srcu,
+++ unsigned char *dst, int srcPitchy, int srcPitchuv, int dstPitch, int h, int w)
+++{
+++ int i, j;
+++ unsigned char const *y, *u, *v;
+++ int dstinc, yinc, uinc, vinc;
+++
+++ y = srcy;
+++ u = srcu;
+++ v = srcv;
+++
+++ dstinc = dstPitch - 2*w;
+++ yinc = srcPitchy - w;
+++ uinc = srcPitchuv - w/2;
+++ vinc = srcPitchuv - w/2;
+++
+++ for (i = 0; i < h; i++) {
+++ asm (
+++// ".set arch=loongson2f\n\t"
+++ ".set noreorder\n\t"
+++ "move $8, %8 \n\t"
+++ "1: \n\t"
+++ "beqz $8, 2f \n\t"
+++ "xor $f0, $f0, $f0 \n\t"
+++ "ldc1 $f4, (%0) \n\t"
+++ "punpcklbh $f2, $f4, $f0 \n\t"
+++ "punpckhbh $f4, $f4, $f0 \n\t"
+++ "ldc1 $f16, 8(%0) \n\t"
+++ "punpcklbh $f14, $f16, $f0 \n\t"
+++ "punpckhbh $f16, $f16, $f0 \n\t"
+++
+++ "lwc1 $f8, (%1) \n\t"
+++ "lwc1 $f12, (%2) \n\t"
+++ "punpcklbh $f8, $f8, $f12 \n\t"
+++ "punpcklbh $f6, $f0, $f8 \n\t"
+++ "punpckhbh $f8, $f0, $f8 \n\t"
+++ "lwc1 $f18, 4(%1) \n\t"
+++ "lwc1 $f12, 4(%2) \n\t"
+++ "punpcklbh $f18, $f18, $f12 \n\t"
+++ "punpcklbh $f10, $f0, $f18 \n\t"
+++ "punpckhbh $f12, $f0, $f18 \n\t"
+++
+++ "or $f2, $f2, $f6 \n\t"
+++ "or $f4, $f4, $f8 \n\t"
+++ "or $f14, $f14, $f10 \n\t"
+++ "or $f16, $f16, $f12 \n\t"
+++
+++ "sdc1 $f2, (%3) \n\t"
+++ "sdc1 $f4, 8(%3) \n\t"
+++ "add %0, 16 \n\t"
+++ "add %1, 8 \n\t"
+++ "add %2, 8 \n\t"
+++ "sdc1 $f14, 0x10(%3) \n\t"
+++ "sdc1 $f16, 0x18(%3) \n\t"
+++ "add $8, -1 \n\t"
+++ "b 1b \n\t"
+++ "add %3, 32 \n\t"
+++ "2: \n\t"
+++ ".set reorder\n\t"
+++ : "=r" (y), "=r" (u), "=r" (v), "=r" (dst)
+++ : "0" (y), "1" (u), "2" (v), "3" (dst), "r" (w>>4)
+++ : "memory","$8"
+++ );
+++
+++ asm (
+++// ".set arch=loongson2f\n\t"
+++ ".set noreorder\n\t"
+++ "move $8, %8 \n\t"
+++ "1: \n\t"
+++ "beqz $8, 2f \n\t"
+++ "xor $f0, $f0, $f0 \n\t"
+++ "ldc1 $f4, (%0) \n\t"
+++ "punpcklbh $f2, $f4, $f0 \n\t"
+++ "punpckhbh $f4, $f4, $f0 \n\t"
+++
+++ "lwc1 $f8, (%1) \n\t"
+++ "lwc1 $f12, (%2) \n\t"
+++ "punpcklbh $f8, $f8, $f12 \n\t"
+++ "punpcklbh $f6, $f0, $f8 \n\t"
+++ "punpckhbh $f8, $f0, $f8 \n\t"
+++
+++ "or $f2, $f2, $f6 \n\t"
+++ "or $f4, $f4, $f8 \n\t"
+++
+++ "sdc1 $f2, (%3) \n\t"
+++ "sdc1 $f4, 8(%3) \n\t"
+++ "add %0, 8 \n\t"
+++ "add %1, 4 \n\t"
+++ "add %2, 4 \n\t"
+++ "add $8, -1 \n\t"
+++ "b 1b \n\t"
+++ "add %3, 16 \n\t"
+++ "2:\n\t"
+++ ".set reorder\n\t"
+++ : "=r" (y), "=r" (u), "=r" (v), "=r" (dst)
+++ : "0" (y), "1" (u), "2" (v), "3" (dst), "r" ((w&0xf)/8)
+++ : "memory","$8"
+++ );
+++
+++ for (j = (w&7)/2; j; j--) {
+++ *dst++ = *y++;
+++ *dst++ = *u++;
+++ *dst++ = *y++;
+++ *dst++ = *v++;
+++ }
+++ y += yinc;
+++ u = (i%2) ? (u + uinc): (u - w/2);
+++ v = (i%2) ? (v + vinc): (v - w/2);
+++ dst += dstinc;
+++ }
+++}
++
++ static int
++ SMI_PutImage(
++@@ -1593,7 +1705,7 @@
++ offset3 = tmp;
++ }
++ nLines = ((((y2 + 0xffff) >> 16) + 1) & ~1) - top;
++- xf86XVCopyYUV12ToPacked(buf + (top * srcPitch) + (left >> 1),
+++ myXVCopyYUV12ToPacked(buf + (top * srcPitch) + (left >> 1),
++ buf + offset2, buf + offset3, dstStart,
++ srcPitch, srcPitch2, dstPitch, nLines,
++ nPixels);
++@@ -1793,6 +1905,7 @@
++ WRITE_VPR(pSmi, 0x1C, offset >> 3);
++ WRITE_VPR(pSmi, 0x20, (pitch >> 3) | ((pitch >> 3) << 16));
++ WRITE_VPR(pSmi, 0x24, (hstretch & 0xff00) | ((vstretch & 0xff00) >> 8));
+++ WRITE_VPR(pSmi, 0x68, ((hstretch & 0xff) << 8) | (vstretch & 0xff));
++ if (pSmi->Chipset == SMI_LYNXEMplus) { /* This one can store additional precision */
++ WRITE_VPR(pSmi, 0x68, ((hstretch & 0xff) << 8) | (vstretch & 0xff));
++ }