diff options
author | scop <scop> | 2005-03-22 23:09:14 +0000 |
---|---|---|
committer | scop <scop> | 2005-03-22 23:09:14 +0000 |
commit | 3825bcef3d4eedcf48e3b2221d719699dad46ed7 (patch) | |
tree | a03ad9b5f4a4cfd959743331ab0a8dc76fead23f /patches/em8300-adv7170-wss.patch | |
parent | 6721a75f6fa59e2555bf52d935487320a8fb40b5 (diff) | |
download | vdr-plugin-dxr3-3825bcef3d4eedcf48e3b2221d719699dad46ed7.tar.gz vdr-plugin-dxr3-3825bcef3d4eedcf48e3b2221d719699dad46ed7.tar.bz2 |
Bring in patches from 0-2 branch.
Diffstat (limited to 'patches/em8300-adv7170-wss.patch')
-rw-r--r-- | patches/em8300-adv7170-wss.patch | 354 |
1 files changed, 354 insertions, 0 deletions
diff --git a/patches/em8300-adv7170-wss.patch b/patches/em8300-adv7170-wss.patch new file mode 100644 index 0000000..e2e6e5c --- /dev/null +++ b/patches/em8300-adv7170-wss.patch @@ -0,0 +1,354 @@ +Wide screen signaling (WSS) patch for the em8300 driver by Seppo Ingalsuo. +Apply to: em8300 driver sources +More info: http://sf.net/mailarchive/forum.php?thread_id=6061108&forum_id=7173 +Note: you'll probably want to apply vdr-dxr3-wss.patch too + in order to get VDR(-dxr3) to use this functionality. + + +Index: em8300setup/em8300setup.c +=================================================================== +RCS file: /cvsroot/dxr3/em8300/em8300setup/em8300setup.c,v +retrieving revision 1.3 +diff -u -r1.3 em8300setup.c +--- em8300setup/em8300setup.c 8 Mar 2005 01:14:31 -0000 1.3 ++++ em8300setup/em8300setup.c 8 Mar 2005 20:47:06 -0000 +@@ -112,7 +112,7 @@ + char ucode_file[200]; // bad hardcoded value ;-) + + /* Vars to hold desired setings - init to -1 so we can see which were requested to be set explicitly by the user and which should be left alone */ +- int tvmode=-1, aspect=-1, audio=-1, spu=-1, upload=0, display_only=0; ++ int tvmode=-1, aspect=-1, audio=-1, spu=-1, upload=0, display_only=0, wssmode=-1; + + + char * devs[] = {"/dev/em8300-0","/dev/em8300-1","/dev/em8300-2","/dev/em8300-3"}; +@@ -175,12 +175,45 @@ + upload=1; + printf("Using microcode file %s\n",ucode_file); + break; ++ case 'z': ++ switch (opt[2]) { ++ case '0': ++ wssmode = EM8300_WSS_OFF; ++ break; ++ case '1': ++ wssmode = EM8300_WSS_4_3; ++ break; ++ case '2': ++ wssmode = EM8300_WSS_14_9; ++ if (opt[3]=='l') wssmode = EM8300_WSS_14_9_LETTERBOX; ++ if (opt[3]=='t') wssmode = EM8300_WSS_14_9_LETTERBOX_TOP; ++ break; ++ case '3': ++ wssmode = EM8300_WSS_16_9; ++ if (opt[3]=='l') wssmode = EM8300_WSS_16_9_LETTERBOX; ++ if (opt[3]=='t') wssmode = EM8300_WSS_16_9_LETTERBOX_TOP; ++ if (opt[3]=='p') wssmode = EM8300_WSS_16P_9_LETTERBOX; ++ break; ++ default: ++ printf("Unknown option -z%c\n\n",opt[2]);; ++ exit(1); ++ } ++ break; + default: + printf("Unknown option -%c \n\n",opt[1]); + printf("Usage: em8300setup [-q]|[all other options]\n\nWhere options are one of the following (latter options will override previously\nspecified options for the same control):\n\n"); + printf(" -p, -p6, -n\tSet display mode to pal, pal60, ntsc\n"); + printf(" -a, -d, -3\tSet audio mode to analog, digitalpcm, digital ac3\n"); + printf(" -o, -w\tSet aspect ratio to normal[4:3], widescreen[16:9]\n"); ++ printf(" -z0\t\tSet WSS to disabled\n"); ++ printf(" -z1\t\tSet WSS to 4:3\n"); ++ printf(" -z2\t\tSet WSS to 14:9\n"); ++ printf(" -z2l\t\tSet WSS to 14:9 letterbox\n"); ++ printf(" -z2t\t\tSet WSS to 14:9 letterbox top\n"); ++ printf(" -z3\t\tSet WSS to 16:9\n"); ++ printf(" -z3l\t\tSet WSS to 16:9 letterbox\n"); ++ printf(" -z3t\t\tSet WSS to 16:9 letterbox top\n"); ++ printf(" -z3p\t\tSet WSS to >16:9 letterbox\n"); + printf(" -S, -s\tSet spu mode On(S), Off(s)\n"); + printf(" -f <filename>\tSpecify alternate location of microcode\n\t\t(Defaults to /usr/share/misc/em8300.uc)\n"); + printf(" -q\t\tQuery the current settings for all of the above and\n\t\texit without making any changes\n"); +@@ -270,6 +303,12 @@ + if(ioctl(DEV, EM8300_IOCTL_SET_ASPECTRATIO, &aspect) == -1) + check_errno("Unable to set aspect ratio"); + } ++ if(wssmode!=-1) { ++ printf("Setting WSS = %i\n",wssmode); ++ if(ioctl(DEV, EM8300_IOCTL_SET_WSS, &wssmode) == -1) ++ check_errno("Unable to set wss"); ++ } ++ + if(audio!=-1) { + printf("Setting audio = %i\n",audio); + if(ioctl(DEV, EM8300_IOCTL_SET_AUDIOMODE, &audio) == -1) +Index: include/linux/em8300.h +=================================================================== +RCS file: /cvsroot/dxr3/em8300/include/linux/em8300.h,v +retrieving revision 1.37 +diff -u -r1.37 em8300.h +--- include/linux/em8300.h 27 Oct 2004 00:03:14 -0000 1.37 ++++ include/linux/em8300.h 8 Mar 2005 20:47:07 -0000 +@@ -80,6 +80,7 @@ + #define EM8300_IOCTL_SCR_SETSPEED _IOW('C',17,unsigned) + #define EM8300_IOCTL_FLUSH _IOW('C',18,int) + #define EM8300_IOCTL_VBI _IOW('C',19,struct timeval) ++#define EM8300_IOCTL_SET_WSS _IOW('C',20,int) + + #define EM8300_OVERLAY_SIGNAL_ONLY 1 + #define EM8300_OVERLAY_SIGNAL_WITH_VGA 2 +@@ -97,6 +98,16 @@ + #define EM8300_ASPECTRATIO_16_9 1 + #define EM8300_ASPECTRATIO_LAST 1 + ++#define EM8300_WSS_OFF 0 ++#define EM8300_WSS_4_3 8 ++#define EM8300_WSS_14_9_LETTERBOX 1 ++#define EM8300_WSS_14_9_LETTERBOX_TOP 2 ++#define EM8300_WSS_16_9_LETTERBOX 11 ++#define EM8300_WSS_16_9_LETTERBOX_TOP 4 ++#define EM8300_WSS_16P_9_LETTERBOX 13 ++#define EM8300_WSS_14_9 14 ++#define EM8300_WSS_16_9 7 ++ + #define EM8300_VIDEOMODE_PAL 0 + #define EM8300_VIDEOMODE_PAL60 1 + #define EM8300_VIDEOMODE_NTSC 2 +@@ -454,6 +465,7 @@ + int em8300_control_ioctl(struct em8300_s *em, int cmd, unsigned long arg); + int em8300_ioctl_setvideomode(struct em8300_s *em, int mode); + int em8300_ioctl_setaspectratio(struct em8300_s *em, int ratio); ++int em8300_ioctl_setwss(struct em8300_s *em, int wsscode); + void em8300_ioctl_getstatus(struct em8300_s *em, char *usermsg); + int em8300_ioctl_init(struct em8300_s *em, em8300_microcode_t *useruc); + void em8300_ioctl_enable_videoout(struct em8300_s *em, int mode); +Index: modules/adv717x.c +=================================================================== +RCS file: /cvsroot/dxr3/em8300/modules/adv717x.c,v +retrieving revision 1.43 +diff -u -r1.43 adv717x.c +--- modules/adv717x.c 7 Mar 2005 00:29:55 -0000 1.43 ++++ modules/adv717x.c 8 Mar 2005 20:47:08 -0000 +@@ -112,6 +112,7 @@ + int pp_ntsc; + int pd_adj_pal; + int pd_adj_ntsc; ++ int wsscode; + + unsigned char config[32]; + int configlen; +@@ -298,6 +299,63 @@ + if (data->rgbmode) { + tmpconfig[3] |= 0x10; + } ++ ++ switch (data->wsscode) { ++ case 0x08: ++ /* 4:3 full */ ++ tmpconfig[22] = 0x80; ++ tmpconfig[23] = 0x00; ++ tmpconfig[24] = 0x08; ++ break; ++ case 0x01: ++ /* 14:9 letterbox center */ ++ tmpconfig[22] = 0x80; ++ tmpconfig[23] = 0x00; ++ tmpconfig[24] = 0x01; ++ break; ++ case 0x02: ++ /* 14:9 letterbox top */ ++ tmpconfig[22] = 0x80; ++ tmpconfig[23] = 0x00; ++ tmpconfig[24] = 0x02; ++ break; ++ case 0x0b: ++ /* 16:9 letterbox center */ ++ tmpconfig[22] = 0x80; ++ tmpconfig[23] = 0x00; ++ tmpconfig[24] = 0x0b; ++ break; ++ case 0x04: ++ /* 16:9 letterbox top */ ++ tmpconfig[22] = 0x80; ++ tmpconfig[23] = 0x00; ++ tmpconfig[24] = 0x04; ++ break; ++ case 0x0d: ++ /* >16:9 letterbox center */ ++ tmpconfig[22] = 0x80; ++ tmpconfig[23] = 0x00; ++ tmpconfig[24] = 0x0d; ++ break; ++ case 0x0e: ++ /* 14:9 full */ ++ tmpconfig[22] = 0x80; ++ tmpconfig[23] = 0x00; ++ tmpconfig[24] = 0x0e; ++ break; ++ case 0x07: ++ /* 16:9 full */ ++ tmpconfig[22] = 0x80; ++ tmpconfig[23] = 0x00; ++ tmpconfig[24] = 0x07; ++ break; ++ default: ++ tmpconfig[22] = 0x00; ++ tmpconfig[23] = 0x00; ++ tmpconfig[24] = 0x00; ++ break; ++ } ++ + break; + } + +@@ -440,6 +498,7 @@ + data->bars = color_bars[em->card_nr]; + data->rgbmode = 0; + data->enableoutput = 0; ++ data->wsscode = 0; + + adv717x_setmode(ENCODER_MODE_PAL60, client); + +@@ -547,6 +606,42 @@ + data->enableoutput = (long int) arg; + adv717x_update(client); + break; ++ case ENCODER_CMD_WSS_4_3: ++ data->wsscode = 8; ++ adv717x_update(client); ++ break; ++ case ENCODER_CMD_WSS_14_9_LETTERBOX: ++ data->wsscode = 1; ++ adv717x_update(client); ++ break; ++ case ENCODER_CMD_WSS_14_9_LETTERBOX_TOP: ++ data->wsscode = 2; ++ adv717x_update(client); ++ break; ++ case ENCODER_CMD_WSS_16_9_LETTERBOX: ++ data->wsscode = 11; ++ adv717x_update(client); ++ break; ++ case ENCODER_CMD_WSS_16_9_LETTERBOX_TOP: ++ data->wsscode = 4; ++ adv717x_update(client); ++ break; ++ case ENCODER_CMD_WSS_16P_9_LETTERBOX: ++ data->wsscode = 13; ++ adv717x_update(client); ++ break; ++ case ENCODER_CMD_WSS_14_9: ++ data->wsscode = 14; ++ adv717x_update(client); ++ break; ++ case ENCODER_CMD_WSS_16_9: ++ data->wsscode = 7; ++ adv717x_update(client); ++ break; ++ case ENCODER_CMD_WSS_OFF: ++ data->wsscode = 0; ++ adv717x_update(client); ++ break; + default: + return -EINVAL; + break; +Index: modules/em8300_ioctl.c +=================================================================== +RCS file: /cvsroot/dxr3/em8300/modules/em8300_ioctl.c,v +retrieving revision 1.45 +diff -u -r1.45 em8300_ioctl.c +--- modules/em8300_ioctl.c 2 May 2004 22:15:01 -0000 1.45 ++++ modules/em8300_ioctl.c 8 Mar 2005 20:47:08 -0000 +@@ -178,6 +178,18 @@ + } + break; + ++ case _IOC_NR(EM8300_IOCTL_SET_WSS): ++ if (!em->ucodeloaded) { ++ return -ENOTTY; ++ } ++ ++ if (_IOC_DIR(cmd) & _IOC_WRITE) { ++ get_user(val, (int *) arg); ++ em8300_ioctl_setwss(em, val); ++ } ++ ++ break; ++ + case _IOC_NR(EM8300_IOCTL_GET_AUDIOMODE): + if (!em->ucodeloaded) { + return -ENOTTY; +@@ -515,6 +527,52 @@ + return 0; + } + ++int em8300_ioctl_setwss(struct em8300_s *em, int wsscode) ++{ ++ int wsscmd; ++ ++ switch (wsscode) { ++ case EM8300_WSS_OFF: ++ wsscmd = ENCODER_CMD_WSS_OFF; ++ break; ++ case EM8300_WSS_4_3: ++ wsscmd = ENCODER_CMD_WSS_4_3; ++ break; ++ case EM8300_WSS_14_9_LETTERBOX: ++ wsscmd = ENCODER_CMD_WSS_14_9_LETTERBOX; ++ break; ++ case EM8300_WSS_14_9_LETTERBOX_TOP: ++ wsscmd = ENCODER_CMD_WSS_14_9_LETTERBOX_TOP; ++ break; ++ case EM8300_WSS_16_9_LETTERBOX: ++ wsscmd = ENCODER_CMD_WSS_16_9_LETTERBOX; ++ break; ++ case EM8300_WSS_16_9_LETTERBOX_TOP: ++ wsscmd = ENCODER_CMD_WSS_16_9_LETTERBOX_TOP; ++ break; ++ case EM8300_WSS_16P_9_LETTERBOX: ++ wsscmd = ENCODER_CMD_WSS_16P_9_LETTERBOX; ++ break; ++ case EM8300_WSS_14_9: ++ wsscmd = ENCODER_CMD_WSS_14_9; ++ break; ++ case EM8300_WSS_16_9: ++ wsscmd = ENCODER_CMD_WSS_16_9; ++ break; ++ default: ++ return -1; ++ } ++ ++ em8300_dicom_disable(em); ++ if (em->encoder) { ++ em->encoder->driver->command(em->encoder, wsscmd, (void *) 0 ); ++ } ++ ++ em8300_dicom_enable(em); ++ em8300_dicom_update(em); ++ return 0; ++} ++ + int em8300_ioctl_setplaymode(struct em8300_s *em, int mode) + { + switch (mode) { +Index: modules/encoder.h +=================================================================== +RCS file: /cvsroot/dxr3/em8300/modules/encoder.h,v +retrieving revision 1.8 +diff -u -r1.8 encoder.h +--- modules/encoder.h 14 Jan 2002 21:41:31 -0000 1.8 ++++ modules/encoder.h 8 Mar 2005 20:47:08 -0000 +@@ -13,6 +13,15 @@ + + #define ENCODER_CMD_SETMODE 1 + #define ENCODER_CMD_ENABLEOUTPUT 2 ++#define ENCODER_CMD_WSS_4_3 3 ++#define ENCODER_CMD_WSS_14_9_LETTERBOX 4 ++#define ENCODER_CMD_WSS_14_9_LETTERBOX_TOP 5 ++#define ENCODER_CMD_WSS_16_9_LETTERBOX 6 ++#define ENCODER_CMD_WSS_16_9_LETTERBOX_TOP 7 ++#define ENCODER_CMD_WSS_16P_9_LETTERBOX 8 ++#define ENCODER_CMD_WSS_14_9 9 ++#define ENCODER_CMD_WSS_16_9 10 ++#define ENCODER_CMD_WSS_OFF 11 + + #endif + |