diff -Nauprw linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-saa.c ../new/linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-saa.c --- linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-saa.c 2008-11-24 14:06:25.000000000 +0530 +++ ../new/linux-2.6.20/drivers/media/nomadik_mm/saa/nomadik-saa.c 2008-11-26 18:37:16.000000000 +0530 @@ -1292,12 +1292,14 @@ static int link_msp (struct instance_des else { /*Configure Output sink for audiocodec*/ + //Audiocodec driver will do this. + #if 0 acodec_error = nomadik_acodec_select_output(DEFAULT_OUTPUT_DEVICE, USER_SAA); if (acodec_error != CODEC_OK) { printk ("SAA_DRV ERROR : configuring audiocodec:%i\n", acodec_error); return acodec_error; } - + #endif down(&saa_desc->open_lock); if(saa_desc->msp_out_flag != 0){ printk ("SAA_DRV ERROR : MSP OUT already used \n"); diff -Nauprw linux-2.6.20/sound/arm/nomadik_alsa.c ../new/linux-2.6.20/sound/arm/nomadik_alsa.c --- linux-2.6.20/sound/arm/nomadik_alsa.c 2008-11-24 14:06:29.000000000 +0530 +++ ../new/linux-2.6.20/sound/arm/nomadik_alsa.c 2008-11-26 18:36:26.000000000 +0530 @@ -568,10 +568,14 @@ static int snd_nomadik_alsa_pcm_open(snd if (stream_id == SNDRV_PCM_STREAM_PLAYBACK) { runtime->hw = snd_nomadik_playback_hw; /* configure the output sink for the acodec */ + #if 0 + if(codec_conf.codec_output != chip->output_device){ if ((error = nomadik_acodec_select_output(chip->output_device, USER_ALSA))) { printk("ALSA: ERROR: select output failed\n"); return error; } + } + #endif } else { runtime->hw = snd_nomadik_capture_hw; /* configure the input source for the acodec */ diff -Nauprw linux-2.6.20/sound/nomadik_stw5095.c ../new/linux-2.6.20/sound/nomadik_stw5095.c --- linux-2.6.20/sound/nomadik_stw5095.c 2008-11-24 14:06:29.000000000 +0530 +++ ../new/linux-2.6.20/sound/nomadik_stw5095.c 2008-11-26 18:36:04.000000000 +0530 @@ -3237,6 +3237,7 @@ t_codec_error nomadik_acodec_setuser(t_a t_codec_error nomadik_acodec_unsetuser(t_acodec_user user) { + int err=0; t_codec_error codec_error = CODEC_OK; if(g_codec_system_context.cur_user != user){ @@ -3246,6 +3247,18 @@ t_codec_error nomadik_acodec_unsetuser(t } else { g_codec_system_context.cur_user = NO_USER; + + err = STMPE2401_Install_Callback(STMPE0, EGPIO_PIN_7 ,NULL,(void*)user); + if (err != STMPE2401_OK) + { + printk("Couldn't setup codec callback\n"); + } + + err = STMPE2401_Install_Callback(STMPE0, EGPIO_PIN_6 ,NULL,(void*)user); + if (err != STMPE2401_OK) + { + printk("Couldn't setup codec callback\n"); + } nomadik_acodec_powerdown(0); } @@ -3282,6 +3295,10 @@ static void codec_callback1(void *user) uint8 byte_value; t_acodec_user t; t = (t_acodec_user) user; + //spurious interuupt protection + if((t != USER_ALSA) && (t != USER_SAA) ) + return; + err = STMPE2401_GetGpioVal(STMPE0,EGPIO_PIN_7,&byte_value); switch(byte_value) {