diff -Nur w_scan-20080815/scan.c w_scan-20080815_patch3/scan.c --- w_scan-20080815/scan.c 2008-08-16 09:02:01.000000000 +0100 +++ w_scan-20080815_patch3/scan.c 2008-11-06 17:31:23.000000000 +0000 @@ -77,7 +77,7 @@ .type = -1 }; -uint version = 20080815; +uint version = 20081106; int verbosity = 2; #define ATSC_VSB 0x01 @@ -2579,7 +2579,7 @@ { char frontend_devname [80]; int adapter = 999, frontend = 0, demux = 0; - int opt, i; + int opt, i, j; int frontend_fd; int fe_open_mode; int frontend_type = FE_OFDM; @@ -2715,19 +2715,20 @@ if ( adapter == 999 ) { info("Info: using DVB adapter auto detection.\n"); fe_open_mode = O_RDWR | O_NONBLOCK; - for (i=0; i < 4; i++) { - snprintf (frontend_devname, sizeof(frontend_devname), "/dev/dvb/adapter%i/frontend0", i); - if ((frontend_fd = open (frontend_devname, fe_open_mode)) < 0) { - info("Info: unable to open frontend %s'\n", frontend_devname); + + for (i=0; i < 8; i++) { + for (j=0; j < 4; j++) { + snprintf (frontend_devname, sizeof(frontend_devname), "/dev/dvb/adapter%i/frontend%i", i, j); + if ((frontend_fd = open (frontend_devname, fe_open_mode)) < 0) { continue; } - /* determine FE type and caps */ - if (ioctl(frontend_fd, FE_GET_INFO, &fe_info) == -1) { + /* determine FE type and caps */ + if (ioctl(frontend_fd, FE_GET_INFO, &fe_info) == -1) { info(" ERROR: unable to determine frontend type\n"); close (frontend_fd); continue; - } - if (fe_info.type==frontend_type) { + } + if (fe_info.type == frontend_type) { if (fe_info.type == FE_OFDM) info(" Found DVB-T frontend. Using adapter %s\n",frontend_devname); else if (fe_info.type == FE_ATSC) @@ -2736,9 +2737,16 @@ info(" Found DVB-C frontend. Using adapter %s\n",frontend_devname); close (frontend_fd); adapter=i; + frontend=j; + i=999; break; - } + } + else { + info(" Wrong type, ignoring frontend %s\n",frontend_devname); + close (frontend_fd); + } + } } } snprintf (frontend_devname, sizeof(frontend_devname),