From: Colin Cross Date: Wed, 20 Oct 2010 21:39:20 +0000 (-0700) Subject: Merge branch 'linux-tegra-2.6.36' into android-tegra-2.6.36 X-Git-Tag: firefly_0821_release~9833^2~147 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=4ab096ce9c6532f3876d1cbb71462f7a7101003b;p=firefly-linux-kernel-4.4.55.git Merge branch 'linux-tegra-2.6.36' into android-tegra-2.6.36 Conflicts: arch/arm/mach-tegra/tegra_i2s_audio.c Change-Id: I3e05a70e3fb8fdaa8ca4c5ed78ca020c75ed0caa --- 4ab096ce9c6532f3876d1cbb71462f7a7101003b diff --cc arch/arm/mach-tegra/tegra_i2s_audio.c index 03ef3c3551b8,bca3828f3c6a..277532c22700 --- a/arch/arm/mach-tegra/tegra_i2s_audio.c +++ b/arch/arm/mach-tegra/tegra_i2s_audio.c @@@ -2301,88 -2383,86 +2392,98 @@@ static int tegra_audio_probe(struct pla i2s_set_bit_size(state->i2s_base, state->pdata->bit_size); i2s_set_fifo_format(state->i2s_base, state->pdata->fifo_fmt); - state->out.opened = 0; - state->out.active = false; - mutex_init(&state->out.lock); - init_completion(&state->out.fifo_completion); - init_completion(&state->out.stop_completion); - spin_lock_init(&state->out.dma_req_lock); - state->out.buf_phys = 0; - state->out.dma_chan = NULL; - state->out.dma_has_it = false; - - state->in.opened = 0; - state->in.active = false; - mutex_init(&state->in.lock); - init_completion(&state->in.fifo_completion); - init_completion(&state->in.stop_completion); - spin_lock_init(&state->in.dma_req_lock); - state->in.buf_phys = 0; - state->in.dma_chan = NULL; - state->in.dma_has_it = false; - - state->out.buffer = 0; - state->out.buf_config.size = PCM_BUFFER_MAX_SIZE_ORDER; - state->out.buf_config.threshold = PCM_BUFFER_THRESHOLD_ORDER; - state->out.buf_config.chunk = PCM_BUFFER_DMA_CHUNK_SIZE_ORDER; - rc = init_stream_buffer(&state->out, &state->out.buf_config, 0); - if (rc < 0) - return rc; - - state->in.buffer = 0; - state->in.buf_config.size = PCM_BUFFER_MAX_SIZE_ORDER; - state->in.buf_config.threshold = PCM_BUFFER_THRESHOLD_ORDER; - state->in.buf_config.chunk = PCM_BUFFER_DMA_CHUNK_SIZE_ORDER; - rc = init_stream_buffer(&state->in, &state->in.buf_config, - PCM_IN_BUFFER_PADDING); - if (rc < 0) - return rc; + if ((state->pdata->mask & TEGRA_AUDIO_ENABLE_TX)) { + state->out.opened = 0; + state->out.active = false; + mutex_init(&state->out.lock); + init_completion(&state->out.fifo_completion); + init_completion(&state->out.stop_completion); + spin_lock_init(&state->out.dma_req_lock); + state->out.buf_phys = 0; + state->out.dma_chan = NULL; + state->out.dma_has_it = false; + + state->out.i2s_fifo_atn_level = I2S_FIFO_ATN_LVL_FOUR_SLOTS; + state->out.buffer = 0; + state->out.buf_config.size = PCM_BUFFER_MAX_SIZE_ORDER; + state->out.buf_config.threshold = PCM_BUFFER_THRESHOLD_ORDER; + state->out.buf_config.chunk = PCM_BUFFER_DMA_CHUNK_SIZE_ORDER; + rc = init_stream_buffer(&state->out, &state->out.buf_config, 0); + if (rc < 0) + return rc; - pm_qos_add_request(&state->in.pm_qos, PM_QOS_CPU_DMA_LATENCY, - PM_QOS_DEFAULT_VALUE); - pm_qos_add_request(&state->out.pm_qos, PM_QOS_CPU_DMA_LATENCY, + pm_qos_add_request(&state->out.pm_qos, PM_QOS_CPU_DMA_LATENCY, PM_QOS_DEFAULT_VALUE); - snprintf(state->in.wake_lock_name, sizeof(state->in.wake_lock_name), - "i2s.%d-audio-in", state->pdev->id); - wake_lock_init(&state->in.wake_lock, WAKE_LOCK_SUSPEND, - state->in.wake_lock_name); - snprintf(state->out.wake_lock_name, sizeof(state->out.wake_lock_name), - "i2s.%d-audio-out", state->pdev->id); - wake_lock_init(&state->out.wake_lock, WAKE_LOCK_SUSPEND, ++ snprintf(state->out.wake_lock_name, ++ sizeof(state->out.wake_lock_name), ++ "i2s.%d-audio-out", state->pdev->id); ++ wake_lock_init(&state->out.wake_lock, WAKE_LOCK_SUSPEND, + state->out.wake_lock_name); + - if (request_irq(state->irq, i2s_interrupt, - IRQF_DISABLED, state->pdev->name, state) < 0) { - dev_err(&pdev->dev, - "%s: could not register handler for irq %d\n", - __func__, state->irq); - return -EIO; - } - - rc = setup_misc_device(&state->misc_out, + rc = setup_misc_device(&state->misc_out, &tegra_audio_out_fops, "audio%d_out", state->pdev->id); - if (rc < 0) - return rc; + if (rc < 0) + return rc; - rc = setup_misc_device(&state->misc_out_ctl, - &tegra_audio_out_ctl_fops, - "audio%d_out_ctl", state->pdev->id); - if (rc < 0) - return rc; + rc = setup_misc_device(&state->misc_out_ctl, + &tegra_audio_out_ctl_fops, + "audio%d_out_ctl", state->pdev->id); + if (rc < 0) + return rc; + } + + if ((state->pdata->mask & TEGRA_AUDIO_ENABLE_RX)) { + state->in.opened = 0; + state->in.active = false; + mutex_init(&state->in.lock); + init_completion(&state->in.fifo_completion); + init_completion(&state->in.stop_completion); + spin_lock_init(&state->in.dma_req_lock); + state->in.buf_phys = 0; + state->in.dma_chan = NULL; + state->in.dma_has_it = false; + + state->in.i2s_fifo_atn_level = I2S_FIFO_ATN_LVL_FOUR_SLOTS; + state->in.buffer = 0; + state->in.buf_config.size = PCM_BUFFER_MAX_SIZE_ORDER; + state->in.buf_config.threshold = PCM_BUFFER_THRESHOLD_ORDER; + state->in.buf_config.chunk = PCM_BUFFER_DMA_CHUNK_SIZE_ORDER; + rc = init_stream_buffer(&state->in, &state->in.buf_config, + PCM_IN_BUFFER_PADDING); + if (rc < 0) + return rc; - rc = setup_misc_device(&state->misc_in, + pm_qos_add_request(&state->in.pm_qos, PM_QOS_CPU_DMA_LATENCY, + PM_QOS_DEFAULT_VALUE); + ++ snprintf(state->in.wake_lock_name, ++ sizeof(state->in.wake_lock_name), ++ "i2s.%d-audio-in", state->pdev->id); ++ wake_lock_init(&state->in.wake_lock, WAKE_LOCK_SUSPEND, ++ state->in.wake_lock_name); ++ + rc = setup_misc_device(&state->misc_in, &tegra_audio_in_fops, "audio%d_in", state->pdev->id); - if (rc < 0) - return rc; + if (rc < 0) + return rc; - rc = setup_misc_device(&state->misc_in_ctl, + rc = setup_misc_device(&state->misc_in_ctl, &tegra_audio_in_ctl_fops, "audio%d_in_ctl", state->pdev->id); - if (rc < 0) - return rc; + if (rc < 0) + return rc; + } + + if (request_irq(state->irq, i2s_interrupt, + IRQF_DISABLED, state->pdev->name, state) < 0) { + dev_err(&pdev->dev, + "%s: could not register handler for irq %d\n", + __func__, state->irq); + return -EIO; + } rc = setup_misc_device(&state->misc_ctl, &tegra_audio_ctl_fops,