mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-03-03 04:40:40 +07:00
V4L/DVB (12181): get_dvb_firmware: Add Yuan MPC718 MT352 DVB-T "firmware" extraction
Add routine to support extracting the MT352 DVB-T demodulator initialization sequence for Yuan MPC718 cards for use by the cx18 driver. This routine uses a hueristic for extracting a good sequence. It should work on all different versions of the "yuanrap.sys" file, given the way the MT352 tuning sequences are stored in all versions of that file I have seen so far. However, the current patch simply looks for one specific archive URL. Signed-off-by: Andy Walls <awalls@radix.net> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
637fb3d70b
commit
9f38a920b2
@ -25,7 +25,7 @@ use IO::Handle;
|
|||||||
"tda10046lifeview", "av7110", "dec2000t", "dec2540t",
|
"tda10046lifeview", "av7110", "dec2000t", "dec2540t",
|
||||||
"dec3000s", "vp7041", "dibusb", "nxt2002", "nxt2004",
|
"dec3000s", "vp7041", "dibusb", "nxt2002", "nxt2004",
|
||||||
"or51211", "or51132_qam", "or51132_vsb", "bluebird",
|
"or51211", "or51132_qam", "or51132_vsb", "bluebird",
|
||||||
"opera1", "cx231xx", "cx18", "cx23885", "pvrusb2" );
|
"opera1", "cx231xx", "cx18", "cx23885", "pvrusb2", "mpc718" );
|
||||||
|
|
||||||
# Check args
|
# Check args
|
||||||
syntax() if (scalar(@ARGV) != 1);
|
syntax() if (scalar(@ARGV) != 1);
|
||||||
@ -381,6 +381,56 @@ sub cx18 {
|
|||||||
$allfiles;
|
$allfiles;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub mpc718 {
|
||||||
|
my $archive = 'Yuan MPC718 TV Tuner Card 2.13.10.1016.zip';
|
||||||
|
my $url = "ftp://ftp.work.acer-euro.com/desktop/aspire_idea510/vista/Drivers/$archive";
|
||||||
|
my $fwfile = "dvb-cx18-mpc718-mt352.fw";
|
||||||
|
my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1);
|
||||||
|
|
||||||
|
checkstandard();
|
||||||
|
wgetfile($archive, $url);
|
||||||
|
unzip($archive, $tmpdir);
|
||||||
|
|
||||||
|
my $sourcefile = "$tmpdir/Yuan MPC718 TV Tuner Card 2.13.10.1016/mpc718_32bit/yuanrap.sys";
|
||||||
|
my $found = 0;
|
||||||
|
|
||||||
|
open IN, '<', $sourcefile or die "Couldn't open $sourcefile to extract $fwfile data\n";
|
||||||
|
binmode IN;
|
||||||
|
open OUT, '>', $fwfile;
|
||||||
|
binmode OUT;
|
||||||
|
{
|
||||||
|
# Block scope because we change the line terminator variable $/
|
||||||
|
my $prevlen = 0;
|
||||||
|
my $currlen;
|
||||||
|
|
||||||
|
# Buried in the data segment are 3 runs of almost identical
|
||||||
|
# register-value pairs that end in 0x5d 0x01 which is a "TUNER GO"
|
||||||
|
# command for the MT352.
|
||||||
|
# Pull out the middle run (because it's easy) of register-value
|
||||||
|
# pairs to make the "firmware" file.
|
||||||
|
|
||||||
|
local $/ = "\x5d\x01"; # MT352 "TUNER GO"
|
||||||
|
|
||||||
|
while (<IN>) {
|
||||||
|
$currlen = length($_);
|
||||||
|
if ($prevlen == $currlen || $currlen <= 64) {
|
||||||
|
chop; chop; # Get rid of "TUNER GO"
|
||||||
|
s/^\0\0//; # get rid of leading 00 00 if it's there
|
||||||
|
printf OUT "$_";
|
||||||
|
$found = 1;
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
close OUT;
|
||||||
|
close IN;
|
||||||
|
if (!$found) {
|
||||||
|
unlink $fwfile;
|
||||||
|
die "Couldn't find valid register-value sequence in $sourcefile for $fwfile\n";
|
||||||
|
}
|
||||||
|
$fwfile;
|
||||||
|
}
|
||||||
|
|
||||||
sub cx23885 {
|
sub cx23885 {
|
||||||
my $url = "http://linuxtv.org/downloads/firmware/";
|
my $url = "http://linuxtv.org/downloads/firmware/";
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user