public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Mauro Carvalho Chehab <mchehab@infradead.org>
To: Maciej Szmigiero <mhej@o2.pl>
Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [V4L][SAA7134] fix tda9887 detection on cold and eeprom read corruption on warm Medion 7134
Date: Tue, 09 Nov 2010 08:53:00 -0200	[thread overview]
Message-ID: <4CD9280C.40204@infradead.org> (raw)
In-Reply-To: <4CC5C568.4090809@o2.pl>

Em 25-10-2010 15:59, Maciej Szmigiero escreveu:
> [V4L][SAA7134] fix tda9887 detection on cold and eeprom read corruption on warm Medion 7134
> 
> When Medion 7134 analog+DVB-T card is cold (after powerup) the tda9887 analog demodulator
> won't show on i2c bus.
> This results in no signal on analog TV. After loading driver for second time
> eeprom (required for tuner autodetection) read is corrupted, but tda9987 is detected
> properly and analog TV works when tuner model is forced.
> 
> Fix tda9887 problem by moving its detect code after tuner setup which unhides it.
> The eeprom read issue is fixed by opening i2c gate in DVB-T demodulator.
> 
> Tested on Medion 7134 and also tested for reference on Typhoon Cardbus Hybrid
> (which also uses saa7134 driver).
> 
> Signed-off-by: Maciej Szmigiero <mhej@o2.pl>
> 
> --- a/drivers/media/video/saa7134/saa7134-cards.c	2010-08-02 00:11:14.000000000 +0200
> +++ b/drivers/media/video/saa7134/saa7134-cards.c	2010-10-25 19:19:08.000000000 +0200
> @@ -7249,12 +7249,37 @@
>  		break;
>  	case SAA7134_BOARD_MD7134:
>  	{
> -		u8 subaddr;
> +		u8 subaddr, dmdregval;
>  		u8 data[3];
>  		int ret, tuner_t;
> +		struct i2c_msg i2cgatemsg_r[] = { {.addr = 0x08, .flags = 0,
> +						.buf = &subaddr, .len = 1},
> +						{.addr = 0x08,
> +							.flags = I2C_M_RD,
> +						.buf = &dmdregval, .len = 1} };
> +		struct i2c_msg i2cgatemsg_w[] = { {.addr = 0x08, .flags = 0,
> +						.buf = data, .len = 2} };
>  		struct i2c_msg msg[] = {{.addr=0x50, .flags=0, .buf=&subaddr, .len = 1},
>  					{.addr=0x50, .flags=I2C_M_RD, .buf=data, .len = 3}};
>  
> +		/* open i2c gate in DVB-T demod */
> +		/* so eeprom read won't be corrupted */
> +		subaddr = 0x7;
> +		ret = i2c_transfer(&dev->i2c_adap, i2cgatemsg_r, 2);
> +		if ((ret == 2) && (dmdregval & 0x2)) {
> +			printk(KERN_NOTICE "%s DVB-T demod i2c gate was left"
> +						    " closed\n", dev->name);
> +			printk(KERN_NOTICE "%s previous informational"
> +					    " EEPROM read might have been"
> +					    " corrupted\n", dev->name);

hmm... I don't think we need those debug messages on normal cases. Also, we want the log
shown as:
	saa7134: <foo>
and not as:
	saa7134 <foo>

> +
> +			data[0] = 0x7;
> +			data[1] = (dmdregval & ~0x2);
> +			if (i2c_transfer(&dev->i2c_adap, i2cgatemsg_w, 1) != 1)
> +				printk(KERN_ERR "early i2c gate"
> +						" open failure\n");

Gah. A message like that should really specify the dev->name, and the board.

> +		}
> +
>  		subaddr= 0x14;
>  		tuner_t = 0;
>  
> @@ -7522,10 +7547,6 @@
>  			v4l2_i2c_new_subdev(&dev->v4l2_dev,
>  				&dev->i2c_adap, "tuner", "tuner",
>  				dev->radio_addr, NULL);
> -		if (has_demod)
> -			v4l2_i2c_new_subdev(&dev->v4l2_dev,
> -				&dev->i2c_adap, "tuner", "tuner",
> -				0, v4l2_i2c_tuner_addrs(ADDRS_DEMOD));
>  		if (dev->tuner_addr == ADDR_UNSET) {
>  			enum v4l2_i2c_tuner_type type =
>  				has_demod ? ADDRS_TV_WITH_DEMOD : ADDRS_TV;
> @@ -7542,6 +7563,15 @@
>  
>  	saa7134_tuner_setup(dev);
>  
> +	/* some cards (Medion 7134 for example) needs tuner to be setup */
> +	/* before tda9887 shows itself on i2c bus */
> +	if ((TUNER_ABSENT != dev->tuner_type)
> +			&& (dev->tda9887_conf & TDA9887_PRESENT)) {
> +		v4l2_i2c_new_subdev(&dev->v4l2_dev,
> +			&dev->i2c_adap, "tuner", "tuner",
> +			0, v4l2_i2c_tuner_addrs(ADDRS_DEMOD));
> +	}
> +
>  	switch (dev->board) {
>  	case SAA7134_BOARD_BEHOLD_COLUMBUS_TVFM:
>  	case SAA7134_BOARD_AVERMEDIA_CARDBUS_501:

The order change for the demod probe will likely break support for other boards.
If the problem is specific to Medion 7134, what you should do, instead, is to
change the order just for MD7134 (so, inside the switch(dev->board)).

Cheers,
Mauro.

  reply	other threads:[~2010-11-09 10:53 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-10-25 17:59 [V4L][SAA7134] fix tda9887 detection on cold and eeprom read corruption on warm Medion 7134 Maciej Szmigiero
2010-11-09 10:53 ` Mauro Carvalho Chehab [this message]
2010-11-09 15:02   ` Maciej Szmigiero

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4CD9280C.40204@infradead.org \
    --to=mchehab@infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=mhej@o2.pl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox