1. 18 Aug, 2009 4 commits
  2. 17 Aug, 2009 11 commits
    • Thomas Gleixner's avatar
      Merge branch 'rt/base' into rt/head · d94ddace
      Thomas Gleixner authored
      Conflicts:
      	kernel/irq/chip.c
      	kernel/irq/internals.h
      	kernel/irq/manage.c
      
      Convert forced irq threading to the new ONESHOT infrastructure
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      d94ddace
    • Thomas Gleixner's avatar
      Merge branch 'rt/local-irq' into rt/base · 4eec1a1e
      Thomas Gleixner authored
      4eec1a1e
    • Thomas Gleixner's avatar
      tty: Do not disable interrupts in put_ldisc on -rt · b67602a5
      Thomas Gleixner authored
      Fixes the following on PREEMPT_RT:
      
      BUG: sleeping function called from invalid context at kernel/rtmutex.c:684
      in_atomic(): 0, irqs_disabled(): 1, pid: 9116, name: sshd
      Pid: 9116, comm: sshd Not tainted 2.6.31-rc6-rt2 #6
      Call Trace:
      [<ffffffff81034a4f>] __might_sleep+0xec/0xee
      [<ffffffff812fbc6d>] rt_spin_lock+0x34/0x75
      [ffffffff81064a83>] atomic_dec_and_spin_lock+0x36/0x54
      [<ffffffff811df7c7>] put_ldisc+0x57/0xa6
      [<ffffffff811dfb87>] tty_ldisc_hangup+0xe7/0x19f
      [<ffffffff811d9224>] do_tty_hangup+0xff/0x319
      [<ffffffff811d9453>] tty_vhangup+0x15/0x17
      [<ffffffff811e1263>] pty_close+0x127/0x12b
      [<ffffffff811dac41>] tty_release_dev+0x1ad/0x4c0
      ....
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      b67602a5
    • Thomas Gleixner's avatar
      Merge branch 'linus' into rt/local-irq · f88cdf92
      Thomas Gleixner authored
      f88cdf92
    • Thomas Gleixner's avatar
      Merge branch 'rt/irq' into rt/base · 21478b2e
      Thomas Gleixner authored
      Conflicts:
      	kernel/irq/chip.c
      	kernel/irq/manage.c
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      21478b2e
    • Thomas Gleixner's avatar
      Merge branch 'irq/threaded' into rt/irq · 5a53f07b
      Thomas Gleixner authored
      Conflicts:
      	include/linux/interrupt.h
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      5a53f07b
    • Thomas Gleixner's avatar
      Merge branch 'irq/urgent' into rt/irq · e220e49c
      Thomas Gleixner authored
      e220e49c
    • Thomas Gleixner's avatar
      genirq: Do not wakeup irq thread from __setup_irq() and set action->irq · 3c26caa7
      Thomas Gleixner authored
      The wake_up_process() of the new irq thread in __setup_irq() is
      bogus. The irqaction is not yet set up completely, especially
      action->irq is not initialized. As a consequence the irq thread might
      dereference the wrong interrupt descriptor.
      
      Remove the wake up and set action->irq before the action is
      installed. The thread is woken up from the first interrupt.
      Reported-by: default avatarMichael Buesch <mb@bu3sch.de>
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Tested-by: default avatarMichael Buesch <mb@bu3sch.de>
      3c26caa7
    • Thomas Gleixner's avatar
      genirq: Support nested threaded irq handling · 399b5da2
      Thomas Gleixner authored
      Interrupt chips which are behind a slow bus (i2c, spi ...) and
      demultiplex other interrupt sources need to run their interrupt
      handler in a thread. 
      
      The demultiplexed interrupt handlers need to run in thread context as
      well and need to finish before the demux handler thread can reenable
      the interrupt line. So the easiest way is to run the sub device
      handlers in the context of the demultiplexing handler thread.
      
      To avoid that a separate thread is created for the subdevices the
      function set_nested_irq_thread() is provided which sets the
      IRQ_NESTED_THREAD flag in the interrupt descriptor.
      
      A driver which calls request_threaded_irq() must not be aware of the
      fact that the threaded handler is called in the context of the
      demultiplexing handler thread. The setup code checks the
      IRQ_NESTED_THREAD flag which was set from the irq chip setup code and
      does not setup a separate thread for the interrupt. The primary
      function which is provided by the device driver is replaced by an
      internal dummy function which warns when it is called.
      
      For the demultiplexing handler a helper function handle_nested_irq()
      is provided which calls the demux interrupt thread function in the
      context of the caller and does the proper interrupt accounting and
      takes the interrupt disabled status of the demultiplexed subdevice
      into account.
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Cc: Mark Brown <broonie@opensource.wolfsonmicro.com>
      Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
      Cc: Trilok Soni <soni.trilok@gmail.com>
      Cc: Pavel Machek <pavel@ucw.cz>
      Cc: Brian Swetland <swetland@google.com>
      Cc: Joonyoung Shim <jy0922.shim@samsung.com>
      Cc: m.szyprowski@samsung.com
      Cc: t.fujak@samsung.com
      Cc: kyungmin.park@samsung.com,
      Cc: David Brownell <david-b@pacbell.net>
      Cc: Daniel Ribeiro <drwyrm@gmail.com>
      Cc: arve@android.com
      Cc: Barry Song <21cnbao@gmail.com>
      399b5da2
    • Thomas Gleixner's avatar
      genirq: Add buslock support · 70aedd24
      Thomas Gleixner authored
      Some interrupt chips are connected to a "slow" bus (i2c, spi ...). The
      bus access needs to sleep and therefor cannot be called in atomic
      contexts.
      
      Some of the generic interrupt management functions like disable_irq(),
      enable_irq() ... call interrupt chip functions with the irq_desc->lock
      held and interrupts disabled. This does not work for such devices.
      
      Provide a separate synchronization mechanism for such interrupt
      chips. The irq_chip structure is extended by two optional functions
      (bus_lock and bus_sync_and_unlock).
      
      The idea is to serialize the bus access for those operations in the
      core code so that drivers which are behind that bus operated interrupt
      controller do not have to worry about it and just can use the normal
      interfaces. To achieve this we add two function pointers to the
      irq_chip: bus_lock and bus_sync_unlock.
      
      bus_lock() is called to serialize access to the interrupt controller
      bus.
      
      Now the core code can issue chip->mask/unmask ... commands without
      changing the fast path code at all. The chip implementation merily
      stores that information in a chip private data structure and
      returns. No bus interaction as these functions are called from atomic
      context.
      
      After that bus_sync_unlock() is called outside the atomic context. Now
      the chip implementation issues the bus commands, waits for completion
      and unlocks the interrupt controller bus.
      
      The irq_chip implementation as pseudo code:
      
      struct irq_chip_data {
             struct mutex   mutex;
             unsigned int   irq_offset;
             unsigned long  mask;
             unsigned long  mask_status;
      }
      
      static void bus_lock(unsigned int irq)
      {
              struct irq_chip_data *data = get_irq_desc_chip_data(irq);
      
              mutex_lock(&data->mutex);
      }
      
      static void mask(unsigned int irq)
      {
              struct irq_chip_data *data = get_irq_desc_chip_data(irq);
      
              irq -= data->irq_offset;
              data->mask |= (1 << irq);
      }
      
      static void unmask(unsigned int irq)
      {
              struct irq_chip_data *data = get_irq_desc_chip_data(irq);
      
              irq -= data->irq_offset;
              data->mask &= ~(1 << irq);
      }
      
      static void bus_sync_unlock(unsigned int irq)
      {
              struct irq_chip_data *data = get_irq_desc_chip_data(irq);
      
              if (data->mask != data->mask_status) {
                      do_bus_magic_to_set_mask(data->mask);
                      data->mask_status = data->mask;
              }
              mutex_unlock(&data->mutex);
      }
      
      The device drivers can use request_threaded_irq, free_irq, disable_irq
      and enable_irq as usual with the only restriction that the calls need
      to come from non atomic context.
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Cc: Mark Brown <broonie@opensource.wolfsonmicro.com>
      Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
      Cc: Trilok Soni <soni.trilok@gmail.com>
      Cc: Pavel Machek <pavel@ucw.cz>
      Cc: Brian Swetland <swetland@google.com>
      Cc: Joonyoung Shim <jy0922.shim@samsung.com>
      Cc: m.szyprowski@samsung.com
      Cc: t.fujak@samsung.com
      Cc: kyungmin.park@samsung.com,
      Cc: David Brownell <david-b@pacbell.net>
      Cc: Daniel Ribeiro <drwyrm@gmail.com>
      Cc: arve@android.com
      Cc: Barry Song <21cnbao@gmail.com>
      70aedd24
    • Thomas Gleixner's avatar
      genirq: Add oneshot support · b25c340c
      Thomas Gleixner authored
      For threaded interrupt handlers we expect the hard interrupt handler
      part to mask the interrupt on the originating device. The interrupt
      line itself is reenabled after the hard interrupt handler has
      executed.
      
      This requires access to the originating device from hard interrupt
      context which is not always possible. There are devices which can only
      be accessed via a bus (i2c, spi, ...). The bus access requires thread
      context. For such devices we need to keep the interrupt line masked
      until the threaded handler has executed.
      
      Add a new flag IRQF_ONESHOT which allows drivers to request that the
      interrupt is not unmasked after the hard interrupt context handler has
      been executed and the thread has been woken. The interrupt line is
      unmasked after the thread handler function has been executed.
      
      Note that for now IRQF_ONESHOT cannot be used with IRQF_SHARED to
      avoid complex accounting mechanisms.
      
      For oneshot interrupts the primary handler simply returns
      IRQ_WAKE_THREAD and does nothing else. A generic implementation
      irq_default_primary_handler() is provided to avoid useless copies all
      over the place. It is automatically installed when
      request_threaded_irq() is called with handler=NULL and
      thread_fn!=NULL.
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Cc: Mark Brown <broonie@opensource.wolfsonmicro.com>
      Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
      Cc: Trilok Soni <soni.trilok@gmail.com>
      Cc: Pavel Machek <pavel@ucw.cz>
      Cc: Brian Swetland <swetland@google.com>
      Cc: Joonyoung Shim <jy0922.shim@samsung.com>
      Cc: m.szyprowski@samsung.com
      Cc: t.fujak@samsung.com
      Cc: kyungmin.park@samsung.com,
      Cc: David Brownell <david-b@pacbell.net>
      Cc: Daniel Ribeiro <drwyrm@gmail.com>
      Cc: arve@android.com
      Cc: Barry Song <21cnbao@gmail.com>
      b25c340c
  3. 16 Aug, 2009 3 commits
  4. 15 Aug, 2009 6 commits
  5. 14 Aug, 2009 4 commits
  6. 13 Aug, 2009 12 commits
    • Roel Kluin's avatar
      V4L/DVB (12441): siano: read buffer overflow · 08b39642
      Roel Kluin authored
      With mode DEVICE_MODE_RAW_TUNER a read occurs past the end of smscore_fw_lkup[].
      Subsequently an attempt is made to load the firmware from the resulting
      filename.
      Signed-off-by: default avatarRoel Kluin <roel.kluin@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarDouglas Schilling Landgraf <dougsland@redhat.com>
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
      08b39642
    • Matthias Schwarzott's avatar
      V4L/DVB (12440): Use kzalloc for frontend states to have struct dvb_frontend properly · 084e24ac
      Matthias Schwarzott authored
      This patch changes most frontend drivers to allocate their state structure via
      kzalloc and not kmalloc. This is done to properly initialize the
      embedded "struct dvb_frontend frontend" field, that they all have.
      
      The visible effect of this struct being uninitalized is, that the member "id"
      that is used to set the name of kernel thread is totally random.
      
      Some board drivers (for example cx88-dvb) set this "id" via
      videobuf_dvb_alloc_frontend but most do not.
      
      So I at least get random id values for saa7134, flexcop and ttpci based cards.
      It looks like this in dmesg:
      DVB: registering adapter 1 frontend -10551321 (ST STV0299 DVB-S)
      
      The related kernel thread then also gets a strange name
      like "kdvb-ad-1-fe--1".
      
      Cc: Michael Krufky <mkrufky@linuxtv.org>
      Cc: Steven Toth <stoth@linuxtv.org>
      Cc: Timothy Lee <timothy.lee@siriushk.com>
      Cc: Igor M. Liplianin <liplianin@me.by>
      Signed-off-by: default avatarMatthias Schwarzott <zzam@gentoo.org>
      Acked-by: default avatarAndreas Oberritter <obi@linuxtv.org>
      Signed-off-by: default avatarDouglas Schilling Landgraf <dougsland@redhat.com>
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
      084e24ac
    • Roel Kluin's avatar
      V4L/DVB (12438): Read buffer overflow · bb2b4542
      Roel Kluin authored
      parport[n] is checked before n < MAX_CAMS
      Signed-off-by: default avatarRoel Kluin <roel.kluin@gmail.com>
      Signed-off-by: default avatarDouglas Schilling Landgraf <dougsland@redhat.com>
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
      bb2b4542
    • Randy Dunlap's avatar
      V4L/DVB (12437): dvb: siano uses/depends on INPUT · 27059b35
      Randy Dunlap authored
      siano uses input_*() functions so it should depend on INPUT
      to prevent build errors:
      
      ERROR: "input_event" [drivers/media/dvb/siano/sms1xxx.ko] undefined!
      ERROR: "input_register_device" [drivers/media/dvb/siano/sms1xxx.ko] undefined!
      ERROR: "input_free_device" [drivers/media/dvb/siano/sms1xxx.ko] undefined!
      ERROR: "input_unregister_device" [drivers/media/dvb/siano/sms1xxx.ko] undefined!
      ERROR: "input_allocate_device" [drivers/media/dvb/siano/sms1xxx.ko] undefined!
      
      Cc: Michael Krufky <mkrufky@linuxtv.org>
      Cc: Uri Shkolnik <uris@siano-ms.com>
      Signed-off-by: default avatarRandy Dunlap <randy.dunlap@oracle.com>
      Signed-off-by: default avatarDouglas Schilling Landgraf <dougsland@redhat.com>
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
      27059b35
    • Roel Kluin's avatar
      V4L/DVB (12436): stk-webcam: read buffer overflow · 77f2c2db
      Roel Kluin authored
      It tested the value of stk_sizes[i].m before checking whether i was in range.
      
      Cc: Hans Verkuil <hverkuil@xs4all.nl>
      Cc: Trent Piepho <xyzzy@speakeasy.org>
      Signed-off-by: default avatarRoel Kluin <roel.kluin@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarDouglas Schilling Landgraf <dougsland@redhat.com>
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
      77f2c2db
    • Devin Heitmueller's avatar
      V4L/DVB (12432): em28xx: fix regression in Empire DualTV digital tuning · 01a5fd6f
      Devin Heitmueller authored
      Restore support for digital tuning caused by regression during introduction
      of disable_i2c_gate parameter to zl10353 driver.
      
      Thanks to user "Xwang" for reporting the problem and testing the fix
      
      Cc: Xwang <xwang1976@email.it>
      Signed-off-by: default avatarDevin Heitmueller <dheitmueller@kernellabs.com>
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
      01a5fd6f
    • Hans Verkuil's avatar
      V4L/DVB (12429): v4l2-ioctl: fix G_STD and G_PARM default handlers · 9bedc7f7
      Hans Verkuil authored
      The v4l core supplies default handlers for G_STD and G_PARM. However, both
      default handlers are buggy.
      
      This patch fixes the following:
      
      1) If no g_std is supplied and current_norm == 0, then this driver does not
         support TV video standards (e.g. a radio or webcam driver). Return
         -EINVAL. This ensures that there is no bogus VIDIOC_G_STD support for
         such drivers.
      
      2) The default VIDIOC_G_PARM handler used current_norm instead of first
         checking if the driver supported g_std and calling that to get the norm.
         It also didn't check if current_norm was 0, since in that case the driver
         does not support TV standards (or no standard was set at all) and the
         default handler should return -EINVAL.
      
      Note that I am very unhappy with these default handlers: I think they
      basically behave like some very strange and unexpected side-effect.
      Signed-off-by: default avatarHans Verkuil <hverkuil@xs4all.nl>
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
      9bedc7f7
    • Hans Verkuil's avatar
      V4L/DVB (12428): hdpvr: add missing initialization of current_norm · 99362e1e
      Hans Verkuil authored
      Drivers should either set current_norm or supply a g_std callback.
      
      The hdpvr driver does neither. Since it initializes to a 60 Hz format
      I've initialized the current_norm to NTSC | PAL_M | PAL_60 which is the
      60 Hz subset of tvnorms.
      
      Cc: Janne Grunau <j@jannau.net>
      Signed-off-by: default avatarHans Verkuil <hverkuil@xs4all.nl>
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
      99362e1e
    • Guennadi Liakhovetski's avatar
      V4L/DVB (12424): soc-camera: fix recursive locking in .buf_queue() · 2dd54a54
      Guennadi Liakhovetski authored
      The .buf_queue() V4L2 driver method is called under
      spinlock_irqsave(q->irqlock,...), don't take the lock again inside the
      function.
      Reported-by: default avatarAntonio Ospite <ospite@studenti.unina.it>
      Signed-off-by: default avatarGuennadi Liakhovetski <g.liakhovetski@gmx.de>
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
      2dd54a54
    • Randy Dunlap's avatar
      V4L/DVB (12422): media/zr364xx: fix build errors · 7d2e2e35
      Randy Dunlap authored
      Fix build errors in zr364xx by adding selects:
      
      zr364xx.c:(.text+0x195ed7): undefined reference to `videobuf_streamon'
      zr364xx.c:(.text+0x196030): undefined reference to `videobuf_dqbuf'
      zr364xx.c:(.text+0x1960c4): undefined reference to `videobuf_qbuf'
      zr364xx.c:(.text+0x196123): undefined reference to `videobuf_querybuf'
      zr364xx.c:(.text+0x196182): undefined reference to `videobuf_reqbufs'
      zr364xx.c:(.text+0x196224): undefined reference to `videobuf_queue_is_busy'
      zr364xx.c:(.text+0x196390): undefined reference to `videobuf_vmalloc_free'
      zr364xx.c:(.text+0x196571): undefined reference to `videobuf_iolock'
      zr364xx.c:(.text+0x196678): undefined reference to `videobuf_mmap_mapper'
      zr364xx.c:(.text+0x196760): undefined reference to `videobuf_poll_stream'
      zr364xx.c:(.text+0x19689a): undefined reference to `videobuf_read_one'
      zr364xx.c:(.text+0x1969ec): undefined reference to `videobuf_mmap_free'
      zr364xx.c:(.text+0x197862): undefined reference to `videobuf_queue_vmalloc_init'
      zr364xx.c:(.text+0x197a28): undefined reference to `videobuf_streamoff'
      zr364xx.c:(.text+0x198203): undefined reference to `videobuf_to_vmalloc'
      zr364xx.c:(.text+0x198603): undefined reference to `videobuf_streamoff'
      drivers/built-in.o: In function `free_buffer':
      zr364xx.c:(.text+0x19930c): undefined reference to `videobuf_vmalloc_free'
      drivers/built-in.o: In function `zr364xx_open':
      zr364xx.c:(.text+0x19a7de): undefined reference to `videobuf_queue_vmalloc_init'
      drivers/built-in.o: In function `read_pipe_completion':
      zr364xx.c:(.text+0x19b17f): undefined reference to `videobuf_to_vmalloc'
      Signed-off-by: default avatarRandy Dunlap <randy.dunlap@oracle.com>
      Signed-off-by: default avatarDouglas Schilling Landgraf <dougsland@redhat.com>
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
      7d2e2e35
    • Mauro Carvalho Chehab's avatar
      V4L/DVB (12405): em28xx-cards: move register 0x13 setting to the proper place · d7612c86
      Mauro Carvalho Chehab authored
      Register 0x13 seems to be a sort of image control, maybe gamma, white
      level or black level. Lower values produce better images, while higher
      values increases the contrast and shifts colors to green. 0xff produces
      a black image. This register is not Silvercrest-specific, so its code
      should be moved to a better place.
      
      If this register is left alone, a random value can be found at the
      register, producing weird results.
      
      While here, let's remove register 0x0d, as it had no noticed effect at
      the image.
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
      d7612c86
    • Mauro Carvalho Chehab's avatar
      V4L/DVB (12411): em28xx: Fix artifacts with Silvercrest webcam · 3d3215c4
      Mauro Carvalho Chehab authored
      Silvercrest mt9v011 sensor produces a 640x480 image. However,
      previously, the code were getting only half of the lines and merging two
      consecutive frames to "produce" a 640x480 image.
      
      With the addition of progressive mode, now em28xx is working with a full
      image. However, when the number of lines is bigger than 240, the
      beginning of some odd lines are filled with blank.
      
      After lots of testing, and physically checking the device for a Xtal, it
      was noticed experimentally that mt9v011 is using em28xx XCLK as its
      clock. Due to that, changing XCLK value changes the maximum speed of the
      stream.
      
      At the tests, it were possible to produce up to 32 fps, using a 30 MHz
      XCLK. However, at that rate, the artifacts happen even at 320x240. Lower
      values of XCLK produces artifacts only at 640x480.
      
      At some values of xclk (for example XCLKK = 6 MHz, 640x480), it is
      possible to see an invalid sucession of artifacts with this pattern:
      
      .xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      ..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      ...xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      ....xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      .xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      ..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      ...xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      ....xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      
      (where the dots represent the blanked pixels)
      
      So, it seems that a waveform in the format of a ramp is interferring at
      the image.
      
      The cause of this interference is currently unknown. Some possibilities
      are:
      	- electrical interference (maybe this device is broken?);
      	- some issue at mt9v011 programming;
      	- some bug at em28xx chip.
      
      So, for now, let's be conservative and use a value of XCLK that we know
      for sure that it won't cause artifacts.
      
      As I'm waiting for more of such devices with different em28xx chipset
      revisions, I'll have the opportunity to double check the issue with
      other pieces of hardware.
      
      Later patches can vary XCLK depending on the vertical resolutions, if a
      proper fix is not discovered.
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
      3d3215c4