From: Iliyan Malchev Date: Tue, 23 Nov 2010 00:07:44 +0000 (-0800) Subject: Merge branch 'linux-tegra-2.6.36' into android-tegra-2.6.36 X-Git-Tag: firefly_0821_release~9833^2~103 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=b4d50aa63c58b8affa08f60f4dba415040845371;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 Signed-off-by: Iliyan Malchev --- b4d50aa63c58b8affa08f60f4dba415040845371 diff --cc arch/arm/mach-tegra/tegra_i2s_audio.c index f8a67f1e2043,76587e6997d8..39c6c0290f25 --- a/arch/arm/mach-tegra/tegra_i2s_audio.c +++ b/arch/arm/mach-tegra/tegra_i2s_audio.c @@@ -40,8 -44,6 +44,7 @@@ #include #include #include - #include +#include #include #include #include @@@ -87,31 -86,11 +87,13 @@@ struct audio_stream struct tegra_dma_channel *dma_chan; bool stop; struct completion stop_completion; - spinlock_t dma_req_lock; /* guards dma_has_it */ - int dma_has_it; - struct tegra_dma_req dma_req; + spinlock_t dma_req_lock; - struct pm_qos_request_list pm_qos; struct work_struct allow_suspend_work; + struct wake_lock wake_lock; + char wake_lock_name[100]; }; - struct i2s_pio_stats { - u32 i2s_interrupt_count; - u32 tx_fifo_errors; - u32 rx_fifo_errors; - u32 tx_fifo_written; - u32 rx_fifo_read; - }; - - static const int divs_8000[] = { 5, 6, 6, 5 }; /* 8018.(18) Hz */ - static const int divs_11025[] = { 4 }; - static const int divs_22050[] = { 2 }; - static const int divs_44100[] = { 1 }; - static const int divs_16000[] = { 2, 3, 3, 3, 3, 3, 3, 2 }; /* 16036.(36) Hz */ - /* per i2s controller */ struct audio_driver_state { struct list_head next; @@@ -225,18 -199,13 +202,15 @@@ static inline void prevent_suspend(stru { pr_debug("%s\n", __func__); cancel_work_sync(&as->allow_suspend_work); + wake_lock(&as->wake_lock); - pm_qos_update_request(&as->pm_qos, 0); } static void allow_suspend_worker(struct work_struct *w) { struct audio_stream *as = container_of(w, struct audio_stream, allow_suspend_work); - pr_debug("%s\n", __func__); - pm_qos_update_request(&as->pm_qos, PM_QOS_DEFAULT_VALUE); + wake_unlock(&as->wake_lock); } static inline void allow_suspend(struct audio_stream *as) @@@ -2473,15 -1809,7 +1814,13 @@@ static int tegra_audio_probe(struct pla return rc; INIT_WORK(&state->out.allow_suspend_work, allow_suspend_worker); - pm_qos_add_request(&state->out.pm_qos, PM_QOS_CPU_DMA_LATENCY, - PM_QOS_DEFAULT_VALUE); + 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); + rc = setup_misc_device(&state->misc_out, &tegra_audio_out_fops, "audio%d_out", state->pdev->id); @@@ -2517,15 -1845,7 +1856,13 @@@ return rc; INIT_WORK(&state->in.allow_suspend_work, allow_suspend_worker); - 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); diff --cc arch/arm/mach-tegra/tegra_spdif_audio.c index fd96f2abf5eb,dc8a09b1ff2f..faa53a24e219 --- a/arch/arm/mach-tegra/tegra_spdif_audio.c +++ b/arch/arm/mach-tegra/tegra_spdif_audio.c @@@ -125,7 -121,7 +124,7 @@@ struct audio_driver_state static inline int buf_size(struct audio_stream *s) { - return 1 << s->buf_config.size; - return 1 << PCM_BUFFER_MAX_SIZE_ORDER; ++ return 1 << PCM_BUFFER_MAX_SIZE_ORDER; } static inline int chunk_size(struct audio_stream *s)