diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-01-25 16:59:51 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-01-25 16:59:51 -0500 |
commit | b31fde6db2b76a9f7f59bf016652b46cff43f8da (patch) | |
tree | 2af4c48ae97b9800604fc0b36bc5c274d46d4aa3 /Documentation | |
parent | f31c338675872875e24f124af0689131b0c72600 (diff) | |
parent | a999337b49fcdd2c4a475e97e4b8337ebdfa4abf (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/v4l-dvb
* git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/v4l-dvb: (509 commits)
V4L/DVB (7078): radio: fix sf16fmi section mismatch
V4L/DVB (7077): bt878: remove handcrafted PCI subsystem ID check
V4L/DVB (7075): Make a local function static
V4L/DVB (7074): DiB7000P: correct tuning problem for 7MHz channel
V4L/DVB (7073): DiB7070: Reception quality improved
V4L/DVB (7072): sets the MT2060 IF1 frequency according to EEPROM
V4L/DVB (7071): DiB0700: Start streaming the right way
V4L/DVB (7070): Fix some tuning problems
V4L/DVB (7069): Support for myTV.t
V4L/DVB (7068): Add support for WinTV Nova-T-CE driver
V4L/DVB (7067): fix autoserach in the Hauppauge NOVA-T 500
V4L/DVB (7066): ASUS My Cinema U3000 Mini DVBT Tuner
V4L/DVB (7065): Artec T14BR patches
V4L/DVB (7063): xc5000: Fix OOPS caused by missing firmware
V4L/DVB (7062): radio-si570x: Some fixes and new USB ID addition
V4L/DVB (7061): radio-si470x: Some cleanups
V4L/DVB (7060): em28xx: remove has_tuner
V4L/DVB (7059): cx88: Ensure the tuner is reset correctly
V4L/DVB (7058): IR corrections for the Pinnacle 800i
V4L/DVB (7056): tuner: suppress obsolete tuner i2c address warning for XC5000 tuners
...
Diffstat (limited to 'Documentation')
-rw-r--r-- | Documentation/DocBook/videobook.tmpl | 9 | ||||
-rw-r--r-- | Documentation/dvb/bt8xx.txt | 12 | ||||
-rw-r--r-- | Documentation/video4linux/CARDLIST.cx23885 | 4 | ||||
-rw-r--r-- | Documentation/video4linux/CARDLIST.cx88 | 1 | ||||
-rw-r--r-- | Documentation/video4linux/CARDLIST.em28xx | 17 | ||||
-rw-r--r-- | Documentation/video4linux/CARDLIST.ivtv | 6 | ||||
-rw-r--r-- | Documentation/video4linux/CARDLIST.saa7134 | 17 | ||||
-rw-r--r-- | Documentation/video4linux/CARDLIST.tuner | 5 | ||||
-rw-r--r-- | Documentation/video4linux/CARDLIST.usbvision | 1 | ||||
-rw-r--r-- | Documentation/video4linux/extract_xc3028.pl | 926 | ||||
-rw-r--r-- | Documentation/video4linux/sn9c102.txt | 1 |
11 files changed, 978 insertions, 21 deletions
diff --git a/Documentation/DocBook/videobook.tmpl b/Documentation/DocBook/videobook.tmpl index b629da33951d..b3d93ee27693 100644 --- a/Documentation/DocBook/videobook.tmpl +++ b/Documentation/DocBook/videobook.tmpl | |||
@@ -96,7 +96,6 @@ static struct video_device my_radio | |||
96 | { | 96 | { |
97 | "My radio", | 97 | "My radio", |
98 | VID_TYPE_TUNER, | 98 | VID_TYPE_TUNER, |
99 | VID_HARDWARE_MYRADIO, | ||
100 | radio_open. | 99 | radio_open. |
101 | radio_close, | 100 | radio_close, |
102 | NULL, /* no read */ | 101 | NULL, /* no read */ |
@@ -119,13 +118,6 @@ static struct video_device my_radio | |||
119 | way to change channel so it is tuneable. | 118 | way to change channel so it is tuneable. |
120 | </para> | 119 | </para> |
121 | <para> | 120 | <para> |
122 | The VID_HARDWARE_ types are unique to each device. Numbers are assigned by | ||
123 | <email>alan@redhat.com</email> when device drivers are going to be released. Until then you | ||
124 | can pull a suitably large number out of your hat and use it. 10000 should be | ||
125 | safe for a very long time even allowing for the huge number of vendors | ||
126 | making new and different radio cards at the moment. | ||
127 | </para> | ||
128 | <para> | ||
129 | We declare an open and close routine, but we do not need read or write, | 121 | We declare an open and close routine, but we do not need read or write, |
130 | which are used to read and write video data to or from the card itself. As | 122 | which are used to read and write video data to or from the card itself. As |
131 | we have no read or write there is no poll function. | 123 | we have no read or write there is no poll function. |
@@ -844,7 +836,6 @@ static struct video_device my_camera | |||
844 | "My Camera", | 836 | "My Camera", |
845 | VID_TYPE_OVERLAY|VID_TYPE_SCALES|\ | 837 | VID_TYPE_OVERLAY|VID_TYPE_SCALES|\ |
846 | VID_TYPE_CAPTURE|VID_TYPE_CHROMAKEY, | 838 | VID_TYPE_CAPTURE|VID_TYPE_CHROMAKEY, |
847 | VID_HARDWARE_MYCAMERA, | ||
848 | camera_open. | 839 | camera_open. |
849 | camera_close, | 840 | camera_close, |
850 | camera_read, /* no read */ | 841 | camera_read, /* no read */ |
diff --git a/Documentation/dvb/bt8xx.txt b/Documentation/dvb/bt8xx.txt index ecb47adda063..b7b1d1b1da46 100644 --- a/Documentation/dvb/bt8xx.txt +++ b/Documentation/dvb/bt8xx.txt | |||
@@ -78,6 +78,18 @@ Example: | |||
78 | For a full list of card ID's please see Documentation/video4linux/CARDLIST.bttv. | 78 | For a full list of card ID's please see Documentation/video4linux/CARDLIST.bttv. |
79 | In case of further problems please subscribe and send questions to the mailing list: linux-dvb@linuxtv.org. | 79 | In case of further problems please subscribe and send questions to the mailing list: linux-dvb@linuxtv.org. |
80 | 80 | ||
81 | 2c) Probing the cards with broken PCI subsystem ID | ||
82 | -------------------------------------------------- | ||
83 | There are some TwinHan cards that the EEPROM has become corrupted for some | ||
84 | reason. The cards do not have correct PCI subsystem ID. But we can force | ||
85 | probing the cards with broken PCI subsystem ID | ||
86 | |||
87 | $ echo 109e 0878 $subvendor $subdevice > \ | ||
88 | /sys/bus/pci/drivers/bt878/new_id | ||
89 | |||
90 | 109e: PCI_VENDOR_ID_BROOKTREE | ||
91 | 0878: PCI_DEVICE_ID_BROOKTREE_878 | ||
92 | |||
81 | Authors: Richard Walker, | 93 | Authors: Richard Walker, |
82 | Jamie Honan, | 94 | Jamie Honan, |
83 | Michael Hunold, | 95 | Michael Hunold, |
diff --git a/Documentation/video4linux/CARDLIST.cx23885 b/Documentation/video4linux/CARDLIST.cx23885 index 00cb646a4bde..0924e6e142c4 100644 --- a/Documentation/video4linux/CARDLIST.cx23885 +++ b/Documentation/video4linux/CARDLIST.cx23885 | |||
@@ -1,5 +1,7 @@ | |||
1 | 0 -> UNKNOWN/GENERIC [0070:3400] | 1 | 0 -> UNKNOWN/GENERIC [0070:3400] |
2 | 1 -> Hauppauge WinTV-HVR1800lp [0070:7600] | 2 | 1 -> Hauppauge WinTV-HVR1800lp [0070:7600] |
3 | 2 -> Hauppauge WinTV-HVR1800 [0070:7800,0070:7801] | 3 | 2 -> Hauppauge WinTV-HVR1800 [0070:7800,0070:7801,0070:7809] |
4 | 3 -> Hauppauge WinTV-HVR1250 [0070:7911] | 4 | 3 -> Hauppauge WinTV-HVR1250 [0070:7911] |
5 | 4 -> DViCO FusionHDTV5 Express [18ac:d500] | 5 | 4 -> DViCO FusionHDTV5 Express [18ac:d500] |
6 | 5 -> Hauppauge WinTV-HVR1500Q [0070:7790,0070:7797] | ||
7 | 6 -> Hauppauge WinTV-HVR1500 [0070:7710,0070:7717] | ||
diff --git a/Documentation/video4linux/CARDLIST.cx88 b/Documentation/video4linux/CARDLIST.cx88 index 82ac8250e978..bc5593bd9704 100644 --- a/Documentation/video4linux/CARDLIST.cx88 +++ b/Documentation/video4linux/CARDLIST.cx88 | |||
@@ -56,3 +56,4 @@ | |||
56 | 55 -> Shenzhen Tungsten Ages Tech TE-DTV-250 / Swann OEM [c180:c980] | 56 | 55 -> Shenzhen Tungsten Ages Tech TE-DTV-250 / Swann OEM [c180:c980] |
57 | 56 -> Hauppauge WinTV-HVR1300 DVB-T/Hybrid MPEG Encoder [0070:9600,0070:9601,0070:9602] | 57 | 56 -> Hauppauge WinTV-HVR1300 DVB-T/Hybrid MPEG Encoder [0070:9600,0070:9601,0070:9602] |
58 | 57 -> ADS Tech Instant Video PCI [1421:0390] | 58 | 57 -> ADS Tech Instant Video PCI [1421:0390] |
59 | 58 -> Pinnacle PCTV HD 800i [11bd:0051] | ||
diff --git a/Documentation/video4linux/CARDLIST.em28xx b/Documentation/video4linux/CARDLIST.em28xx index 37f0e3cedf43..6a8469f2bcae 100644 --- a/Documentation/video4linux/CARDLIST.em28xx +++ b/Documentation/video4linux/CARDLIST.em28xx | |||
@@ -1,14 +1,17 @@ | |||
1 | 0 -> Unknown EM2800 video grabber (em2800) [eb1a:2800] | 1 | 0 -> Unknown EM2800 video grabber (em2800) [eb1a:2800] |
2 | 1 -> Unknown EM2820/2840 video grabber (em2820/em2840) | 2 | 1 -> Unknown EM2750/28xx video grabber (em2820/em2840) [eb1a:2750,eb1a:2820,eb1a:2821,eb1a:2860,eb1a:2861,eb1a:2870,eb1a:2881,eb1a:2883] |
3 | 2 -> Terratec Cinergy 250 USB (em2820/em2840) [0ccd:0036] | 3 | 2 -> Terratec Cinergy 250 USB (em2820/em2840) [0ccd:0036] |
4 | 3 -> Pinnacle PCTV USB 2 (em2820/em2840) [2304:0208] | 4 | 3 -> Pinnacle PCTV USB 2 (em2820/em2840) [2304:0208] |
5 | 4 -> Hauppauge WinTV USB 2 (em2820/em2840) [2040:4200] | 5 | 4 -> Hauppauge WinTV USB 2 (em2820/em2840) [2040:4200,2040:4201] |
6 | 5 -> MSI VOX USB 2.0 (em2820/em2840) [eb1a:2820] | 6 | 5 -> MSI VOX USB 2.0 (em2820/em2840) |
7 | 6 -> Terratec Cinergy 200 USB (em2800) | 7 | 6 -> Terratec Cinergy 200 USB (em2800) |
8 | 7 -> Leadtek Winfast USB II (em2800) | 8 | 7 -> Leadtek Winfast USB II (em2800) |
9 | 8 -> Kworld USB2800 (em2800) | 9 | 8 -> Kworld USB2800 (em2800) |
10 | 9 -> Pinnacle Dazzle DVC 90 (em2820/em2840) [2304:0207] | 10 | 9 -> Pinnacle Dazzle DVC 90/DVC 100 (em2820/em2840) [2304:0207,2304:021a] |
11 | 10 -> Hauppauge WinTV HVR 900 (em2880) | 11 | 10 -> Hauppauge WinTV HVR 900 (em2880) [2040:6500] |
12 | 11 -> Terratec Hybrid XS (em2880) | 12 | 11 -> Terratec Hybrid XS (em2880) [0ccd:0042] |
13 | 12 -> Kworld PVR TV 2800 RF (em2820/em2840) | 13 | 12 -> Kworld PVR TV 2800 RF (em2820/em2840) |
14 | 13 -> Terratec Prodigy XS (em2880) | 14 | 13 -> Terratec Prodigy XS (em2880) [0ccd:0047] |
15 | 14 -> Pixelview Prolink PlayTV USB 2.0 (em2820/em2840) | ||
16 | 15 -> V-Gear PocketTV (em2800) | ||
17 | 16 -> Hauppauge WinTV HVR 950 (em2880) [2040:6513] | ||
diff --git a/Documentation/video4linux/CARDLIST.ivtv b/Documentation/video4linux/CARDLIST.ivtv index ddd76a0eb100..a019e27e42b3 100644 --- a/Documentation/video4linux/CARDLIST.ivtv +++ b/Documentation/video4linux/CARDLIST.ivtv | |||
@@ -16,3 +16,9 @@ | |||
16 | 16 -> GOTVIEW PCI DVD2 Deluxe [ffac:0600] | 16 | 16 -> GOTVIEW PCI DVD2 Deluxe [ffac:0600] |
17 | 17 -> Yuan MPC622 [ff01:d998] | 17 | 17 -> Yuan MPC622 [ff01:d998] |
18 | 18 -> Digital Cowboy DCT-MTVP1 [1461:bfff] | 18 | 18 -> Digital Cowboy DCT-MTVP1 [1461:bfff] |
19 | 19 -> Yuan PG600V2/GotView PCI DVD Lite [ffab:0600,ffad:0600] | ||
20 | 20 -> Club3D ZAP-TV1x01 [ffab:0600] | ||
21 | 21 -> AverTV MCE 116 Plus [1461:c439] | ||
22 | 22 -> ASUS Falcon2 [1043:4b66,1043:462e,1043:4b2e] | ||
23 | 23 -> AverMedia PVR-150 Plus [1461:c035] | ||
24 | 24 -> AverMedia EZMaker PCI Deluxe [1461:c03f] | ||
diff --git a/Documentation/video4linux/CARDLIST.saa7134 b/Documentation/video4linux/CARDLIST.saa7134 index a14545300e4c..5d3b6b4d2515 100644 --- a/Documentation/video4linux/CARDLIST.saa7134 +++ b/Documentation/video4linux/CARDLIST.saa7134 | |||
@@ -80,7 +80,7 @@ | |||
80 | 79 -> Sedna/MuchTV PC TV Cardbus TV/Radio (ITO25 Rev:2B) | 80 | 79 -> Sedna/MuchTV PC TV Cardbus TV/Radio (ITO25 Rev:2B) |
81 | 80 -> ASUS Digimatrix TV [1043:0210] | 81 | 80 -> ASUS Digimatrix TV [1043:0210] |
82 | 81 -> Philips Tiger reference design [1131:2018] | 82 | 81 -> Philips Tiger reference design [1131:2018] |
83 | 82 -> MSI TV@Anywhere plus [1462:6231] | 83 | 82 -> MSI TV@Anywhere plus [1462:6231,1462:8624] |
84 | 83 -> Terratec Cinergy 250 PCI TV [153b:1160] | 84 | 83 -> Terratec Cinergy 250 PCI TV [153b:1160] |
85 | 84 -> LifeView FlyDVB Trio [5168:0319] | 85 | 84 -> LifeView FlyDVB Trio [5168:0319] |
86 | 85 -> AverTV DVB-T 777 [1461:2c05,1461:2c05] | 86 | 85 -> AverTV DVB-T 777 [1461:2c05,1461:2c05] |
@@ -102,7 +102,7 @@ | |||
102 | 101 -> Pinnacle PCTV 310i [11bd:002f] | 102 | 101 -> Pinnacle PCTV 310i [11bd:002f] |
103 | 102 -> Avermedia AVerTV Studio 507 [1461:9715] | 103 | 102 -> Avermedia AVerTV Studio 507 [1461:9715] |
104 | 103 -> Compro Videomate DVB-T200A | 104 | 103 -> Compro Videomate DVB-T200A |
105 | 104 -> Hauppauge WinTV-HVR1110 DVB-T/Hybrid [0070:6701] | 105 | 104 -> Hauppauge WinTV-HVR1110 DVB-T/Hybrid [0070:6700,0070:6701,0070:6702,0070:6703,0070:6704,0070:6705] |
106 | 105 -> Terratec Cinergy HT PCMCIA [153b:1172] | 106 | 105 -> Terratec Cinergy HT PCMCIA [153b:1172] |
107 | 106 -> Encore ENLTV [1131:2342,1131:2341,3016:2344] | 107 | 106 -> Encore ENLTV [1131:2342,1131:2341,3016:2344] |
108 | 107 -> Encore ENLTV-FM [1131:230f] | 108 | 107 -> Encore ENLTV-FM [1131:230f] |
@@ -116,3 +116,16 @@ | |||
116 | 115 -> Sabrent PCMCIA TV-PCB05 [0919:2003] | 116 | 115 -> Sabrent PCMCIA TV-PCB05 [0919:2003] |
117 | 116 -> 10MOONS TM300 TV Card [1131:2304] | 117 | 116 -> 10MOONS TM300 TV Card [1131:2304] |
118 | 117 -> Avermedia Super 007 [1461:f01d] | 118 | 117 -> Avermedia Super 007 [1461:f01d] |
119 | 118 -> Beholder BeholdTV 401 [0000:4016] | ||
120 | 119 -> Beholder BeholdTV 403 [0000:4036] | ||
121 | 120 -> Beholder BeholdTV 403 FM [0000:4037] | ||
122 | 121 -> Beholder BeholdTV 405 [0000:4050] | ||
123 | 122 -> Beholder BeholdTV 405 FM [0000:4051] | ||
124 | 123 -> Beholder BeholdTV 407 [0000:4070] | ||
125 | 124 -> Beholder BeholdTV 407 FM [0000:4071] | ||
126 | 125 -> Beholder BeholdTV 409 [0000:4090] | ||
127 | 126 -> Beholder BeholdTV 505 FM/RDS [0000:5051,0000:505B,5ace:5050] | ||
128 | 127 -> Beholder BeholdTV 507 FM/RDS / BeholdTV 509 FM [0000:5071,0000:507B,5ace:5070,5ace:5090] | ||
129 | 128 -> Beholder BeholdTV Columbus TVFM [0000:5201] | ||
130 | 129 -> Beholder BeholdTV 607 / BeholdTV 609 [5ace:6070,5ace:6071,5ace:6072,5ace:6073,5ace:6090,5ace:6091,5ace:6092,5ace:6093] | ||
131 | 130 -> Beholder BeholdTV M6 / BeholdTV M6 Extra [5ace:6190,5ace:6193] | ||
diff --git a/Documentation/video4linux/CARDLIST.tuner b/Documentation/video4linux/CARDLIST.tuner index a88c02d23805..0e2394695bb8 100644 --- a/Documentation/video4linux/CARDLIST.tuner +++ b/Documentation/video4linux/CARDLIST.tuner | |||
@@ -52,7 +52,7 @@ tuner=50 - TCL 2002N | |||
52 | tuner=51 - Philips PAL/SECAM_D (FM 1256 I-H3) | 52 | tuner=51 - Philips PAL/SECAM_D (FM 1256 I-H3) |
53 | tuner=52 - Thomson DTT 7610 (ATSC/NTSC) | 53 | tuner=52 - Thomson DTT 7610 (ATSC/NTSC) |
54 | tuner=53 - Philips FQ1286 | 54 | tuner=53 - Philips FQ1286 |
55 | tuner=54 - tda8290+75 | 55 | tuner=54 - Philips/NXP TDA 8290/8295 + 8275/8275A/18271 |
56 | tuner=55 - TCL 2002MB | 56 | tuner=55 - TCL 2002MB |
57 | tuner=56 - Philips PAL/SECAM multi (FQ1216AME MK4) | 57 | tuner=56 - Philips PAL/SECAM multi (FQ1216AME MK4) |
58 | tuner=57 - Philips FQ1236A MK4 | 58 | tuner=57 - Philips FQ1236A MK4 |
@@ -69,7 +69,8 @@ tuner=67 - Philips TD1316 Hybrid Tuner | |||
69 | tuner=68 - Philips TUV1236D ATSC/NTSC dual in | 69 | tuner=68 - Philips TUV1236D ATSC/NTSC dual in |
70 | tuner=69 - Tena TNF 5335 and similar models | 70 | tuner=69 - Tena TNF 5335 and similar models |
71 | tuner=70 - Samsung TCPN 2121P30A | 71 | tuner=70 - Samsung TCPN 2121P30A |
72 | tuner=71 - Xceive xc3028 | 72 | tuner=71 - Xceive xc2028/xc3028 tuner |
73 | tuner=72 - Thomson FE6600 | 73 | tuner=72 - Thomson FE6600 |
74 | tuner=73 - Samsung TCPG 6121P30A | 74 | tuner=73 - Samsung TCPG 6121P30A |
75 | tuner=75 - Philips TEA5761 FM Radio | 75 | tuner=75 - Philips TEA5761 FM Radio |
76 | tuner=76 - Xceive 5000 tuner | ||
diff --git a/Documentation/video4linux/CARDLIST.usbvision b/Documentation/video4linux/CARDLIST.usbvision index 3d6850ef0245..0b72d3fee17e 100644 --- a/Documentation/video4linux/CARDLIST.usbvision +++ b/Documentation/video4linux/CARDLIST.usbvision | |||
@@ -62,3 +62,4 @@ | |||
62 | 61 -> Pinnacle Studio Linx Video input cable (PAL) [2304:0301] | 62 | 61 -> Pinnacle Studio Linx Video input cable (PAL) [2304:0301] |
63 | 62 -> Pinnacle PCTV Bungee USB (PAL) FM [2304:0419] | 63 | 62 -> Pinnacle PCTV Bungee USB (PAL) FM [2304:0419] |
64 | 63 -> Hauppauge WinTv-USB [2400:4200] | 64 | 63 -> Hauppauge WinTv-USB [2400:4200] |
65 | 64 -> Pinnacle Studio PCTV USB (NTSC) FM V3 [2304:0113] | ||
diff --git a/Documentation/video4linux/extract_xc3028.pl b/Documentation/video4linux/extract_xc3028.pl new file mode 100644 index 000000000000..cced8ac5c543 --- /dev/null +++ b/Documentation/video4linux/extract_xc3028.pl | |||
@@ -0,0 +1,926 @@ | |||
1 | #!/usr/bin/perl | ||
2 | |||
3 | # Copyright (c) Mauro Carvalho Chehab <mchehab@infradead.org> | ||
4 | # Released under GPLv2 | ||
5 | # | ||
6 | # In order to use, you need to: | ||
7 | # 1) Download the windows driver with something like: | ||
8 | # wget http://www.steventoth.net/linux/xc5000/HVR-12x0-14x0-17x0_1_25_25271_WHQL.zip | ||
9 | # 2) Extract the file hcw85bda.sys from the zip into the current dir: | ||
10 | # unzip -j HVR-12x0-14x0-17x0_1_25_25271_WHQL.zip Driver85/hcw85bda.sys | ||
11 | # 3) run the script: | ||
12 | # ./extract_xc3028.pl | ||
13 | # 4) copy the generated file: | ||
14 | # cp xc3028-v27.fw /lib/firmware | ||
15 | |||
16 | #use strict; | ||
17 | use IO::Handle; | ||
18 | |||
19 | my $debug=0; | ||
20 | |||
21 | sub verify ($$) | ||
22 | { | ||
23 | my ($filename, $hash) = @_; | ||
24 | my ($testhash); | ||
25 | |||
26 | if (system("which md5sum > /dev/null 2>&1")) { | ||
27 | die "This firmware requires the md5sum command - see http://www.gnu.org/software/coreutils/\n"; | ||
28 | } | ||
29 | |||
30 | open(CMD, "md5sum ".$filename."|"); | ||
31 | $testhash = <CMD>; | ||
32 | $testhash =~ /([a-zA-Z0-9]*)/; | ||
33 | $testhash = $1; | ||
34 | close CMD; | ||
35 | die "Hash of extracted file does not match (found $testhash, expected $hash!\n" if ($testhash ne $hash); | ||
36 | } | ||
37 | |||
38 | sub get_hunk ($$) | ||
39 | { | ||
40 | my ($offset, $length) = @_; | ||
41 | my ($chunklength, $buf, $rcount, $out); | ||
42 | |||
43 | sysseek(INFILE, $offset, SEEK_SET); | ||
44 | while ($length > 0) { | ||
45 | # Calc chunk size | ||
46 | $chunklength = 2048; | ||
47 | $chunklength = $length if ($chunklength > $length); | ||
48 | |||
49 | $rcount = sysread(INFILE, $buf, $chunklength); | ||
50 | die "Ran out of data\n" if ($rcount != $chunklength); | ||
51 | $out .= $buf; | ||
52 | $length -= $rcount; | ||
53 | } | ||
54 | return $out; | ||
55 | } | ||
56 | |||
57 | sub write_le16($) | ||
58 | { | ||
59 | my $val = shift; | ||
60 | my $msb = ($val >> 8) &0xff; | ||
61 | my $lsb = $val & 0xff; | ||
62 | |||
63 | syswrite(OUTFILE, chr($lsb).chr($msb)); | ||
64 | } | ||
65 | |||
66 | sub write_le32($) | ||
67 | { | ||
68 | my $val = shift; | ||
69 | my $l3 = ($val >> 24) & 0xff; | ||
70 | my $l2 = ($val >> 16) & 0xff; | ||
71 | my $l1 = ($val >> 8) & 0xff; | ||
72 | my $l0 = $val & 0xff; | ||
73 | |||
74 | syswrite(OUTFILE, chr($l0).chr($l1).chr($l2).chr($l3)); | ||
75 | } | ||
76 | |||
77 | sub write_le64($$) | ||
78 | { | ||
79 | my $msb_val = shift; | ||
80 | my $lsb_val = shift; | ||
81 | my $l7 = ($msb_val >> 24) & 0xff; | ||
82 | my $l6 = ($msb_val >> 16) & 0xff; | ||
83 | my $l5 = ($msb_val >> 8) & 0xff; | ||
84 | my $l4 = $msb_val & 0xff; | ||
85 | |||
86 | my $l3 = ($lsb_val >> 24) & 0xff; | ||
87 | my $l2 = ($lsb_val >> 16) & 0xff; | ||
88 | my $l1 = ($lsb_val >> 8) & 0xff; | ||
89 | my $l0 = $lsb_val & 0xff; | ||
90 | |||
91 | syswrite(OUTFILE, | ||
92 | chr($l0).chr($l1).chr($l2).chr($l3). | ||
93 | chr($l4).chr($l5).chr($l6).chr($l7)); | ||
94 | } | ||
95 | |||
96 | sub write_hunk($$) | ||
97 | { | ||
98 | my ($offset, $length) = @_; | ||
99 | my $out = get_hunk($offset, $length); | ||
100 | |||
101 | printf "(len %d) ",$length if ($debug); | ||
102 | |||
103 | for (my $i=0;$i<$length;$i++) { | ||
104 | printf "%02x ",ord(substr($out,$i,1)) if ($debug); | ||
105 | } | ||
106 | printf "\n" if ($debug); | ||
107 | |||
108 | syswrite(OUTFILE, $out); | ||
109 | } | ||
110 | |||
111 | sub write_hunk_fix_endian($$) | ||
112 | { | ||
113 | my ($offset, $length) = @_; | ||
114 | my $out = get_hunk($offset, $length); | ||
115 | |||
116 | printf "(len_fix %d) ",$length if ($debug); | ||
117 | |||
118 | for (my $i=0;$i<$length;$i++) { | ||
119 | printf "%02x ",ord(substr($out,$i,1)) if ($debug); | ||
120 | } | ||
121 | printf "\n" if ($debug); | ||
122 | |||
123 | my $i=0; | ||
124 | while ($i<$length) { | ||
125 | my $size = ord(substr($out,$i,1))*256+ord(substr($out,$i+1,1)); | ||
126 | syswrite(OUTFILE, substr($out,$i+1,1)); | ||
127 | syswrite(OUTFILE, substr($out,$i,1)); | ||
128 | $i+=2; | ||
129 | if ($size>0 && $size <0x8000) { | ||
130 | for (my $j=0;$j<$size;$j++) { | ||
131 | syswrite(OUTFILE, substr($out,$j+$i,1)); | ||
132 | } | ||
133 | $i+=$size; | ||
134 | } | ||
135 | } | ||
136 | } | ||
137 | |||
138 | sub main_firmware($$$$) | ||
139 | { | ||
140 | my $out; | ||
141 | my $j=0; | ||
142 | my $outfile = shift; | ||
143 | my $name = shift; | ||
144 | my $version = shift; | ||
145 | my $nr_desc = shift; | ||
146 | |||
147 | for ($j = length($name); $j <32; $j++) { | ||
148 | $name = $name.chr(0); | ||
149 | } | ||
150 | |||
151 | open OUTFILE, ">$outfile"; | ||
152 | syswrite(OUTFILE, $name); | ||
153 | write_le16($version); | ||
154 | write_le16($nr_desc); | ||
155 | |||
156 | # | ||
157 | # Firmware 0, type: BASE FW F8MHZ (0x00000003), id: (0000000000000000), size: 8718 | ||
158 | # | ||
159 | |||
160 | write_le32(0x00000003); # Type | ||
161 | write_le64(0x00000000, 0x00000000); # ID | ||
162 | write_le32(8718); # Size | ||
163 | write_hunk_fix_endian(813432, 8718); | ||
164 | |||
165 | # | ||
166 | # Firmware 1, type: BASE FW F8MHZ MTS (0x00000007), id: (0000000000000000), size: 8712 | ||
167 | # | ||
168 | |||
169 | write_le32(0x00000007); # Type | ||
170 | write_le64(0x00000000, 0x00000000); # ID | ||
171 | write_le32(8712); # Size | ||
172 | write_hunk_fix_endian(822152, 8712); | ||
173 | |||
174 | # | ||
175 | # Firmware 2, type: BASE FW FM (0x00000401), id: (0000000000000000), size: 8562 | ||
176 | # | ||
177 | |||
178 | write_le32(0x00000401); # Type | ||
179 | write_le64(0x00000000, 0x00000000); # ID | ||
180 | write_le32(8562); # Size | ||
181 | write_hunk_fix_endian(830872, 8562); | ||
182 | |||
183 | # | ||
184 | # Firmware 3, type: BASE FW FM INPUT1 (0x00000c01), id: (0000000000000000), size: 8576 | ||
185 | # | ||
186 | |||
187 | write_le32(0x00000c01); # Type | ||
188 | write_le64(0x00000000, 0x00000000); # ID | ||
189 | write_le32(8576); # Size | ||
190 | write_hunk_fix_endian(839440, 8576); | ||
191 | |||
192 | # | ||
193 | # Firmware 4, type: BASE FW (0x00000001), id: (0000000000000000), size: 8706 | ||
194 | # | ||
195 | |||
196 | write_le32(0x00000001); # Type | ||
197 | write_le64(0x00000000, 0x00000000); # ID | ||
198 | write_le32(8706); # Size | ||
199 | write_hunk_fix_endian(848024, 8706); | ||
200 | |||
201 | # | ||
202 | # Firmware 5, type: BASE FW MTS (0x00000005), id: (0000000000000000), size: 8682 | ||
203 | # | ||
204 | |||
205 | write_le32(0x00000005); # Type | ||
206 | write_le64(0x00000000, 0x00000000); # ID | ||
207 | write_le32(8682); # Size | ||
208 | write_hunk_fix_endian(856736, 8682); | ||
209 | |||
210 | # | ||
211 | # Firmware 6, type: STD FW (0x00000000), id: PAL/BG A2/A (0000000100000007), size: 161 | ||
212 | # | ||
213 | |||
214 | write_le32(0x00000000); # Type | ||
215 | write_le64(0x00000001, 0x00000007); # ID | ||
216 | write_le32(161); # Size | ||
217 | write_hunk_fix_endian(865424, 161); | ||
218 | |||
219 | # | ||
220 | # Firmware 7, type: STD FW MTS (0x00000004), id: PAL/BG A2/A (0000000100000007), size: 169 | ||
221 | # | ||
222 | |||
223 | write_le32(0x00000004); # Type | ||
224 | write_le64(0x00000001, 0x00000007); # ID | ||
225 | write_le32(169); # Size | ||
226 | write_hunk_fix_endian(865592, 169); | ||
227 | |||
228 | # | ||
229 | # Firmware 8, type: STD FW (0x00000000), id: PAL/BG A2/B (0000000200000007), size: 161 | ||
230 | # | ||
231 | |||
232 | write_le32(0x00000000); # Type | ||
233 | write_le64(0x00000002, 0x00000007); # ID | ||
234 | write_le32(161); # Size | ||
235 | write_hunk_fix_endian(865424, 161); | ||
236 | |||
237 | # | ||
238 | # Firmware 9, type: STD FW MTS (0x00000004), id: PAL/BG A2/B (0000000200000007), size: 169 | ||
239 | # | ||
240 | |||
241 | write_le32(0x00000004); # Type | ||
242 | write_le64(0x00000002, 0x00000007); # ID | ||
243 | write_le32(169); # Size | ||
244 | write_hunk_fix_endian(865592, 169); | ||
245 | |||
246 | # | ||
247 | # Firmware 10, type: STD FW (0x00000000), id: PAL/BG NICAM/A (0000000400000007), size: 161 | ||
248 | # | ||
249 | |||
250 | write_le32(0x00000000); # Type | ||
251 | write_le64(0x00000004, 0x00000007); # ID | ||
252 | write_le32(161); # Size | ||
253 | write_hunk_fix_endian(866112, 161); | ||
254 | |||
255 | # | ||
256 | # Firmware 11, type: STD FW MTS (0x00000004), id: PAL/BG NICAM/A (0000000400000007), size: 169 | ||
257 | # | ||
258 | |||
259 | write_le32(0x00000004); # Type | ||
260 | write_le64(0x00000004, 0x00000007); # ID | ||
261 | write_le32(169); # Size | ||
262 | write_hunk_fix_endian(866280, 169); | ||
263 | |||
264 | # | ||
265 | # Firmware 12, type: STD FW (0x00000000), id: PAL/BG NICAM/B (0000000800000007), size: 161 | ||
266 | # | ||
267 | |||
268 | write_le32(0x00000000); # Type | ||
269 | write_le64(0x00000008, 0x00000007); # ID | ||
270 | write_le32(161); # Size | ||
271 | write_hunk_fix_endian(866112, 161); | ||
272 | |||
273 | # | ||
274 | # Firmware 13, type: STD FW MTS (0x00000004), id: PAL/BG NICAM/B (0000000800000007), size: 169 | ||
275 | # | ||
276 | |||
277 | write_le32(0x00000004); # Type | ||
278 | write_le64(0x00000008, 0x00000007); # ID | ||
279 | write_le32(169); # Size | ||
280 | write_hunk_fix_endian(866280, 169); | ||
281 | |||
282 | # | ||
283 | # Firmware 14, type: STD FW (0x00000000), id: PAL/DK A2 (00000003000000e0), size: 161 | ||
284 | # | ||
285 | |||
286 | write_le32(0x00000000); # Type | ||
287 | write_le64(0x00000003, 0x000000e0); # ID | ||
288 | write_le32(161); # Size | ||
289 | write_hunk_fix_endian(866800, 161); | ||
290 | |||
291 | # | ||
292 | # Firmware 15, type: STD FW MTS (0x00000004), id: PAL/DK A2 (00000003000000e0), size: 169 | ||
293 | # | ||
294 | |||
295 | write_le32(0x00000004); # Type | ||
296 | write_le64(0x00000003, 0x000000e0); # ID | ||
297 | write_le32(169); # Size | ||
298 | write_hunk_fix_endian(866968, 169); | ||
299 | |||
300 | # | ||
301 | # Firmware 16, type: STD FW (0x00000000), id: PAL/DK NICAM (0000000c000000e0), size: 161 | ||
302 | # | ||
303 | |||
304 | write_le32(0x00000000); # Type | ||
305 | write_le64(0x0000000c, 0x000000e0); # ID | ||
306 | write_le32(161); # Size | ||
307 | write_hunk_fix_endian(867144, 161); | ||
308 | |||
309 | # | ||
310 | # Firmware 17, type: STD FW MTS (0x00000004), id: PAL/DK NICAM (0000000c000000e0), size: 169 | ||
311 | # | ||
312 | |||
313 | write_le32(0x00000004); # Type | ||
314 | write_le64(0x0000000c, 0x000000e0); # ID | ||
315 | write_le32(169); # Size | ||
316 | write_hunk_fix_endian(867312, 169); | ||
317 | |||
318 | # | ||
319 | # Firmware 18, type: STD FW (0x00000000), id: SECAM/K1 (0000000000200000), size: 161 | ||
320 | # | ||
321 | |||
322 | write_le32(0x00000000); # Type | ||
323 | write_le64(0x00000000, 0x00200000); # ID | ||
324 | write_le32(161); # Size | ||
325 | write_hunk_fix_endian(867488, 161); | ||
326 | |||
327 | # | ||
328 | # Firmware 19, type: STD FW MTS (0x00000004), id: SECAM/K1 (0000000000200000), size: 169 | ||
329 | # | ||
330 | |||
331 | write_le32(0x00000004); # Type | ||
332 | write_le64(0x00000000, 0x00200000); # ID | ||
333 | write_le32(169); # Size | ||
334 | write_hunk_fix_endian(867656, 169); | ||
335 | |||
336 | # | ||
337 | # Firmware 20, type: STD FW (0x00000000), id: SECAM/K3 (0000000004000000), size: 161 | ||
338 | # | ||
339 | |||
340 | write_le32(0x00000000); # Type | ||
341 | write_le64(0x00000000, 0x04000000); # ID | ||
342 | write_le32(161); # Size | ||
343 | write_hunk_fix_endian(867832, 161); | ||
344 | |||
345 | # | ||
346 | # Firmware 21, type: STD FW MTS (0x00000004), id: SECAM/K3 (0000000004000000), size: 169 | ||
347 | # | ||
348 | |||
349 | write_le32(0x00000004); # Type | ||
350 | write_le64(0x00000000, 0x04000000); # ID | ||
351 | write_le32(169); # Size | ||
352 | write_hunk_fix_endian(868000, 169); | ||
353 | |||
354 | # | ||
355 | # Firmware 22, type: STD FW D2633 DTV6 ATSC (0x00010030), id: (0000000000000000), size: 149 | ||
356 | # | ||
357 | |||
358 | write_le32(0x00010030); # Type | ||
359 | write_le64(0x00000000, 0x00000000); # ID | ||
360 | write_le32(149); # Size | ||
361 | write_hunk_fix_endian(868176, 149); | ||
362 | |||
363 | # | ||
364 | # Firmware 23, type: STD FW D2620 DTV6 QAM (0x00000068), id: (0000000000000000), size: 149 | ||
365 | # | ||
366 | |||
367 | write_le32(0x00000068); # Type | ||
368 | write_le64(0x00000000, 0x00000000); # ID | ||
369 | write_le32(149); # Size | ||
370 | write_hunk_fix_endian(868336, 149); | ||
371 | |||
372 | # | ||
373 | # Firmware 24, type: STD FW D2633 DTV6 QAM (0x00000070), id: (0000000000000000), size: 149 | ||
374 | # | ||
375 | |||
376 | write_le32(0x00000070); # Type | ||
377 | write_le64(0x00000000, 0x00000000); # ID | ||
378 | write_le32(149); # Size | ||
379 | write_hunk_fix_endian(868488, 149); | ||
380 | |||
381 | # | ||
382 | # Firmware 25, type: STD FW D2620 DTV7 (0x00000088), id: (0000000000000000), size: 149 | ||
383 | # | ||
384 | |||
385 | write_le32(0x00000088); # Type | ||
386 | write_le64(0x00000000, 0x00000000); # ID | ||
387 | write_le32(149); # Size | ||
388 | write_hunk_fix_endian(868648, 149); | ||
389 | |||
390 | # | ||
391 | # Firmware 26, type: STD FW D2633 DTV7 (0x00000090), id: (0000000000000000), size: 149 | ||
392 | # | ||
393 | |||
394 | write_le32(0x00000090); # Type | ||
395 | write_le64(0x00000000, 0x00000000); # ID | ||
396 | write_le32(149); # Size | ||
397 | write_hunk_fix_endian(868800, 149); | ||
398 | |||
399 | # | ||
400 | # Firmware 27, type: STD FW D2620 DTV78 (0x00000108), id: (0000000000000000), size: 149 | ||
401 | # | ||
402 | |||
403 | write_le32(0x00000108); # Type | ||
404 | write_le64(0x00000000, 0x00000000); # ID | ||
405 | write_le32(149); # Size | ||
406 | write_hunk_fix_endian(868960, 149); | ||
407 | |||
408 | # | ||
409 | # Firmware 28, type: STD FW D2633 DTV78 (0x00000110), id: (0000000000000000), size: 149 | ||
410 | # | ||
411 | |||
412 | write_le32(0x00000110); # Type | ||
413 | write_le64(0x00000000, 0x00000000); # ID | ||
414 | write_le32(149); # Size | ||
415 | write_hunk_fix_endian(869112, 149); | ||
416 | |||
417 | # | ||
418 | # Firmware 29, type: STD FW D2620 DTV8 (0x00000208), id: (0000000000000000), size: 149 | ||
419 | # | ||
420 | |||
421 | write_le32(0x00000208); # Type | ||
422 | write_le64(0x00000000, 0x00000000); # ID | ||
423 | write_le32(149); # Size | ||
424 | write_hunk_fix_endian(868648, 149); | ||
425 | |||
426 | # | ||
427 | # Firmware 30, type: STD FW D2633 DTV8 (0x00000210), id: (0000000000000000), size: 149 | ||
428 | # | ||
429 | |||
430 | write_le32(0x00000210); # Type | ||
431 | write_le64(0x00000000, 0x00000000); # ID | ||
432 | write_le32(149); # Size | ||
433 | write_hunk_fix_endian(868800, 149); | ||
434 | |||
435 | # | ||
436 | # Firmware 31, type: STD FW FM (0x00000400), id: (0000000000000000), size: 135 | ||
437 | # | ||
438 | |||
439 | write_le32(0x00000400); # Type | ||
440 | write_le64(0x00000000, 0x00000000); # ID | ||
441 | write_le32(135); # Size | ||
442 | write_hunk_fix_endian(869584, 135); | ||
443 | |||
444 | # | ||
445 | # Firmware 32, type: STD FW (0x00000000), id: PAL/I (0000000000000010), size: 161 | ||
446 | # | ||
447 | |||
448 | write_le32(0x00000000); # Type | ||
449 | write_le64(0x00000000, 0x00000010); # ID | ||
450 | write_le32(161); # Size | ||
451 | write_hunk_fix_endian(869728, 161); | ||
452 | |||
453 | # | ||
454 | # Firmware 33, type: STD FW MTS (0x00000004), id: PAL/I (0000000000000010), size: 169 | ||
455 | # | ||
456 | |||
457 | write_le32(0x00000004); # Type | ||
458 | write_le64(0x00000000, 0x00000010); # ID | ||
459 | write_le32(169); # Size | ||
460 | write_hunk_fix_endian(869896, 169); | ||
461 | |||
462 | # | ||
463 | # Firmware 34, type: STD FW (0x00000000), id: SECAM/L AM (0000001000400000), size: 169 | ||
464 | # | ||
465 | |||
466 | write_le32(0x00000000); # Type | ||
467 | write_le64(0x00000010, 0x00400000); # ID | ||
468 | write_le32(169); # Size | ||
469 | write_hunk_fix_endian(870072, 169); | ||
470 | |||
471 | # | ||
472 | # Firmware 35, type: STD FW (0x00000000), id: SECAM/L NICAM (0000000c00400000), size: 161 | ||
473 | # | ||
474 | |||
475 | write_le32(0x00000000); # Type | ||
476 | write_le64(0x0000000c, 0x00400000); # ID | ||
477 | write_le32(161); # Size | ||
478 | write_hunk_fix_endian(870248, 161); | ||
479 | |||
480 | # | ||
481 | # Firmware 36, type: STD FW (0x00000000), id: SECAM/Lc (0000000000800000), size: 161 | ||
482 | # | ||
483 | |||
484 | write_le32(0x00000000); # Type | ||
485 | write_le64(0x00000000, 0x00800000); # ID | ||
486 | write_le32(161); # Size | ||
487 | write_hunk_fix_endian(870416, 161); | ||
488 | |||
489 | # | ||
490 | # Firmware 37, type: STD FW (0x00000000), id: NTSC/M Kr (0000000000008000), size: 161 | ||
491 | # | ||
492 | |||
493 | write_le32(0x00000000); # Type | ||
494 | write_le64(0x00000000, 0x00008000); # ID | ||
495 | write_le32(161); # Size | ||
496 | write_hunk_fix_endian(870584, 161); | ||
497 | |||
498 | # | ||
499 | # Firmware 38, type: STD FW LCD (0x00001000), id: NTSC/M Kr (0000000000008000), size: 161 | ||
500 | # | ||
501 | |||
502 | write_le32(0x00001000); # Type | ||
503 | write_le64(0x00000000, 0x00008000); # ID | ||
504 | write_le32(161); # Size | ||
505 | write_hunk_fix_endian(870752, 161); | ||
506 | |||
507 | # | ||
508 | # Firmware 39, type: STD FW LCD NOGD (0x00003000), id: NTSC/M Kr (0000000000008000), size: 161 | ||
509 | # | ||
510 | |||
511 | write_le32(0x00003000); # Type | ||
512 | write_le64(0x00000000, 0x00008000); # ID | ||
513 | write_le32(161); # Size | ||
514 | write_hunk_fix_endian(870920, 161); | ||
515 | |||
516 | # | ||
517 | # Firmware 40, type: STD FW MTS (0x00000004), id: NTSC/M Kr (0000000000008000), size: 169 | ||
518 | # | ||
519 | |||
520 | write_le32(0x00000004); # Type | ||
521 | write_le64(0x00000000, 0x00008000); # ID | ||
522 | write_le32(169); # Size | ||
523 | write_hunk_fix_endian(871088, 169); | ||
524 | |||
525 | # | ||
526 | # Firmware 41, type: STD FW (0x00000000), id: NTSC PAL/M PAL/N (000000000000b700), size: 161 | ||
527 | # | ||
528 | |||
529 | write_le32(0x00000000); # Type | ||
530 | write_le64(0x00000000, 0x0000b700); # ID | ||
531 | write_le32(161); # Size | ||
532 | write_hunk_fix_endian(871264, 161); | ||
533 | |||
534 | # | ||
535 | # Firmware 42, type: STD FW LCD (0x00001000), id: NTSC PAL/M PAL/N (000000000000b700), size: 161 | ||
536 | # | ||
537 | |||
538 | write_le32(0x00001000); # Type | ||
539 | write_le64(0x00000000, 0x0000b700); # ID | ||
540 | write_le32(161); # Size | ||
541 | write_hunk_fix_endian(871432, 161); | ||
542 | |||
543 | # | ||
544 | # Firmware 43, type: STD FW LCD NOGD (0x00003000), id: NTSC PAL/M PAL/N (000000000000b700), size: 161 | ||
545 | # | ||
546 | |||
547 | write_le32(0x00003000); # Type | ||
548 | write_le64(0x00000000, 0x0000b700); # ID | ||
549 | write_le32(161); # Size | ||
550 | write_hunk_fix_endian(871600, 161); | ||
551 | |||
552 | # | ||
553 | # Firmware 44, type: STD FW (0x00000000), id: NTSC/M Jp (0000000000002000), size: 161 | ||
554 | # | ||
555 | |||
556 | write_le32(0x00000000); # Type | ||
557 | write_le64(0x00000000, 0x00002000); # ID | ||
558 | write_le32(161); # Size | ||
559 | write_hunk_fix_endian(871264, 161); | ||
560 | |||
561 | # | ||
562 | # Firmware 45, type: STD FW MTS (0x00000004), id: NTSC PAL/M PAL/N (000000000000b700), size: 169 | ||
563 | # | ||
564 | |||
565 | write_le32(0x00000004); # Type | ||
566 | write_le64(0x00000000, 0x0000b700); # ID | ||
567 | write_le32(169); # Size | ||
568 | write_hunk_fix_endian(871936, 169); | ||
569 | |||
570 | # | ||
571 | # Firmware 46, type: STD FW MTS LCD (0x00001004), id: NTSC PAL/M PAL/N (000000000000b700), size: 169 | ||
572 | # | ||
573 | |||
574 | write_le32(0x00001004); # Type | ||
575 | write_le64(0x00000000, 0x0000b700); # ID | ||
576 | write_le32(169); # Size | ||
577 | write_hunk_fix_endian(872112, 169); | ||
578 | |||
579 | # | ||
580 | # Firmware 47, type: STD FW MTS LCD NOGD (0x00003004), id: NTSC PAL/M PAL/N (000000000000b700), size: 169 | ||
581 | # | ||
582 | |||
583 | write_le32(0x00003004); # Type | ||
584 | write_le64(0x00000000, 0x0000b700); # ID | ||
585 | write_le32(169); # Size | ||
586 | write_hunk_fix_endian(872288, 169); | ||
587 | |||
588 | # | ||
589 | # Firmware 48, type: SCODE FW HAS IF (0x60000000), IF = 3.28 MHz id: (0000000000000000), size: 192 | ||
590 | # | ||
591 | |||
592 | write_le32(0x60000000); # Type | ||
593 | write_le64(0x00000000, 0x00000000); # ID | ||
594 | write_le16(3280); # IF | ||
595 | write_le32(192); # Size | ||
596 | write_hunk(811896, 192); | ||
597 | |||
598 | # | ||
599 | # Firmware 49, type: SCODE FW HAS IF (0x60000000), IF = 3.30 MHz id: (0000000000000000), size: 192 | ||
600 | # | ||
601 | |||
602 | write_le32(0x60000000); # Type | ||
603 | write_le64(0x00000000, 0x00000000); # ID | ||
604 | write_le16(3300); # IF | ||
605 | write_le32(192); # Size | ||
606 | write_hunk(813048, 192); | ||
607 | |||
608 | # | ||
609 | # Firmware 50, type: SCODE FW HAS IF (0x60000000), IF = 3.44 MHz id: (0000000000000000), size: 192 | ||
610 | # | ||
611 | |||
612 | write_le32(0x60000000); # Type | ||
613 | write_le64(0x00000000, 0x00000000); # ID | ||
614 | write_le16(3440); # IF | ||
615 | write_le32(192); # Size | ||
616 | write_hunk(812280, 192); | ||
617 | |||
618 | # | ||
619 | # Firmware 51, type: SCODE FW HAS IF (0x60000000), IF = 3.46 MHz id: (0000000000000000), size: 192 | ||
620 | # | ||
621 | |||
622 | write_le32(0x60000000); # Type | ||
623 | write_le64(0x00000000, 0x00000000); # ID | ||
624 | write_le16(3460); # IF | ||
625 | write_le32(192); # Size | ||
626 | write_hunk(812472, 192); | ||
627 | |||
628 | # | ||
629 | # Firmware 52, type: SCODE FW DTV6 ATSC OREN36 HAS IF (0x60210020), IF = 3.80 MHz id: (0000000000000000), size: 192 | ||
630 | # | ||
631 | |||
632 | write_le32(0x60210020); # Type | ||
633 | write_le64(0x00000000, 0x00000000); # ID | ||
634 | write_le16(3800); # IF | ||
635 | write_le32(192); # Size | ||
636 | write_hunk(809784, 192); | ||
637 | |||
638 | # | ||
639 | # Firmware 53, type: SCODE FW HAS IF (0x60000000), IF = 4.00 MHz id: (0000000000000000), size: 192 | ||
640 | # | ||
641 | |||
642 | write_le32(0x60000000); # Type | ||
643 | write_le64(0x00000000, 0x00000000); # ID | ||
644 | write_le16(4000); # IF | ||
645 | write_le32(192); # Size | ||
646 | write_hunk(812088, 192); | ||
647 | |||
648 | # | ||
649 | # Firmware 54, type: SCODE FW DTV6 ATSC TOYOTA388 HAS IF (0x60410020), IF = 4.08 MHz id: (0000000000000000), size: 192 | ||
650 | # | ||
651 | |||
652 | write_le32(0x60410020); # Type | ||
653 | write_le64(0x00000000, 0x00000000); # ID | ||
654 | write_le16(4080); # IF | ||
655 | write_le32(192); # Size | ||
656 | write_hunk(809976, 192); | ||
657 | |||
658 | # | ||
659 | # Firmware 55, type: SCODE FW HAS IF (0x60000000), IF = 4.20 MHz id: (0000000000000000), size: 192 | ||
660 | # | ||
661 | |||
662 | write_le32(0x60000000); # Type | ||
663 | write_le64(0x00000000, 0x00000000); # ID | ||
664 | write_le16(4200); # IF | ||
665 | write_le32(192); # Size | ||
666 | write_hunk(811704, 192); | ||
667 | |||
668 | # | ||
669 | # Firmware 56, type: SCODE FW MONO HAS IF (0x60008000), IF = 4.32 MHz id: NTSC/M Kr (0000000000008000), size: 192 | ||
670 | # | ||
671 | |||
672 | write_le32(0x60008000); # Type | ||
673 | write_le64(0x00000000, 0x00008000); # ID | ||
674 | write_le16(4320); # IF | ||
675 | write_le32(192); # Size | ||
676 | write_hunk(808056, 192); | ||
677 | |||
678 | # | ||
679 | # Firmware 57, type: SCODE FW HAS IF (0x60000000), IF = 4.45 MHz id: (0000000000000000), size: 192 | ||
680 | # | ||
681 | |||
682 | write_le32(0x60000000); # Type | ||
683 | write_le64(0x00000000, 0x00000000); # ID | ||
684 | write_le16(4450); # IF | ||
685 | write_le32(192); # Size | ||
686 | write_hunk(812664, 192); | ||
687 | |||
688 | # | ||
689 | # Firmware 58, type: SCODE FW HAS IF (0x60000000), IF = 4.50 MHz id: NTSC/M Jp (0000000000002000), size: 192 | ||
690 | # | ||
691 | |||
692 | write_le32(0x60000000); # Type | ||
693 | write_le64(0x00000000, 0x00002000); # ID | ||
694 | write_le16(4500); # IF | ||
695 | write_le32(192); # Size | ||
696 | write_hunk(807672, 192); | ||
697 | |||
698 | # | ||
699 | # Firmware 59, type: SCODE FW LCD NOGD IF HAS IF (0x60023000), IF = 4.60 MHz id: NTSC/M Kr (0000000000008000), size: 192 | ||
700 | # | ||
701 | |||
702 | write_le32(0x60023000); # Type | ||
703 | write_le64(0x00000000, 0x00008000); # ID | ||
704 | write_le16(4600); # IF | ||
705 | write_le32(192); # Size | ||
706 | write_hunk(807864, 192); | ||
707 | |||
708 | # | ||
709 | # Firmware 60, type: SCODE FW DTV78 ZARLINK456 HAS IF (0x62000100), IF = 4.76 MHz id: (0000000000000000), size: 192 | ||
710 | # | ||
711 | |||
712 | write_le32(0x62000100); # Type | ||
713 | write_le64(0x00000000, 0x00000000); # ID | ||
714 | write_le16(4760); # IF | ||
715 | write_le32(192); # Size | ||
716 | write_hunk(807288, 192); | ||
717 | |||
718 | # | ||
719 | # Firmware 61, type: SCODE FW HAS IF (0x60000000), IF = 4.94 MHz id: (0000000000000000), size: 192 | ||
720 | # | ||
721 | |||
722 | write_le32(0x60000000); # Type | ||
723 | write_le64(0x00000000, 0x00000000); # ID | ||
724 | write_le16(4940); # IF | ||
725 | write_le32(192); # Size | ||
726 | write_hunk(811512, 192); | ||
727 | |||
728 | # | ||
729 | # Firmware 62, type: SCODE FW DTV7 ZARLINK456 HAS IF (0x62000080), IF = 5.26 MHz id: (0000000000000000), size: 192 | ||
730 | # | ||
731 | |||
732 | write_le32(0x62000080); # Type | ||
733 | write_le64(0x00000000, 0x00000000); # ID | ||
734 | write_le16(5260); # IF | ||
735 | write_le32(192); # Size | ||
736 | write_hunk(810552, 192); | ||
737 | |||
738 | # | ||
739 | # Firmware 63, type: SCODE FW MONO HAS IF (0x60008000), IF = 5.32 MHz id: PAL/BG NICAM/B (0000000800000007), size: 192 | ||
740 | # | ||
741 | |||
742 | write_le32(0x60008000); # Type | ||
743 | write_le64(0x00000008, 0x00000007); # ID | ||
744 | write_le16(5320); # IF | ||
745 | write_le32(192); # Size | ||
746 | write_hunk(810744, 192); | ||
747 | |||
748 | # | ||
749 | # Firmware 64, type: SCODE FW DTV8 CHINA HAS IF (0x64000200), IF = 5.40 MHz id: (0000000000000000), size: 192 | ||
750 | # | ||
751 | |||
752 | write_le32(0x64000200); # Type | ||
753 | write_le64(0x00000000, 0x00000000); # ID | ||
754 | write_le16(5400); # IF | ||
755 | write_le32(192); # Size | ||
756 | write_hunk(807096, 192); | ||
757 | |||
758 | # | ||
759 | # Firmware 65, type: SCODE FW DTV6 ATSC OREN538 HAS IF (0x60110020), IF = 5.58 MHz id: (0000000000000000), size: 192 | ||
760 | # | ||
761 | |||
762 | write_le32(0x60110020); # Type | ||
763 | write_le64(0x00000000, 0x00000000); # ID | ||
764 | write_le16(5580); # IF | ||
765 | write_le32(192); # Size | ||
766 | write_hunk(809592, 192); | ||
767 | |||
768 | # | ||
769 | # Firmware 66, type: SCODE FW HAS IF (0x60000000), IF = 5.64 MHz id: PAL/BG A2/B (0000000200000007), size: 192 | ||
770 | # | ||
771 | |||
772 | write_le32(0x60000000); # Type | ||
773 | write_le64(0x00000002, 0x00000007); # ID | ||
774 | write_le16(5640); # IF | ||
775 | write_le32(192); # Size | ||
776 | write_hunk(808440, 192); | ||
777 | |||
778 | # | ||
779 | # Firmware 67, type: SCODE FW HAS IF (0x60000000), IF = 5.74 MHz id: PAL/BG NICAM/B (0000000800000007), size: 192 | ||
780 | # | ||
781 | |||
782 | write_le32(0x60000000); # Type | ||
783 | write_le64(0x00000008, 0x00000007); # ID | ||
784 | write_le16(5740); # IF | ||
785 | write_le32(192); # Size | ||
786 | write_hunk(808632, 192); | ||
787 | |||
788 | # | ||
789 | # Firmware 68, type: SCODE FW DTV7 DIBCOM52 HAS IF (0x61000080), IF = 5.90 MHz id: (0000000000000000), size: 192 | ||
790 | # | ||
791 | |||
792 | write_le32(0x61000080); # Type | ||
793 | write_le64(0x00000000, 0x00000000); # ID | ||
794 | write_le16(5900); # IF | ||
795 | write_le32(192); # Size | ||
796 | write_hunk(810360, 192); | ||
797 | |||
798 | # | ||
799 | # Firmware 69, type: SCODE FW MONO HAS IF (0x60008000), IF = 6.00 MHz id: PAL/I (0000000000000010), size: 192 | ||
800 | # | ||
801 | |||
802 | write_le32(0x60008000); # Type | ||
803 | write_le64(0x00000000, 0x00000010); # ID | ||
804 | write_le16(6000); # IF | ||
805 | write_le32(192); # Size | ||
806 | write_hunk(808824, 192); | ||
807 | |||
808 | # | ||
809 | # Firmware 70, type: SCODE FW DTV6 QAM F6MHZ HAS IF (0x68000060), IF = 6.20 MHz id: (0000000000000000), size: 192 | ||
810 | # | ||
811 | |||
812 | write_le32(0x68000060); # Type | ||
813 | write_le64(0x00000000, 0x00000000); # ID | ||
814 | write_le16(6200); # IF | ||
815 | write_le32(192); # Size | ||
816 | write_hunk(809400, 192); | ||
817 | |||
818 | # | ||
819 | # Firmware 71, type: SCODE FW HAS IF (0x60000000), IF = 6.24 MHz id: PAL/I (0000000000000010), size: 192 | ||
820 | # | ||
821 | |||
822 | write_le32(0x60000000); # Type | ||
823 | write_le64(0x00000000, 0x00000010); # ID | ||
824 | write_le16(6240); # IF | ||
825 | write_le32(192); # Size | ||
826 | write_hunk(808248, 192); | ||
827 | |||
828 | # | ||
829 | # Firmware 72, type: SCODE FW MONO HAS IF (0x60008000), IF = 6.32 MHz id: SECAM/K1 (0000000000200000), size: 192 | ||
830 | # | ||
831 | |||
832 | write_le32(0x60008000); # Type | ||
833 | write_le64(0x00000000, 0x00200000); # ID | ||
834 | write_le16(6320); # IF | ||
835 | write_le32(192); # Size | ||
836 | write_hunk(811320, 192); | ||
837 | |||
838 | # | ||
839 | # Firmware 73, type: SCODE FW HAS IF (0x60000000), IF = 6.34 MHz id: SECAM/K1 (0000000000200000), size: 192 | ||
840 | # | ||
841 | |||
842 | write_le32(0x60000000); # Type | ||
843 | write_le64(0x00000000, 0x00200000); # ID | ||
844 | write_le16(6340); # IF | ||
845 | write_le32(192); # Size | ||
846 | write_hunk(809208, 192); | ||
847 | |||
848 | # | ||
849 | # Firmware 74, type: SCODE FW MONO HAS IF (0x60008000), IF = 6.50 MHz id: SECAM/K3 (0000000004000000), size: 192 | ||
850 | # | ||
851 | |||
852 | write_le32(0x60008000); # Type | ||
853 | write_le64(0x00000000, 0x04000000); # ID | ||
854 | write_le16(6500); # IF | ||
855 | write_le32(192); # Size | ||
856 | write_hunk(811128, 192); | ||
857 | |||
858 | # | ||
859 | # Firmware 75, type: SCODE FW DTV6 ATSC ATI638 HAS IF (0x60090020), IF = 6.58 MHz id: (0000000000000000), size: 192 | ||
860 | # | ||
861 | |||
862 | write_le32(0x60090020); # Type | ||
863 | write_le64(0x00000000, 0x00000000); # ID | ||
864 | write_le16(6580); # IF | ||
865 | write_le32(192); # Size | ||
866 | write_hunk(807480, 192); | ||
867 | |||
868 | # | ||
869 | # Firmware 76, type: SCODE FW HAS IF (0x60000000), IF = 6.60 MHz id: PAL/DK A2 (00000003000000e0), size: 192 | ||
870 | # | ||
871 | |||
872 | write_le32(0x60000000); # Type | ||
873 | write_le64(0x00000003, 0x000000e0); # ID | ||
874 | write_le16(6600); # IF | ||
875 | write_le32(192); # Size | ||
876 | write_hunk(809016, 192); | ||
877 | |||
878 | # | ||
879 | # Firmware 77, type: SCODE FW MONO HAS IF (0x60008000), IF = 6.68 MHz id: PAL/DK A2 (00000003000000e0), size: 192 | ||
880 | # | ||
881 | |||
882 | write_le32(0x60008000); # Type | ||
883 | write_le64(0x00000003, 0x000000e0); # ID | ||
884 | write_le16(6680); # IF | ||
885 | write_le32(192); # Size | ||
886 | write_hunk(810936, 192); | ||
887 | |||
888 | # | ||
889 | # Firmware 78, type: SCODE FW DTV6 ATSC TOYOTA794 HAS IF (0x60810020), IF = 8.14 MHz id: (0000000000000000), size: 192 | ||
890 | # | ||
891 | |||
892 | write_le32(0x60810020); # Type | ||
893 | write_le64(0x00000000, 0x00000000); # ID | ||
894 | write_le16(8140); # IF | ||
895 | write_le32(192); # Size | ||
896 | write_hunk(810168, 192); | ||
897 | |||
898 | # | ||
899 | # Firmware 79, type: SCODE FW HAS IF (0x60000000), IF = 8.20 MHz id: (0000000000000000), size: 192 | ||
900 | # | ||
901 | |||
902 | write_le32(0x60000000); # Type | ||
903 | write_le64(0x00000000, 0x00000000); # ID | ||
904 | write_le16(8200); # IF | ||
905 | write_le32(192); # Size | ||
906 | write_hunk(812856, 192); | ||
907 | } | ||
908 | |||
909 | sub extract_firmware { | ||
910 | my $sourcefile = "hcw85bda.sys"; | ||
911 | my $hash = "0e44dbf63bb0169d57446aec21881ff2"; | ||
912 | my $outfile = "xc3028-v27.fw"; | ||
913 | my $name = "xc2028 firmware"; | ||
914 | my $version = 519; | ||
915 | my $nr_desc = 80; | ||
916 | my $out; | ||
917 | |||
918 | verify($sourcefile, $hash); | ||
919 | |||
920 | open INFILE, "<$sourcefile"; | ||
921 | main_firmware($outfile, $name, $version, $nr_desc); | ||
922 | close INFILE; | ||
923 | } | ||
924 | |||
925 | extract_firmware; | ||
926 | printf "Firmwares generated.\n"; | ||
diff --git a/Documentation/video4linux/sn9c102.txt b/Documentation/video4linux/sn9c102.txt index 1ffad19ce891..b26f5195af51 100644 --- a/Documentation/video4linux/sn9c102.txt +++ b/Documentation/video4linux/sn9c102.txt | |||
@@ -568,6 +568,7 @@ the fingerprint is: '88E8 F32F 7244 68BA 3958 5D40 99DA 5D2A FCE6 35A4'. | |||
568 | Many thanks to following persons for their contribute (listed in alphabetical | 568 | Many thanks to following persons for their contribute (listed in alphabetical |
569 | order): | 569 | order): |
570 | 570 | ||
571 | - David Anderson for the donation of a webcam; | ||
571 | - Luca Capello for the donation of a webcam; | 572 | - Luca Capello for the donation of a webcam; |
572 | - Philippe Coval for having helped testing the PAS202BCA image sensor; | 573 | - Philippe Coval for having helped testing the PAS202BCA image sensor; |
573 | - Joao Rodrigo Fuzaro, Joao Limirio, Claudio Filho and Caio Begotti for the | 574 | - Joao Rodrigo Fuzaro, Joao Limirio, Claudio Filho and Caio Begotti for the |