ManLi TV kártya

3 bejegyzés megtekintése - 1-3 / 3
  • Szerző
    Bejegyzés
  • #1929219
    admin
    Adminisztrátor

      Nem kéne ide bemásolni mindent, amit találsz!
      Elég egy rövid lényegretörõ kérdés is.
      Azt se írtad le, a tv kártyádnak milyen chip setje van…

      Ha saa7134, akkor a 6.X kernel alapból ismeri, a többinél le kell forgatni ezt

      SziLaj

      #1929220
      admin
      Adminisztrátor

        haly
        gcbttv is a Perl script with a nice GUI that helps you to find the correct module options for your TV card. It use Perl-GTK, and it writes the correct options to /etc/modules.conf and .xawtv.

        http://izmir.pm.org/gcbttv/

        #1872554
        csaba
        Felhasználó

          Ezt találtam a neten..

          http://www.spinics.net/lists/kernel/msg236766.html

          Szóval most már ha benne lesz az UHUban a v4Lin akkor menni fog a TV kártyám????

          [patch] v4l-09 saa7134 driver update
          To: Andrew Morton , Kernel List
          Subject: [patch] v4l-09 saa7134 driver update
          From: Gerd Knorr
          Date: Thu, 15 Jan 2004 13:00:11 +0100
          Sender: [email protected]
          User-agent: Mutt/1.5.3i

          Hi,

          This is a saa7134 driver update. Changes:

          * add infrared remote support.
          * add support for more TV cards.
          * misc minor fixes.

          This patch depends on the ir-input patch.

          Gerd

          diff -u linux-2.6.1/drivers/media/video/saa7134/Makefile linux/drivers/media/video/saa7134/Makefile
          — linux-2.6.1/drivers/media/video/saa7134/Makefile2004-01-14 15:07:00.000000000 +0100
          +++ linux/drivers/media/video/saa7134/Makefile2004-01-14 15:09:36.000000000 +0100
          @@ -1,7 +1,7 @@

          saa7134-objs :=saa7134-cards.o saa7134-core.o saa7134-i2c.o
          saa7134-oss.o saa7134-ts.o saa7134-tvaudio.o
          -saa7134-vbi.o saa7134-video.o
          +saa7134-vbi.o saa7134-video.o saa7134-input.o

          obj-$(CONFIG_VIDEO_SAA7134) += saa7134.o

          diff -u linux-2.6.1/drivers/media/video/saa7134/saa6752hs.c linux/drivers/media/video/saa7134/saa6752hs.c
          — linux-2.6.1/drivers/media/video/saa7134/saa6752hs.c2004-01-14 15:06:51.000000000 +0100
          +++ linux/drivers/media/video/saa7134/saa6752hs.c2004-01-14 15:09:36.000000000 +0100
          @@ -168,13 +168,13 @@
          }

          // wait a bit
          -current->state = TASK_INTERRUPTIBLE;
          -schedule_timeout(1);
          +set_current_state(TASK_INTERRUPTIBLE);
          +schedule_timeout(HZ/100);
          }

          // delay a bit to let encoder settle
          -current->state = TASK_INTERRUPTIBLE;
          -schedule_timeout(5);
          +set_current_state(TASK_INTERRUPTIBLE);
          +schedule_timeout(HZ/20);

          // done
          return status;
          @@ -230,6 +230,7 @@
          static int saa6752hs_init(struct i2c_client* client, struct mpeg_params* params)
          {
          unsigned char buf[3];
          +void *data;

          // check the bitrate parameters first
          if (params != NULL) {
          @@ -281,12 +282,13 @@
          i2c_master_send(client,buf,3);

          // setup bitrate settings
          +data = i2c_get_clientdata(client);
          if (params) {
          saa6752hs_set_bitrate(client, params);
          -memcpy(client->data, params, sizeof(struct mpeg_params));
          +memcpy(data, params, sizeof(struct mpeg_params));
          } else {
          // parameters were not supplied. use the previous set
          – saa6752hs_set_bitrate(client, (struct mpeg_params*) client->data);
          + saa6752hs_set_bitrate(client, (struct mpeg_params*) data);
          }

          // Send SI tables
          @@ -324,7 +326,7 @@
          if (NULL == (params = kmalloc(sizeof(struct mpeg_params), GFP_KERNEL)))
          return -ENOMEM;
          memcpy(params,&mpeg_params_template,sizeof(struct mpeg_params));
          -client->data = params;
          +i2c_set_clientdata(client, params);

          i2c_attach_client(client);

          @@ -341,8 +343,11 @@

          static int saa6752hs_detach(struct i2c_client *client)
          {
          +void *data;
          +
          +data = i2c_get_clientdata(client);
          i2c_detach_client(client);
          -kfree(client->data);
          +kfree(data);
          kfree(client);
          return 0;
          }
          diff -u linux-2.6.1/drivers/media/video/saa7134/saa7134-cards.c linux/drivers/media/video/saa7134/saa7134-cards.c
          — linux-2.6.1/drivers/media/video/saa7134/saa7134-cards.c2004-01-14 15:06:28.000000000 +0100
          +++ linux/drivers/media/video/saa7134/saa7134-cards.c2004-01-14 15:09:36.000000000 +0100
          @@ -2,7 +2,7 @@
          * device driver for philips saa7134 based TV cards
          * card-specific stuff.
          *
          – * © 2001,02 Gerd Knorr [SuSE Labs]
          + * © 2001-03 Gerd Knorr [SuSE Labs]
          *
          * This program is free software; you can redistribute it and/or modify
          * it under the terms of the GNU General Public License as published by
          @@ -70,6 +70,10 @@
          .amux = LINE2,
          .tv = 1,
          }},
          +.radio = {
          +.name = name_radio,
          +.amux = LINE2,
          +},
          },
          [SAA7134_BOARD_FLYVIDEO3000] = {
          /* „Marco d’Itri” */
          @@ -235,7 +239,8 @@
          },
          },
          [SAA7134_BOARD_TVSTATION_RDS] = {
          -.name= „KNC One TV-Station RDS”,
          + /* Typhoon TV Tuner RDS: Art.Nr. 50694 */
          +.name= „KNC One TV-Station RDS / Typhoon TV Tuner RDS”,
          .audio_clock= 0x00200000,
          .tuner_type= TUNER_PHILIPS_FM1216ME_MK3,
          .need_tda9887 = 1,
          @@ -245,18 +250,61 @@
          .amux = TV,
          .tv = 1,
          },{
          +.name = name_tv_mono,
          + .vmux = 1,
          + .amux = LINE2,
          + .tv = 1,
          + },{
          +
          +.name = name_svideo,
          +.vmux = 8,
          +.amux = LINE1,
          +},{
          .name = name_comp1,
          -.vmux = 2,
          +.vmux = 3,
          .amux = LINE1,
          },{
          -.name = name_comp2,
          +
          + .name = „CVid over SVid”,
          + .vmux = 0,
          + .amux = LINE1,
          + }},
          +.radio = {
          +.name = name_radio,
          +.amux = LINE2,
          +},
          +},
          +[SAA7134_BOARD_TVSTATION_DVR] = {
          +.name= „KNC One TV-Station DVR”,
          +.audio_clock= 0x00200000,
          +.tuner_type= TUNER_PHILIPS_FM1216ME_MK3,
          +.need_tda9887= 1,
          +.gpiomask= 0x820000,
          +.inputs= {{
          +.name = name_tv,
          +.vmux = 1,
          +.amux = LINE2,
          +.tv = 1,
          +.gpio = 0x20000,
          +},{
          +.name = name_svideo,
          +.vmux = 8,
          +.amux = LINE1,
          +.gpio = 0x20000,
          +},{
          +.name = name_comp1,
          .vmux = 3,
          .amux = LINE1,
          +.gpio = 0x20000,
          }},
          -.radio = {
          +.radio= {
          .name = name_radio,
          .amux = LINE2,
          +.gpio = 0x20000,
          },
          +.i2s_rate= 48000,
          +.has_ts= 1,
          +.video_out= CCIR656,
          },
          [SAA7134_BOARD_CINERGY400] = {
          .name = „Terratec Cinergy 400 TV”,
          @@ -283,7 +331,7 @@
          },
          [SAA7134_BOARD_MD5044] = {
          .name = „Medion 5044”,
          -.audio_clock = 0x00200000,
          +.audio_clock = 0x00187de7, // was: 0x00200000,
          .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
          .need_tda9887 = 1,
          .inputs = {{
          @@ -393,11 +441,11 @@
          },
          },
          [SAA7134_BOARD_TYPHOON_90031] = {
          -/* Christian Rothl?nder */
          +/* aka Typhoon „TV+Radio”, Art.Nr 90031 */
          +/* Tom Zoerner */
          .name = „Typhoon TV+Radio 90031”,
          .audio_clock = 0x00200000,
          -//.tuner_type = TUNER_PHILIPS_PAL,
          -.tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
          +.tuner_type = TUNER_PHILIPS_PAL,
          .need_tda9887 = 1,
          .inputs = {{
          .name = name_tv,
          @@ -450,6 +498,11 @@
          .vmux = 8,
          .amux = TV,
          .tv = 1,
          +},{
          +.name = name_tv_mono,
          +.vmux = 8,
          +.amux = LINE2,
          +.tv = 1,
          }},
          },
          [SAA7134_BOARD_ASUSTeK_TVFM7134] = {
          @@ -505,6 +558,45 @@
          .tv = 1,
          }},
          },
          +[SAA7134_BOARD_10MOONSTVMASTER] = {
          +/* „lilicheng” */
          +.name = „10MOONS PCI TV CAPTURE CARD”,
          +.audio_clock = 0x00200000,
          +.tuner_type = TUNER_LG_PAL_NEW_TAPC,
          +.gpiomask = 0xe000,
          +.inputs = {{
          +.name = name_tv,
          +.vmux = 1,
          +.amux = LINE2,
          +.gpio = 0x0000,
          +.tv = 1,
          +},{
          +.name = name_comp1,
          +.vmux = 0,
          +.amux = LINE2,
          +.gpio = 0x4000,
          +},{
          +.name = name_comp2,
          +.vmux = 3,
          +.amux = LINE2,
          +.gpio = 0x4000,
          +},{
          +.name = name_svideo,
          +.vmux = 8,
          +.amux = LINE2,
          +.gpio = 0x4000,
          +}},
          + .radio = {
          + .name = name_radio,
          + .amux = LINE2,
          +.gpio = 0x2000,
          + },
          +.mute = {
          +.name = name_mute,
          + .amux = LINE2,
          +.gpio = 0x8000,
          +},
          +},
          [SAA7134_BOARD_BMK_MPEX_NOTUNER] = {
          /* „Andrew de Quincey” */
          .name= „BMK MPEX No Tuner”,
          @@ -555,13 +647,224 @@
          }},
          },
          [SAA7134_BOARD_CRONOS_PLUS] = {
          +/* gpio pins:
          + 0 .. 3 BASE_ID
          + 4 .. 7 PROTECT_ID
          + 8 .. 11 USER_OUT
          + 12 .. 13 USER_IN
          + 14 .. 15 VIDIN_SEL */
          .name = „Matrox CronosPlus”,
          .tuner_type = TUNER_ABSENT,
          +.gpiomask = 0xcf00,
          + .inputs = {{
          + .name = name_comp1,
          + .vmux = 0,
          +.gpio = 2 */
          +.name = „BMK MPEX Tuner”,
          +.audio_clock = 0x200000,
          +.tuner_type = TUNER_PHILIPS_PAL,
          +.inputs = {{
          +.name = name_comp1,
          +.vmux = 1,
          +.amux = LINE1,
          +},{
          +.name = name_svideo,
          +.vmux = 8,
          +.amux = LINE1,
          +},{
          +.name = name_tv,
          +.vmux = 3,
          +.amux = LINE2,
          +.tv = 1,
          +}},
          +.i2s_rate = 48000,
          +.has_ts = 1,
          +.video_out = CCIR656,
          + },
          + [SAA7134_BOARD_ASUSTEK_TVFM7133] = {
          + .name = „ASUS TV-FM 7133”,
          + .audio_clock = 0x00187de7,
          + .tuner_type = TUNER_PHILIPS_FM1236_MK3,
          + .need_tda9887 = 1,
          + .inputs = {{
          + .name = name_tv,
          + .vmux = 1,
          + .amux = TV,
          + .tv = 1,
          + }},
          + .radio = {
          + .name = name_radio,
          + .amux = LINE1,
          + },
          + },
          +[SAA7134_BOARD_PINNACLE_PCTV_STEREO] = {
          + .name = „Pinnacle PCTV Stereo (saa7134)”,
          + .audio_clock = 0x00187de7,
          + .tuner_type = TUNER_MT2032,
          + .need_tda9887 = 1,
          .inputs = {{
          + .name = name_tv,
          + .vmux = 3,
          + .amux = TV,
          + .tv = 1,
          + },{
          .name = name_comp1,
          .vmux = 0,
          + .amux = LINE2,
          + },{
          + .name = name_comp2,
          + .vmux = 1,
          + .amux = LINE2,
          + },{
          + .name = name_svideo,
          + .vmux = 8,
          + .amux = LINE2,
          }},
          },
          +[SAA7134_BOARD_MANLI_MTV002] = {
          +/* Ognjen Nastic */
          +.name = „Manli MuchTV M-TV002”,
          +.audio_clock = 0x00200000,
          +.tuner_type = TUNER_PHILIPS_PAL,
          +.inputs = {{
          +.name = name_svideo,
          +.vmux = 8,
          +.amux = LINE1,
          +},{
          +.name = name_comp1,
          +.vmux = 1,
          +.amux = LINE1,
          +},{
          +.name = name_tv,
          +.vmux = 3,
          +.amux = LINE2,
          +.tv = 1,
          +}},
          +.radio = {
          +.name = name_radio,
          +.amux = LINE2,
          +},
          +},
          +[SAA7134_BOARD_MANLI_MTV001] = {
          +/* Ognjen Nastic UNTESTED */
          +.name = „Manli MuchTV M-TV001”,
          +.audio_clock = 0x00200000,
          +.tuner_type = TUNER_PHILIPS_PAL,
          +.inputs = {{
          +.name = name_svideo,
          +.vmux = 8,
          +.amux = LINE1,
          +},{
          +.name = name_comp1,
          +.vmux = 1,
          +.amux = LINE1,
          +},{
          +.name = name_tv,
          +.vmux = 3,
          +.amux = LINE2,
          +.tv = 1,
          +}},
          + },
          +[SAA7134_BOARD_TG3000TV] = {
          +/* TransGear 3000TV */
          +.name = „Nagase Sangyo TransGear 3000TV”,
          +.audio_clock = 0x00187de7,
          +.tuner_type = TUNER_PHILIPS_NTSC_M,
          +.inputs = {{
          +.name = name_tv,
          +.vmux = 1,
          +.amux = LINE2,
          +.tv = 1,
          +},{
          +.name = name_comp1,
          +.vmux = 3,
          +.amux = LINE2,
          +},{
          +.name = name_svideo,
          +.vmux = 8,
          +.amux = LINE2,
          +}},
          +},
          + [SAA7134_BOARD_ECS_TVP3XP] = {
          + .name = „Elitegroup ECS TVP3XP FM1216 Tuner Card”,
          + .audio_clock = 0x187de7, // xtal 32.1 MHz
          + .tuner_type = TUNER_PHILIPS_PAL,
          + .inputs = {{
          + .name = name_tv,
          + .vmux = 1,
          + .amux = TV,
          + .tv = 1,
          + },{
          + .name = name_tv_mono,
          + .vmux = 1,
          + .amux = LINE2,
          + .tv = 1,
          + },{
          + .name = name_comp1,
          + .vmux = 3,
          + .amux = LINE1,
          + },{
          + .name = name_svideo,
          + .vmux = 8,
          + .amux = LINE1,
          +},{
          +.name = „CVid over SVid”,
          +.vmux = 0,
          +.amux = LINE1,
          +}},
          + .radio = {
          + .name = name_radio,
          + .amux = LINE2,
          + },
          + },
          };
          const unsigned int saa7134_bcount = ARRAY_SIZE(saa7134_boards);

          @@ -613,6 +916,12 @@
          .driver_data = SAA7134_BOARD_FLYVIDEO3000,
          },{
          .vendor = PCI_VENDOR_ID_PHILIPS,
          + .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
          + .subvendor = 0x4e42,//”Typhoon PCI Capture TV Card” Art.No. 50673
          + .subdevice = 0x0138,
          + .driver_data = SAA7134_BOARD_FLYVIDEO3000,
          + },{
          +.vendor = PCI_VENDOR_ID_PHILIPS,
          .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
          .subvendor = 0x5168,
          .subdevice = 0x0138,
          @@ -648,11 +957,35 @@
          .subdevice = 0x4830,
          .driver_data = SAA7134_BOARD_ASUSTeK_TVFM7134,
          },{
          + .vendor = PCI_VENDOR_ID_PHILIPS,
          + .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
          + .subvendor = PCI_VENDOR_ID_ASUSTEK,
          + .subdevice = 0x4843,
          + .driver_data = SAA7134_BOARD_ASUSTEK_TVFM7133,
          +},{
          + .vendor = PCI_VENDOR_ID_PHILIPS,
          + .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
          + .subvendor = PCI_VENDOR_ID_ASUSTEK,
          + .subdevice = 0x4840,
          + .driver_data = SAA7134_BOARD_ASUSTeK_TVFM7134,
          + },{
          .vendor = PCI_VENDOR_ID_PHILIPS,
          .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
          .subvendor = PCI_VENDOR_ID_PHILIPS,
          .subdevice = 0xfe01,
          -.driver_data = SAA7134_BOARD_TYPHOON_90031,
          +.driver_data = SAA7134_BOARD_TVSTATION_RDS,
          +},{
          +.vendor = PCI_VENDOR_ID_PHILIPS,
          +.device = PCI_DEVICE_ID_PHILIPS_SAA7134,
          +.subvendor = 0x1894,
          +.subdevice = 0xfe01,
          +.driver_data = SAA7134_BOARD_TVSTATION_RDS,
          +},{
          +.vendor = PCI_VENDOR_ID_PHILIPS,
          +.device = PCI_DEVICE_ID_PHILIPS_SAA7134,
          +.subvendor = 0x1894,
          +.subdevice = 0xa006,
          +.driver_data = SAA7134_BOARD_TVSTATION_DVR,
          },{
          .vendor = PCI_VENDOR_ID_PHILIPS,
          .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
          @@ -661,6 +994,12 @@
          .driver_data = SAA7134_BOARD_VA1000POWER,
          },{
          .vendor = PCI_VENDOR_ID_PHILIPS,
          +.device = PCI_DEVICE_ID_PHILIPS_SAA7130,
          + .subvendor = PCI_VENDOR_ID_PHILIPS,
          + .subdevice = 0x2001,
          +.driver_data = SAA7134_BOARD_10MOONSTVMASTER,
          + },{
          +.vendor = PCI_VENDOR_ID_PHILIPS,
          .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
          .subvendor = 0x185b,
          .subdevice = 0xc100,
          @@ -672,6 +1011,38 @@
          .subdevice = 0x48d0,
          .driver_data = SAA7134_BOARD_CRONOS_PLUS,
          },{
          +.vendor = PCI_VENDOR_ID_PHILIPS,
          +.device = PCI_DEVICE_ID_PHILIPS_SAA7134,
          + .subvendor = 0x1461, /* Avermedia Technologies Inc */
          + .subdevice = 0xa70b,
          +.driver_data = SAA7134_BOARD_MD2819,
          +},{
          +/* AverMedia Studio 305, using AverMedia M156 entry for now */
          +.vendor = PCI_VENDOR_ID_PHILIPS,
          +.device = PCI_DEVICE_ID_PHILIPS_SAA7134,
          + .subvendor = 0x1461, /* Avermedia Technologies Inc */
          + .subdevice = 0x2115,
          +.driver_data = SAA7134_BOARD_MD2819,
          + },{
          +/* TransGear 3000TV */
          +.vendor = PCI_VENDOR_ID_PHILIPS,
          +.device = PCI_DEVICE_ID_PHILIPS_SAA7130,
          + .subvendor = 0x1461, /* Avermedia Technologies Inc */
          + .subdevice = 0x050c,
          +.driver_data = SAA7134_BOARD_TG3000TV,
          +},{
          + .vendor = PCI_VENDOR_ID_PHILIPS,
          + .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
          + .subvendor = 0x11bd,
          + .subdevice = 0x002b,
          + .driver_data = SAA7134_BOARD_PINNACLE_PCTV_STEREO,
          + },{
          + .vendor = PCI_VENDOR_ID_PHILIPS,
          + .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
          + .subvendor = 0x1019,
          + .subdevice = 0x4cb4,
          + .driver_data = SAA7134_BOARD_ECS_TVP3XP,
          + },{

          /* — boards without eeprom + subsystem ID — */
          .vendor = PCI_VENDOR_ID_PHILIPS,
          @@ -777,6 +1148,7 @@
          dev->has_remote = 1;
          break;
          case SAA7134_BOARD_CINERGY400:
          +case SAA7134_BOARD_CINERGY600:
          dev->has_remote = 1;
          break;
          }
          diff -u linux-2.6.1/drivers/media/video/saa7134/saa7134-core.c linux/drivers/media/video/saa7134/saa7134-core.c
          — linux-2.6.1/drivers/media/video/saa7134/saa7134-core.c2004-01-14 15:05:28.000000000 +0100
          +++ linux/drivers/media/video/saa7134/saa7134-core.c2004-01-14 15:09:36.000000000 +0100
          @@ -599,12 +599,10 @@
          if ((report & SAA7134_IRQ_REPORT_DONE_RA3))
          saa7134_irq_oss_done(dev,status);

          -#ifdef CONFIG_VIDEO_IR
          if ((report & (SAA7134_IRQ_REPORT_GPIO16 |
          SAA7134_IRQ_REPORT_GPIO18)) &&
          dev->remote)
          saa7134_input_irq(dev);
          -#endif

          };
          if (10 == loop) {
          @@ -636,9 +634,7 @@
          saa7134_vbi_init1(dev);
          if (card_has_ts(dev))
          saa7134_ts_init1(dev);
          -#ifdef CONFIG_VIDEO_IR
          saa7134_input_init1(dev);
          -#endif

          switch (dev->pci->device) {
          case PCI_DEVICE_ID_PHILIPS_SAA7134:
          @@ -714,9 +710,7 @@
          }
          if (card_has_ts(dev))
          saa7134_ts_fini(dev);
          -#ifdef CONFIG_VIDEO_IR
          saa7134_input_fini(dev);
          -#endif
          saa7134_vbi_fini(dev);
          saa7134_video_fini(dev);
          saa7134_tvaudio_fini(dev);
          @@ -907,7 +901,7 @@
          }

          /* wait a bit, register i2c bus */
          -current->state = TASK_INTERRUPTIBLE;
          +set_current_state(TASK_INTERRUPTIBLE);
          schedule_timeout(HZ/10);
          saa7134_i2c_register(dev);

          @@ -922,6 +916,10 @@
          if (card_has_ts(dev))
          request_module(„saa6752hs”);

          +#ifdef VIDIOC_G_PRIORITY
          +v4l2_prio_init(&dev->prio);
          +#endif
          +
          /* register v4l devices */
          dev->video_dev = vdev_init(dev,&saa7134_video_template,”video”);
          err = video_register_device(dev->video_dev,VFL_TYPE_GRABBER,
          @@ -1041,18 +1039,7 @@
          saa_writel(SAA7134_MAIN_CTRL,0);

          /* shutdown subsystems */
          -switch (dev->pci->device) {
          -case PCI_DEVICE_ID_PHILIPS_SAA7134:
          -case PCI_DEVICE_ID_PHILIPS_SAA7133:
          -case PCI_DEVICE_ID_PHILIPS_SAA7135:
          -saa7134_oss_fini(dev);
          -break;
          -}
          -if (card_has_ts(dev))
          -saa7134_ts_fini(dev);
          -saa7134_vbi_fini(dev);
          -saa7134_video_fini(dev);
          -saa7134_tvaudio_fini(dev);
          +saa7134_hwfini(dev);

          /* unregister */
          saa7134_i2c_unregister(dev);
          @@ -1099,6 +1086,10 @@
          (SAA7134_VERSION_CODE >> 16) & 0xff,
          (SAA7134_VERSION_CODE >> 8) & 0xff,
          SAA7134_VERSION_CODE & 0xff);
          +#ifdef SNAPSHOT
          +printk(KERN_INFO „saa7130/34: snapshot date %04d-%02d-%02dn”,
          + SNAPSHOT/10000, (SNAPSHOT/100)%100, SNAPSHOT%100);
          +#endif
          return pci_module_init(&saa7134_pci_driver);
          }

          diff -u linux-2.6.1/drivers/media/video/saa7134/saa7134-input.c linux/drivers/media/video/saa7134/saa7134-input.c
          — linux-2.6.1/drivers/media/video/saa7134/saa7134-input.c2004-01-14 15:09:36.000000000 +0100
          +++ linux/drivers/media/video/saa7134/saa7134-input.c2004-01-14 15:09:36.000000000 +0100
          @@ -0,0 +1,218 @@
          +/*
          + * This program is free software; you can redistribute it and/or modify
          + * it under the terms of the GNU General Public License as published by
          + * the Free Software Foundation; either version 2 of the License, or
          + * (at your option) any later version.
          + *
          + * This program is distributed in the hope that it will be useful,
          + * but WITHOUT ANY WARRANTY; without even the implied warranty of
          + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
          + * GNU General Public License for more details.
          + *
          + * You should have received a copy of the GNU General Public License
          + * along with this program; if not, write to the Free Software
          + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
          + *
          + * Should you need to contact me, the author, you can do so either by
          + * e-mail – mail your message to , or by paper mail:
          + * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
          + */
          +
          +#include
          +#include
          +#include
          +#include
          +#include
          +#include
          +
          +#include „saa7134-reg.h”
          +#include „saa7134.h”
          +
          +/*


          */
          +
          +static IR_KEYTAB_TYPE flyvideo_codes[IR_KEYTAB_SIZE] = {
          +[ 15 ] = KEY_KP0,
          +[ 3 ] = KEY_KP1,
          +[ 4 ] = KEY_KP2,
          +[ 5 ] = KEY_KP3,
          +[ 7 ] = KEY_KP4,
          +[ 8 ] = KEY_KP5,
          +[ 9 ] = KEY_KP6,
          +[ 11 ] = KEY_KP7,
          +[ 12 ] = KEY_KP8,
          +[ 13 ] = KEY_KP9,
          +
          +[ 14 ] = KEY_TUNER, // Air/Cable
          +[ 17 ] = KEY_VIDEO, // Video
          +[ 21 ] = KEY_AUDIO, // Audio
          +[ 0 ] = KEY_POWER, // Pover
          +[ 2 ] = KEY_ZOOM, // Fullscreen
          +[ 27 ] = KEY_MUTE, // Mute
          +[ 20 ] = KEY_VOLUMEUP,
          +[ 23 ] = KEY_VOLUMEDOWN,
          +[ 18 ] = KEY_CHANNELUP, // Channel +
          +[ 19 ] = KEY_CHANNELDOWN, // Channel –
          +[ 6 ] = KEY_AGAIN, // Recal
          +[ 16 ] = KEY_KPENTER, // Enter
          +
          +#if 1 /* FIXME */
          +[ 26 ] = KEY_F22, // Stereo
          +[ 24 ] = KEY_EDIT, // AV Source
          +#endif
          +};
          +
          +static IR_KEYTAB_TYPE cinergy_codes[IR_KEYTAB_SIZE] = {
          +[ 0 ] = KEY_KP0,
          +[ 1 ] = KEY_KP1,
          +[ 2 ] = KEY_KP2,
          +[ 3 ] = KEY_KP3,
          +[ 4 ] = KEY_KP4,
          +[ 5 ] = KEY_KP5,
          +[ 6 ] = KEY_KP6,
          +[ 7 ] = KEY_KP7,
          +[ 8 ] = KEY_KP8,
          +[ 9 ] = KEY_KP9,
          +
          +[ 0x0a ] = KEY_POWER,
          +[ 0x0b ] = KEY_PROG1, // app
          +[ 0x0c ] = KEY_ZOOM, // zoom/fullscreen
          +[ 0x0d ] = KEY_CHANNELUP, // channel
          +[ 0x0e ] = KEY_CHANNELDOWN, // channel-
          +[ 0x0f ] = KEY_VOLUMEUP,
          +[ 0x10 ] = KEY_VOLUMEDOWN,
          +[ 0x11 ] = KEY_TUNER, // AV
          +[ 0x12 ] = KEY_NUMLOCK, // -/–
          +[ 0x13 ] = KEY_AUDIO, // audio
          +[ 0x14 ] = KEY_MUTE,
          +[ 0x15 ] = KEY_UP,
          +[ 0x16 ] = KEY_DOWN,
          +[ 0x17 ] = KEY_LEFT,
          +[ 0x18 ] = KEY_RIGHT,
          +[ 0x19 ] = BTN_LEFT,
          +[ 0x1a ] = BTN_RIGHT,
          +[ 0x1b ] = KEY_WWW, // text
          +[ 0x1c ] = KEY_REWIND,
          +[ 0x1d ] = KEY_FORWARD,
          +[ 0x1e ] = KEY_RECORD,
          +[ 0x1f ] = KEY_PLAY,
          +[ 0x20 ] = KEY_PREVIOUSSONG,
          +[ 0x21 ] = KEY_NEXTSONG,
          +[ 0x22 ] = KEY_PAUSE,
          +[ 0x23 ] = KEY_STOP,
          +};
          +
          +/*


          */
          +
          +static int build_key(struct saa7134_dev *dev)
          +{
          +struct saa7134_ir *ir = dev->remote;
          +u32 gpio, data;
          +
          +/* rising SAA7134_GPIO_GPRESCAN reads the status */
          +saa_clearb(SAA7134_GPIO_GPMODE3,SAA7134_GPIO_GPRESCAN);
          +saa_setb(SAA7134_GPIO_GPMODE3,SAA7134_GPIO_GPRESCAN);
          +gpio = saa_readl(SAA7134_GPIO_GPSTATUS0 >> 2);
          +data = ir_extract_bits(gpio, ir->mask_keycode);
          +
          +printk(„%s: build_key gpio=0x%x mask=0x%x data=%dn”,
          + dev->name, gpio, ir->mask_keycode, data);
          +
          +if ((ir->mask_keydown && (0 != (gpio & ir->mask_keydown))) ||
          + (ir->mask_keyup && (0 == (gpio & ir->mask_keyup)))) {
          +ir_input_keydown(&ir->dev,&ir->ir,data,data);
          +} else {
          +ir_input_nokey(&ir->dev,&ir->ir);
          +}
          +return 0;
          +}
          +
          +/*


          */
          +
          +void saa7134_input_irq(struct saa7134_dev *dev)
          +{
          +build_key(dev);
          +}
          +
          +int saa7134_input_init1(struct saa7134_dev *dev)
          +{
          +struct saa7134_ir *ir;
          +IR_KEYTAB_TYPE *ir_codes = NULL;
          +u32 mask_keycode = 0;
          +u32 mask_keydown = 0;
          +u32 mask_keyup = 0;
          +int ir_type = IR_TYPE_OTHER;
          +
          +/* detect & configure */
          +if (!dev->has_remote)
          +return -ENODEV;
          +switch (dev->board) {
          +case SAA7134_BOARD_FLYVIDEO2000:
          +case SAA7134_BOARD_FLYVIDEO3000:
          +ir_codes = flyvideo_codes;
          +mask_keycode = 0xEC00000;
          +mask_keydown = 0x0040000;
          +break;
          +case SAA7134_BOARD_CINERGY400:
          +case SAA7134_BOARD_CINERGY600:
          +ir_codes = cinergy_codes;
          +mask_keycode = 0x00003f;
          +mask_keyup = 0x040000;
          +break;
          +}
          +if (NULL == ir_codes) {
          +printk(„%s: Oops: IR config error [card=%d]n”,
          + dev->name, dev->board);
          +return -ENODEV;
          +}
          +
          +ir = kmalloc(sizeof(*ir),GFP_KERNEL);
          +if (NULL == ir)
          +return -ENOMEM;
          +memset(ir,0,sizeof(*ir));
          +
          +/* init hardware-specific stuff */
          +ir->mask_keycode = mask_keycode;
          +ir->mask_keydown = mask_keydown;
          +ir->mask_keyup = mask_keyup;
          +
          +/* init input device */
          +snprintf(ir->name, sizeof(ir->name), „saa7134 IR (%s)”,
          + saa7134_boards[dev->board].name);
          +snprintf(ir->phys, sizeof(ir->phys), „pci-%s/ir0”,
          + pci_name(dev->pci));
          +
          +ir_input_init(&ir->dev, &ir->ir, ir_type, ir_codes);
          +ir->dev.name = ir->name;
          +ir->dev.phys = ir->phys;
          +ir->dev.id.bustype = BUS_PCI;
          +ir->dev.id.version = 1;
          +if (dev->pci->subsystem_vendor) {
          +ir->dev.id.vendor = dev->pci->subsystem_vendor;
          +ir->dev.id.product = dev->pci->subsystem_device;
          +} else {
          +ir->dev.id.vendor = dev->pci->vendor;
          +ir->dev.id.product = dev->pci->device;
          +}
          +
          +/* all done */
          +dev->remote = ir;
          +input_register_device(&dev->remote->dev);
          +printk(„%s: registered input device for IRn”,dev->name);
          +return 0;
          +}
          +
          +void saa7134_input_fini(struct saa7134_dev *dev)
          +{
          +if (NULL == dev->remote)
          +return;
          +
          +input_unregister_device(&dev->remote->dev);
          +kfree(dev->remote);
          +dev->remote = NULL;
          +}
          +
          +/*


          + * Local variables:
          + * c-basic-offset: 8
          + * End:
          + */
          diff -u linux-2.6.1/drivers/media/video/saa7134/saa7134-oss.c linux/drivers/media/video/saa7134/saa7134-oss.c
          — linux-2.6.1/drivers/media/video/saa7134/saa7134-oss.c2004-01-14 15:05:43.000000000 +0100
          +++ linux/drivers/media/video/saa7134/saa7134-oss.c2004-01-14 15:09:36.000000000 +0100
          @@ -40,7 +40,7 @@
          MODULE_PARM_DESC(oss_rate,”sample rate (valid are: 32000,48000)”);

          #define dprintk(fmt, arg…)if (oss_debug)
          -printk(KERN_DEBUG „%s/oss: ” fmt, dev->name, ## arg)
          +printk(KERN_DEBUG „%s/oss: ” fmt, dev->name , ## arg)

          /*


          */

          @@ -295,8 +295,10 @@
          break;
          }
          up(&dev->oss.lock);
          -current->state = TASK_INTERRUPTIBLE;
          -schedule();
          +set_current_state(TASK_INTERRUPTIBLE);
          +if (0 == dev->oss.read_count)
          +schedule();
          +set_current_state(TASK_RUNNING);
          down(&dev->oss.lock);
          if (signal_pending(current)) {
          if (0 == ret)
          @@ -328,7 +330,6 @@
          }
          up(&dev->oss.lock);
          remove_wait_queue(&dev->oss.wq, &wait);
          -current->state = TASK_RUNNING;
          return ret;
          }

          @@ -777,7 +778,7 @@

          spin_lock(&dev->slock);
          if (UNSET == dev->oss.dma_blk) {
          -dprintk(„irq: recording stopped%sn”,””);
          +dprintk(„irq: recording stoppedn”);
          goto done;
          }
          if (0 != (status & 0x0f000000))
          diff -u linux-2.6.1/drivers/media/video/saa7134/saa7134-ts.c linux/drivers/media/video/saa7134/saa7134-ts.c
          — linux-2.6.1/drivers/media/video/saa7134/saa7134-ts.c2004-01-14 15:05:00.000000000 +0100
          +++ linux/drivers/media/video/saa7134/saa7134-ts.c2004-01-14 15:09:36.000000000 +0100
          @@ -45,7 +45,7 @@
          #define TS_NR_PACKETS 312

          #define dprintk(fmt, arg…)if (ts_debug)
          -printk(KERN_DEBUG „%s/ts: ” fmt, dev->name, ## arg)
          +printk(KERN_DEBUG „%s/ts: ” fmt, dev->name , ## arg)

          /*


          */

          @@ -173,7 +173,7 @@
          saa_writeb(SAA7134_SPECIAL_MODE, 0x00);
          mdelay(10);
          saa_writeb(SAA7134_SPECIAL_MODE, 0x01);
          – current->state = TASK_INTERRUPTIBLE;
          + set_current_state(TASK_INTERRUPTIBLE);
          schedule_timeout(HZ/10);
          }

          @@ -196,7 +196,7 @@

          list_for_each(list,&saa7134_devlist) {
          h = list_entry(list, struct saa7134_dev, devlist);
          -if (h->ts_dev->minor == minor)
          +if (h->ts_dev && h->ts_dev->minor == minor)
          dev = h;
          }
          if (NULL == dev)
          diff -u linux-2.6.1/drivers/media/video/saa7134/saa7134-tvaudio.c linux/drivers/media/video/saa7134/saa7134-tvaudio.c
          — linux-2.6.1/drivers/media/video/saa7134/saa7134-tvaudio.c2004-01-14 15:04:59.000000000 +0100
          +++ linux/drivers/media/video/saa7134/saa7134-tvaudio.c2004-01-14 15:09:36.000000000 +0100
          @@ -41,8 +41,16 @@
          MODULE_PARM(audio_carrier,”i”);
          MODULE_PARM_DESC(audio_carrier,”audio carrier location”);

          +static unsigned int audio_ddep = 0;
          +MODULE_PARM(audio_ddep,”i”);
          +MODULE_PARM_DESC(audio_ddep,”audio ddep overwrite”);
          +
          +static int audio_clock_tweak = 0;
          +MODULE_PARM(audio_clock_tweak, „i”);
          +MODULE_PARM_DESC(audio_clock_tweak, „Audio clock tick fine tuning for cards with audio crystal that’s slightly off (range [-1024 .. 1024])”);
          +
          #define dprintk(fmt, arg…)if (audio_debug)
          -printk(KERN_DEBUG „%s/audio: ” fmt, dev->name, ## arg)
          +printk(KERN_DEBUG „%s/audio: ” fmt, dev->name , ## arg)
          #define d2printk(fmt, arg…)if (audio_debug > 1)
          printk(KERN_DEBUG „%s/audio: ” fmt, dev->name, ## arg)

          @@ -50,7 +58,7 @@
          dev->name,(SAA7134_##reg),(#reg),saa_readb((SAA7134_##reg)))

          #define SCAN_INITIAL_DELAY (HZ)
          -#define SCAN_SAMPLE_DELAY (HZ/10)
          +#define SCAN_SAMPLE_DELAY (HZ/5)

          /*


          */
          /* saa7134 code */
          @@ -186,8 +194,11 @@
          in = &card(dev).mute;
          }
          if (dev->hw_mute == mute &&
          – dev->hw_input == in)
          + dev->hw_input == in) {
          +dprintk(„mute/input: nothing to do [mute=%d,input=%s]n”,
          +mute,in->name);
          return;
          +}

          dprintk(„ctl_mute=%d automute=%d input=%s => mute=%d input=%sn”,
          dev->ctl_mute,dev->automute,dev->input->name,mute,in->name);
          @@ -221,21 +232,27 @@
          struct saa7134_tvaudio *audio,
          char *note)
          {
          -if (note)
          -dprintk(„tvaudio_setmode: %s %s [%d.%03d/%d.%03d MHz]n”,
          -note,audio->name,
          -audio->carr1 / 1000, audio->carr1 % 1000,
          -audio->carr2 / 1000, audio->carr2 % 1000);
          +int acpf, tweak = 0;

          if (dev->tvnorm->id == V4L2_STD_NTSC) {
          -saa_writeb(SAA7134_AUDIO_CLOCKS_PER_FIELD0, 0xde);
          -saa_writeb(SAA7134_AUDIO_CLOCKS_PER_FIELD1, 0x15);
          -saa_writeb(SAA7134_AUDIO_CLOCKS_PER_FIELD2, 0x02);
          +acpf = 0x19066;
          } else {
          -saa_writeb(SAA7134_AUDIO_CLOCKS_PER_FIELD0, 0x00);
          -saa_writeb(SAA7134_AUDIO_CLOCKS_PER_FIELD1, 0x80);
          -saa_writeb(SAA7134_AUDIO_CLOCKS_PER_FIELD2, 0x02);
          +acpf = 0x1e000;
          }
          +if (audio_clock_tweak > -1024 && audio_clock_tweak name,
          +audio->carr1 / 1000, audio->carr1 % 1000,
          +audio->carr2 / 1000, audio->carr2 % 1000,
          +acpf, tweak);
          +
          +acpf += tweak;
          +saa_writeb(SAA7134_AUDIO_CLOCKS_PER_FIELD0, (acpf & 0x0000ff) >> 0);
          +saa_writeb(SAA7134_AUDIO_CLOCKS_PER_FIELD1, (acpf & 0x00ff00) >> 8);
          +saa_writeb(SAA7134_AUDIO_CLOCKS_PER_FIELD2, (acpf & 0x030000) >> 16);
          tvaudio_setcarrier(dev,audio->carr1,audio->carr2);

          switch (audio->mode) {
          @@ -259,18 +276,19 @@
          saa_writeb(SAA7134_DCXO_IDENT_CTRL, 0x00);
          saa_writeb(SAA7134_FM_DEEMPHASIS, 0x44);
          saa_writeb(SAA7134_STEREO_DAC_OUTPUT_SELECT, 0xa1);
          +saa_writeb(SAA7134_NICAM_CONFIG, 0x00);
          break;
          case TVAUDIO_NICAM_AM:
          saa_writeb(SAA7134_DEMODULATOR, 0x12);
          saa_writeb(SAA7134_DCXO_IDENT_CTRL, 0x00);
          saa_writeb(SAA7134_FM_DEEMPHASIS, 0x44);
          saa_writeb(SAA7134_STEREO_DAC_OUTPUT_SELECT, 0xa1);
          +saa_writeb(SAA7134_NICAM_CONFIG, 0x00);
          break;
          case TVAUDIO_FM_SAT_STEREO:
          /* not implemented (yet) */
          break;
          }
          -saa_writel(0x174 >> 2, 0x0001e000); /* FIXME */
          }

          static int tvaudio_sleep(struct saa7134_dev *dev, int timeout)
          @@ -278,7 +296,7 @@
          DECLARE_WAITQUEUE(wait, current);

          add_wait_queue(&dev->thread.wq, &wait);
          -current->state = TASK_INTERRUPTIBLE;
          +set_current_state(TASK_INTERRUPTIBLE);
          schedule_timeout(timeout);
          remove_wait_queue(&dev->thread.wq, &wait);
          return dev->thread.scan1 != dev->thread.scan2;
          @@ -437,7 +455,7 @@
          const int *carr_scan;
          int carr_vals[4];
          unsigned int i, audio;
          -int max1,max2,carrier,rx,mode;
          +int max1,max2,carrier,rx,mode,lastmode;

          lock_kernel();
          daemonize(„%s”, dev->name);
          @@ -535,7 +553,7 @@
          if (UNSET == audio)
          audio = i;
          tvaudio_setmode(dev,&tvaudio,”trying”);
          -if (tvaudio_sleep(dev,HZ))
          +if (tvaudio_sleep(dev,HZ*2))
          goto restart;
          if (-1 != tvaudio_getstereo(dev,&tvaudio
          )) {
          audio = i;
          @@ -549,8 +567,9 @@
          tvaudio_setstereo(dev,&tvaudio[audio],V4L2_TUNER_MODE_MONO);
          dev->tvaudio = &tvaudio[audio];

          +lastmode = 42;
          for (;;) {
          -if (tvaudio_sleep(dev,3*HZ))
          +if (tvaudio_sleep(dev,5*HZ))
          goto restart;
          if (dev->thread.exit || signal_pending(current))
          break;
          @@ -560,7 +579,10 @@
          } else {
          mode = dev->thread.mode;
          }
          -tvaudio_setstereo(dev,&tvaudio[audio],mode);
          +if (lastmode != mode) {
          +tvaudio_setstereo(dev,&tvaudio[audio],mode);
          +lastmode = mode;
          +}
          }
          }

          @@ -602,8 +624,8 @@
          [0x1f] = „??? [in progress]”,
          };

          -#define DSP_RETRY 30
          -#define DSP_DELAY 10
          +#define DSP_RETRY 32
          +#define DSP_DELAY 16

          static inline int saa_dsp_wait_bit(struct saa7134_dev *dev, int bit)
          {
          @@ -721,15 +743,34 @@
          dev->thread.scan1 = dev->thread.scan2;
          dprintk(„tvaudio thread scan start [%d]n”,dev->thread.scan1);

          -norms = 0;
          -if (dev->tvnorm->id & V4L2_STD_PAL)
          -norms |= 0x2c; /* B/G + D/K + I */
          -if (dev->tvnorm->id & V4L2_STD_NTSC)
          -norms |= 0x40; /* M */
          -if (dev->tvnorm->id & V4L2_STD_SECAM)
          -norms |= 0x18; /* L + D/K */
          -if (0 == norms)
          -norms = 0x0000007c;
          +if (audio_ddep >= 0x04 && audio_ddep tvnorm->id & V4L2_STD_PAL) {
          +dprintk(„PAL scann”);
          +norms |= 0x2c; /* B/G + D/K + I */
          +}
          +if (dev->tvnorm->id & V4L2_STD_NTSC) {
          +dprintk(„NTSC scann”);
          +norms |= 0x40; /* M */
          +}
          +if (dev->tvnorm->id & V4L2_STD_SECAM) {
          +dprintk(„SECAM scann”);
          +norms |= 0x18; /* L + D/K */
          +}
          +if (0 == norms)
          +norms = 0x7c; /* all */
          +dprintk(„scanning:%s%s%s%s%sn”,
          +(norms & 0x04) ? ” B/G” : „”,
          +(norms & 0x08) ? ” D/K” : „”,
          +(norms & 0x10) ? ” L/L'” : „”,
          +(norms & 0x20) ? ” I” : „”,
          +(norms & 0x40) ? ” M” : „”);
          +}

          /* quick & dirty — to be fixed up later … */
          saa_dsp_writel(dev, 0x454 >> 2, 0);
          @@ -856,17 +897,12 @@

          /* enable I2S audio output */
          if (saa7134_boards[dev->board].i2s_rate) {
          -int rate = (32000 == saa7134_boards[dev->board].i2s_rate)
          -? 0x01 : 0x03;
          +int i2sform = (32000 == saa7134_boards[dev->board].i2s_rate) ? 0x00 : 0x01;

          -/* set rate */
          -saa_andorb(SAA7134_SIF_SAMPLE_FREQ, 0x03, rate);

          /* enable I2S output */
          -saa_writeb(SAA7134_DSP_OUTPUT_SELECT, 0x80);
          -saa_writeb(SAA7134_I2S_OUTPUT_SELECT, 0x80);
          -saa_writeb(SAA7134_I2S_OUTPUT_FORMAT, 0x01);
          -saa_writeb(SAA7134_I2S_OUTPUT_LEVEL, 0x00);
          +saa_writeb(SAA7134_I2S_OUTPUT_SELECT, 0x80);
          +saa_writeb(SAA7134_I2S_OUTPUT_FORMAT, i2sform);
          +saa_writeb(SAA7134_I2S_OUTPUT_LEVEL, 0x0F);
          saa_writeb(SAA7134_I2S_AUDIO_OUTPUT, 0x01);
          }

          diff -u linux-2.6.1/drivers/media/video/saa7134/saa7134-vbi.c linux/drivers/media/video/saa7134/saa7134-vbi.c
          — linux-2.6.1/drivers/media/video/saa7134/saa7134-vbi.c2004-01-14 15:06:47.000000000 +0100
          +++ linux/drivers/media/video/saa7134/saa7134-vbi.c2004-01-14 15:09:36.000000000 +0100
          @@ -39,7 +39,7 @@
          MODULE_PARM_DESC(vbibufs,”number of vbi buffers, range 2-32″);

          #define dprintk(fmt, arg…)if (vbi_debug)
          -printk(KERN_DEBUG „%s/vbi: ” fmt, dev->name, ## arg)
          +printk(KERN_DEBUG „%s/vbi: ” fmt, dev->name , ## arg)

          /*


          */

          diff -u linux-2.6.1/drivers/media/video/saa7134/saa7134-video.c linux/drivers/media/video/saa7134/saa7134-video.c
          — linux-2.6.1/drivers/media/video/saa7134/saa7134-video.c2004-01-14 15:05:02.000000000 +0100
          +++ linux/drivers/media/video/saa7134/saa7134-video.c2004-01-14 15:09:36.000000000 +0100
          @@ -40,7 +40,7 @@
          MODULE_PARM_DESC(gbuffers,”number of capture buffers, range 2-32″);

          #define dprintk(fmt, arg…)if (video_debug)
          -printk(KERN_DEBUG „%s/video: ” fmt, dev->name, ## arg)
          +printk(KERN_DEBUG „%s/video: ” fmt, dev->name , ## arg)

          /*


          */
          /* data structs for video */
          @@ -83,6 +83,12 @@
          .depth = 24,
          .pm = 0x11,
          },{
          +.name = „24 bpp RGB, be”,
          +.fourcc = V4L2_PIX_FMT_RGB24,
          +.depth = 24,
          +.pm = 0x11,
          +.bswap = 1,
          +},{
          .name = „32 bpp RGB, le”,
          .fourcc = V4L2_PIX_FMT_BGR32,
          .depth = 32,
          @@ -125,6 +131,16 @@
          .planar = 1,
          .hshift = 1,
          .vshift = 1,
          +},{
          +.name = „4:2:0 planar, Y-Cb-Cr”,
          +.fourcc = V4L2_PIX_FMT_YVU420,
          +.depth = 12,
          +.pm = 0x0a,
          +.yuv = 1,
          +.planar = 1,
          +.uvswap = 1,
          +.hshift = 1,
          +.vshift = 1,
          }
          };
          #define FORMATS ARRAY_SIZE(formats)
          @@ -788,7 +804,7 @@
          struct saa7134_buf *next)
          {
          unsigned long base,control,bpl;
          -unsigned long bpl_uv,lines_uv,base2,base3; /* planar */
          +unsigned long bpl_uv,lines_uv,base2,base3,tmp; /* planar */

          dprintk(„buffer_activate buf=%pn”,buf);
          buf->vb.state = STATE_ACTIVE;
          @@ -834,6 +850,8 @@
          lines_uv = buf->vb.height >> buf->fmt->vshift;
          base2 = base + bpl * buf->vb.height;
          base3 = base2 + bpl_uv * lines_uv;
          +if (buf->fmt->uvswap)
          +tmp = base2, base2 = base3, base3 = tmp;
          dprintk(„uv: bpl=%ld lines=%ld base2/3=%ld/%ldn”,
          bpl_uv,lines_uv,base2,base3);
          if (V4L2_FIELD_HAS_BOTH(buf->vb.field)) {
          @@ -1160,6 +1178,9 @@
          fh->fmt = format_by_fourcc(V4L2_PIX_FMT_BGR24);
          fh->width = 768;
          fh->height = 576;
          +#ifdef VIDIOC_G_PRIORITY
          +v4l2_prio_open(&dev->prio,&fh->prio);
          +#endif

          videobuf_queue_init(&fh->cap, &video_qops,
          dev->pci, &dev->slock,
          @@ -1268,7 +1289,7 @@

          /* stop video capture */
          if (res_check(fh, RESOURCE_VIDEO)) {
          -videobuf_queue_cancel(file,&fh->cap);
          +videobuf_streamoff(file,&fh->cap);
          res_free(dev,fh,RESOURCE_VIDEO);
          }
          if (fh->cap.read_buf) {
          @@ -1287,7 +1308,10 @@

          saa7134_pgtable_free(dev->pci,&fh->pt_cap);
          saa7134_pgtable_free(dev->pci,&fh->pt_vbi);

          +
          +#ifdef VIDIOC_G_PRIORITY
          +v4l2_prio_close(&dev->prio,&fh->prio);
          +#endif
          file->private_data = NULL;
          kfree(fh);
          return 0;
          @@ -1568,6 +1592,20 @@

          if (video_debug > 1)
          saa7134_print_ioctl(dev->name,cmd);
          +
          +#ifdef VIDIOC_G_PRIORITY
          +switch (cmd) {
          +case VIDIOC_S_CTRL:
          +case VIDIOC_S_STD:
          +case VIDIOC_S_INPUT:
          +case VIDIOC_S_TUNER:
          +case VIDIOC_S_FREQUENCY:
          +err = v4l2_prio_check(&dev->prio,&fh->prio);
          +if (0 != err)
          +return err;
          +}
          +#endif
          +
          switch (cmd) {
          case VIDIOC_QUERYCAP:
          {
          @@ -1697,6 +1735,7 @@
          down(&dev->lock);
          dev->ctl_freq = f->frequency;
          saa7134_i2c_call_clients(dev,VIDIOCSFREQ,&dev->ctl_freq);
          +saa7134_tvaudio_do_scan(dev);
          up(&dev->lock);
          return 0;
          }
          @@ -1727,6 +1766,22 @@
          return 0;
          }

          +#ifdef VIDIOC_G_PRIORITY
          + case VIDIOC_G_PRIORITY:
          + {
          + enum v4l2_priority *p = arg;
          +
          + *p = v4l2_prio_max(&dev->prio);
          + return 0;
          + }
          + case VIDIOC_S_PRIORITY:
          + {
          + enum v4l2_priority *prio = arg;
          +
          + return v4l2_prio_change(&dev->prio, &fh->prio, *prio);
          + }
          +#endif
          +
          /* — preview ioctls


          */
          case VIDIOC_ENUM_FMT:
          {
          @@ -2148,8 +2203,8 @@

          spin_lock(&dev->slock);
          if (dev->video_q.curr) {
          +dev->video_fieldcount++;
          field = dev->video_q.curr->vb.field;

          if (V4L2_FIELD_HAS_BOTH(field)) {
          /* make sure we have seen both fields */
          if ((status & 0x10) == 0x00) {
          @@ -2165,6 +2220,7 @@
          if ((status & 0x10) != 0x00)
          goto done;
          }
          +dev->video_q.curr->vb.field_count = dev->video_fieldcount;
          saa7134_buffer_finish(dev,&dev->video_q,STATE_DONE);
          }
          saa7134_buffer_next(dev,&dev->video_q);
          diff -u linux-2.6.1/drivers/media/video/saa7134/saa7134.h linux/drivers/media/video/saa7134/saa7134.h
          — linux-2.6.1/drivers/media/video/saa7134/saa7134.h2004-01-14 15:06:18.000000000 +0100
          +++ linux/drivers/media/video/saa7134/saa7134.h2004-01-14 15:09:36.000000000 +0100
          @@ -29,14 +29,11 @@

          #include

          -#ifdef CONFIG_VIDEO_IR
          -#include „ir-common.h”
          -#endif

          #include
          #include
          #include
          #include
          +#include

          #ifndef TRUE
          # define TRUE (1==1)
          @@ -116,6 +113,7 @@
          unsigned int wswap:1;
          unsigned int yuv:1;
          unsigned int planar:1;
          +unsigned int uvswap:1;
          };

          /*


          */
          @@ -143,6 +141,16 @@
          #define SAA7134_BOARD_BMK_MPEX_NOTUNER 18
          #define SAA7134_BOARD_VIDEOMATE_TV 19
          #define SAA7134_BOARD_CRONOS_PLUS 20
          +#define SAA7134_BOARD_10MOONSTVMASTER 21
          +#define SAA7134_BOARD_MD2819 22
          +#define SAA7134_BOARD_BMK_MPEX_TUNER 23
          +#define SAA7134_BOARD_TVSTATION_DVR 24
          +#define SAA7134_BOARD_ASUSTEK_TVFM713325
          +#define SAA7134_BOARD_PINNACLE_PCTV_STEREO 26
          +#define SAA7134_BOARD_MANLI_MTV002 27
          +#define SAA7134_BOARD_MANLI_MTV001 28
          +#define SAA7134_BOARD_TG3000TV 29
          +#define SAA7134_BOARD_ECS_TVP3XP 30

          #define SAA7134_INPUT_MAX 8

          @@ -242,11 +250,15 @@
          struct saa7134_dev *dev;
          unsigned int radio;
          enum v4l2_buf_type type;
          +unsigned int resources;
          +#ifdef VIDIOC_G_PRIORITY
          +enum v4l2_priority prio;
          +#endif

          +/* video overlay */
          struct v4l2_window win;
          struct v4l2_clip clips[8];
          unsigned int nclips;
          -unsigned int resources;

          /* video capture */
          struct saa7134_format *fmt;
          @@ -298,7 +310,6 @@
          unsigned int read_count;
          };

          -#ifdef CONFIG_VIDEO_IR
          /* IR input */
          struct saa7134_ir {
          struct input_dev dev;
          @@ -307,14 +318,17 @@
          char phys[32];
          u32 mask_keycode;
          u32 mask_keydown;
          +u32 mask_keyup;
          };
          -#endif

          /* global device status */
          struct saa7134_dev {
          struct list_head devlist;
          struct semaphore lock;
          spinlock_t slock;
          +#ifdef VIDIOC_G_PRIORITY
          +struct v4l2_prio_state prio;
          +#endif

          /* various device info */
          unsigned int resources;
          @@ -327,9 +341,7 @@

          /* infrared remote */
          int has_remote;
          -#ifdef CONFIG_VIDEO_IR
          struct saa7134_ir *remote;
          -#endif

          /* pci i/o */
          char name[32];
          @@ -358,6 +370,7 @@
          struct saa7134_dmaqueue video_q;
          struct saa7134_dmaqueue ts_q;
          struct saa7134_dmaqueue vbi_q;
          +unsigned int video_fieldcount;
          unsigned int vbi_fieldcount;

          /* various v4l controls */
          @@ -403,9 +416,7 @@
          #define saa_setb(reg,bit) saa_andorb((reg),(bit),(bit))
          #define saa_clearb(reg,bit) saa_andorb((reg),(bit),0)

          -//#define saa_wait(d) { if (need_resched()) schedule(); else udelay(d);}
          #define saa_wait(d) { udelay(d); }
          -//#define saa_wait(d) { schedule_timeout(HZ*d/1000 ?:1); }

          /*


          */
          /* saa7134-core.c */

          — 😀 😀 😀

        3 bejegyzés megtekintése - 1-3 / 3
        • Be kell jelentkezni a hozzászóláshoz.