summaryrefslogtreecommitdiff
path: root/v4l2-apps/util/xc3028-firmware
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@infradead.org>2007-12-14 14:39:25 -0200
committerMauro Carvalho Chehab <mchehab@infradead.org>2007-12-14 14:39:25 -0200
commitc080e8bb0f57cdeeb8cc2cee2e5d8357f404cdcf (patch)
treed86b4c9558557e4e7a99dbaddc887770f43a93af /v4l2-apps/util/xc3028-firmware
parentf4b0dc814babaa02303f9cfbc6f8364d0a40b14d (diff)
downloadmediapointer-dvb-s2-c080e8bb0f57cdeeb8cc2cee2e5d8357f404cdcf.tar.gz
mediapointer-dvb-s2-c080e8bb0f57cdeeb8cc2cee2e5d8357f404cdcf.tar.bz2
Firmware standards changed. Fix the firmware-tool
From: Mauro Carvalho Chehab <mchehab@infradead.org> Firmware now allows having an IF table. This added some changes at the firmware formats. This patch fixes firmware-tool to properly display such newer firmware files. Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'v4l2-apps/util/xc3028-firmware')
-rw-r--r--v4l2-apps/util/xc3028-firmware/firmware-tool.c91
1 files changed, 53 insertions, 38 deletions
diff --git a/v4l2-apps/util/xc3028-firmware/firmware-tool.c b/v4l2-apps/util/xc3028-firmware/firmware-tool.c
index 03063c21f..037d4f12c 100644
--- a/v4l2-apps/util/xc3028-firmware/firmware-tool.c
+++ b/v4l2-apps/util/xc3028-firmware/firmware-tool.c
@@ -43,6 +43,7 @@ struct firmware_description {
__u32 type;
__u64 id;
unsigned char *data;
+ __u16 int_freq;
__u32 size;
};
@@ -150,6 +151,12 @@ int read_firmware(unsigned char* data, off_t size, struct firmware** f_res) {
p += sizeof(f->desc[i].type);
f->desc[i].id = __le64_to_cpu(*(__u64*) p);
p += sizeof(f->desc[i].id);
+
+ if (f->desc[i].type & HAS_IF) {
+ f->desc[i].int_freq = __le16_to_cpu(*(__u16 *) p);
+ p += sizeof(f->desc[i].int_freq);
+ }
+
f->desc[i].size = __le32_to_cpu(*(__u32*) p);
p += sizeof(f->desc[i].size);
@@ -282,64 +289,70 @@ void write_firmware_file(const char* filename, struct firmware *f) {
void dump_firm_type(unsigned int type)
{
- if (type & BASE)
+ if (!type) {
+ printf("STD FIRM ");
+ return;
+ }
+ if (type & BASE)
printf("BASE ");
- if (type & F8MHZ)
+ if (type & F8MHZ)
printf("F8MHZ ");
- if (type & MTS)
+ if (type & MTS)
printf("MTS ");
- if (type & D2620)
+ if (type & D2620)
printf("D2620 ");
- if (type & D2633)
+ if (type & D2633)
printf("D2633 ");
- if (type & DTV6)
+ if (type & DTV6)
printf("DTV6 ");
- if (type & QAM)
+ if (type & QAM)
printf("QAM ");
- if (type & DTV7)
+ if (type & DTV7)
printf("DTV7 ");
- if (type & DTV78)
+ if (type & DTV78)
printf("DTV78 ");
- if (type & DTV8)
+ if (type & DTV8)
printf("DTV8 ");
- if (type & FM)
+ if (type & FM)
printf("FM ");
- if (type & INPUT1)
+ if (type & INPUT1)
printf("INPUT1 ");
- if (type & LCD)
+ if (type & LCD)
printf("LCD ");
- if (type & NOGD)
+ if (type & NOGD)
printf("NOGD ");
- if (type & MONO)
+ if (type & MONO)
printf("MONO ");
- if (type & ATSC)
+ if (type & ATSC)
printf("ATSC ");
- if (type & IF)
+ if (type & IF)
printf("IF ");
- if (type & LG60)
+ if (type & LG60)
printf("LG60 ");
- if (type & ATI638)
+ if (type & ATI638)
printf("ATI638 ");
- if (type & OREN538)
+ if (type & OREN538)
printf("OREN538 ");
- if (type & OREN36)
+ if (type & OREN36)
printf("OREN36 ");
- if (type & TOYOTA388)
+ if (type & TOYOTA388)
printf("TOYOTA388 ");
- if (type & TOYOTA794)
+ if (type & TOYOTA794)
printf("TOYOTA794 ");
- if (type & DIBCOM52)
+ if (type & DIBCOM52)
printf("DIBCOM52 ");
- if (type & ZARLINK456)
+ if (type & ZARLINK456)
printf("ZARLINK456 ");
- if (type & CHINA)
+ if (type & CHINA)
printf("CHINA ");
- if (type & F6MHZ)
+ if (type & F6MHZ)
printf("F6MHZ ");
- if (type & INPUT2)
+ if (type & INPUT2)
printf("INPUT2 ");
- if (type & SCODE)
+ if (type & SCODE)
printf("SCODE ");
+ if (type & HAS_IF)
+ printf("HAS IF ");
}
void dump_firm_std(v4l2_std_id id)
@@ -445,31 +458,31 @@ void dump_firm_std(v4l2_std_id id)
} else if ( (id & V4L2_STD_SECAM_LC) == V4L2_STD_SECAM_LC) {
printf ("SECAM/Lc ");
curr_id = V4L2_STD_SECAM_LC;
- } else if ( (id & V4L2_STD_A2) == V4L2_STD_A2) {
+ } else if ( (id & V4L2_STD_A2)) {
printf ("A2 ");
curr_id = V4L2_STD_A2;
- } else if ( (id & V4L2_STD_A2_A) == V4L2_STD_A2_A) {
+ } else if ( (id & V4L2_STD_A2_A)) {
printf ("A2/A ");
curr_id = V4L2_STD_A2_A;
- } else if ( (id & V4L2_STD_A2_B) == V4L2_STD_A2_B) {
+ } else if ( (id & V4L2_STD_A2_B)) {
printf ("A2/A ");
curr_id = V4L2_STD_A2_B;
- } else if ( (id & V4L2_STD_NICAM) == V4L2_STD_NICAM) {
+ } else if ( (id & V4L2_STD_NICAM)) {
printf ("NICAM ");
curr_id = V4L2_STD_NICAM;
- } else if ( (id & V4L2_STD_NICAM_A) == V4L2_STD_NICAM_A) {
+ } else if ( (id & V4L2_STD_NICAM_A)) {
printf ("NICAM/A ");
curr_id = V4L2_STD_NICAM_A;
- } else if ( (id & V4L2_STD_NICAM_B) == V4L2_STD_NICAM_B) {
+ } else if ( (id & V4L2_STD_NICAM_B)) {
printf ("NICAM/B ");
curr_id = V4L2_STD_NICAM_B;
- } else if ( (id & V4L2_STD_AM) == V4L2_STD_AM) {
+ } else if ( (id & V4L2_STD_AM)) {
printf ("AM ");
curr_id = V4L2_STD_AM;
- } else if ( (id & V4L2_STD_BTSC) == V4L2_STD_BTSC) {
+ } else if ( (id & V4L2_STD_BTSC)) {
printf ("BTSC ");
curr_id = V4L2_STD_BTSC;
- } else if ( (id & V4L2_STD_EIAJ) == V4L2_STD_EIAJ) {
+ } else if ( (id & V4L2_STD_EIAJ)) {
printf ("EIAJ ");
curr_id = V4L2_STD_EIAJ;
} else {
@@ -492,6 +505,8 @@ void list_firmware(struct firmware *f) {
printf("type: ");
dump_firm_type(f->desc[i].type);
printf("(0x%08x), ", f->desc[i].type);
+ if (f->desc[i].type & HAS_IF)
+ printf("IF = %.2f MHz ", f->desc[i].int_freq/1000.0);
printf("id: ");
dump_firm_std(f->desc[i].id);
printf("(%016llx), ", f->desc[i].id);