Re: [PATCH] tm6000: fix s-video input

2011-03-22 Thread Dmitri Belimov
Hi Stefan

 
 -BEGIN PGP SIGNED MESSAGE-
 Hash: SHA1
  
 Am 18.03.2011 01:08, schrieb Dmitri Belimov:
  Hi
 
  Add compatibility for composite and s-video inputs. Some TV cards
 hasn't it.
  Fix S-Video input, the s-video cable has only video signals no
  audio.
 Call the function of audio configure kill chroma in signal. only b/w
 video.
 
  Known bugs:
  after s-video the audio for radio didn't work, TV crashed hardly
  after composite TV crashed hardly too.
 
  P.S. After this patch I'll want to rework the procedure of configure
 video. Now it has a lot of junk and dubles.
 
 
 Why you use caps to define video input and audio with avideo and/or
 aradio as flags? Better is , I think,  we use a struct for edge
 virtual input (Video type (s-vhs, composite, tuner), video input pin
 (video port a, video port b or both), video mode gpio, audio type ,
 audio input pin (adc 1, adc 2 or sif)). If we are called
 vidioc_s_input or radio_g_input setting input number. In tm6000_std.c
 we can use this input number and the input struct with the same number
 and can use all setting from here to set it.

It's very intresting but right now much better for me make full-working TV 
cards.
You can rework this part of code as you want. Or we can do it togehter.

With my best regards, Dmitry.

 Stefan Ringel
 
 
  diff --git a/drivers/staging/tm6000/tm6000-cards.c
 b/drivers/staging/tm6000/tm6000-cards.c
  index 88144a1..146c7e8 100644
  --- a/drivers/staging/tm6000/tm6000-cards.c
  +++ b/drivers/staging/tm6000/tm6000-cards.c
  @@ -235,11 +235,13 @@ struct tm6000_board tm6000_boards[] = {
  .avideo = TM6000_AIP_SIF1,
  .aradio = TM6000_AIP_LINE1,
  .caps = {
  - .has_tuner = 1,
  - .has_dvb = 1,
  - .has_zl10353 = 1,
  - .has_eeprom = 1,
  - .has_remote = 1,
  + .has_tuner = 1,
  + .has_dvb = 1,
  + .has_zl10353 = 1,
  + .has_eeprom = 1,
  + .has_remote = 1,
  + .has_input_comp = 1,
  + .has_input_svid = 1,
  },
  .gpio = {
  .tuner_reset = TM6010_GPIO_0,
  @@ -255,11 +257,13 @@ struct tm6000_board tm6000_boards[] = {
  .avideo = TM6000_AIP_SIF1,
  .aradio = TM6000_AIP_LINE1,
  .caps = {
  - .has_tuner = 1,
  - .has_dvb = 0,
  - .has_zl10353 = 0,
  - .has_eeprom = 1,
  - .has_remote = 1,
  + .has_tuner = 1,
  + .has_dvb = 0,
  + .has_zl10353 = 0,
  + .has_eeprom = 1,
  + .has_remote = 1,
  + .has_input_comp = 1,
  + .has_input_svid = 1,
  },
  .gpio = {
  .tuner_reset = TM6010_GPIO_0,
  @@ -327,10 +331,13 @@ struct tm6000_board tm6000_boards[] = {
  .avideo = TM6000_AIP_SIF1,
  .aradio = TM6000_AIP_LINE1,
  .caps = {
  - .has_tuner = 1,
  - .has_dvb = 1,
  - .has_zl10353 = 1,
  - .has_eeprom = 1,
  + .has_tuner = 1,
  + .has_dvb = 1,
  + .has_zl10353 = 1,
  + .has_eeprom = 1,
  + .has_remote = 0,
  + .has_input_comp = 0,
  + .has_input_svid = 0,
  },
  .gpio = {
  .tuner_reset = TM6010_GPIO_0,
  @@ -346,10 +353,13 @@ struct tm6000_board tm6000_boards[] = {
  .avideo = TM6000_AIP_SIF1,
  .aradio = TM6000_AIP_LINE1,
  .caps = {
  - .has_tuner = 1,
  - .has_dvb = 0,
  - .has_zl10353 = 0,
  - .has_eeprom = 1,
  + .has_tuner = 1,
  + .has_dvb = 0,
  + .has_zl10353 = 0,
  + .has_eeprom = 1,
  + .has_remote = 0,
  + .has_input_comp = 0,
  + .has_input_svid = 0,
  },
  .gpio = {
  .tuner_reset = TM6010_GPIO_0,
  diff --git a/drivers/staging/tm6000/tm6000-stds.c
 b/drivers/staging/tm6000/tm6000-stds.c
  index a4c07e5..da3e51b 100644
  --- a/drivers/staging/tm6000/tm6000-stds.c
  +++ b/drivers/staging/tm6000/tm6000-stds.c
  @@ -1161,8 +1161,6 @@ int tm6000_set_standard(struct tm6000_core
  *dev,
 v4l2_std_id * norm)
  rc = tm6000_load_std(dev, svideo_stds[i].common,
  sizeof(svideo_stds[i].
  common));
  - tm6000_set_audio_std(dev, svideo_stds[i].audio_default_std);
  -
  goto ret;
  }
  }
  diff --git a/drivers/staging/tm6000/tm6000-video.c
 b/drivers/staging/tm6000/tm6000-video.c
  index b550340..c80a316 100644
  --- a/drivers/staging/tm6000/tm6000-video.c
  +++ b/drivers/staging/tm6000/tm6000-video.c
  @@ -1080,18 +1080,27 @@ static int vidioc_s_std (struct file *file,
 void *priv, v4l2_std_id *norm)
  static int vidioc_enum_input(struct file *file, void *priv,
  struct v4l2_input *inp)
  {
  + struct tm6000_fh *fh = priv;
  + struct tm6000_core *dev = fh-dev;
  +
  switch (inp-index) {
  case TM6000_INPUT_TV:
  inp-type = V4L2_INPUT_TYPE_TUNER;
  strcpy(inp-name, Television);
  break;
  case TM6000_INPUT_COMPOSITE:
  - inp-type = V4L2_INPUT_TYPE_CAMERA;
  - strcpy(inp-name, Composite);
  + if (dev-caps.has_input_comp) {
  + inp-type = V4L2_INPUT_TYPE_CAMERA;
  + strcpy(inp-name, Composite);
  + } else
  + return -EINVAL;
  break;
  case TM6000_INPUT_SVIDEO:
  - inp-type = V4L2_INPUT_TYPE_CAMERA;
  - strcpy(inp-name, S-Video);
  + if (dev-caps.has_input_svid) {
  + inp-type = V4L2_INPUT_TYPE_CAMERA;
  + strcpy(inp-name, S-Video);
  + } else
  + return -EINVAL;
  break;
  default:
  return -EINVAL;
  diff --git a/drivers/staging/tm6000/tm6000.h
 b/drivers/staging/tm6000/tm6000.h
  index ccd120f..99ae50e 100644
  --- 

Re: [PATCH] tm6000: fix s-video input

2011-03-19 Thread Stefan Ringel

-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1
 
Am 18.03.2011 01:08, schrieb Dmitri Belimov:
 Hi

 Add compatibility for composite and s-video inputs. Some TV cards
hasn't it.
 Fix S-Video input, the s-video cable has only video signals no audio.
Call the function of audio configure kill chroma in signal. only b/w video.

 Known bugs:
 after s-video the audio for radio didn't work, TV crashed hardly
 after composite TV crashed hardly too.

 P.S. After this patch I'll want to rework the procedure of configure
video. Now it has a lot of junk and dubles.


Why you use caps to define video input and audio with avideo and/or
aradio as flags? Better is , I think,  we use a struct for edge
virtual input (Video type (s-vhs, composite, tuner), video input pin
(video port a, video port b or both), video mode gpio, audio type ,
audio input pin (adc 1, adc 2 or sif)). If we are called
vidioc_s_input or radio_g_input setting input number. In tm6000_std.c
we can use this input number and the input struct with the same number
and can use all setting from here to set it.

Stefan Ringel


 diff --git a/drivers/staging/tm6000/tm6000-cards.c
b/drivers/staging/tm6000/tm6000-cards.c
 index 88144a1..146c7e8 100644
 --- a/drivers/staging/tm6000/tm6000-cards.c
 +++ b/drivers/staging/tm6000/tm6000-cards.c
 @@ -235,11 +235,13 @@ struct tm6000_board tm6000_boards[] = {
 .avideo = TM6000_AIP_SIF1,
 .aradio = TM6000_AIP_LINE1,
 .caps = {
 - .has_tuner = 1,
 - .has_dvb = 1,
 - .has_zl10353 = 1,
 - .has_eeprom = 1,
 - .has_remote = 1,
 + .has_tuner = 1,
 + .has_dvb = 1,
 + .has_zl10353 = 1,
 + .has_eeprom = 1,
 + .has_remote = 1,
 + .has_input_comp = 1,
 + .has_input_svid = 1,
 },
 .gpio = {
 .tuner_reset = TM6010_GPIO_0,
 @@ -255,11 +257,13 @@ struct tm6000_board tm6000_boards[] = {
 .avideo = TM6000_AIP_SIF1,
 .aradio = TM6000_AIP_LINE1,
 .caps = {
 - .has_tuner = 1,
 - .has_dvb = 0,
 - .has_zl10353 = 0,
 - .has_eeprom = 1,
 - .has_remote = 1,
 + .has_tuner = 1,
 + .has_dvb = 0,
 + .has_zl10353 = 0,
 + .has_eeprom = 1,
 + .has_remote = 1,
 + .has_input_comp = 1,
 + .has_input_svid = 1,
 },
 .gpio = {
 .tuner_reset = TM6010_GPIO_0,
 @@ -327,10 +331,13 @@ struct tm6000_board tm6000_boards[] = {
 .avideo = TM6000_AIP_SIF1,
 .aradio = TM6000_AIP_LINE1,
 .caps = {
 - .has_tuner = 1,
 - .has_dvb = 1,
 - .has_zl10353 = 1,
 - .has_eeprom = 1,
 + .has_tuner = 1,
 + .has_dvb = 1,
 + .has_zl10353 = 1,
 + .has_eeprom = 1,
 + .has_remote = 0,
 + .has_input_comp = 0,
 + .has_input_svid = 0,
 },
 .gpio = {
 .tuner_reset = TM6010_GPIO_0,
 @@ -346,10 +353,13 @@ struct tm6000_board tm6000_boards[] = {
 .avideo = TM6000_AIP_SIF1,
 .aradio = TM6000_AIP_LINE1,
 .caps = {
 - .has_tuner = 1,
 - .has_dvb = 0,
 - .has_zl10353 = 0,
 - .has_eeprom = 1,
 + .has_tuner = 1,
 + .has_dvb = 0,
 + .has_zl10353 = 0,
 + .has_eeprom = 1,
 + .has_remote = 0,
 + .has_input_comp = 0,
 + .has_input_svid = 0,
 },
 .gpio = {
 .tuner_reset = TM6010_GPIO_0,
 diff --git a/drivers/staging/tm6000/tm6000-stds.c
b/drivers/staging/tm6000/tm6000-stds.c
 index a4c07e5..da3e51b 100644
 --- a/drivers/staging/tm6000/tm6000-stds.c
 +++ b/drivers/staging/tm6000/tm6000-stds.c
 @@ -1161,8 +1161,6 @@ int tm6000_set_standard(struct tm6000_core *dev,
v4l2_std_id * norm)
 rc = tm6000_load_std(dev, svideo_stds[i].common,
 sizeof(svideo_stds[i].
 common));
 - tm6000_set_audio_std(dev, svideo_stds[i].audio_default_std);
 -
 goto ret;
 }
 }
 diff --git a/drivers/staging/tm6000/tm6000-video.c
b/drivers/staging/tm6000/tm6000-video.c
 index b550340..c80a316 100644
 --- a/drivers/staging/tm6000/tm6000-video.c
 +++ b/drivers/staging/tm6000/tm6000-video.c
 @@ -1080,18 +1080,27 @@ static int vidioc_s_std (struct file *file,
void *priv, v4l2_std_id *norm)
 static int vidioc_enum_input(struct file *file, void *priv,
 struct v4l2_input *inp)
 {
 + struct tm6000_fh *fh = priv;
 + struct tm6000_core *dev = fh-dev;
 +
 switch (inp-index) {
 case TM6000_INPUT_TV:
 inp-type = V4L2_INPUT_TYPE_TUNER;
 strcpy(inp-name, Television);
 break;
 case TM6000_INPUT_COMPOSITE:
 - inp-type = V4L2_INPUT_TYPE_CAMERA;
 - strcpy(inp-name, Composite);
 + if (dev-caps.has_input_comp) {
 + inp-type = V4L2_INPUT_TYPE_CAMERA;
 + strcpy(inp-name, Composite);
 + } else
 + return -EINVAL;
 break;
 case TM6000_INPUT_SVIDEO:
 - inp-type = V4L2_INPUT_TYPE_CAMERA;
 - strcpy(inp-name, S-Video);
 + if (dev-caps.has_input_svid) {
 + inp-type = V4L2_INPUT_TYPE_CAMERA;
 + strcpy(inp-name, S-Video);
 + } else
 + return -EINVAL;
 break;
 default:
 return -EINVAL;
 diff --git a/drivers/staging/tm6000/tm6000.h
b/drivers/staging/tm6000/tm6000.h
 index ccd120f..99ae50e 100644
 --- a/drivers/staging/tm6000/tm6000.h
 +++ b/drivers/staging/tm6000/tm6000.h
 @@ -129,6 +129,8 @@ struct tm6000_capabilities {
 unsigned int has_zl10353:1;
 unsigned int has_eeprom:1;
 unsigned int has_remote:1;
 + unsigned int has_input_comp:1;
 + unsigned int has_input_svid:1;
 };

 struct tm6000_dvb {

 Signed-off-by: Beholder Intl. Ltd. Dmitry Belimov d.beli...@gmail.com

 

[PATCH] tm6000: fix s-video input

2011-03-17 Thread Dmitri Belimov
Hi

Add compatibility for composite and s-video inputs. Some TV cards hasn't it.
Fix S-Video input, the s-video cable has only video signals no audio. Call the 
function of audio configure kill chroma in signal. only b/w video.

Known bugs:
after s-video the audio for radio didn't work, TV crashed hardly
after composite TV crashed hardly too.

P.S. After this patch I'll want to rework the procedure of configure video. Now 
it has a lot of junk and dubles.

diff --git a/drivers/staging/tm6000/tm6000-cards.c 
b/drivers/staging/tm6000/tm6000-cards.c
index 88144a1..146c7e8 100644
--- a/drivers/staging/tm6000/tm6000-cards.c
+++ b/drivers/staging/tm6000/tm6000-cards.c
@@ -235,11 +235,13 @@ struct tm6000_board tm6000_boards[] = {
.avideo   = TM6000_AIP_SIF1,
.aradio   = TM6000_AIP_LINE1,
.caps = {
-   .has_tuner= 1,
-   .has_dvb  = 1,
-   .has_zl10353  = 1,
-   .has_eeprom   = 1,
-   .has_remote   = 1,
+   .has_tuner  = 1,
+   .has_dvb= 1,
+   .has_zl10353= 1,
+   .has_eeprom = 1,
+   .has_remote = 1,
+   .has_input_comp = 1,
+   .has_input_svid = 1,
},
.gpio = {
.tuner_reset= TM6010_GPIO_0,
@@ -255,11 +257,13 @@ struct tm6000_board tm6000_boards[] = {
.avideo   = TM6000_AIP_SIF1,
.aradio   = TM6000_AIP_LINE1,
.caps = {
-   .has_tuner= 1,
-   .has_dvb  = 0,
-   .has_zl10353  = 0,
-   .has_eeprom   = 1,
-   .has_remote   = 1,
+   .has_tuner  = 1,
+   .has_dvb= 0,
+   .has_zl10353= 0,
+   .has_eeprom = 1,
+   .has_remote = 1,
+   .has_input_comp = 1,
+   .has_input_svid = 1,
},
.gpio = {
.tuner_reset= TM6010_GPIO_0,
@@ -327,10 +331,13 @@ struct tm6000_board tm6000_boards[] = {
.avideo   = TM6000_AIP_SIF1,
.aradio   = TM6000_AIP_LINE1,
.caps = {
-   .has_tuner= 1,
-   .has_dvb  = 1,
-   .has_zl10353  = 1,
-   .has_eeprom   = 1,
+   .has_tuner  = 1,
+   .has_dvb= 1,
+   .has_zl10353= 1,
+   .has_eeprom = 1,
+   .has_remote = 0,
+   .has_input_comp = 0,
+   .has_input_svid = 0,
},
.gpio = {
.tuner_reset= TM6010_GPIO_0,
@@ -346,10 +353,13 @@ struct tm6000_board tm6000_boards[] = {
.avideo   = TM6000_AIP_SIF1,
.aradio   = TM6000_AIP_LINE1,
.caps = {
-   .has_tuner= 1,
-   .has_dvb  = 0,
-   .has_zl10353  = 0,
-   .has_eeprom   = 1,
+   .has_tuner  = 1,
+   .has_dvb= 0,
+   .has_zl10353= 0,
+   .has_eeprom = 1,
+   .has_remote = 0,
+   .has_input_comp = 0,
+   .has_input_svid = 0,
},
.gpio = {
.tuner_reset= TM6010_GPIO_0,
diff --git a/drivers/staging/tm6000/tm6000-stds.c 
b/drivers/staging/tm6000/tm6000-stds.c
index a4c07e5..da3e51b 100644
--- a/drivers/staging/tm6000/tm6000-stds.c
+++ b/drivers/staging/tm6000/tm6000-stds.c
@@ -1161,8 +1161,6 @@ int tm6000_set_standard(struct tm6000_core *dev, 
v4l2_std_id * norm)
rc = tm6000_load_std(dev, svideo_stds[i].common,
 sizeof(svideo_stds[i].
common));
-   tm6000_set_audio_std(dev, 
svideo_stds[i].audio_default_std);
-
goto ret;
}
}
diff --git a/drivers/staging/tm6000/tm6000-video.c 
b/drivers/staging/tm6000/tm6000-video.c
index b550340..c80a316 100644
--- a/drivers/staging/tm6000/tm6000-video.c
+++ b/drivers/staging/tm6000/tm6000-video.c
@@ -1080,18 +1080,27 @@ static int vidioc_s_std (struct file *file, void *priv, 
v4l2_std_id *norm)
 static int vidioc_enum_input(struct file *file, void *priv,
struct v4l2_input *inp)
 {