From 4af39a15aeefcc4ba7994fea43b9f76cd5306b61 Mon Sep 17 00:00:00 2001 From: Mauro Carvalho Chehab Date: Sun, 24 Jul 2011 07:56:14 -0300 Subject: [PATCH] parse_az6007.pl: add a parser for mt2063 and fixes reads mt2063 reads outputs 7 bytes of trash: the first 6 and the last one. Remove those extra data when parsing reads. Signed-off-by: Mauro Carvalho Chehab --- contrib/az6007/parse_az6007.pl | 112 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 110 insertions(+), 2 deletions(-) diff --git a/contrib/az6007/parse_az6007.pl b/contrib/az6007/parse_az6007.pl index dbfa639..29939f6 100755 --- a/contrib/az6007/parse_az6007.pl +++ b/contrib/az6007/parse_az6007.pl @@ -23,6 +23,7 @@ use strict; use Switch; use Getopt::Long; +my $show_mt2063 = 0; my $show_drxk = 0; my $show_other_reqs = 0; my $show_other_xfer = 0; @@ -30,9 +31,10 @@ my $show_other_lines = 0; # Useful on some cases my $show_timestamp = 0; my $show_all = 0; -my $argerr = "Invalid arguments.\nUse $0 [--show_all] [--show_drxk] [--show_other_reqs] [--show_other_xfer] [--show_other_lines] [--show_timestamp]\n"; +my $argerr = "Invalid arguments.\nUse $0 [--show_all] [--show_drxk] [--show_mt2063] [--show_other_reqs] [--show_other_xfer] [--show_other_lines] [--show_timestamp]\n"; GetOptions( + 'show_mt2063' => \$show_mt2063, 'show_drxk' => \$show_drxk, 'show_other_reqs' => \$show_other_reqs, 'show_other_xfer' => \$show_other_xfer, @@ -47,9 +49,10 @@ if ($show_all) { $show_timestamp = 1; $show_other_reqs = 1; $show_drxk = 1; + $show_mt2063 = 1; } -die ($argerr) if (!($show_other_xfer || $show_other_lines || $show_other_reqs || $show_drxk)); +die ($argerr) if (!($show_other_xfer || $show_other_lines || $show_other_reqs || $show_drxk || $show_mt2063)); sub add_hex_mark($) { @@ -75,6 +78,102 @@ sub add_hex_mark($) return $out; } +my %mt2063_map = ( + 0x00 => "MT2063_REG_PART_REV", + 0x01 => "MT2063_REG_LO1CQ_1", + 0x02 => "MT2063_REG_LO1CQ_2", + 0x03 => "MT2063_REG_LO2CQ_1", + 0x04 => "MT2063_REG_LO2CQ_2", + 0x05 => "MT2063_REG_LO2CQ_3", + 0x06 => "MT2063_REG_RSVD_06", + 0x07 => "MT2063_REG_LO_STATUS", + 0x08 => "MT2063_REG_FIFFC", + 0x09 => "MT2063_REG_CLEARTUNE", + 0x0A => "MT2063_REG_ADC_OUT", + 0x0B => "MT2063_REG_LO1C_1", + 0x0C => "MT2063_REG_LO1C_2", + 0x0D => "MT2063_REG_LO2C_1", + 0x0E => "MT2063_REG_LO2C_2", + 0x0F => "MT2063_REG_LO2C_3", + 0x10 => "MT2063_REG_RSVD_10", + 0x11 => "MT2063_REG_PWR_1", + 0x12 => "MT2063_REG_PWR_2", + 0x13 => "MT2063_REG_TEMP_STATUS", + 0x14 => "MT2063_REG_XO_STATUS", + 0x15 => "MT2063_REG_RF_STATUS", + 0x16 => "MT2063_REG_FIF_STATUS", + 0x17 => "MT2063_REG_LNA_OV", + 0x18 => "MT2063_REG_RF_OV", + 0x19 => "MT2063_REG_FIF_OV", + 0x1A => "MT2063_REG_LNA_TGT", + 0x1B => "MT2063_REG_PD1_TGT", + 0x1C => "MT2063_REG_PD2_TGT", + 0x1D => "MT2063_REG_RSVD_1D", + 0x1E => "MT2063_REG_RSVD_1E", + 0x1F => "MT2063_REG_RSVD_1F", + 0x20 => "MT2063_REG_RSVD_20", + 0x21 => "MT2063_REG_BYP_CTRL", + 0x22 => "MT2063_REG_RSVD_22", + 0x23 => "MT2063_REG_RSVD_23", + 0x24 => "MT2063_REG_RSVD_24", + 0x25 => "MT2063_REG_RSVD_25", + 0x26 => "MT2063_REG_RSVD_26", + 0x27 => "MT2063_REG_RSVD_27", + 0x28 => "MT2063_REG_FIFF_CTRL", + 0x29 => "MT2063_REG_FIFF_OFFSET", + 0x2A => "MT2063_REG_CTUNE_CTRL", + 0x2B => "MT2063_REG_CTUNE_OV", + 0x2C => "MT2063_REG_CTRL_2C", + 0x2D => "MT2063_REG_FIFF_CTRL2", + 0x2E => "MT2063_REG_RSVD_2E", + 0x2F => "MT2063_REG_DNC_GAIN", + 0x30 => "MT2063_REG_VGA_GAIN", + 0x31 => "MT2063_REG_RSVD_31", + 0x32 => "MT2063_REG_TEMP_SEL", + 0x33 => "MT2063_REG_RSVD_33", + 0x34 => "MT2063_REG_RSVD_34", + 0x35 => "MT2063_REG_RSVD_35", + 0x36 => "MT2063_REG_RSVD_36", + 0x37 => "MT2063_REG_RSVD_37", + 0x38 => "MT2063_REG_RSVD_38", + 0x39 => "MT2063_REG_RSVD_39", + 0x3A => "MT2063_REG_RSVD_3A", + 0x3B => "MT2063_REG_RSVD_3B", + 0x3C => "MT2063_REG_RSVD_3C", +); + +sub parse_mt2063_addr($$$$$) +{ + my $timestamp = shift; + my $addr = shift; + my $n = shift; + my $data = shift; + my $write = shift; + + my $reg = hex(substr($data, 0, 2)); + $data = substr($data, 3); + $n--; + + if (defined($mt2063_map{$reg})) { + $reg = $mt2063_map{$reg}; + } else { + $reg = sprintf "0x%02x", $reg; + } + + if ($write) { + if ($n == 1) { + printf "mt2063_setreg(state, %s, 0x%s);\n", + $reg, $data; + } else { + printf "mt2063_write(state, %s, %s, %d);\n", + $reg, add_hex_mark($data), $n; + } + } else { + printf "mt2063_read(state, %s, &buf, %d); /* %s */\n", + $reg, $n, add_hex_mark($data); + } +} + # DRX-K registers used at the public driver # Obtained with this command: # cat drivers/media/dvb/frontends/drxk_map.h |perl -ne 'if (/define\s+([^\s]+__A)\s+(.*)/) { printf "\t0x%08x => \"%s\",\n",hex($2), $1; }' @@ -2184,8 +2283,17 @@ while (<>) { if ($req == 0xb9 || $req == 0xbd) { my ($addr, $data, $write, $n) = i2c_decode($reqtype, $wvalue, $windex, $wlen, $payload); + + if ($n > 6 && !$write) { + # This is how az6007 returns reads + $n -= 6; + $data = substr($data, 3 * 5, $n * 3); + } + if ($addr == 0x52) { parse_drxk_addr($timestamp, $addr, $n, $data, $write) if ($show_drxk); + } elsif ($addr == 0xc0) { + parse_mt2063_addr($timestamp, $addr, $n, $data, $write) if ($show_mt2063); } elsif ($show_other_xfer) { printf "$timestamp " if ($show_timestamp); if ($write) { -- 2.7.4