From: Marco Schluessler Fixed mpeg audio on spdif from Nexus-CA card (rev 2.3), definitions for sound chip MSP3415 Signed-off-by: Marco Schluessler Signed-off-by: Oliver Endriss Signed-off-by: Mauro Carvalho Chehab Signed-off-by: Andrew Morton --- drivers/media/dvb/ttpci/av7110.c | 12 +++++++++--- drivers/media/dvb/ttpci/av7110.h | 3 ++- drivers/media/dvb/ttpci/av7110_av.c | 2 +- drivers/media/dvb/ttpci/av7110_v4l.c | 2 +- 4 files changed, 13 insertions(+), 6 deletions(-) diff -puN drivers/media/dvb/ttpci/av7110_av.c~dvb-2440-fixed-mpeg-audio-on-spdif-from-nexus-ca drivers/media/dvb/ttpci/av7110_av.c --- devel/drivers/media/dvb/ttpci/av7110_av.c~dvb-2440-fixed-mpeg-audio-on-spdif-from-nexus-ca 2005-12-09 22:50:30.000000000 -0800 +++ devel-akpm/drivers/media/dvb/ttpci/av7110_av.c 2005-12-09 22:50:30.000000000 -0800 @@ -309,7 +309,7 @@ int av7110_set_volume(struct av7110 *av7 i2c_writereg(av7110, 0x20, 0x04, volright); return 0; - case DVB_ADAC_MSP: + case DVB_ADAC_MSP34x0: vol = (volleft > volright) ? volleft : volright; val = (vol * 0x73 / 255) << 8; if (vol > 0) diff -puN drivers/media/dvb/ttpci/av7110.c~dvb-2440-fixed-mpeg-audio-on-spdif-from-nexus-ca drivers/media/dvb/ttpci/av7110.c --- devel/drivers/media/dvb/ttpci/av7110.c~dvb-2440-fixed-mpeg-audio-on-spdif-from-nexus-ca 2005-12-09 22:50:30.000000000 -0800 +++ devel-akpm/drivers/media/dvb/ttpci/av7110.c 2005-12-09 22:50:30.000000000 -0800 @@ -133,7 +133,13 @@ static void init_av7110_av(struct av7110 /* remaining inits according to card and frontend type */ av7110->analog_tuner_flags = 0; av7110->current_input = 0; - if (i2c_writereg(av7110, 0x20, 0x00, 0x00) == 1) { + if (dev->pci->subsystem_vendor == 0x13c2 && dev->pci->subsystem_device == 0x000a) { + printk("dvb-ttpci: MSP3415 audio DAC @ card %d\n", + av7110->dvb_adapter.num); + av7110->adac_type = DVB_ADAC_MSP34x5; + av7110_fw_cmd(av7110, COMTYPE_AUDIODAC, ADSwitch, 1, 0); // SPDIF on + } + else if (i2c_writereg(av7110, 0x20, 0x00, 0x00) == 1) { printk ("dvb-ttpci: Crystal audio DAC @ card %d detected\n", av7110->dvb_adapter.num); av7110->adac_type = DVB_ADAC_CRYSTAL; @@ -156,10 +162,10 @@ static void init_av7110_av(struct av7110 else { av7110->adac_type = adac; printk("dvb-ttpci: adac type set to %d @ card %d\n", - av7110->dvb_adapter.num, av7110->adac_type); + av7110->adac_type, av7110->dvb_adapter.num); } - if (av7110->adac_type == DVB_ADAC_NONE || av7110->adac_type == DVB_ADAC_MSP) { + if (av7110->adac_type == DVB_ADAC_NONE || av7110->adac_type == DVB_ADAC_MSP34x0) { // switch DVB SCART on ret = av7110_fw_cmd(av7110, COMTYPE_AUDIODAC, MainSwitch, 1, 0); if (ret < 0) diff -puN drivers/media/dvb/ttpci/av7110.h~dvb-2440-fixed-mpeg-audio-on-spdif-from-nexus-ca drivers/media/dvb/ttpci/av7110.h --- devel/drivers/media/dvb/ttpci/av7110.h~dvb-2440-fixed-mpeg-audio-on-spdif-from-nexus-ca 2005-12-09 22:50:30.000000000 -0800 +++ devel-akpm/drivers/media/dvb/ttpci/av7110.h 2005-12-09 22:50:30.000000000 -0800 @@ -98,7 +98,8 @@ struct av7110 { int adac_type; /* audio DAC type */ #define DVB_ADAC_TI 0 #define DVB_ADAC_CRYSTAL 1 -#define DVB_ADAC_MSP 2 +#define DVB_ADAC_MSP34x0 2 +#define DVB_ADAC_MSP34x5 3 #define DVB_ADAC_NONE -1 diff -puN drivers/media/dvb/ttpci/av7110_v4l.c~dvb-2440-fixed-mpeg-audio-on-spdif-from-nexus-ca drivers/media/dvb/ttpci/av7110_v4l.c --- devel/drivers/media/dvb/ttpci/av7110_v4l.c~dvb-2440-fixed-mpeg-audio-on-spdif-from-nexus-ca 2005-12-09 22:50:30.000000000 -0800 +++ devel-akpm/drivers/media/dvb/ttpci/av7110_v4l.c 2005-12-09 22:50:30.000000000 -0800 @@ -587,7 +587,7 @@ int av7110_init_analog_module(struct av7 printk("dvb-ttpci: DVB-C analog module @ card %d detected, initializing MSP3400\n", av7110->dvb_adapter.num); - av7110->adac_type = DVB_ADAC_MSP; + av7110->adac_type = DVB_ADAC_MSP34x0; msleep(100); // the probing above resets the msp... msp_readreg(av7110, MSP_RD_DSP, 0x001e, &version1); msp_readreg(av7110, MSP_RD_DSP, 0x001f, &version2); _