[PATCH] v4l: update for SAA7134 cards

This patch adds support for various SAA7134 cards and brings some fixes.

Signed-off-by: Mauro Carvalho Chehab <mchehab@brturbo.com.br>
Signed-off-by: Fabrice Aeschbacher <fabrice.aeschbacher@laposte.net>
Signed-off-by: Hermann Pitton <hermann.pitton@onlinehome.de>.
Signed-off-by: Nickolay V Shmyrev <nshmyrev@yandex.ru>
Signed-off-by: Adrian Bunk <bunk@stusta.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by Mauro Carvalho Chehab and committed by Linus Torvalds ac19ecc6 56fc08ca

+333 -96
+11 -10
drivers/media/video/saa7134/saa6752hs.c
··· 22 22 23 23 /* Addresses to scan */ 24 24 static unsigned short normal_i2c[] = {0x20, I2C_CLIENT_END}; 25 + static unsigned short normal_i2c_range[] = {I2C_CLIENT_END}; 25 26 I2C_CLIENT_INSMOD; 26 27 27 28 MODULE_DESCRIPTION("device driver for saa6752hs MPEG2 encoder"); ··· 42 41 43 42 static const struct v4l2_format v4l2_format_table[] = 44 43 { 45 - [SAA6752HS_VF_D1] = { 46 - .fmt = { .pix = { .width = 720, .height = 576 }, }, }, 47 - [SAA6752HS_VF_2_3_D1] = { 48 - .fmt = { .pix = { .width = 480, .height = 576 }, }, }, 49 - [SAA6752HS_VF_1_2_D1] = { 50 - .fmt = { .pix = { .width = 352, .height = 576 }, }, }, 51 - [SAA6752HS_VF_SIF] = { 52 - .fmt = { .pix = { .width = 352, .height = 288 }, }, }, 53 - [SAA6752HS_VF_UNKNOWN] = { 54 - .fmt = { .pix = { .width = 0, .height = 0 }, }, }, 44 + [SAA6752HS_VF_D1] = 45 + { .fmt = { .pix = { .width = 720, .height = 576 }}}, 46 + [SAA6752HS_VF_2_3_D1] = 47 + { .fmt = { .pix = { .width = 480, .height = 576 }}}, 48 + [SAA6752HS_VF_1_2_D1] = 49 + { .fmt = { .pix = { .width = 352, .height = 576 }}}, 50 + [SAA6752HS_VF_SIF] = 51 + { .fmt = { .pix = { .width = 352, .height = 288 }}}, 52 + [SAA6752HS_VF_UNKNOWN] = 53 + { .fmt = { .pix = { .width = 0, .height = 0}}}, 55 54 }; 56 55 57 56 struct saa6752hs_state {
+147 -16
drivers/media/video/saa7134/saa7134-cards.c
··· 1 1 2 2 /* 3 - * $Id: saa7134-cards.c,v 1.54 2005/03/07 12:01:51 kraxel Exp $ 3 + * $Id: saa7134-cards.c,v 1.58 2005/06/07 18:05:00 nsh Exp $ 4 4 * 5 5 * device driver for philips saa7134 based TV cards 6 6 * card-specific stuff. ··· 165 165 .inputs = {{ 166 166 .name = name_tv, 167 167 .vmux = 1, 168 - .amux = LINE2, 168 + .amux = TV, 169 169 .tv = 1, 170 170 },{ 171 171 .name = name_comp1, ··· 878 878 }, 879 879 [SAA7134_BOARD_MANLI_MTV002] = { 880 880 /* Ognjen Nastic <ognjen@logosoft.ba> */ 881 - .name = "Manli MuchTV M-TV002", 881 + .name = "Manli MuchTV M-TV002/Behold TV 403 FM", 882 882 .audio_clock = 0x00200000, 883 883 .tuner_type = TUNER_PHILIPS_PAL, 884 884 .inputs = {{ ··· 899 899 .name = name_radio, 900 900 .amux = LINE2, 901 901 }, 902 - .mute = { 903 - .name = name_mute, 904 - .amux = LINE1, 905 - }, 906 902 }, 907 903 [SAA7134_BOARD_MANLI_MTV001] = { 908 904 /* Ognjen Nastic <ognjen@logosoft.ba> UNTESTED */ 909 - .name = "Manli MuchTV M-TV001", 905 + .name = "Manli MuchTV M-TV001/Behold TV 401", 910 906 .audio_clock = 0x00200000, 911 907 .tuner_type = TUNER_PHILIPS_PAL, 912 908 .inputs = {{ ··· 919 923 .amux = LINE2, 920 924 .tv = 1, 921 925 }}, 926 + .mute = { 927 + .name = name_mute, 928 + .amux = LINE1, 929 + }, 922 930 }, 923 931 [SAA7134_BOARD_TG3000TV] = { 924 932 /* TransGear 3000TV */ ··· 1078 1078 .audio_clock = 0x00187de7, 1079 1079 .tuner_type = TUNER_PHILIPS_FM1256_IH3, 1080 1080 .tda9887_conf = TDA9887_PRESENT, 1081 - .gpiomask = 0x3, 1082 1081 .inputs = {{ 1083 1082 .name = name_tv, 1084 1083 .vmux = 1, ··· 1284 1285 .gpio =0x8000, 1285 1286 } 1286 1287 }, 1287 - [SAA7134_BOARD_AVERMEDIA_307] = { 1288 + [SAA7134_BOARD_AVERMEDIA_STUDIO_307] = { 1288 1289 /* 1289 1290 Nickolay V. Shmyrev <nshmyrev@yandex.ru> 1290 1291 Lots of thanks to Andrey Zolotarev <zolotarev_andrey@mail.ru> ··· 1320 1321 .name = name_radio, 1321 1322 .amux = LINE1, 1322 1323 .gpio = 0x01, 1324 + }, 1325 + }, 1326 + [SAA7134_BOARD_AVERMEDIA_GO_007_FM] = { 1327 + .name = "Avermedia AVerTV GO 007 FM", 1328 + .audio_clock = 0x00187de7, 1329 + .tuner_type = TUNER_PHILIPS_TDA8290, 1330 + .gpiomask = 0x00300003, 1331 + // .gpiomask = 0x8c240003, 1332 + .inputs = {{ 1333 + .name = name_tv, 1334 + .vmux = 1, 1335 + .amux = TV, 1336 + .tv = 1, 1337 + .gpio = 0x01, 1338 + },{ 1339 + .name = name_comp1, 1340 + .vmux = 0, 1341 + .amux = LINE2, 1342 + .gpio = 0x02, 1343 + },{ 1344 + .name = name_svideo, 1345 + .vmux = 6, 1346 + .amux = LINE2, 1347 + .gpio = 0x02, 1348 + }}, 1349 + .radio = { 1350 + .name = name_radio, 1351 + .amux = LINE1, 1352 + .gpio = 0x00300001, 1323 1353 }, 1324 1354 }, 1325 1355 [SAA7134_BOARD_AVERMEDIA_CARDBUS] = { ··· 1520 1492 .audio_clock = 0x00187de7, 1521 1493 .tuner_type = TUNER_PHILIPS_FQ1216ME, 1522 1494 .tda9887_conf = TDA9887_PRESENT, 1523 - .gpiomask = 0x3, 1524 1495 .inputs = {{ 1525 1496 .name = name_tv, 1526 1497 .vmux = 1, ··· 1573 1546 // .gpio = 0x4000, 1574 1547 }}, 1575 1548 }, 1576 - }; 1549 + [SAA7134_BOARD_AVERMEDIA_307] = { 1550 + /* 1551 + Davydov Vladimir <vladimir@iqmedia.com> 1552 + */ 1553 + .name = "Avermedia AVerTV 307", 1554 + .audio_clock = 0x00187de7, 1555 + .tuner_type = TUNER_PHILIPS_FQ1216ME, 1556 + .tda9887_conf = TDA9887_PRESENT, 1557 + .inputs = {{ 1558 + .name = name_tv, 1559 + .vmux = 1, 1560 + .amux = TV, 1561 + .tv = 1, 1562 + },{ 1563 + .name = name_comp1, 1564 + .vmux = 0, 1565 + .amux = LINE1, 1566 + },{ 1567 + .name = name_comp2, 1568 + .vmux = 3, 1569 + .amux = LINE1, 1570 + },{ 1571 + .name = name_svideo, 1572 + .vmux = 8, 1573 + .amux = LINE1, 1574 + }}, 1575 + }, 1576 + [SAA7134_BOARD_ADS_INSTANT_TV] = { 1577 + .name = "ADS Tech Instant TV (saa7135)", 1578 + .audio_clock = 0x00187de7, 1579 + .tuner_type = TUNER_PHILIPS_TDA8290, 1580 + .inputs = {{ 1581 + .name = name_tv, 1582 + .vmux = 1, 1583 + .amux = TV, 1584 + .tv = 1, 1585 + },{ 1586 + .name = name_comp1, 1587 + .vmux = 3, 1588 + .amux = LINE2, 1589 + },{ 1590 + .name = name_svideo, 1591 + .vmux = 8, 1592 + .amux = LINE2, 1593 + }}, 1594 + }, 1595 + [SAA7134_BOARD_KWORLD_VSTREAM_XPERT] = { 1596 + .name = "Kworld/Tevion V-Stream Xpert TV PVR7134", 1597 + .audio_clock = 0x00187de7, 1598 + .tuner_type = TUNER_PHILIPS_PAL_I, 1599 + .gpiomask = 0x0700, 1600 + .inputs = {{ 1601 + .name = name_tv, 1602 + .vmux = 1, 1603 + .amux = TV, 1604 + .tv = 1, 1605 + .gpio = 0x000, 1606 + },{ 1607 + .name = name_comp1, 1608 + .vmux = 3, 1609 + .amux = LINE1, 1610 + .gpio = 0x200, //gpio by DScaler 1611 + },{ 1612 + .name = name_svideo, 1613 + .vmux = 0, 1614 + .amux = LINE1, 1615 + .gpio = 0x200, 1616 + }}, 1617 + .radio = { 1618 + .name = name_radio, 1619 + .amux = LINE1, 1620 + .gpio = 0x100, 1621 + }, 1622 + }, 1623 + }; 1624 + 1577 1625 const unsigned int saa7134_bcount = ARRAY_SIZE(saa7134_boards); 1578 1626 1579 1627 /* ------------------------------------------------------------------ */ ··· 1765 1663 .driver_data = SAA7134_BOARD_ASUSTeK_TVFM7134, 1766 1664 },{ 1767 1665 .vendor = PCI_VENDOR_ID_PHILIPS, 1768 - .device = PCI_DEVICE_ID_PHILIPS_SAA7133, 1666 + .device = PCI_DEVICE_ID_PHILIPS_SAA7135, 1769 1667 .subvendor = PCI_VENDOR_ID_ASUSTEK, 1770 1668 .subdevice = 0x4845, 1771 1669 .driver_data = SAA7135_BOARD_ASUSTeK_TVFM7135, ··· 1926 1824 .device = PCI_DEVICE_ID_PHILIPS_SAA7134, 1927 1825 .subvendor = 0x1461, /* Avermedia Technologies Inc */ 1928 1826 .subdevice = 0x9715, 1827 + .driver_data = SAA7134_BOARD_AVERMEDIA_STUDIO_307, 1828 + },{ 1829 + .vendor = PCI_VENDOR_ID_PHILIPS, 1830 + .device = PCI_DEVICE_ID_PHILIPS_SAA7134, 1831 + .subvendor = 0x1461, /* Avermedia Technologies Inc */ 1832 + .subdevice = 0xa70a, 1929 1833 .driver_data = SAA7134_BOARD_AVERMEDIA_307, 1930 1834 },{ 1931 1835 .vendor = PCI_VENDOR_ID_PHILIPS, ··· 1952 1844 .subvendor = 0x5168, 1953 1845 .subdevice = 0x0306, 1954 1846 .driver_data = SAA7134_BOARD_FLYDVBTDUO, 1847 + },{ 1848 + .vendor = PCI_VENDOR_ID_PHILIPS, 1849 + .device = PCI_DEVICE_ID_PHILIPS_SAA7133, 1850 + .subvendor = 0x1461, /* Avermedia Technologies Inc */ 1851 + .subdevice = 0xf31f, 1852 + .driver_data = SAA7134_BOARD_AVERMEDIA_GO_007_FM, 1853 + 1854 + },{ 1855 + .vendor = PCI_VENDOR_ID_PHILIPS, 1856 + .device = PCI_DEVICE_ID_PHILIPS_SAA7135, 1857 + .subvendor = 0x1421, 1858 + .subdevice = 0x0350, /* PCI version */ 1859 + .driver_data = SAA7134_BOARD_ADS_INSTANT_TV, 1860 + 1861 + },{ 1862 + .vendor = PCI_VENDOR_ID_PHILIPS, 1863 + .device = PCI_DEVICE_ID_PHILIPS_SAA7135, 1864 + .subvendor = 0x1421, 1865 + .subdevice = 0x0370, /* cardbus version */ 1866 + .driver_data = SAA7134_BOARD_ADS_INSTANT_TV, 1955 1867 1956 1868 },{ 1957 1869 /* --- boards without eeprom + subsystem ID --- */ ··· 2082 1954 dev->has_remote = 1; 2083 1955 board_flyvideo(dev); 2084 1956 break; 2085 - case SAA7134_BOARD_FLYTVPLATINUM_FM: 1957 + case SAA7134_BOARD_FLYTVPLATINUM_FM: 2086 1958 case SAA7134_BOARD_CINERGY400: 2087 1959 case SAA7134_BOARD_CINERGY600: 2088 1960 case SAA7134_BOARD_CINERGY600_MK3: 2089 1961 case SAA7134_BOARD_ECS_TVP3XP: 2090 1962 case SAA7134_BOARD_ECS_TVP3XP_4CB5: 2091 1963 case SAA7134_BOARD_MD2819: 1964 + case SAA7134_BOARD_KWORLD_VSTREAM_XPERT: 2092 1965 case SAA7134_BOARD_AVERMEDIA_STUDIO_305: 2093 1966 case SAA7134_BOARD_AVERMEDIA_305: 1967 + case SAA7134_BOARD_AVERMEDIA_STUDIO_307: 2094 1968 case SAA7134_BOARD_AVERMEDIA_307: 1969 + case SAA7134_BOARD_AVERMEDIA_GO_007_FM: 2095 1970 // case SAA7134_BOARD_SABRENT_SBTTVFM: /* not finished yet */ 2096 1971 case SAA7134_BOARD_VIDEOMATE_TV_PVR: 2097 - dev->has_remote = 1; 2098 - break; 1972 + case SAA7134_BOARD_MANLI_MTV001: 1973 + case SAA7134_BOARD_MANLI_MTV002: 2099 1974 case SAA7134_BOARD_AVACSSMARTTV: 2100 1975 dev->has_remote = 1; 2101 1976 break;
+1 -1
drivers/media/video/saa7134/saa7134-core.c
··· 1 1 /* 2 - * $Id: saa7134-core.c,v 1.28 2005/02/22 09:56:29 kraxel Exp $ 2 + * $Id: saa7134-core.c,v 1.30 2005/05/22 19:23:39 nsh Exp $ 3 3 * 4 4 * device driver for philips saa7134 based TV cards 5 5 * driver core
+1 -1
drivers/media/video/saa7134/saa7134-dvb.c
··· 1 1 /* 2 - * $Id: saa7134-dvb.c,v 1.12 2005/02/18 12:28:29 kraxel Exp $ 2 + * $Id: saa7134-dvb.c,v 1.13 2005/06/12 04:19:19 mchehab Exp $ 3 3 * 4 4 * (c) 2004 Gerd Knorr <kraxel@bytesex.org> [SuSE Labs] 5 5 *
+1 -1
drivers/media/video/saa7134/saa7134-empress.c
··· 1 1 /* 2 - * $Id: saa7134-empress.c,v 1.10 2005/02/03 10:24:33 kraxel Exp $ 2 + * $Id: saa7134-empress.c,v 1.11 2005/05/22 19:23:39 nsh Exp $ 3 3 * 4 4 * (c) 2004 Gerd Knorr <kraxel@bytesex.org> [SuSE Labs] 5 5 *
+1 -1
drivers/media/video/saa7134/saa7134-i2c.c
··· 1 1 /* 2 - * $Id: saa7134-i2c.c,v 1.10 2005/01/24 17:37:23 kraxel Exp $ 2 + * $Id: saa7134-i2c.c,v 1.11 2005/06/12 01:36:14 mchehab Exp $ 3 3 * 4 4 * device driver for philips saa7134 based TV cards 5 5 * i2c interface support
+110 -2
drivers/media/video/saa7134/saa7134-input.c
··· 1 1 /* 2 - * $Id: saa7134-input.c,v 1.16 2004/12/10 12:33:39 kraxel Exp $ 2 + * $Id: saa7134-input.c,v 1.19 2005/06/07 18:02:26 nsh Exp $ 3 3 * 4 4 * handle saa7134 IR remotes via linux kernel input layer. 5 5 * ··· 308 308 [ 32 ] = KEY_LANGUAGE, 309 309 [ 33 ] = KEY_SLEEP, 310 310 }; 311 + 312 + /* Michael Tokarev <mjt@tls.msk.ru> 313 + http://www.corpit.ru/mjt/beholdTV/remote_control.jpg 314 + keytable is used by MANLI MTV00[12] and BeholdTV 40[13] at 315 + least, and probably other cards too. 316 + The "ascii-art picture" below (in comments, first row 317 + is the keycode in hex, and subsequent row(s) shows 318 + the button labels (several variants when appropriate) 319 + helps to descide which keycodes to assign to the buttons. 320 + */ 321 + static IR_KEYTAB_TYPE manli_codes[IR_KEYTAB_SIZE] = { 322 + 323 + /* 0x1c 0x12 * 324 + * FUNCTION POWER * 325 + * FM (|) * 326 + * */ 327 + [ 0x1c ] = KEY_RADIO, /*XXX*/ 328 + [ 0x12 ] = KEY_POWER, 329 + 330 + /* 0x01 0x02 0x03 * 331 + * 1 2 3 * 332 + * * 333 + * 0x04 0x05 0x06 * 334 + * 4 5 6 * 335 + * * 336 + * 0x07 0x08 0x09 * 337 + * 7 8 9 * 338 + * */ 339 + [ 0x01 ] = KEY_KP1, 340 + [ 0x02 ] = KEY_KP2, 341 + [ 0x03 ] = KEY_KP3, 342 + [ 0x04 ] = KEY_KP4, 343 + [ 0x05 ] = KEY_KP5, 344 + [ 0x06 ] = KEY_KP6, 345 + [ 0x07 ] = KEY_KP7, 346 + [ 0x08 ] = KEY_KP8, 347 + [ 0x09 ] = KEY_KP9, 348 + 349 + /* 0x0a 0x00 0x17 * 350 + * RECALL 0 +100 * 351 + * PLUS * 352 + * */ 353 + [ 0x0a ] = KEY_AGAIN, /*XXX KEY_REWIND? */ 354 + [ 0x00 ] = KEY_KP0, 355 + [ 0x17 ] = KEY_DIGITS, /*XXX*/ 356 + 357 + /* 0x14 0x10 * 358 + * MENU INFO * 359 + * OSD */ 360 + [ 0x14 ] = KEY_MENU, 361 + [ 0x10 ] = KEY_INFO, 362 + 363 + /* 0x0b * 364 + * Up * 365 + * * 366 + * 0x18 0x16 0x0c * 367 + * Left Ok Right * 368 + * * 369 + * 0x015 * 370 + * Down * 371 + * */ 372 + [ 0x0b ] = KEY_UP, /*XXX KEY_SCROLLUP? */ 373 + [ 0x18 ] = KEY_LEFT, /*XXX KEY_BACK? */ 374 + [ 0x16 ] = KEY_OK, /*XXX KEY_SELECT? KEY_ENTER? */ 375 + [ 0x0c ] = KEY_RIGHT, /*XXX KEY_FORWARD? */ 376 + [ 0x15 ] = KEY_DOWN, /*XXX KEY_SCROLLDOWN? */ 377 + 378 + /* 0x11 0x0d * 379 + * TV/AV MODE * 380 + * SOURCE STEREO * 381 + * */ 382 + [ 0x11 ] = KEY_TV, /*XXX*/ 383 + [ 0x0d ] = KEY_MODE, /*XXX there's no KEY_STEREO */ 384 + 385 + /* 0x0f 0x1b 0x1a * 386 + * AUDIO Vol+ Chan+ * 387 + * TIMESHIFT??? * 388 + * * 389 + * 0x0e 0x1f 0x1e * 390 + * SLEEP Vol- Chan- * 391 + * */ 392 + [ 0x0f ] = KEY_AUDIO, 393 + [ 0x1b ] = KEY_VOLUMEUP, 394 + [ 0x1a ] = KEY_CHANNELUP, 395 + [ 0x0e ] = KEY_SLEEP, /*XXX maybe KEY_PAUSE */ 396 + [ 0x1f ] = KEY_VOLUMEDOWN, 397 + [ 0x1e ] = KEY_CHANNELDOWN, 398 + 399 + /* 0x13 0x19 * 400 + * MUTE SNAPSHOT* 401 + * */ 402 + [ 0x13 ] = KEY_MUTE, 403 + [ 0x19 ] = KEY_RECORD, /*XXX*/ 404 + 405 + // 0x1d unused ? 406 + }; 311 407 /* ---------------------------------------------------------------------- */ 312 408 313 409 static int build_key(struct saa7134_dev *dev) ··· 475 379 switch (dev->board) { 476 380 case SAA7134_BOARD_FLYVIDEO2000: 477 381 case SAA7134_BOARD_FLYVIDEO3000: 478 - case SAA7134_BOARD_FLYTVPLATINUM_FM: 382 + case SAA7134_BOARD_FLYTVPLATINUM_FM: 479 383 ir_codes = flyvideo_codes; 480 384 mask_keycode = 0xEC00000; 481 385 mask_keydown = 0x0040000; ··· 501 405 polling = 50; // ms 502 406 break; 503 407 case SAA7134_BOARD_MD2819: 408 + case SAA7134_BOARD_KWORLD_VSTREAM_XPERT: 504 409 case SAA7134_BOARD_AVERMEDIA_305: 505 410 case SAA7134_BOARD_AVERMEDIA_307: 411 + case SAA7134_BOARD_AVERMEDIA_STUDIO_305: 412 + case SAA7134_BOARD_AVERMEDIA_STUDIO_307: 413 + case SAA7134_BOARD_AVERMEDIA_GO_007_FM: 506 414 ir_codes = md2819_codes; 507 415 mask_keycode = 0x0007C8; 508 416 mask_keydown = 0x000010; ··· 514 414 /* Set GPIO pin2 to high to enable the IR controller */ 515 415 saa_setb(SAA7134_GPIO_GPMODE0, 0x4); 516 416 saa_setb(SAA7134_GPIO_GPSTATUS0, 0x4); 417 + break; 418 + case SAA7134_BOARD_MANLI_MTV001: 419 + case SAA7134_BOARD_MANLI_MTV002: 420 + ir_codes = manli_codes; 421 + mask_keycode = 0x001f00; 422 + mask_keyup = 0x004000; 423 + mask_keydown = 0x002000; 424 + polling = 50; // ms 517 425 break; 518 426 case SAA7134_BOARD_VIDEOMATE_TV_PVR: 519 427 ir_codes = videomate_tv_pvr_codes;
+7 -9
drivers/media/video/saa7134/saa7134-oss.c
··· 1 1 /* 2 - * $Id: saa7134-oss.c,v 1.13 2004/12/10 12:33:39 kraxel Exp $ 2 + * $Id: saa7134-oss.c,v 1.14 2005/05/18 22:45:16 hhackmann Exp $ 3 3 * 4 4 * device driver for philips saa7134 based TV cards 5 5 * oss dsp interface ··· 49 49 50 50 static int dsp_buffer_conf(struct saa7134_dev *dev, int blksize, int blocks) 51 51 { 52 - blksize &= ~0xff; 53 52 if (blksize < 0x100) 54 53 blksize = 0x100; 55 54 if (blksize > 0x10000) ··· 56 57 57 58 if (blocks < 2) 58 59 blocks = 2; 59 - while ((blksize * blocks) & ~PAGE_MASK) 60 - blocks++; 61 60 if ((blksize * blocks) > 1024*1024) 62 61 blocks = 1024*1024 / blksize; 63 62 ··· 76 79 BUG(); 77 80 videobuf_dma_init(&dev->oss.dma); 78 81 err = videobuf_dma_init_kernel(&dev->oss.dma, PCI_DMA_FROMDEVICE, 79 - dev->oss.bufsize >> PAGE_SHIFT); 82 + (dev->oss.bufsize + PAGE_SIZE) >> PAGE_SHIFT); 80 83 if (0 != err) 81 84 return err; 82 85 return 0; ··· 160 163 fmt |= 0x04; 161 164 fmt |= (TV == dev->oss.input) ? 0xc0 : 0x80; 162 165 163 - saa_writeb(SAA7134_NUM_SAMPLES0, (dev->oss.blksize & 0x0000ff)); 164 - saa_writeb(SAA7134_NUM_SAMPLES1, (dev->oss.blksize & 0x00ff00) >> 8); 165 - saa_writeb(SAA7134_NUM_SAMPLES2, (dev->oss.blksize & 0xff0000) >> 16); 166 + saa_writeb(SAA7134_NUM_SAMPLES0, ((dev->oss.blksize - 1) & 0x0000ff)); 167 + saa_writeb(SAA7134_NUM_SAMPLES1, ((dev->oss.blksize - 1) & 0x00ff00) >> 8); 168 + saa_writeb(SAA7134_NUM_SAMPLES2, ((dev->oss.blksize - 1) & 0xff0000) >> 16); 166 169 saa_writeb(SAA7134_AUDIO_FORMAT_CTRL, fmt); 170 + 167 171 break; 168 172 case PCI_DEVICE_ID_PHILIPS_SAA7133: 169 173 case PCI_DEVICE_ID_PHILIPS_SAA7135: ··· 815 817 reg = SAA7134_RS_BA1(6); 816 818 } else { 817 819 /* even */ 818 - if (0 == (dev->oss.dma_blk & 0x00)) 820 + if (1 == (dev->oss.dma_blk & 0x01)) 819 821 reg = SAA7134_RS_BA2(6); 820 822 } 821 823 if (0 == reg) {
+13 -8
drivers/media/video/saa7134/saa7134-tvaudio.c
··· 1 1 /* 2 - * $Id: saa7134-tvaudio.c,v 1.22 2005/01/07 13:11:19 kraxel Exp $ 2 + * $Id: saa7134-tvaudio.c,v 1.25 2005/06/07 19:00:38 nsh Exp $ 3 3 * 4 4 * device driver for philips saa7134 based TV cards 5 5 * tv audio decoder (fm stereo, nicam, ...) ··· 181 181 saa_writeb(SAA7134_AUDIO_CLOCK0, clock & 0xff); 182 182 saa_writeb(SAA7134_AUDIO_CLOCK1, (clock >> 8) & 0xff); 183 183 saa_writeb(SAA7134_AUDIO_CLOCK2, (clock >> 16) & 0xff); 184 - saa_writeb(SAA7134_AUDIO_PLL_CTRL, 0x01); 184 + // frame locked audio was reported not to be reliable 185 + saa_writeb(SAA7134_AUDIO_PLL_CTRL, 0x02); 185 186 186 187 saa_writeb(SAA7134_NICAM_ERROR_LOW, 0x14); 187 188 saa_writeb(SAA7134_NICAM_ERROR_HIGH, 0x50); ··· 251 250 saa_andorb(SAA7134_AUDIO_FORMAT_CTRL, 0xc0, ausel); 252 251 saa_andorb(SAA7134_ANALOG_IO_SELECT, 0x08, ics); 253 252 saa_andorb(SAA7134_ANALOG_IO_SELECT, 0x07, ocs); 253 + // for oss, we need to change the clock configuration 254 + if (in->amux == TV) 255 + saa_andorb(SAA7134_SIF_SAMPLE_FREQ, 0x03, 0x00); 256 + else 257 + saa_andorb(SAA7134_SIF_SAMPLE_FREQ, 0x03, 0x01); 254 258 255 259 /* switch gpio-connected external audio mux */ 256 260 if (0 == card(dev).gpiomask) ··· 445 439 nicam = saa_readb(SAA7134_NICAM_STATUS); 446 440 dprintk("getstereo: nicam=0x%x\n",nicam); 447 441 switch (nicam & 0x0b) { 442 + case 0x08: 443 + retval = V4L2_TUNER_SUB_MONO; 444 + break; 448 445 case 0x09: 449 446 retval = V4L2_TUNER_SUB_LANG1 | V4L2_TUNER_SUB_LANG2; 450 447 break; 451 448 case 0x0a: 452 449 retval = V4L2_TUNER_SUB_MONO | V4L2_TUNER_SUB_STEREO; 453 - break; 454 - case 0x08: 455 - default: 456 - retval = V4L2_TUNER_SUB_MONO; 457 450 break; 458 451 } 459 452 break; ··· 577 572 } else if (0 != dev->last_carrier) { 578 573 /* no carrier -- try last detected one as fallback */ 579 574 carrier = dev->last_carrier; 580 - printk(KERN_WARNING "%s/audio: audio carrier scan failed, " 575 + dprintk(KERN_WARNING "%s/audio: audio carrier scan failed, " 581 576 "using %d.%03d MHz [last detected]\n", 582 577 dev->name, carrier/1000, carrier%1000); 583 578 584 579 } else { 585 580 /* no carrier + no fallback -- use default */ 586 581 carrier = default_carrier; 587 - printk(KERN_WARNING "%s/audio: audio carrier scan failed, " 582 + dprintk(KERN_WARNING "%s/audio: audio carrier scan failed, " 588 583 "using %d.%03d MHz [default]\n", 589 584 dev->name, carrier/1000, carrier%1000); 590 585 }
+1 -1
drivers/media/video/saa7134/saa7134-vbi.c
··· 1 1 /* 2 - * $Id: saa7134-vbi.c,v 1.6 2004/12/10 12:33:39 kraxel Exp $ 2 + * $Id: saa7134-vbi.c,v 1.7 2005/05/24 23:13:06 nsh Exp $ 3 3 * 4 4 * device driver for philips saa7134 based TV cards 5 5 * video4linux video interface
+22 -39
drivers/media/video/saa7134/saa7134-video.c
··· 1 1 /* 2 - * $Id: saa7134-video.c,v 1.28 2005/02/15 15:59:35 kraxel Exp $ 2 + * $Id: saa7134-video.c,v 1.30 2005/06/07 19:00:38 nsh Exp $ 3 3 * 4 4 * device driver for philips saa7134 based TV cards 5 5 * video4linux video interface ··· 30 30 31 31 #include "saa7134-reg.h" 32 32 #include "saa7134.h" 33 - 34 - #define V4L2_I2C_CLIENTS 1 35 33 36 34 /* ------------------------------------------------------------------ */ 37 35 ··· 274 276 275 277 .h_start = 0, 276 278 .h_stop = 719, 277 - .video_v_start = 23, 278 - .video_v_stop = 262, 279 - .vbi_v_start_0 = 10, 280 - .vbi_v_stop_0 = 21, 281 - .vbi_v_start_1 = 273, 282 - .src_timing = 7, 279 + .video_v_start = 23, 280 + .video_v_stop = 262, 281 + .vbi_v_start_0 = 10, 282 + .vbi_v_stop_0 = 21, 283 + .vbi_v_start_1 = 273, 284 + .src_timing = 7, 283 285 284 286 .sync_control = 0x18, 285 287 .luma_control = 0x40, ··· 522 524 saa_writeb(SAA7134_RAW_DATA_GAIN, 0x40); 523 525 saa_writeb(SAA7134_RAW_DATA_OFFSET, 0x80); 524 526 525 - #ifdef V4L2_I2C_CLIENTS 526 527 saa7134_i2c_call_clients(dev,VIDIOC_S_STD,&norm->id); 527 - #else 528 - { 529 - /* pass down info to the i2c chips (v4l1) */ 530 - struct video_channel c; 531 - memset(&c,0,sizeof(c)); 532 - c.channel = dev->ctl_input; 533 - c.norm = VIDEO_MODE_PAL; 534 - if (norm->id & V4L2_STD_NTSC) 535 - c.norm = VIDEO_MODE_NTSC; 536 - if (norm->id & V4L2_STD_SECAM) 537 - c.norm = VIDEO_MODE_SECAM; 538 - saa7134_i2c_call_clients(dev,VIDIOCSCHAN,&c); 539 - } 540 - #endif 541 528 } 542 529 543 530 static void video_mux(struct saa7134_dev *dev, int input) ··· 1866 1883 return -EINVAL; 1867 1884 down(&dev->lock); 1868 1885 dev->ctl_freq = f->frequency; 1869 - #ifdef V4L2_I2C_CLIENTS 1886 + 1870 1887 saa7134_i2c_call_clients(dev,VIDIOC_S_FREQUENCY,f); 1871 - #else 1872 - saa7134_i2c_call_clients(dev,VIDIOCSFREQ,&dev->ctl_freq); 1873 - #endif 1888 + 1874 1889 saa7134_tvaudio_do_scan(dev); 1875 1890 up(&dev->lock); 1876 1891 return 0; ··· 2123 2142 t->rangelow = (int)(65*16); 2124 2143 t->rangehigh = (int)(108*16); 2125 2144 2126 - #ifdef V4L2_I2C_CLIENTS 2127 - saa7134_i2c_call_clients(dev,VIDIOC_G_TUNER,t); 2128 - #else 2129 - { 2130 - struct video_tuner vt; 2131 - memset(&vt,0,sizeof(vt)); 2132 - saa7134_i2c_call_clients(dev,VIDIOCGTUNER,&vt); 2133 - t->signal = vt.signal; 2134 - } 2135 - #endif 2145 + saa7134_i2c_call_clients(dev, VIDIOC_G_TUNER, t); 2146 + 2147 + return 0; 2148 + } 2149 + case VIDIOC_S_TUNER: 2150 + { 2151 + struct v4l2_tuner *t = arg; 2152 + 2153 + if (0 != t->index) 2154 + return -EINVAL; 2155 + 2156 + saa7134_i2c_call_clients(dev,VIDIOC_S_TUNER,t); 2157 + 2136 2158 return 0; 2137 2159 } 2138 2160 case VIDIOC_ENUMINPUT: ··· 2169 2185 return 0; 2170 2186 } 2171 2187 case VIDIOC_S_AUDIO: 2172 - case VIDIOC_S_TUNER: 2173 2188 case VIDIOC_S_INPUT: 2174 2189 case VIDIOC_S_STD: 2175 2190 return 0;
+6 -2
drivers/media/video/saa7134/saa7134.h
··· 1 1 /* 2 - * $Id: saa7134.h,v 1.38 2005/03/07 12:01:51 kraxel Exp $ 2 + * $Id: saa7134.h,v 1.41 2005/06/07 18:02:26 nsh Exp $ 3 3 * 4 4 * v4l2 device driver for philips saa7134 based TV cards 5 5 * ··· 168 168 #define SAA7134_BOARD_SABRENT_SBTTVFM 42 169 169 #define SAA7134_BOARD_ZOLID_XPERT_TV7134 43 170 170 #define SAA7134_BOARD_EMPIRE_PCI_TV_RADIO_LE 44 171 - #define SAA7134_BOARD_AVERMEDIA_307 45 171 + #define SAA7134_BOARD_AVERMEDIA_STUDIO_307 45 172 172 #define SAA7134_BOARD_AVERMEDIA_CARDBUS 46 173 173 #define SAA7134_BOARD_CINERGY400_CARDBUS 47 174 174 #define SAA7134_BOARD_CINERGY600_MK3 48 ··· 179 179 #define SAA7135_BOARD_ASUSTeK_TVFM7135 53 180 180 #define SAA7134_BOARD_FLYTVPLATINUM_FM 54 181 181 #define SAA7134_BOARD_FLYDVBTDUO 55 182 + #define SAA7134_BOARD_AVERMEDIA_307 56 183 + #define SAA7134_BOARD_AVERMEDIA_GO_007_FM 57 184 + #define SAA7134_BOARD_ADS_INSTANT_TV 58 185 + #define SAA7134_BOARD_KWORLD_VSTREAM_XPERT 59 182 186 183 187 #define SAA7134_MAXBOARDS 8 184 188 #define SAA7134_INPUT_MAX 8
+2 -1
drivers/media/video/tveeprom.c
··· 75 75 { 0x00000007, "PAL(B/G)" }, 76 76 { 0x00001000, "NTSC(M)" }, 77 77 { 0x00000010, "PAL(I)" }, 78 - { 0x00400000, "SECAM(L/L�)" }, 78 + { 0x00400000, "SECAM(L/L�)" }, 79 79 { 0x00000e00, "PAL(D/K)" }, 80 80 { 0x03000000, "ATSC Digital" }, 81 81 }; ··· 482 482 0xa0 >> 1, 483 483 I2C_CLIENT_END, 484 484 }; 485 + static unsigned short normal_i2c_range[] = { I2C_CLIENT_END }; 485 486 I2C_CLIENT_INSMOD; 486 487 487 488 struct i2c_driver i2c_driver_tveeprom;
+6 -4
drivers/media/video/v4l1-compat.c
··· 1 1 /* 2 + * $Id: v4l1-compat.c,v 1.9 2005/06/12 04:19:19 mchehab Exp $ 3 + * 2 4 * Video for Linux Two 3 5 * Backward Compatibility Layer 4 6 * ··· 17 15 * 18 16 */ 19 17 20 - #ifndef __KERNEL__ 21 - #define __KERNEL__ 22 - #endif 23 - 24 18 #include <linux/config.h> 25 19 26 20 #include <linux/init.h> 27 21 #include <linux/module.h> 22 + #include <linux/moduleparam.h> 28 23 #include <linux/types.h> 29 24 #include <linux/kernel.h> 30 25 #include <linux/sched.h> ··· 786 787 !(qctrl2.flags & V4L2_CTRL_FLAG_DISABLED)) 787 788 aud->step = qctrl2.step; 788 789 aud->mode = 0; 790 + 791 + memset(&tun2,0,sizeof(tun2)); 789 792 err = drv(inode, file, VIDIOC_G_TUNER, &tun2); 790 793 if (err < 0) { 791 794 dprintk("VIDIOCGAUDIO / VIDIOC_G_TUNER: %d\n",err); 792 795 err = 0; 793 796 break; 794 797 } 798 + 795 799 if (tun2.rxsubchans & V4L2_TUNER_SUB_LANG2) 796 800 aud->mode = VIDEO_SOUND_LANG1 | VIDEO_SOUND_LANG2; 797 801 else if (tun2.rxsubchans & V4L2_TUNER_SUB_STEREO)
+4
include/media/tveeprom.h
··· 1 + /* 2 + * $Id: tveeprom.h,v 1.2 2005/06/12 04:19:19 mchehab Exp $ 3 + */ 4 + 1 5 struct tveeprom { 2 6 u32 has_radio; 3 7