V4L/DVB (9269): cx88: add I2S-ADC tvaudio method
[firefly-linux-kernel-4.4.55.git] / drivers / media / video / cx88 / cx88-tvaudio.c
index 76e5c78d8ae44c8698af8611db3fabdf30830fd6..7dd506b987fe76d06be6788104f67ce88cd72bc2 100644 (file)
 
 #include "cx88.h"
 
-static unsigned int audio_debug = 0;
+static unsigned int audio_debug;
 module_param(audio_debug, int, 0644);
 MODULE_PARM_DESC(audio_debug, "enable debug messages [audio]");
 
-static unsigned int always_analog = 0;
+static unsigned int always_analog;
 module_param(always_analog,int,0644);
 MODULE_PARM_DESC(always_analog,"force analog audio out");
 
-static unsigned int radio_deemphasis = 0;
+static unsigned int radio_deemphasis;
 module_param(radio_deemphasis,int,0644);
 MODULE_PARM_DESC(radio_deemphasis, "Radio deemphasis time constant, "
                 "0=None, 1=50us (elsewhere), 2=75us (USA)");
@@ -265,12 +265,12 @@ static void set_audio_standard_BTSC(struct cx88_core *core, unsigned int sap,
        mode |= EN_FMRADIO_EN_RDS;
 
        if (sap) {
-               dprintk("%s SAP (status: unknown)\n", __FUNCTION__);
+               dprintk("%s SAP (status: unknown)\n", __func__);
                set_audio_start(core, SEL_SAP);
                set_audio_registers(core, btsc_sap);
                set_audio_finish(core, mode);
        } else {
-               dprintk("%s (status: known-good)\n", __FUNCTION__);
+               dprintk("%s (status: known-good)\n", __func__);
                set_audio_start(core, SEL_BTSC);
                set_audio_registers(core, btsc);
                set_audio_finish(core, mode);
@@ -351,16 +351,16 @@ static void set_audio_standard_NICAM(struct cx88_core *core, u32 mode)
        set_audio_start(core,SEL_NICAM);
        switch (core->tvaudio) {
        case WW_L:
-               dprintk("%s SECAM-L NICAM (status: devel)\n", __FUNCTION__);
+               dprintk("%s SECAM-L NICAM (status: devel)\n", __func__);
                set_audio_registers(core, nicam_l);
                break;
        case WW_I:
-               dprintk("%s PAL-I NICAM (status: known-good)\n", __FUNCTION__);
+               dprintk("%s PAL-I NICAM (status: known-good)\n", __func__);
                set_audio_registers(core, nicam_bgdki_common);
                set_audio_registers(core, nicam_i);
                break;
        default:
-               dprintk("%s PAL-BGDK NICAM (status: known-good)\n", __FUNCTION__);
+               dprintk("%s PAL-BGDK NICAM (status: known-good)\n", __func__);
                set_audio_registers(core, nicam_bgdki_common);
                set_audio_registers(core, nicam_default);
                break;
@@ -600,28 +600,28 @@ static void set_audio_standard_A2(struct cx88_core *core, u32 mode)
        set_audio_start(core, SEL_A2);
        switch (core->tvaudio) {
        case WW_BG:
-               dprintk("%s PAL-BG A1/2 (status: known-good)\n", __FUNCTION__);
+               dprintk("%s PAL-BG A1/2 (status: known-good)\n", __func__);
                set_audio_registers(core, a2_bgdk_common);
                set_audio_registers(core, a2_bg);
                set_audio_registers(core, a2_deemph50);
                break;
        case WW_DK:
-               dprintk("%s PAL-DK A1/2 (status: known-good)\n", __FUNCTION__);
+               dprintk("%s PAL-DK A1/2 (status: known-good)\n", __func__);
                set_audio_registers(core, a2_bgdk_common);
                set_audio_registers(core, a2_dk);
                set_audio_registers(core, a2_deemph50);
                break;
        case WW_I:
-               dprintk("%s PAL-I A1 (status: known-good)\n", __FUNCTION__);
+               dprintk("%s PAL-I A1 (status: known-good)\n", __func__);
                set_audio_registers(core, a1_i);
                set_audio_registers(core, a2_deemph50);
                break;
        case WW_L:
-               dprintk("%s AM-L (status: devel)\n", __FUNCTION__);
+               dprintk("%s AM-L (status: devel)\n", __func__);
                set_audio_registers(core, am_l);
                break;
        default:
-               dprintk("%s Warning: wrong value\n", __FUNCTION__);
+               dprintk("%s Warning: wrong value\n", __func__);
                return;
                break;
        };
@@ -637,7 +637,7 @@ static void set_audio_standard_EIAJ(struct cx88_core *core)
 
                { /* end of list */ },
        };
-       dprintk("%s (status: unknown)\n", __FUNCTION__);
+       dprintk("%s (status: unknown)\n", __func__);
 
        set_audio_start(core, SEL_EIAJ);
        set_audio_registers(core, eiaj);
@@ -691,7 +691,7 @@ static void set_audio_standard_FM(struct cx88_core *core,
                { /* end of list */ },
        };
 
-       dprintk("%s (status: unknown)\n", __FUNCTION__);
+       dprintk("%s (status: unknown)\n", __func__);
        set_audio_start(core, SEL_FMRADIO);
 
        switch (deemph) {
@@ -767,6 +767,14 @@ void cx88_set_tvaudio(struct cx88_core *core)
        case WW_FM:
                set_audio_standard_FM(core, radio_deemphasis);
                break;
+       case WW_I2SADC:
+               set_audio_start(core, 0x01);
+               /* Slave/Philips/Autobaud */
+               cx_write(AUD_I2SINPUTCNTL, 0);
+               /* Switch to "I2S ADC mode" */
+               cx_write(AUD_I2SCNTL, 0x1);
+               set_audio_finish(core, EN_I2SIN_ENABLE);
+               break;
        case WW_NONE:
        default:
                printk("%s/0: unknown tv audio mode [%d]\n",
@@ -895,6 +903,9 @@ void cx88_set_stereo(struct cx88_core *core, u32 mode, int manual)
                        break;
                }
                break;
+       case WW_I2SADC:
+               /* DO NOTHING */
+               break;
        }
 
        if (UNSET != ctl) {