• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/perl
2
3#   Copyright (C) 2016 Mauro Carvalho Chehab
4#
5#   This program is free software; you can redistribute it and/or modify
6#   it under the terms of the GNU General Public License as published by
7#   the Free Software Foundation, version 2 of the License.
8#
9#   This program is distributed in the hope that it will be useful,
10#   but WITHOUT ANY WARRANTY; without even the implied warranty of
11#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12#   GNU General Public License for more details.
13#
14# This small script parses register dumps generated by parse_cx231xx.pl
15# 	for tda18271 tuner, like:
16# OUT i2c channel#2 daddr 0x60 100kbps addr_len 1 sync len 1 = (saddr)25 37 02
17
18use strict;
19
20my %tda18271_reg = (
21	0x00 => "ID byte                (R_ID)",
22	0x01 => "Thermo byte            (R_TM)",
23	0x02 => "Power level byte       (R_PL)",
24	0x03 => "Easy Prog byte 1       (R_EP1)",
25	0x04 => "Easy Prog byte 2       (R_EP2)",
26	0x05 => "Easy Prog byte 3       (R_EP3)",
27	0x06 => "Easy Prog byte 4       (R_EP4)",
28	0x07 => "Easy Prog byte 5       (R_EP5)",
29	0x08 => "Cal Post-Divider byte  (R_CPD)",
30	0x09 => "Cal Divider byte 1     (R_CD1)",
31	0x0a => "Cal Divider byte 2     (R_CD2)",
32	0x0b => "Cal Divider byte 3     (R_CD3)",
33	0x0c => "Main Post-Divider byte (R_MPD)",
34	0x0d => "Main Divider byte 1    (R_MD1)",
35	0x0e => "Main Divider byte 2    (R_MD2)",
36	0x0f => "Main Divider byte 3    (R_MD3)",
37	0x10 => "Extended byte 1        (R_EB1)",
38	0x11 => "Extended byte 2        (R_EB2)",
39	0x12 => "Extended byte 3        (R_EB3)",
40	0x13 => "Extended byte 4        (R_EB4)",
41	0x14 => "Extended byte 5        (R_EB5)",
42	0x15 => "Extended byte 6        (R_EB6)",
43	0x16 => "Extended byte 7        (R_EB7)",
44	0x17 => "Extended byte 8        (R_EB8)",
45	0x18 => "Extended byte 9        (R_EB9)",
46	0x19 => "Extended byte 10       (R_EB10)",
47	0x1a => "Extended byte 11       (R_EB11)",
48	0x1b => "Extended byte 12       (R_EB12)",
49	0x1c => "Extended byte 13       (R_EB13)",
50	0x1d => "Extended byte 14       (R_EB14)",
51	0x1e => "Extended byte 15       (R_EB15)",
52	0x1f => "Extended byte 16       (R_EB16)",
53	0x20 => "Extended byte 17       (R_EB17)",
54	0x21 => "Extended byte 18       (R_EB18)",
55	0x22 => "Extended byte 19       (R_EB19)",
56	0x23 => "Extended byte 20       (R_EB20)",
57	0x24 => "Extended byte 21       (R_EB21)",
58	0x25 => "Extended byte 22       (R_EB22)",
59	0x26 => "Extended byte 23       (R_EB23)",
60);
61
62
63# OUT i2c channel#2 daddr 0x60 100kbps addr_len 1 sync len 1 = (saddr)25 37 02
64
65my $mb86a20s_cont;
66
67while (<>) {
68	my $org_line = $_;
69
70	if (m/(IN|OUT)\s+i2c\s+channel#\d\s+daddr\s+0x10.*\=\s*\(saddr\)([\da-f].)\s+(.*)/) {
71		my $type = $1;
72		my $reg = $2;
73		my $val = $3;
74		my $err = "";
75
76		if ($val =~ s/eRROR (.*)//) {
77			$err = "\t// ERROR $1";
78		}
79
80		if ($reg eq "08" && $val eq "01") {
81			print "\t// INCOMPLETE!!!\n" if ($mb86a20s_cont);
82			printf "\n";
83			$mb86a20s_cont = 0;
84		}
85
86		printf "(%-3s)mb86a20s:\t", $type if (!$mb86a20s_cont);
87
88		if ($type eq "OUT") {
89			printf "{ 0x%s, 0x%s },", $reg, $val;
90		} else {
91			printf "{ 0x%s } = 0x%s,", $reg, $val;
92		}
93
94		if ($reg eq "04" || $reg eq "50" ||
95		    $reg eq "28" || $reg eq "29" || $reg eq "2a") {
96			print " ";
97			$mb86a20s_cont = 1;
98		} else {
99			$mb86a20s_cont = 0;
100			print "$err\n";
101		}
102	}
103
104	if (m/(IN|OUT)\s+i2c\s+channel#\d\s+daddr\s+0x60.*\=\s*\(saddr\)([\da-f].)\s+(.*)/) {
105		my $type = $1;
106		my $vals = $3;
107		my $regval = hex($2);
108		my $err = "";
109
110		if ($vals =~ s/eRROR (.*)//) {
111			$err = "\t// ERROR $1";
112		}
113
114
115		print "\t// INCOMPLETE!!!\n" if ($mb86a20s_cont);
116
117		my $j = 0;
118		while ($j + 2 <= length($vals)) {
119			my $reg;
120			my $val = hex(substr($vals, $j, 2));
121
122			if (defined($tda18271_reg{$regval})) {
123				$reg = $tda18271_reg{$regval};
124			} else {
125				$reg = sprintf "REG 0x%02x", $regval;
126			}
127			printf "(%-3s)tda18271_dump_regs: %s = 0x%02x$err\n", $type, $reg, $val;
128			$regval++;
129			$j += 3;
130		}
131	}
132	print $_ if (m/cx231xx/);
133}
134