|
@@ -332,6 +332,13 @@ static int tvaudio_checkcarrier(struct saa7134_dev *dev, struct mainscan *scan)
|
|
|
{
|
|
|
__s32 left,right,value;
|
|
|
|
|
|
+ if (!(dev->tvnorm->id & scan->std)) {
|
|
|
+ value = 0;
|
|
|
+ dprintk("skipping %d.%03d MHz [%4s]\n",
|
|
|
+ scan->carr / 1000, scan->carr % 1000, scan->name);
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
if (audio_debug > 1) {
|
|
|
int i;
|
|
|
dprintk("debug %d:",scan->carr);
|
|
@@ -348,30 +355,25 @@ static int tvaudio_checkcarrier(struct saa7134_dev *dev, struct mainscan *scan)
|
|
|
}
|
|
|
printk("\n");
|
|
|
}
|
|
|
- if (dev->tvnorm->id & scan->std) {
|
|
|
- tvaudio_setcarrier(dev,scan->carr-90,scan->carr-90);
|
|
|
- saa_readl(SAA7134_LEVEL_READOUT1 >> 2);
|
|
|
- if (tvaudio_sleep(dev,SCAN_SAMPLE_DELAY))
|
|
|
- return -1;
|
|
|
- left = saa_readl(SAA7134_LEVEL_READOUT1 >> 2);
|
|
|
-
|
|
|
- tvaudio_setcarrier(dev,scan->carr+90,scan->carr+90);
|
|
|
- saa_readl(SAA7134_LEVEL_READOUT1 >> 2);
|
|
|
- if (tvaudio_sleep(dev,SCAN_SAMPLE_DELAY))
|
|
|
- return -1;
|
|
|
- right = saa_readl(SAA7134_LEVEL_READOUT1 >> 2);
|
|
|
-
|
|
|
- left >>= 16;
|
|
|
- right >>= 16;
|
|
|
- value = left > right ? left - right : right - left;
|
|
|
- dprintk("scanning %d.%03d MHz [%4s] => dc is %5d [%d/%d]\n",
|
|
|
- scan->carr / 1000, scan->carr % 1000,
|
|
|
- scan->name, value, left, right);
|
|
|
- } else {
|
|
|
- value = 0;
|
|
|
- dprintk("skipping %d.%03d MHz [%4s]\n",
|
|
|
- scan->carr / 1000, scan->carr % 1000, scan->name);
|
|
|
- }
|
|
|
+
|
|
|
+ tvaudio_setcarrier(dev,scan->carr-90,scan->carr-90);
|
|
|
+ saa_readl(SAA7134_LEVEL_READOUT1 >> 2);
|
|
|
+ if (tvaudio_sleep(dev,SCAN_SAMPLE_DELAY))
|
|
|
+ return -1;
|
|
|
+ left = saa_readl(SAA7134_LEVEL_READOUT1 >> 2);
|
|
|
+
|
|
|
+ tvaudio_setcarrier(dev,scan->carr+90,scan->carr+90);
|
|
|
+ saa_readl(SAA7134_LEVEL_READOUT1 >> 2);
|
|
|
+ if (tvaudio_sleep(dev,SCAN_SAMPLE_DELAY))
|
|
|
+ return -1;
|
|
|
+ right = saa_readl(SAA7134_LEVEL_READOUT1 >> 2);
|
|
|
+
|
|
|
+ left >>= 16;
|
|
|
+ right >>= 16;
|
|
|
+ value = left > right ? left - right : right - left;
|
|
|
+ dprintk("scanning %d.%03d MHz [%4s] => dc is %5d [%d/%d]\n",
|
|
|
+ scan->carr / 1000, scan->carr % 1000,
|
|
|
+ scan->name, value, left, right);
|
|
|
return value;
|
|
|
}
|
|
|
|
|
@@ -546,6 +548,7 @@ static int tvaudio_thread(void *data)
|
|
|
dev->tvnorm->name, carrier/1000, carrier%1000,
|
|
|
max1, max2);
|
|
|
dev->last_carrier = carrier;
|
|
|
+ dev->automute = 0;
|
|
|
|
|
|
} else if (0 != dev->last_carrier) {
|
|
|
/* no carrier -- try last detected one as fallback */
|
|
@@ -553,6 +556,7 @@ static int tvaudio_thread(void *data)
|
|
|
dprintk("audio carrier scan failed, "
|
|
|
"using %d.%03d MHz [last detected]\n",
|
|
|
carrier/1000, carrier%1000);
|
|
|
+ dev->automute = 1;
|
|
|
|
|
|
} else {
|
|
|
/* no carrier + no fallback -- use default */
|
|
@@ -560,9 +564,9 @@ static int tvaudio_thread(void *data)
|
|
|
dprintk("audio carrier scan failed, "
|
|
|
"using %d.%03d MHz [default]\n",
|
|
|
carrier/1000, carrier%1000);
|
|
|
+ dev->automute = 1;
|
|
|
}
|
|
|
tvaudio_setcarrier(dev,carrier,carrier);
|
|
|
- dev->automute = 0;
|
|
|
saa_andorb(SAA7134_STEREO_DAC_OUTPUT_SELECT, 0x30, 0x00);
|
|
|
saa7134_tvaudio_setmute(dev);
|
|
|
/* find the exact tv audio norm */
|
|
@@ -1020,6 +1024,7 @@ int saa7134_tvaudio_init2(struct saa7134_dev *dev)
|
|
|
}
|
|
|
|
|
|
dev->thread.thread = NULL;
|
|
|
+ dev->thread.scan1 = dev->thread.scan2 = 0;
|
|
|
if (my_thread) {
|
|
|
saa7134_tvaudio_init(dev);
|
|
|
/* start tvaudio thread */
|
|
@@ -1029,13 +1034,19 @@ int saa7134_tvaudio_init2(struct saa7134_dev *dev)
|
|
|
dev->name);
|
|
|
/* XXX: missing error handling here */
|
|
|
}
|
|
|
- saa7134_tvaudio_do_scan(dev);
|
|
|
}
|
|
|
|
|
|
saa7134_enable_i2s(dev);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+int saa7134_tvaudio_close(struct saa7134_dev *dev)
|
|
|
+{
|
|
|
+ dev->automute = 1;
|
|
|
+ /* anything else to undo? */
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
int saa7134_tvaudio_fini(struct saa7134_dev *dev)
|
|
|
{
|
|
|
/* shutdown tvaudio thread */
|