diff options
Diffstat (limited to 'drivers/media/video/cx88')
-rw-r--r-- | drivers/media/video/cx88/Kconfig | 20 | ||||
-rw-r--r-- | drivers/media/video/cx88/Makefile | 27 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88-blackbird.c | 2 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88-cards.c | 45 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88-core.c | 35 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88-i2c.c | 2 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88-input.c | 2 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88-tvaudio.c | 28 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88.h | 5 |
9 files changed, 88 insertions, 78 deletions
diff --git a/drivers/media/video/cx88/Kconfig b/drivers/media/video/cx88/Kconfig index 41818b6205b..85ba4106dc7 100644 --- a/drivers/media/video/cx88/Kconfig +++ b/drivers/media/video/cx88/Kconfig | |||
@@ -46,8 +46,8 @@ config VIDEO_CX88_DVB_ALL_FRONTENDS | |||
46 | If you are unsure, choose Y. | 46 | If you are unsure, choose Y. |
47 | 47 | ||
48 | config VIDEO_CX88_DVB_MT352 | 48 | config VIDEO_CX88_DVB_MT352 |
49 | tristate "Zarlink MT352 DVB-T Support" | 49 | bool "Zarlink MT352 DVB-T Support" |
50 | default m | 50 | default y |
51 | depends on VIDEO_CX88_DVB && !VIDEO_CX88_DVB_ALL_FRONTENDS | 51 | depends on VIDEO_CX88_DVB && !VIDEO_CX88_DVB_ALL_FRONTENDS |
52 | select DVB_MT352 | 52 | select DVB_MT352 |
53 | ---help--- | 53 | ---help--- |
@@ -55,8 +55,8 @@ config VIDEO_CX88_DVB_MT352 | |||
55 | Connexant 2388x chip and the MT352 demodulator. | 55 | Connexant 2388x chip and the MT352 demodulator. |
56 | 56 | ||
57 | config VIDEO_CX88_DVB_OR51132 | 57 | config VIDEO_CX88_DVB_OR51132 |
58 | tristate "OR51132 ATSC Support" | 58 | bool "OR51132 ATSC Support" |
59 | default m | 59 | default y |
60 | depends on VIDEO_CX88_DVB && !VIDEO_CX88_DVB_ALL_FRONTENDS | 60 | depends on VIDEO_CX88_DVB && !VIDEO_CX88_DVB_ALL_FRONTENDS |
61 | select DVB_OR51132 | 61 | select DVB_OR51132 |
62 | ---help--- | 62 | ---help--- |
@@ -64,8 +64,8 @@ config VIDEO_CX88_DVB_OR51132 | |||
64 | Connexant 2388x chip and the OR51132 demodulator. | 64 | Connexant 2388x chip and the OR51132 demodulator. |
65 | 65 | ||
66 | config VIDEO_CX88_DVB_CX22702 | 66 | config VIDEO_CX88_DVB_CX22702 |
67 | tristate "Conexant CX22702 DVB-T Support" | 67 | bool "Conexant CX22702 DVB-T Support" |
68 | default m | 68 | default y |
69 | depends on VIDEO_CX88_DVB && !VIDEO_CX88_DVB_ALL_FRONTENDS | 69 | depends on VIDEO_CX88_DVB && !VIDEO_CX88_DVB_ALL_FRONTENDS |
70 | select DVB_CX22702 | 70 | select DVB_CX22702 |
71 | ---help--- | 71 | ---help--- |
@@ -73,8 +73,8 @@ config VIDEO_CX88_DVB_CX22702 | |||
73 | Connexant 2388x chip and the CX22702 demodulator. | 73 | Connexant 2388x chip and the CX22702 demodulator. |
74 | 74 | ||
75 | config VIDEO_CX88_DVB_LGDT330X | 75 | config VIDEO_CX88_DVB_LGDT330X |
76 | tristate "LG Electronics DT3302/DT3303 ATSC Support" | 76 | bool "LG Electronics DT3302/DT3303 ATSC Support" |
77 | default m | 77 | default y |
78 | depends on VIDEO_CX88_DVB && !VIDEO_CX88_DVB_ALL_FRONTENDS | 78 | depends on VIDEO_CX88_DVB && !VIDEO_CX88_DVB_ALL_FRONTENDS |
79 | select DVB_LGDT330X | 79 | select DVB_LGDT330X |
80 | ---help--- | 80 | ---help--- |
@@ -82,8 +82,8 @@ config VIDEO_CX88_DVB_LGDT330X | |||
82 | Connexant 2388x chip and the LGDT3302/LGDT3303 demodulator. | 82 | Connexant 2388x chip and the LGDT3302/LGDT3303 demodulator. |
83 | 83 | ||
84 | config VIDEO_CX88_DVB_NXT200X | 84 | config VIDEO_CX88_DVB_NXT200X |
85 | tristate "NXT2002/NXT2004 ATSC Support" | 85 | bool "NXT2002/NXT2004 ATSC Support" |
86 | default m | 86 | default y |
87 | depends on VIDEO_CX88_DVB && !VIDEO_CX88_DVB_ALL_FRONTENDS | 87 | depends on VIDEO_CX88_DVB && !VIDEO_CX88_DVB_ALL_FRONTENDS |
88 | select DVB_NXT200X | 88 | select DVB_NXT200X |
89 | ---help--- | 89 | ---help--- |
diff --git a/drivers/media/video/cx88/Makefile b/drivers/media/video/cx88/Makefile index 0df40b77345..54401b02b7c 100644 --- a/drivers/media/video/cx88/Makefile +++ b/drivers/media/video/cx88/Makefile | |||
@@ -9,21 +9,12 @@ obj-$(CONFIG_VIDEO_CX88_DVB) += cx88-dvb.o | |||
9 | EXTRA_CFLAGS += -I$(src)/.. | 9 | EXTRA_CFLAGS += -I$(src)/.. |
10 | EXTRA_CFLAGS += -I$(srctree)/drivers/media/dvb/dvb-core | 10 | EXTRA_CFLAGS += -I$(srctree)/drivers/media/dvb/dvb-core |
11 | EXTRA_CFLAGS += -I$(srctree)/drivers/media/dvb/frontends | 11 | EXTRA_CFLAGS += -I$(srctree)/drivers/media/dvb/frontends |
12 | ifneq ($(CONFIG_VIDEO_BUF_DVB),n) | 12 | |
13 | EXTRA_CFLAGS += -DHAVE_VIDEO_BUF_DVB=1 | 13 | extra-cflags-$(CONFIG_VIDEO_BUF_DVB) += -DHAVE_VIDEO_BUF_DVB=1 |
14 | endif | 14 | extra-cflags-$(CONFIG_DVB_CX22702) += -DHAVE_CX22702=1 |
15 | ifneq ($(CONFIG_DVB_CX22702),n) | 15 | extra-cflags-$(CONFIG_DVB_OR51132) += -DHAVE_OR51132=1 |
16 | EXTRA_CFLAGS += -DHAVE_CX22702=1 | 16 | extra-cflags-$(CONFIG_DVB_LGDT330X) += -DHAVE_LGDT330X=1 |
17 | endif | 17 | extra-cflags-$(CONFIG_DVB_MT352) += -DHAVE_MT352=1 |
18 | ifneq ($(CONFIG_DVB_OR51132),n) | 18 | extra-cflags-$(CONFIG_DVB_NXT200X) += -DHAVE_NXT200X=1 |
19 | EXTRA_CFLAGS += -DHAVE_OR51132=1 | 19 | |
20 | endif | 20 | EXTRA_CFLAGS += $(extra-cflags-y) $(extra-cflags-m) |
21 | ifneq ($(CONFIG_DVB_LGDT330X),n) | ||
22 | EXTRA_CFLAGS += -DHAVE_LGDT330X=1 | ||
23 | endif | ||
24 | ifneq ($(CONFIG_DVB_MT352),n) | ||
25 | EXTRA_CFLAGS += -DHAVE_MT352=1 | ||
26 | endif | ||
27 | ifneq ($(CONFIG_DVB_NXT200X),n) | ||
28 | EXTRA_CFLAGS += -DHAVE_NXT200X=1 | ||
29 | endif | ||
diff --git a/drivers/media/video/cx88/cx88-blackbird.c b/drivers/media/video/cx88/cx88-blackbird.c index 4ae3f78cccf..74e57a53116 100644 --- a/drivers/media/video/cx88/cx88-blackbird.c +++ b/drivers/media/video/cx88/cx88-blackbird.c | |||
@@ -616,6 +616,8 @@ static int blackbird_load_firmware(struct cx8802_dev *dev) | |||
616 | 616 | ||
617 | retval = request_firmware(&firmware, BLACKBIRD_FIRM_ENC_FILENAME, | 617 | retval = request_firmware(&firmware, BLACKBIRD_FIRM_ENC_FILENAME, |
618 | &dev->pci->dev); | 618 | &dev->pci->dev); |
619 | |||
620 | |||
619 | if (retval != 0) { | 621 | if (retval != 0) { |
620 | dprintk(0, "ERROR: Hotplug firmware request failed (%s).\n", | 622 | dprintk(0, "ERROR: Hotplug firmware request failed (%s).\n", |
621 | BLACKBIRD_FIRM_ENC_FILENAME); | 623 | BLACKBIRD_FIRM_ENC_FILENAME); |
diff --git a/drivers/media/video/cx88/cx88-cards.c b/drivers/media/video/cx88/cx88-cards.c index f2268631b7c..951709aa88b 100644 --- a/drivers/media/video/cx88/cx88-cards.c +++ b/drivers/media/video/cx88/cx88-cards.c | |||
@@ -567,6 +567,7 @@ struct cx88_board cx88_boards[] = { | |||
567 | .radio_type = UNSET, | 567 | .radio_type = UNSET, |
568 | .tuner_addr = ADDR_UNSET, | 568 | .tuner_addr = ADDR_UNSET, |
569 | .radio_addr = ADDR_UNSET, | 569 | .radio_addr = ADDR_UNSET, |
570 | .tda9887_conf = TDA9887_PRESENT, | ||
570 | .input = {{ | 571 | .input = {{ |
571 | .type = CX88_VMUX_TELEVISION, | 572 | .type = CX88_VMUX_TELEVISION, |
572 | .vmux = 0, | 573 | .vmux = 0, |
@@ -711,6 +712,7 @@ struct cx88_board cx88_boards[] = { | |||
711 | .radio_type = UNSET, | 712 | .radio_type = UNSET, |
712 | .tuner_addr = ADDR_UNSET, | 713 | .tuner_addr = ADDR_UNSET, |
713 | .radio_addr = ADDR_UNSET, | 714 | .radio_addr = ADDR_UNSET, |
715 | .tda9887_conf = TDA9887_PRESENT, | ||
714 | .input = {{ | 716 | .input = {{ |
715 | .type = CX88_VMUX_TELEVISION, | 717 | .type = CX88_VMUX_TELEVISION, |
716 | .vmux = 0, | 718 | .vmux = 0, |
@@ -1083,41 +1085,28 @@ static void hauppauge_eeprom(struct cx88_core *core, u8 *eeprom_data) | |||
1083 | tveeprom_hauppauge_analog(&core->i2c_client, &tv, eeprom_data); | 1085 | tveeprom_hauppauge_analog(&core->i2c_client, &tv, eeprom_data); |
1084 | core->tuner_type = tv.tuner_type; | 1086 | core->tuner_type = tv.tuner_type; |
1085 | core->has_radio = tv.has_radio; | 1087 | core->has_radio = tv.has_radio; |
1086 | } | ||
1087 | |||
1088 | static int hauppauge_eeprom_dvb(struct cx88_core *core, u8 *ee) | ||
1089 | { | ||
1090 | int model; | ||
1091 | int tuner; | ||
1092 | 1088 | ||
1093 | /* Make sure we support the board model */ | 1089 | /* Make sure we support the board model */ |
1094 | model = ee[0x1f] << 24 | ee[0x1e] << 16 | ee[0x1d] << 8 | ee[0x1c]; | 1090 | switch (tv.model) |
1095 | switch(model) { | 1091 | { |
1096 | case 90002: | 1092 | case 90002: /* Nova-T-PCI (9002) */ |
1097 | case 90500: | 1093 | case 92001: /* Nova-S-Plus (Video and IR) */ |
1098 | case 90501: | 1094 | case 92002: /* Nova-S-Plus (Video and IR) */ |
1095 | case 90003: /* Nova-T-PCI (9002 No RF out) */ | ||
1096 | case 90500: /* Nova-T-PCI (oem) */ | ||
1097 | case 90501: /* Nova-T-PCI (oem/IR) */ | ||
1098 | case 92000: /* Nova-SE2 (OEM, No Video or IR) */ | ||
1099 | |||
1099 | /* known */ | 1100 | /* known */ |
1100 | break; | 1101 | break; |
1101 | default: | 1102 | default: |
1102 | printk("%s: warning: unknown hauppauge model #%d\n", | 1103 | printk("%s: warning: unknown hauppauge model #%d\n", |
1103 | core->name, model); | 1104 | core->name, tv.model); |
1104 | break; | 1105 | break; |
1105 | } | 1106 | } |
1106 | 1107 | ||
1107 | /* Make sure we support the tuner */ | 1108 | printk(KERN_INFO "%s: hauppauge eeprom: model=%d\n", |
1108 | tuner = ee[0x2d]; | 1109 | core->name, tv.model); |
1109 | switch(tuner) { | ||
1110 | case 0x4B: /* dtt 7595 */ | ||
1111 | case 0x4C: /* dtt 7592 */ | ||
1112 | break; | ||
1113 | default: | ||
1114 | printk("%s: error: unknown hauppauge tuner 0x%02x\n", | ||
1115 | core->name, tuner); | ||
1116 | return -ENODEV; | ||
1117 | } | ||
1118 | printk(KERN_INFO "%s: hauppauge eeprom: model=%d, tuner=%d\n", | ||
1119 | core->name, model, tuner); | ||
1120 | return 0; | ||
1121 | } | 1110 | } |
1122 | 1111 | ||
1123 | /* ----------------------------------------------------------------------- */ | 1112 | /* ----------------------------------------------------------------------- */ |
@@ -1201,7 +1190,7 @@ void cx88_card_list(struct cx88_core *core, struct pci_dev *pci) | |||
1201 | 1190 | ||
1202 | void cx88_card_setup(struct cx88_core *core) | 1191 | void cx88_card_setup(struct cx88_core *core) |
1203 | { | 1192 | { |
1204 | static u8 eeprom[128]; | 1193 | static u8 eeprom[256]; |
1205 | 1194 | ||
1206 | if (0 == core->i2c_rc) { | 1195 | if (0 == core->i2c_rc) { |
1207 | core->i2c_client.addr = 0xa0 >> 1; | 1196 | core->i2c_client.addr = 0xa0 >> 1; |
@@ -1224,7 +1213,7 @@ void cx88_card_setup(struct cx88_core *core) | |||
1224 | break; | 1213 | break; |
1225 | case CX88_BOARD_HAUPPAUGE_DVB_T1: | 1214 | case CX88_BOARD_HAUPPAUGE_DVB_T1: |
1226 | if (0 == core->i2c_rc) | 1215 | if (0 == core->i2c_rc) |
1227 | hauppauge_eeprom_dvb(core,eeprom); | 1216 | hauppauge_eeprom(core,eeprom); |
1228 | break; | 1217 | break; |
1229 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1: | 1218 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1: |
1230 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS: | 1219 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS: |
diff --git a/drivers/media/video/cx88/cx88-core.c b/drivers/media/video/cx88/cx88-core.c index eb806af1718..bb6eb54e19c 100644 --- a/drivers/media/video/cx88/cx88-core.c +++ b/drivers/media/video/cx88/cx88-core.c | |||
@@ -837,6 +837,29 @@ static int set_pll(struct cx88_core *core, int prescale, u32 ofreq) | |||
837 | return -1; | 837 | return -1; |
838 | } | 838 | } |
839 | 839 | ||
840 | int cx88_start_audio_dma(struct cx88_core *core) | ||
841 | { | ||
842 | /* setup fifo + format */ | ||
843 | cx88_sram_channel_setup(core, &cx88_sram_channels[SRAM_CH25], 128, 0); | ||
844 | cx88_sram_channel_setup(core, &cx88_sram_channels[SRAM_CH26], 128, 0); | ||
845 | |||
846 | cx_write(MO_AUDD_LNGTH, 128); /* fifo bpl size */ | ||
847 | cx_write(MO_AUDR_LNGTH, 128); /* fifo bpl size */ | ||
848 | |||
849 | /* start dma */ | ||
850 | cx_write(MO_AUD_DMACNTRL, 0x0003); /* Up and Down fifo enable */ | ||
851 | |||
852 | return 0; | ||
853 | } | ||
854 | |||
855 | int cx88_stop_audio_dma(struct cx88_core *core) | ||
856 | { | ||
857 | /* stop dma */ | ||
858 | cx_write(MO_AUD_DMACNTRL, 0x0000); | ||
859 | |||
860 | return 0; | ||
861 | } | ||
862 | |||
840 | static int set_tvaudio(struct cx88_core *core) | 863 | static int set_tvaudio(struct cx88_core *core) |
841 | { | 864 | { |
842 | struct cx88_tvnorm *norm = core->tvnorm; | 865 | struct cx88_tvnorm *norm = core->tvnorm; |
@@ -877,12 +900,16 @@ static int set_tvaudio(struct cx88_core *core) | |||
877 | cx88_set_tvaudio(core); | 900 | cx88_set_tvaudio(core); |
878 | /* cx88_set_stereo(dev,V4L2_TUNER_MODE_STEREO); */ | 901 | /* cx88_set_stereo(dev,V4L2_TUNER_MODE_STEREO); */ |
879 | 902 | ||
880 | cx_write(MO_AUDD_LNGTH, 128); /* fifo size */ | 903 | /* |
881 | cx_write(MO_AUDR_LNGTH, 128); /* fifo size */ | 904 | This should be needed only on cx88-alsa. It seems that some cx88 chips have |
882 | cx_write(MO_AUD_DMACNTRL, 0x03); /* need audio fifo */ | 905 | bugs and does require DMA enabled for it to work. |
906 | */ | ||
907 | cx88_start_audio_dma(core); | ||
883 | return 0; | 908 | return 0; |
884 | } | 909 | } |
885 | 910 | ||
911 | |||
912 | |||
886 | int cx88_set_tvnorm(struct cx88_core *core, struct cx88_tvnorm *norm) | 913 | int cx88_set_tvnorm(struct cx88_core *core, struct cx88_tvnorm *norm) |
887 | { | 914 | { |
888 | u32 fsc8; | 915 | u32 fsc8; |
@@ -1204,6 +1231,8 @@ EXPORT_SYMBOL(cx88_set_scale); | |||
1204 | EXPORT_SYMBOL(cx88_vdev_init); | 1231 | EXPORT_SYMBOL(cx88_vdev_init); |
1205 | EXPORT_SYMBOL(cx88_core_get); | 1232 | EXPORT_SYMBOL(cx88_core_get); |
1206 | EXPORT_SYMBOL(cx88_core_put); | 1233 | EXPORT_SYMBOL(cx88_core_put); |
1234 | EXPORT_SYMBOL(cx88_start_audio_dma); | ||
1235 | EXPORT_SYMBOL(cx88_stop_audio_dma); | ||
1207 | 1236 | ||
1208 | /* | 1237 | /* |
1209 | * Local variables: | 1238 | * Local variables: |
diff --git a/drivers/media/video/cx88/cx88-i2c.c b/drivers/media/video/cx88/cx88-i2c.c index 9790d412f19..4a8fb161b16 100644 --- a/drivers/media/video/cx88/cx88-i2c.c +++ b/drivers/media/video/cx88/cx88-i2c.c | |||
@@ -94,7 +94,7 @@ static int attach_inform(struct i2c_client *client) | |||
94 | struct cx88_core *core = i2c_get_adapdata(client->adapter); | 94 | struct cx88_core *core = i2c_get_adapdata(client->adapter); |
95 | 95 | ||
96 | dprintk(1, "%s i2c attach [addr=0x%x,client=%s]\n", | 96 | dprintk(1, "%s i2c attach [addr=0x%x,client=%s]\n", |
97 | client->driver->name, client->addr, client->name); | 97 | client->driver->driver.name, client->addr, client->name); |
98 | if (!client->driver->command) | 98 | if (!client->driver->command) |
99 | return 0; | 99 | return 0; |
100 | 100 | ||
diff --git a/drivers/media/video/cx88/cx88-input.c b/drivers/media/video/cx88/cx88-input.c index 38b12ebaa49..461019dca90 100644 --- a/drivers/media/video/cx88/cx88-input.c +++ b/drivers/media/video/cx88/cx88-input.c | |||
@@ -453,7 +453,6 @@ int cx88_ir_init(struct cx88_core *core, struct pci_dev *pci) | |||
453 | input_dev->id.product = pci->device; | 453 | input_dev->id.product = pci->device; |
454 | } | 454 | } |
455 | input_dev->cdev.dev = &pci->dev; | 455 | input_dev->cdev.dev = &pci->dev; |
456 | |||
457 | /* record handles to ourself */ | 456 | /* record handles to ourself */ |
458 | ir->core = core; | 457 | ir->core = core; |
459 | core->ir = ir; | 458 | core->ir = ir; |
@@ -586,7 +585,6 @@ void cx88_ir_irq(struct cx88_core *core) | |||
586 | MODULE_AUTHOR("Gerd Knorr, Pavel Machek, Chris Pascoe"); | 585 | MODULE_AUTHOR("Gerd Knorr, Pavel Machek, Chris Pascoe"); |
587 | MODULE_DESCRIPTION("input driver for cx88 GPIO-based IR remote controls"); | 586 | MODULE_DESCRIPTION("input driver for cx88 GPIO-based IR remote controls"); |
588 | MODULE_LICENSE("GPL"); | 587 | MODULE_LICENSE("GPL"); |
589 | |||
590 | /* | 588 | /* |
591 | * Local variables: | 589 | * Local variables: |
592 | * c-basic-offset: 8 | 590 | * c-basic-offset: 8 |
diff --git a/drivers/media/video/cx88/cx88-tvaudio.c b/drivers/media/video/cx88/cx88-tvaudio.c index 6d9bec1c583..a1b120c8a9b 100644 --- a/drivers/media/video/cx88/cx88-tvaudio.c +++ b/drivers/media/video/cx88/cx88-tvaudio.c | |||
@@ -119,13 +119,10 @@ static void set_audio_registers(struct cx88_core *core, const struct rlist *l) | |||
119 | 119 | ||
120 | static void set_audio_start(struct cx88_core *core, u32 mode) | 120 | static void set_audio_start(struct cx88_core *core, u32 mode) |
121 | { | 121 | { |
122 | // mute | 122 | /* mute */ |
123 | cx_write(AUD_VOL_CTL, (1 << 6)); | 123 | cx_write(AUD_VOL_CTL, (1 << 6)); |
124 | 124 | ||
125 | // start programming | 125 | /* start programming */ |
126 | cx_write(MO_AUD_DMACNTRL, 0x0000); | ||
127 | msleep(100); | ||
128 | //cx_write(AUD_CTL, 0x0000); | ||
129 | cx_write(AUD_INIT, mode); | 126 | cx_write(AUD_INIT, mode); |
130 | cx_write(AUD_INIT_LD, 0x0001); | 127 | cx_write(AUD_INIT_LD, 0x0001); |
131 | cx_write(AUD_SOFT_RESET, 0x0001); | 128 | cx_write(AUD_SOFT_RESET, 0x0001); |
@@ -135,17 +132,21 @@ static void set_audio_finish(struct cx88_core *core, u32 ctl) | |||
135 | { | 132 | { |
136 | u32 volume; | 133 | u32 volume; |
137 | 134 | ||
135 | /* restart dma; This avoids buzz in NICAM and is good in others */ | ||
136 | cx88_stop_audio_dma(core); | ||
137 | cx_write(AUD_RATE_THRES_DMD, 0x000000C0); | ||
138 | cx88_start_audio_dma(core); | ||
139 | |||
138 | if (cx88_boards[core->board].blackbird) { | 140 | if (cx88_boards[core->board].blackbird) { |
139 | // sets sound input from external adc | 141 | /* sets sound input from external adc */ |
140 | cx_set(AUD_CTL, EN_I2SIN_ENABLE); | 142 | cx_set(AUD_CTL, EN_I2SIN_ENABLE); |
141 | //cx_write(AUD_I2SINPUTCNTL, 0); | ||
142 | cx_write(AUD_I2SINPUTCNTL, 4); | 143 | cx_write(AUD_I2SINPUTCNTL, 4); |
143 | cx_write(AUD_BAUDRATE, 1); | 144 | cx_write(AUD_BAUDRATE, 1); |
144 | // 'pass-thru mode': this enables the i2s output to the mpeg encoder | 145 | /* 'pass-thru mode': this enables the i2s output to the mpeg encoder */ |
145 | cx_set(AUD_CTL, EN_I2SOUT_ENABLE); | 146 | cx_set(AUD_CTL, EN_I2SOUT_ENABLE); |
146 | cx_write(AUD_I2SOUTPUTCNTL, 1); | 147 | cx_write(AUD_I2SOUTPUTCNTL, 1); |
147 | cx_write(AUD_I2SCNTL, 0); | 148 | cx_write(AUD_I2SCNTL, 0); |
148 | //cx_write(AUD_APB_IN_RATE_ADJ, 0); | 149 | /* cx_write(AUD_APB_IN_RATE_ADJ, 0); */ |
149 | } else { | 150 | } else { |
150 | ctl |= EN_DAC_ENABLE; | 151 | ctl |= EN_DAC_ENABLE; |
151 | cx_write(AUD_CTL, ctl); | 152 | cx_write(AUD_CTL, ctl); |
@@ -153,7 +154,6 @@ static void set_audio_finish(struct cx88_core *core, u32 ctl) | |||
153 | 154 | ||
154 | /* finish programming */ | 155 | /* finish programming */ |
155 | cx_write(AUD_SOFT_RESET, 0x0000); | 156 | cx_write(AUD_SOFT_RESET, 0x0000); |
156 | cx_write(MO_AUD_DMACNTRL, 0x0003); | ||
157 | 157 | ||
158 | /* unmute */ | 158 | /* unmute */ |
159 | volume = cx_sread(SHADOW_AUD_VOL_CTL); | 159 | volume = cx_sread(SHADOW_AUD_VOL_CTL); |
@@ -313,7 +313,6 @@ static void set_audio_standard_NICAM(struct cx88_core *core, u32 mode) | |||
313 | {AUD_RATE_ADJ3, 0x00000100}, | 313 | {AUD_RATE_ADJ3, 0x00000100}, |
314 | {AUD_RATE_ADJ4, 0x00000400}, | 314 | {AUD_RATE_ADJ4, 0x00000400}, |
315 | {AUD_RATE_ADJ5, 0x00001000}, | 315 | {AUD_RATE_ADJ5, 0x00001000}, |
316 | //{ AUD_DMD_RA_DDS, 0x00c0d5ce }, | ||
317 | {AUD_ERRLOGPERIOD_R, 0x00000fff}, | 316 | {AUD_ERRLOGPERIOD_R, 0x00000fff}, |
318 | {AUD_ERRINTRPTTHSHLD1_R, 0x000003ff}, | 317 | {AUD_ERRINTRPTTHSHLD1_R, 0x000003ff}, |
319 | {AUD_ERRINTRPTTHSHLD2_R, 0x000000ff}, | 318 | {AUD_ERRINTRPTTHSHLD2_R, 0x000000ff}, |
@@ -351,12 +350,12 @@ static void set_audio_standard_NICAM(struct cx88_core *core, u32 mode) | |||
351 | set_audio_registers(core, nicam_l); | 350 | set_audio_registers(core, nicam_l); |
352 | break; | 351 | break; |
353 | case WW_I: | 352 | case WW_I: |
354 | dprintk("%s PAL-I NICAM (status: devel)\n", __FUNCTION__); | 353 | dprintk("%s PAL-I NICAM (status: known-good)\n", __FUNCTION__); |
355 | set_audio_registers(core, nicam_bgdki_common); | 354 | set_audio_registers(core, nicam_bgdki_common); |
356 | set_audio_registers(core, nicam_i); | 355 | set_audio_registers(core, nicam_i); |
357 | break; | 356 | break; |
358 | default: | 357 | default: |
359 | dprintk("%s PAL-BGDK NICAM (status: unknown)\n", __FUNCTION__); | 358 | dprintk("%s PAL-BGDK NICAM (status: known-good)\n", __FUNCTION__); |
360 | set_audio_registers(core, nicam_bgdki_common); | 359 | set_audio_registers(core, nicam_bgdki_common); |
361 | set_audio_registers(core, nicam_default); | 360 | set_audio_registers(core, nicam_default); |
362 | break; | 361 | break; |
@@ -715,8 +714,7 @@ int cx88_detect_nicam(struct cx88_core *core) | |||
715 | /* if bit1=1 then nicam is detected */ | 714 | /* if bit1=1 then nicam is detected */ |
716 | j += ((cx_read(AUD_NICAM_STATUS2) & 0x02) >> 1); | 715 | j += ((cx_read(AUD_NICAM_STATUS2) & 0x02) >> 1); |
717 | 716 | ||
718 | /* 3x detected: absolutly sure now */ | 717 | if (j == 1) { |
719 | if (j == 3) { | ||
720 | dprintk("nicam is detected.\n"); | 718 | dprintk("nicam is detected.\n"); |
721 | return 1; | 719 | return 1; |
722 | } | 720 | } |
diff --git a/drivers/media/video/cx88/cx88.h b/drivers/media/video/cx88/cx88.h index b19d3a9e229..77beafc5c32 100644 --- a/drivers/media/video/cx88/cx88.h +++ b/drivers/media/video/cx88/cx88.h | |||
@@ -411,7 +411,6 @@ struct cx8802_dev { | |||
411 | struct videobuf_dvb dvb; | 411 | struct videobuf_dvb dvb; |
412 | void* fe_handle; | 412 | void* fe_handle; |
413 | int (*fe_release)(void *handle); | 413 | int (*fe_release)(void *handle); |
414 | |||
415 | /* for switching modulation types */ | 414 | /* for switching modulation types */ |
416 | unsigned char ts_gen_cntrl; | 415 | unsigned char ts_gen_cntrl; |
417 | 416 | ||
@@ -491,6 +490,10 @@ extern struct cx88_core* cx88_core_get(struct pci_dev *pci); | |||
491 | extern void cx88_core_put(struct cx88_core *core, | 490 | extern void cx88_core_put(struct cx88_core *core, |
492 | struct pci_dev *pci); | 491 | struct pci_dev *pci); |
493 | 492 | ||
493 | extern int cx88_start_audio_dma(struct cx88_core *core); | ||
494 | extern int cx88_stop_audio_dma(struct cx88_core *core); | ||
495 | |||
496 | |||
494 | /* ----------------------------------------------------------- */ | 497 | /* ----------------------------------------------------------- */ |
495 | /* cx88-vbi.c */ | 498 | /* cx88-vbi.c */ |
496 | 499 | ||