Since I haven't really done anything except copy some of your code around I don't feel that it's my place to release this, and anyway I'm not even a programmer so I couldn't answer any questions, so I hope you'll take a look at my patch and do whatever you feel is necessary to tidy up. Since this is actually the _only_ working lirc setup that I am aware of for this board, I suspect that there are quite a few people out there who'll appreciate this, even if it is experimental. A short notice on the V4L list might perhaps be in order?
Anyway, thanks for your work, I am now finally able to use _all_ the features I had planned for my freevo/mythtv box ;)
Regards,
Ole Andre Schistad
--- saa7134-cards.c.orig 2003-03-26 14:54:24.000000000 +0100 +++ saa7134-cards.c 2003-06-29 18:58:57.000000000 +0200 @@ -29,6 +29,7 @@ static char name_mute[] = "mute"; static char name_radio[] = "Radio"; static char name_tv[] = "Television"; +static char name_tv_mono[] = "TV (mono only)"; static char name_comp1[] = "Composite1"; static char name_comp2[] = "Composite2"; static char name_svideo[] = "S-Video"; @@ -61,6 +62,11 @@ .vmux = 1, .amux = TV, .tv = 1, + },{ + .name = name_tv_mono, + .vmux = 1, + .amux = LINE2, + .tv = 1, }}, }, [SAA7134_BOARD_FLYVIDEO3000] = { @@ -68,7 +74,7 @@ .name = "LifeView FlyVIDEO3000", .audio_clock = 0x00200000, .tuner_type = TUNER_PHILIPS_PAL, - .gpiomask = 0xE000, + .gpiomask = 0xe000, .inputs = {{ .name = name_tv, .vmux = 1, @@ -102,7 +108,7 @@ .name = "LifeView FlyVIDEO2000", .audio_clock = 0x00200000, .tuner_type = TUNER_LG_PAL_NEW_TAPC, - .gpiomask = 0x6000, + .gpiomask = 0xe000, .inputs = {{ .name = name_tv, .vmux = 1, @@ -196,7 +202,7 @@ .tv = 1, },{ /* workaround for problems with normal TV sound */ - .name = "TV (mono only)", + .name = name_tv_mono, .vmux = 1, .amux = LINE2, .tv = 1, @@ -277,7 +283,7 @@ .tv = 1, },{ /* workaround for problems with normal TV sound */ - .name = "TV (mono only)", + .name = name_tv_mono, .vmux = 1, .amux = LINE2, .tv = 1, @@ -314,7 +320,7 @@ },{ .name = name_tv, .vmux = 1, - .amux = TV, + .amux = LINE2, .tv = 1, }}, }, @@ -415,6 +421,21 @@ .tv = 1, }}, }, + [SAA7134_BOARD_ELSA_500TV] = { + .name = "ELSA EX-VISION 500TV", + .audio_clock = 0x00187de7, + .tuner_type = TUNER_HITACHI_NTSC, + .inputs = {{ + .name = name_svideo, + .vmux = 7, + .amux = LINE1, + },{ + .name = name_tv, + .vmux = 8, + .amux = TV, + .tv = 1, + }}, + }, }; const unsigned int saa7134_bcount = ARRAY_SIZE(saa7134_boards); @@ -484,6 +505,12 @@ .subdevice = 0x226b, .driver_data = SAA7134_BOARD_ELSA, },{ + .vendor = PCI_VENDOR_ID_PHILIPS, + .device = PCI_DEVICE_ID_PHILIPS_SAA7130, + .subvendor = 0x1048, + .subdevice = 0x226b, + .driver_data = SAA7134_BOARD_ELSA_500TV, + },{ /* --- boards without eeprom + subsystem ID --- */ .vendor = PCI_VENDOR_ID_PHILIPS, @@ -530,6 +557,84 @@ MODULE_DEVICE_TABLE(pci, saa7134_pci_tbl); /* ----------------------------------------------------------- */ +/* flyvideo tweaks */ + +static struct { + char *model; + int tuner_type; +} fly_list[0x20] = { + /* default catch ... */ + [ 0 ... 0x1f ] = { + .model = "UNKNOWN", + .tuner_type = TUNER_ABSENT, + }, + /* ... the ones known so far */ + [ 0x05 ] = { + .model = "PAL-BG", + .tuner_type = TUNER_LG_PAL_NEW_TAPC, + }, + [ 0x10 ] = { + .model = "PAL-BG / PAL-DK", + .tuner_type = TUNER_PHILIPS_PAL, + }, + [ 0x15 ] = { + .model = "NTSC", + .tuner_type = TUNER_ABSENT /* FIXME */, + }, +}; + +static void board_flyvideo(struct saa7134_dev *dev) +{ + u32 value; + int index; + + saa_writel(SAA7134_GPIO_GPMODE0 >> 2, 0); + value = saa_readl(SAA7134_GPIO_GPSTATUS0 >> 2); +#if 0 + index = (value & 0x1f00) >> 8; + printk(KERN_INFO "%s: flyvideo: gpio is 0x%x [model=%s,tuner=%d]\n", + dev->name, value, fly_list[index].model, + fly_list[index].tuner_type); + dev->tuner_type = fly_list[index].tuner_type; +#else + printk(KERN_INFO "%s: flyvideo: gpio is 0x%x\n", + dev->name, value); +#endif +} + +/* ----------------------------------------------------------- */ + +static void board_cinergy(struct saa7134_dev *dev) +{ + u32 value; + + saa_writel(SAA7134_GPIO_GPMODE0 >> 2, 0); + value = saa_readl(SAA7134_GPIO_GPSTATUS0 >> 2); + printk(KERN_INFO "%s: cinergy: gpio is 0x%x\n", + dev->name, value); +} + +/* ----------------------------------------------------------- */ +int saa7134_board_init(struct saa7134_dev *dev) +{ + switch (dev->board) { + case SAA7134_BOARD_FLYVIDEO2000: + case SAA7134_BOARD_FLYVIDEO3000: + board_flyvideo(dev); + saa_andorl(SAA7134_IRQ2, SAA7134_IRQ2_INTE_GPIO18, + SAA7134_IRQ2_INTE_GPIO18); /* For IR */ + break; + /* Seems to use GPIO18. */ + case SAA7134_BOARD_CINERGY400: + board_cinergy(dev); + saa_andorl(SAA7134_IRQ2, SAA7134_IRQ2_INTE_GPIO18, + SAA7134_IRQ2_INTE_GPIO18); /* For IR */ + break; + } + return 0; +} + +/* ----------------------------------------------------------- */ /* * Local variables: * c-basic-offset: 8