Terratec Grabby hwrev 2

Message ID 20130503085025.0a989c42@vostro (mailing list archive)
State Superseded, archived
Headers

Commit Message

Timo Teras May 3, 2013, 5:50 a.m. UTC
  On Mon, 29 Apr 2013 15:26:18 +0300
Timo Teras <timo.teras@iki.fi> wrote:

> > > When comparing these two picture, you see that the frame is offset
> > > with one or two pixels in x-direction. Perhaps this is a byte
> > > offset, and in RGB format causes color values to be connected to
> > > wrong pixel.
> > >
> > > As final note, now I hooked the device on faster machine, and the
> > > AC97 detection seems random. It seemed to work with the slower
> > > machine reliably after I had it do the saa7113 initialization. So
> > > sounds like some sort of timing issue.
> > 
> > More details please. ;)
> > Do you mean that "Config register raw data" (see dmesg output) value
> > varies ?
> 
> I traced the USB init sequence that windows does. It is as follows
> (simplified by removing some other register / eeprom reads):
> 	em28xx_write_reg(dev, EM28XX_R08_GPIO, 0xff);
> 	msleep(20);
> 	em28xx_write_reg(dev, EM28XX_R08_GPIO, 0xfd);
> 	msleep(100);
> 	em28xx_write_reg(dev, EM28XX_R08_GPIO, 0x7d);
> 	msleep(60);
> 	em28xx_write_reg(dev, EM28XX_R12_VINENABLE, 0x24);
> 	em28xx_write_reg(dev, 0x0d, 0x42);
> 
> Will test if it makes the detection of the audio chip more reliable.

The patch added is below. Seems that detecting the audio chip is now a
lot more reliable. So far I have not seen failures. Not sure if the
GPIO twidling drives something - or if it's just the additional delay
fixing things.

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
  

Patch

--- a/drivers/media/usb/em28xx/em28xx-cards.c
+++ b/drivers/media/usb/em28xx/em28xx-cards.c
@@ -2479,6 +2479,19 @@ 
 		em28xx_write_reg(dev, EM28XX_R08_GPIO, 0xfd);
 		msleep(70);
 		break;
+
+	case EM2860_BOARD_TERRATEC_GRABBY:
+		em28xx_write_reg(dev, EM28XX_R08_GPIO, 0xff);
+		msleep(20);
+		em28xx_write_reg(dev, EM28XX_R08_GPIO, 0xfd);
+		msleep(100);
+		em28xx_write_reg(dev, EM28XX_R08_GPIO, 0xfd);
+		msleep(100);
+		em28xx_write_reg(dev, EM28XX_R08_GPIO, 0x7d);
+		msleep(60);
+		em28xx_write_reg(dev, EM28XX_R12_VINENABLE, 0x24);
+		em28xx_write_reg(dev, 0x0d, 0x42);
+		break;
 	}
 
 	em28xx_gpio_set(dev, dev->board.tuner_gpio);