[sisyphus] desktop20070801 and tv-tuner

Sergey Vlasov vsu на altlinux.ru
Чт Авг 9 18:31:51 MSD 2007


On Wed, Aug 08, 2007 at 08:14:02AM +0500, Чернов Евгений wrote:
>   Вобщем поставился с двд версии(правда не я, отцу отдал он поставил). 
> Сразу возникла проблема с тв тюнером. Тюнер flytv prime 34 на чипе 
> saa7134. Модули подгрузились но с неправильными параметрами. Надо 
> сказать что в убунтах и федорах шестой версии тоже ничего не пошло. 
> Только ночью дошло залезть в винду и посмотреть в fly2000 какие чипы 
> стоят. Вобшем тв-тюнер TCL2002, ВЧ модуль Philips FM(Q)1216ME/I H-3(B/G, 
> D/K, I, L/L'). Чтение инета помогло найти нужные параметры при загрузке 
> модулей. Вобщем rmmod saa7134 && rmmod tuner после чего:
>   modprobe tuner secam=d && modprobe saa7134 card=2 tuner=38
>   Тв я увидел правда качество почему-то чуть-чуть похуже чем в fly2000. 
> Ну ладно фиг с ним. Дальше qtradio не смогло ни одной станции поймать, 
> уровень сигнала везде единичка. Хотя руками на нужной частоте всё 
> ловится. Может что ещё надо передать модулю? И есть какое-нибудь 
> приложение для радио не такое страшное как qtradio?
>   Вот как видится эта карточка:
> lspci -vvv -nn -xxx
> 02:0c.0 Multimedia controller [0480]: Philips Semiconductors 
> SAA7134/SAA7135HL Video Broadcast Decoder [1131:7134] (rev 01)
>          Subsystem: Animation Technologies Inc. Unknown device [5168:0138]

Для этого subsystem ID в модуле saa7134 из 2.6.18 есть запись:

		.vendor       = PCI_VENDOR_ID_PHILIPS,
		.device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
		.subvendor    = 0x5168,
		.subdevice    = 0x0138,
		.driver_data  = SAA7134_BOARD_FLYVIDEO3000,

SAA7134_BOARD_FLYVIDEO3000 - это как раз card=2; однако описание этой
платы в драйвере выглядит следующим образом:

	[SAA7134_BOARD_FLYVIDEO3000] = {
		/* "Marco d'Itri" <md на Linux.IT> */
		.name		= "LifeView FlyVIDEO3000",
		.audio_clock	= 0x00200000,
		.tuner_type	= TUNER_PHILIPS_PAL,
		.radio_type     = UNSET,
		.tuner_addr	= ADDR_UNSET,
		.radio_addr	= ADDR_UNSET,

		.gpiomask       = 0xe000,
		.inputs         = {{
			.name = name_tv,
			.vmux = 1,
			.amux = TV,
			.gpio = 0x8000,
			.tv   = 1,
		},{
			.name = name_tv_mono,
			.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 = TV,
			.gpio = 0x8000,
		},
	},

Здесь задан тип тюнера TUNER_PHILIPS_PAL == 5, а вручную параметром
tuner=38 задаётся тип TUNER_PHILIPS_FM1216ME_MK3.  Описания этих
тюнеров различаются довольно сильно:

/* ------------ TUNER_PHILIPS_PAL - Philips PAL ------------ */

static struct tuner_range tuner_philips_pal_ranges[] = {
	{ 16 * 168.25 /*MHz*/, 0x8e, 0xa0, },
	{ 16 * 447.25 /*MHz*/, 0x8e, 0x90, },
	{ 16 * 999.99        , 0x8e, 0x30, },
};

static struct tuner_params tuner_philips_pal_params[] = {
	{
		.type   = TUNER_PARAM_TYPE_PAL,
		.ranges = tuner_philips_pal_ranges,
		.count  = ARRAY_SIZE(tuner_philips_pal_ranges),
		.cb_first_if_lower_freq = 1,
	},
};

/* ------------ TUNER_PHILIPS_FM1216ME_MK3 - Philips PAL ------------ */

static struct tuner_range tuner_fm1216me_mk3_pal_ranges[] = {
	{ 16 * 158.00 /*MHz*/, 0x8e, 0x01, },
	{ 16 * 442.00 /*MHz*/, 0x8e, 0x02, },
	{ 16 * 999.99        , 0x8e, 0x04, },
};

static struct tuner_params tuner_fm1216me_mk3_params[] = {
	{
		.type   = TUNER_PARAM_TYPE_PAL,
		.ranges = tuner_fm1216me_mk3_pal_ranges,
		.count  = ARRAY_SIZE(tuner_fm1216me_mk3_pal_ranges),
		.cb_first_if_lower_freq = 1,
		.has_tda9887 = 1,
		.port1_active = 1,
		.port2_active = 1,
		.port2_invert_for_secam_lc = 1,
		.port1_fm_high_sensitivity = 1,
		.default_top_mid = -2,
		.default_top_secam_mid = -2,
		.default_top_secam_high = -2,
	},
};

> Есть надежда получить работающее ис_каропки?

К сожалению, в этом случае производитель использовал одинаковые
subsystem ID для карт с различными типами тюнеров - из-за этого
автоматическое определение невозможно, и все варианты карт с этим
subsystem ID, кроме одного, будут требовать ручной настройки параметра
tuner=N.  Впрочем, разработчики драйвера saa7134 уже знают об этом:

static void board_flyvideo(struct saa7134_dev *dev)
{
        printk("%s: there are different flyvideo cards with different tuners\n"
               "%s: out there, you might have to use the tuner=<nr> insmod\n"
               "%s: option to override the default value.\n",
               dev->name, dev->name, dev->name);
}

(это сообщение можно наблюдать в dmesg при обнаружении карт от
flyvideo).

Вообще бардак с subsystem ID у тюнеров (либо полное их отсутствие,
либо выпуск существенно разных устройств с совпадающими ID) - это
сейчас скорее правило, и конца этому безобразию не видно.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : отсутствует
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: Digital signature
Url     : http://lists.altlinux.org/pipermail/sisyphus/attachments/20070809/e8abec08/attachment-0002.bin 


Подробная информация о списке рассылки Sisyphus