diff options
Diffstat (limited to 'sound')
-rw-r--r-- | sound/ppc/snd_ps3.c | 32 |
1 files changed, 15 insertions, 17 deletions
diff --git a/sound/ppc/snd_ps3.c b/sound/ppc/snd_ps3.c index f361c26506aa..d660b0f6bcae 100644 --- a/sound/ppc/snd_ps3.c +++ b/sound/ppc/snd_ps3.c | |||
@@ -165,8 +165,7 @@ static const struct snd_pcm_hardware snd_ps3_pcm_hw = { | |||
165 | .fifo_size = PS3_AUDIO_FIFO_SIZE | 165 | .fifo_size = PS3_AUDIO_FIFO_SIZE |
166 | }; | 166 | }; |
167 | 167 | ||
168 | static struct snd_pcm_ops snd_ps3_pcm_spdif_ops = | 168 | static struct snd_pcm_ops snd_ps3_pcm_spdif_ops = { |
169 | { | ||
170 | .open = snd_ps3_pcm_open, | 169 | .open = snd_ps3_pcm_open, |
171 | .close = snd_ps3_pcm_close, | 170 | .close = snd_ps3_pcm_close, |
172 | .prepare = snd_ps3_pcm_prepare, | 171 | .prepare = snd_ps3_pcm_prepare, |
@@ -183,7 +182,7 @@ static int snd_ps3_verify_dma_stop(struct snd_ps3_card_info *card, | |||
183 | int dma_ch, done, retries, stop_forced = 0; | 182 | int dma_ch, done, retries, stop_forced = 0; |
184 | uint32_t status; | 183 | uint32_t status; |
185 | 184 | ||
186 | for (dma_ch = 0; dma_ch < 8; dma_ch ++) { | 185 | for (dma_ch = 0; dma_ch < 8; dma_ch++) { |
187 | retries = count; | 186 | retries = count; |
188 | do { | 187 | do { |
189 | status = read_reg(PS3_AUDIO_KICK(dma_ch)) & | 188 | status = read_reg(PS3_AUDIO_KICK(dma_ch)) & |
@@ -259,9 +258,7 @@ static void snd_ps3_kick_dma(struct snd_ps3_card_info *card) | |||
259 | /* | 258 | /* |
260 | * convert virtual addr to ioif bus addr. | 259 | * convert virtual addr to ioif bus addr. |
261 | */ | 260 | */ |
262 | static dma_addr_t v_to_bus(struct snd_ps3_card_info *card, | 261 | static dma_addr_t v_to_bus(struct snd_ps3_card_info *card, void *paddr, int ch) |
263 | void * paddr, | ||
264 | int ch) | ||
265 | { | 262 | { |
266 | return card->dma_start_bus_addr[ch] + | 263 | return card->dma_start_bus_addr[ch] + |
267 | (paddr - card->dma_start_vaddr[ch]); | 264 | (paddr - card->dma_start_vaddr[ch]); |
@@ -321,7 +318,7 @@ static int snd_ps3_program_dma(struct snd_ps3_card_info *card, | |||
321 | spin_lock_irqsave(&card->dma_lock, irqsave); | 318 | spin_lock_irqsave(&card->dma_lock, irqsave); |
322 | for (ch = 0; ch < 2; ch++) { | 319 | for (ch = 0; ch < 2; ch++) { |
323 | start_vaddr = card->dma_next_transfer_vaddr[0]; | 320 | start_vaddr = card->dma_next_transfer_vaddr[0]; |
324 | for (stage = 0; stage < fill_stages; stage ++) { | 321 | for (stage = 0; stage < fill_stages; stage++) { |
325 | dma_ch = stage * 2 + ch; | 322 | dma_ch = stage * 2 + ch; |
326 | if (silent) | 323 | if (silent) |
327 | dma_addr = card->null_buffer_start_dma_addr; | 324 | dma_addr = card->null_buffer_start_dma_addr; |
@@ -619,7 +616,7 @@ static int snd_ps3_change_avsetting(struct snd_ps3_card_info *card) | |||
619 | PS3_AUDIO_AO_3WMCTRL_ASOEN(2) | | 616 | PS3_AUDIO_AO_3WMCTRL_ASOEN(2) | |
620 | PS3_AUDIO_AO_3WMCTRL_ASOEN(3)), | 617 | PS3_AUDIO_AO_3WMCTRL_ASOEN(3)), |
621 | 0); | 618 | 0); |
622 | wmb(); /* ensure the hardware sees the change */ | 619 | wmb(); /* ensure the hardware sees the change */ |
623 | /* wait for actually stopped */ | 620 | /* wait for actually stopped */ |
624 | retries = 1000; | 621 | retries = 1000; |
625 | while ((read_reg(PS3_AUDIO_AO_3WMCTRL) & | 622 | while ((read_reg(PS3_AUDIO_AO_3WMCTRL) & |
@@ -798,20 +795,20 @@ static struct snd_kcontrol_new spdif_ctls[] = { | |||
798 | { | 795 | { |
799 | .access = SNDRV_CTL_ELEM_ACCESS_READ, | 796 | .access = SNDRV_CTL_ELEM_ACCESS_READ, |
800 | .iface = SNDRV_CTL_ELEM_IFACE_PCM, | 797 | .iface = SNDRV_CTL_ELEM_IFACE_PCM, |
801 | .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,CON_MASK), | 798 | .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, CON_MASK), |
802 | .info = snd_ps3_spdif_mask_info, | 799 | .info = snd_ps3_spdif_mask_info, |
803 | .get = snd_ps3_spdif_cmask_get, | 800 | .get = snd_ps3_spdif_cmask_get, |
804 | }, | 801 | }, |
805 | { | 802 | { |
806 | .access = SNDRV_CTL_ELEM_ACCESS_READ, | 803 | .access = SNDRV_CTL_ELEM_ACCESS_READ, |
807 | .iface = SNDRV_CTL_ELEM_IFACE_PCM, | 804 | .iface = SNDRV_CTL_ELEM_IFACE_PCM, |
808 | .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,PRO_MASK), | 805 | .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, PRO_MASK), |
809 | .info = snd_ps3_spdif_mask_info, | 806 | .info = snd_ps3_spdif_mask_info, |
810 | .get = snd_ps3_spdif_pmask_get, | 807 | .get = snd_ps3_spdif_pmask_get, |
811 | }, | 808 | }, |
812 | { | 809 | { |
813 | .iface = SNDRV_CTL_ELEM_IFACE_PCM, | 810 | .iface = SNDRV_CTL_ELEM_IFACE_PCM, |
814 | .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,DEFAULT), | 811 | .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, DEFAULT), |
815 | .info = snd_ps3_spdif_mask_info, | 812 | .info = snd_ps3_spdif_mask_info, |
816 | .get = snd_ps3_spdif_default_get, | 813 | .get = snd_ps3_spdif_default_get, |
817 | .put = snd_ps3_spdif_default_put, | 814 | .put = snd_ps3_spdif_default_put, |
@@ -1020,11 +1017,12 @@ static int __init snd_ps3_driver_probe(struct ps3_system_bus_device *dev) | |||
1020 | * its size should be lager than PS3_AUDIO_FIFO_STAGE_SIZE * 2 | 1017 | * its size should be lager than PS3_AUDIO_FIFO_STAGE_SIZE * 2 |
1021 | * PAGE_SIZE is enogh | 1018 | * PAGE_SIZE is enogh |
1022 | */ | 1019 | */ |
1023 | if (!(the_card.null_buffer_start_vaddr = | 1020 | the_card.null_buffer_start_vaddr = |
1024 | dma_alloc_coherent(&the_card.ps3_dev->core, | 1021 | dma_alloc_coherent(&the_card.ps3_dev->core, |
1025 | PAGE_SIZE, | 1022 | PAGE_SIZE, |
1026 | &the_card.null_buffer_start_dma_addr, | 1023 | &the_card.null_buffer_start_dma_addr, |
1027 | GFP_KERNEL))) { | 1024 | GFP_KERNEL); |
1025 | if (!the_card.null_buffer_start_vaddr) { | ||
1028 | pr_info("%s: nullbuffer alloc failed\n", __func__); | 1026 | pr_info("%s: nullbuffer alloc failed\n", __func__); |
1029 | goto clean_preallocate; | 1027 | goto clean_preallocate; |
1030 | } | 1028 | } |
@@ -1148,7 +1146,7 @@ static irqreturn_t snd_ps3_interrupt(int irq, void *dev_id) | |||
1148 | SND_PS3_DMA_FILLTYPE_SILENT_FIRSTFILL : | 1146 | SND_PS3_DMA_FILLTYPE_SILENT_FIRSTFILL : |
1149 | SND_PS3_DMA_FILLTYPE_SILENT_RUNNING); | 1147 | SND_PS3_DMA_FILLTYPE_SILENT_RUNNING); |
1150 | snd_ps3_kick_dma(card); | 1148 | snd_ps3_kick_dma(card); |
1151 | card->silent --; | 1149 | card->silent--; |
1152 | } else { | 1150 | } else { |
1153 | snd_ps3_program_dma(card, | 1151 | snd_ps3_program_dma(card, |
1154 | (underflow_occured) ? | 1152 | (underflow_occured) ? |