Commit 412297d31d439ba56cd4faeb3a49a6f569f40702

Authored by Mauro Carvalho Chehab
1 parent 1323fbda13

V4L/DVB (5023): Fix compilation on ppc32 architecture

There's a problem, pointed by Meelis Roos <mroos@linux.ee>, that, on ppc32 arch,
with some gcc versions (noticed with prerelease 4.1.2 20061115), compilation
fails, due the lack of __ucmpdi2 to do the required 64-bit comparision.
This patch takes some sugestions made by Andrew Morton <akpm@osdl.org>,
Stelian Pop <stelian@popies.net> and Segher Boessenkool <segher@kernel.crashing.org>

Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>

Showing 2 changed files with 17 additions and 1 deletions Side-by-side Diff

drivers/media/video/v4l2-common.c
... ... @@ -90,8 +90,15 @@
90 90 char *v4l2_norm_to_name(v4l2_std_id id)
91 91 {
92 92 char *name;
  93 + u32 myid = id;
93 94  
94   - switch (id) {
  95 + /* HACK: ppc32 architecture doesn't have __ucmpdi2 function to handle
  96 + 64 bit comparations. So, on that architecture, with some gcc variants,
  97 + compilation fails. Currently, the max value is 30bit wide.
  98 + */
  99 + BUG_ON(myid != id);
  100 +
  101 + switch (myid) {
95 102 case V4L2_STD_PAL:
96 103 name="PAL"; break;
97 104 case V4L2_STD_PAL_BG:
include/linux/videodev2.h
... ... @@ -662,6 +662,15 @@
662 662 #define V4L2_STD_ATSC_8_VSB ((v4l2_std_id)0x01000000)
663 663 #define V4L2_STD_ATSC_16_VSB ((v4l2_std_id)0x02000000)
664 664  
  665 +/* FIXME:
  666 + Although std_id is 64 bits, there is an issue on PPC32 architecture that
  667 + makes switch(__u64) to break. So, there's a hack on v4l2-common.c rounding
  668 + this value to 32 bits.
  669 + As, currently, the max value is for V4L2_STD_ATSC_16_VSB (30 bits wide),
  670 + it should work fine. However, if needed to add more than two standards,
  671 + v4l2-common.c should be fixed.
  672 + */
  673 +
665 674 /* some merged standards */
666 675 #define V4L2_STD_MN (V4L2_STD_PAL_M|V4L2_STD_PAL_N|V4L2_STD_PAL_Nc|V4L2_STD_NTSC)
667 676 #define V4L2_STD_B (V4L2_STD_PAL_B|V4L2_STD_PAL_B1|V4L2_STD_SECAM_B)