Lines Matching +full:bt +full:- +full:pcm +full:- +full:int +full:- +full:params

1 // SPDX-License-Identifier: GPL-2.0-only
3 * AMD ALSA SoC PCM Driver for ACP 2.x
5 * Copyright 2014-2015 Advanced Micro Devices, Inc.
129 * Configure a given dma channel parameters - enable/disable,
170 acp_reg_write(descr_info->src, acp_mmio, mmACP_SRBM_Targ_Idx_Data); in config_dma_descriptor_in_sram()
173 acp_reg_write(descr_info->dest, acp_mmio, mmACP_SRBM_Targ_Idx_Data); in config_dma_descriptor_in_sram()
177 acp_reg_write(descr_info->xfer_val, acp_mmio, mmACP_SRBM_Targ_Idx_Data); in config_dma_descriptor_in_sram()
183 int ret; in pre_config_reset()
200 * system memory <-> ACP SRAM
203 u32 size, int direction, in set_acp_sysmem_dma_descriptors()
252 dma_dscr_idx - 1, in set_acp_sysmem_dma_descriptors()
259 * ACP SRAM <-> I2S
262 int direction, u32 sram_bank, in set_acp_to_i2s_dma_descriptors()
292 config_acp_dma_channel(acp_mmio, ch, dma_dscr_idx - 1, in set_acp_to_i2s_dma_descriptors()
308 /* Load the low address of page int ACP SRAM through SRBM */ in acp_pte_config()
317 /* Load the High address of page int ACP SRAM through SRBM */ in acp_pte_config()
336 acp_pte_config(acp_mmio, rtd->dma_addr, rtd->num_of_pages, in config_acp_dma()
337 rtd->pte_offset); in config_acp_dma()
339 if (rtd->direction == SNDRV_PCM_STREAM_PLAYBACK) { in config_acp_dma()
340 ch_acp_sysmem = rtd->ch1; in config_acp_dma()
341 ch_acp_i2s = rtd->ch2; in config_acp_dma()
343 ch_acp_i2s = rtd->ch1; in config_acp_dma()
344 ch_acp_sysmem = rtd->ch2; in config_acp_dma()
346 /* Configure System memory <-> ACP SRAM DMA descriptors */ in config_acp_dma()
347 set_acp_sysmem_dma_descriptors(acp_mmio, rtd->size, in config_acp_dma()
348 rtd->direction, rtd->pte_offset, in config_acp_dma()
349 ch_acp_sysmem, rtd->sram_bank, in config_acp_dma()
350 rtd->dma_dscr_idx_1, asic_type); in config_acp_dma()
351 /* Configure ACP SRAM <-> I2S DMA descriptors */ in config_acp_dma()
352 set_acp_to_i2s_dma_descriptors(acp_mmio, rtd->size, in config_acp_dma()
353 rtd->direction, rtd->sram_bank, in config_acp_dma()
354 rtd->destination, ch_acp_i2s, in config_acp_dma()
355 rtd->dma_dscr_idx_2, asic_type); in config_acp_dma()
454 static int acp_dma_stop(void __iomem *acp_mmio, u8 ch_num) in acp_dma_stop()
495 if (--count == 0) { in acp_dma_stop()
497 return -ETIMEDOUT; in acp_dma_stop()
516 bank -= 32; in acp_set_sram_bank_state()
543 if (!loops--) { in acp_set_sram_bank_state()
552 static int acp_init(void __iomem *acp_mmio, u32 asic_type) in acp_init()
569 if (--count == 0) { in acp_init()
571 return -ETIMEDOUT; in acp_init()
587 if (--count == 0) { in acp_init()
589 return -ETIMEDOUT; in acp_init()
599 /* For BT instance change pins from UART to BT */ in acp_init()
646 static int acp_deinit(void __iomem *acp_mmio) in acp_deinit()
663 if (--count == 0) { in acp_deinit()
665 return -ETIMEDOUT; in acp_deinit()
680 if (--count == 0) { in acp_deinit()
682 return -ETIMEDOUT; in acp_deinit()
690 static irqreturn_t dma_irq_handler(int irq, void *arg) in dma_irq_handler()
700 acp_mmio = irq_data->acp_mmio; in dma_irq_handler()
709 snd_pcm_period_elapsed(irq_data->play_i2ssp_stream); in dma_irq_handler()
716 snd_pcm_period_elapsed(irq_data->play_i2s_micsp_stream); in dma_irq_handler()
723 snd_pcm_period_elapsed(irq_data->play_i2sbt_stream); in dma_irq_handler()
740 snd_pcm_period_elapsed(irq_data->capture_i2ssp_stream); in dma_irq_handler()
758 snd_pcm_period_elapsed(irq_data->capture_i2sbt_stream); in dma_irq_handler()
770 static int acp_dma_open(struct snd_soc_component *component, in acp_dma_open()
774 int ret = 0; in acp_dma_open()
775 struct snd_pcm_runtime *runtime = substream->runtime; in acp_dma_open()
776 struct audio_drv_data *intr_data = dev_get_drvdata(component->dev); in acp_dma_open()
780 return -ENOMEM; in acp_dma_open()
782 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { in acp_dma_open()
783 switch (intr_data->asic_type) { in acp_dma_open()
785 runtime->hw = acp_st_pcm_hardware_playback; in acp_dma_open()
788 runtime->hw = acp_pcm_hardware_playback; in acp_dma_open()
791 switch (intr_data->asic_type) { in acp_dma_open()
793 runtime->hw = acp_st_pcm_hardware_capture; in acp_dma_open()
796 runtime->hw = acp_pcm_hardware_capture; in acp_dma_open()
803 dev_err(component->dev, "set integer constraint failed\n"); in acp_dma_open()
808 adata->acp_mmio = intr_data->acp_mmio; in acp_dma_open()
809 runtime->private_data = adata; in acp_dma_open()
817 if (!intr_data->play_i2ssp_stream && !intr_data->capture_i2ssp_stream && in acp_dma_open()
818 !intr_data->play_i2sbt_stream && !intr_data->capture_i2sbt_stream && in acp_dma_open()
819 !intr_data->play_i2s_micsp_stream) in acp_dma_open()
820 acp_reg_write(1, adata->acp_mmio, mmACP_EXTERNAL_INTR_ENB); in acp_dma_open()
822 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { in acp_dma_open()
828 if (intr_data->asic_type != CHIP_STONEY) { in acp_dma_open()
830 acp_set_sram_bank_state(intr_data->acp_mmio, in acp_dma_open()
834 if (intr_data->asic_type != CHIP_STONEY) { in acp_dma_open()
836 acp_set_sram_bank_state(intr_data->acp_mmio, in acp_dma_open()
844 static int acp_dma_hw_params(struct snd_soc_component *component, in acp_dma_hw_params()
846 struct snd_pcm_hw_params *params) in acp_dma_hw_params() argument
853 struct audio_drv_data *adata = dev_get_drvdata(component->dev); in acp_dma_hw_params()
854 struct snd_soc_card *card = prtd->card; in acp_dma_hw_params()
857 runtime = substream->runtime; in acp_dma_hw_params()
858 rtd = runtime->private_data; in acp_dma_hw_params()
861 return -EINVAL; in acp_dma_hw_params()
864 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { in acp_dma_hw_params()
865 rtd->i2s_instance = pinfo->play_i2s_instance; in acp_dma_hw_params()
867 rtd->i2s_instance = pinfo->cap_i2s_instance; in acp_dma_hw_params()
868 rtd->capture_channel = pinfo->capture_channel; in acp_dma_hw_params()
871 if (adata->asic_type == CHIP_STONEY) { in acp_dma_hw_params()
872 val = acp_reg_read(adata->acp_mmio, in acp_dma_hw_params()
874 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { in acp_dma_hw_params()
875 switch (rtd->i2s_instance) { in acp_dma_hw_params()
887 switch (rtd->i2s_instance) { in acp_dma_hw_params()
897 acp_reg_write(val, adata->acp_mmio, in acp_dma_hw_params()
901 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { in acp_dma_hw_params()
902 switch (rtd->i2s_instance) { in acp_dma_hw_params()
904 rtd->pte_offset = ACP_ST_BT_PLAYBACK_PTE_OFFSET; in acp_dma_hw_params()
905 rtd->ch1 = SYSRAM_TO_ACP_BT_INSTANCE_CH_NUM; in acp_dma_hw_params()
906 rtd->ch2 = ACP_TO_I2S_DMA_BT_INSTANCE_CH_NUM; in acp_dma_hw_params()
907 rtd->sram_bank = ACP_SRAM_BANK_3_ADDRESS; in acp_dma_hw_params()
908 rtd->destination = TO_BLUETOOTH; in acp_dma_hw_params()
909 rtd->dma_dscr_idx_1 = PLAYBACK_START_DMA_DESCR_CH8; in acp_dma_hw_params()
910 rtd->dma_dscr_idx_2 = PLAYBACK_START_DMA_DESCR_CH9; in acp_dma_hw_params()
911 rtd->byte_cnt_high_reg_offset = in acp_dma_hw_params()
913 rtd->byte_cnt_low_reg_offset = in acp_dma_hw_params()
915 adata->play_i2sbt_stream = substream; in acp_dma_hw_params()
918 switch (adata->asic_type) { in acp_dma_hw_params()
920 rtd->pte_offset = ACP_ST_PLAYBACK_PTE_OFFSET; in acp_dma_hw_params()
923 rtd->pte_offset = ACP_PLAYBACK_PTE_OFFSET; in acp_dma_hw_params()
925 rtd->ch1 = SYSRAM_TO_ACP_MICSP_INSTANCE_CH_NUM; in acp_dma_hw_params()
926 rtd->ch2 = ACP_TO_I2S_DMA_MICSP_INSTANCE_CH_NUM; in acp_dma_hw_params()
927 rtd->sram_bank = ACP_SRAM_BANK_1_ADDRESS; in acp_dma_hw_params()
928 rtd->destination = TO_ACP_I2S_2; in acp_dma_hw_params()
929 rtd->dma_dscr_idx_1 = PLAYBACK_START_DMA_DESCR_CH4; in acp_dma_hw_params()
930 rtd->dma_dscr_idx_2 = PLAYBACK_START_DMA_DESCR_CH5; in acp_dma_hw_params()
931 rtd->byte_cnt_high_reg_offset = in acp_dma_hw_params()
933 rtd->byte_cnt_low_reg_offset = in acp_dma_hw_params()
936 adata->play_i2s_micsp_stream = substream; in acp_dma_hw_params()
940 switch (adata->asic_type) { in acp_dma_hw_params()
942 rtd->pte_offset = ACP_ST_PLAYBACK_PTE_OFFSET; in acp_dma_hw_params()
945 rtd->pte_offset = ACP_PLAYBACK_PTE_OFFSET; in acp_dma_hw_params()
947 rtd->ch1 = SYSRAM_TO_ACP_CH_NUM; in acp_dma_hw_params()
948 rtd->ch2 = ACP_TO_I2S_DMA_CH_NUM; in acp_dma_hw_params()
949 rtd->sram_bank = ACP_SRAM_BANK_1_ADDRESS; in acp_dma_hw_params()
950 rtd->destination = TO_ACP_I2S_1; in acp_dma_hw_params()
951 rtd->dma_dscr_idx_1 = PLAYBACK_START_DMA_DESCR_CH12; in acp_dma_hw_params()
952 rtd->dma_dscr_idx_2 = PLAYBACK_START_DMA_DESCR_CH13; in acp_dma_hw_params()
953 rtd->byte_cnt_high_reg_offset = in acp_dma_hw_params()
955 rtd->byte_cnt_low_reg_offset = in acp_dma_hw_params()
957 adata->play_i2ssp_stream = substream; in acp_dma_hw_params()
960 switch (rtd->i2s_instance) { in acp_dma_hw_params()
962 rtd->pte_offset = ACP_ST_BT_CAPTURE_PTE_OFFSET; in acp_dma_hw_params()
963 rtd->ch1 = I2S_TO_ACP_DMA_BT_INSTANCE_CH_NUM; in acp_dma_hw_params()
964 rtd->ch2 = ACP_TO_SYSRAM_BT_INSTANCE_CH_NUM; in acp_dma_hw_params()
965 rtd->sram_bank = ACP_SRAM_BANK_4_ADDRESS; in acp_dma_hw_params()
966 rtd->destination = FROM_BLUETOOTH; in acp_dma_hw_params()
967 rtd->dma_dscr_idx_1 = CAPTURE_START_DMA_DESCR_CH10; in acp_dma_hw_params()
968 rtd->dma_dscr_idx_2 = CAPTURE_START_DMA_DESCR_CH11; in acp_dma_hw_params()
969 rtd->byte_cnt_high_reg_offset = in acp_dma_hw_params()
971 rtd->byte_cnt_low_reg_offset = in acp_dma_hw_params()
973 rtd->dma_curr_dscr = mmACP_DMA_CUR_DSCR_11; in acp_dma_hw_params()
974 adata->capture_i2sbt_stream = substream; in acp_dma_hw_params()
979 rtd->pte_offset = ACP_CAPTURE_PTE_OFFSET; in acp_dma_hw_params()
980 rtd->ch1 = I2S_TO_ACP_DMA_CH_NUM; in acp_dma_hw_params()
981 rtd->ch2 = ACP_TO_SYSRAM_CH_NUM; in acp_dma_hw_params()
982 switch (adata->asic_type) { in acp_dma_hw_params()
984 rtd->pte_offset = ACP_ST_CAPTURE_PTE_OFFSET; in acp_dma_hw_params()
985 rtd->sram_bank = ACP_SRAM_BANK_2_ADDRESS; in acp_dma_hw_params()
988 rtd->pte_offset = ACP_CAPTURE_PTE_OFFSET; in acp_dma_hw_params()
989 rtd->sram_bank = ACP_SRAM_BANK_5_ADDRESS; in acp_dma_hw_params()
991 rtd->destination = FROM_ACP_I2S_1; in acp_dma_hw_params()
992 rtd->dma_dscr_idx_1 = CAPTURE_START_DMA_DESCR_CH14; in acp_dma_hw_params()
993 rtd->dma_dscr_idx_2 = CAPTURE_START_DMA_DESCR_CH15; in acp_dma_hw_params()
994 rtd->byte_cnt_high_reg_offset = in acp_dma_hw_params()
996 rtd->byte_cnt_low_reg_offset = in acp_dma_hw_params()
998 rtd->dma_curr_dscr = mmACP_DMA_CUR_DSCR_15; in acp_dma_hw_params()
999 adata->capture_i2ssp_stream = substream; in acp_dma_hw_params()
1003 size = params_buffer_bytes(params); in acp_dma_hw_params()
1005 acp_set_sram_bank_state(rtd->acp_mmio, 0, true); in acp_dma_hw_params()
1007 rtd->dma_addr = runtime->dma_addr; in acp_dma_hw_params()
1008 rtd->order = get_order(size); in acp_dma_hw_params()
1011 rtd->size = size; in acp_dma_hw_params()
1012 rtd->num_of_pages = PAGE_ALIGN(size) >> PAGE_SHIFT; in acp_dma_hw_params()
1013 rtd->direction = substream->stream; in acp_dma_hw_params()
1015 config_acp_dma(rtd->acp_mmio, rtd, adata->asic_type); in acp_dma_hw_params()
1023 byte_count.bcount.high = acp_reg_read(rtd->acp_mmio, in acp_get_byte_count()
1024 rtd->byte_cnt_high_reg_offset); in acp_get_byte_count()
1025 byte_count.bcount.low = acp_reg_read(rtd->acp_mmio, in acp_get_byte_count()
1026 rtd->byte_cnt_low_reg_offset); in acp_get_byte_count()
1039 struct snd_pcm_runtime *runtime = substream->runtime; in acp_dma_pointer()
1040 struct audio_substream_data *rtd = runtime->private_data; in acp_dma_pointer()
1041 struct audio_drv_data *adata = dev_get_drvdata(component->dev); in acp_dma_pointer()
1044 return -EINVAL; in acp_dma_pointer()
1046 if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) { in acp_dma_pointer()
1047 period_bytes = frames_to_bytes(runtime, runtime->period_size); in acp_dma_pointer()
1049 if (bytescount >= rtd->bytescount) in acp_dma_pointer()
1050 bytescount -= rtd->bytescount; in acp_dma_pointer()
1054 dscr = acp_reg_read(rtd->acp_mmio, rtd->dma_curr_dscr); in acp_dma_pointer()
1055 if (dscr == rtd->dma_dscr_idx_1) in acp_dma_pointer()
1062 adata->delay += bytes_to_frames(runtime, delay); in acp_dma_pointer()
1065 buffersize = frames_to_bytes(runtime, runtime->buffer_size); in acp_dma_pointer()
1067 if (bytescount > rtd->bytescount) in acp_dma_pointer()
1068 bytescount -= rtd->bytescount; in acp_dma_pointer()
1077 struct audio_drv_data *adata = dev_get_drvdata(component->dev); in acp_dma_delay()
1078 snd_pcm_sframes_t delay = adata->delay; in acp_dma_delay()
1080 adata->delay = 0; in acp_dma_delay()
1085 static int acp_dma_prepare(struct snd_soc_component *component, in acp_dma_prepare()
1088 struct snd_pcm_runtime *runtime = substream->runtime; in acp_dma_prepare()
1089 struct audio_substream_data *rtd = runtime->private_data; in acp_dma_prepare()
1093 return -EINVAL; in acp_dma_prepare()
1095 if (rtd->direction == SNDRV_PCM_STREAM_PLAYBACK) { in acp_dma_prepare()
1096 ch_acp_sysmem = rtd->ch1; in acp_dma_prepare()
1097 ch_acp_i2s = rtd->ch2; in acp_dma_prepare()
1099 ch_acp_i2s = rtd->ch1; in acp_dma_prepare()
1100 ch_acp_sysmem = rtd->ch2; in acp_dma_prepare()
1102 config_acp_dma_channel(rtd->acp_mmio, in acp_dma_prepare()
1104 rtd->dma_dscr_idx_1, in acp_dma_prepare()
1106 config_acp_dma_channel(rtd->acp_mmio, in acp_dma_prepare()
1108 rtd->dma_dscr_idx_2, in acp_dma_prepare()
1113 static int acp_dma_trigger(struct snd_soc_component *component, in acp_dma_trigger()
1114 struct snd_pcm_substream *substream, int cmd) in acp_dma_trigger()
1116 int ret; in acp_dma_trigger()
1118 struct snd_pcm_runtime *runtime = substream->runtime; in acp_dma_trigger()
1119 struct audio_substream_data *rtd = runtime->private_data; in acp_dma_trigger()
1122 return -EINVAL; in acp_dma_trigger()
1127 rtd->bytescount = acp_get_byte_count(rtd); in acp_dma_trigger()
1128 if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) { in acp_dma_trigger()
1129 if (rtd->capture_channel == CAP_CHANNEL0) { in acp_dma_trigger()
1130 acp_dma_cap_channel_disable(rtd->acp_mmio, in acp_dma_trigger()
1132 acp_dma_cap_channel_enable(rtd->acp_mmio, in acp_dma_trigger()
1135 if (rtd->capture_channel == CAP_CHANNEL1) { in acp_dma_trigger()
1136 acp_dma_cap_channel_disable(rtd->acp_mmio, in acp_dma_trigger()
1138 acp_dma_cap_channel_enable(rtd->acp_mmio, in acp_dma_trigger()
1141 acp_dma_start(rtd->acp_mmio, rtd->ch1, true); in acp_dma_trigger()
1143 acp_dma_start(rtd->acp_mmio, rtd->ch1, true); in acp_dma_trigger()
1144 acp_dma_start(rtd->acp_mmio, rtd->ch2, true); in acp_dma_trigger()
1151 acp_dma_stop(rtd->acp_mmio, rtd->ch2); in acp_dma_trigger()
1152 ret = acp_dma_stop(rtd->acp_mmio, rtd->ch1); in acp_dma_trigger()
1155 ret = -EINVAL; in acp_dma_trigger()
1160 static int acp_dma_new(struct snd_soc_component *component, in acp_dma_new()
1163 struct audio_drv_data *adata = dev_get_drvdata(component->dev); in acp_dma_new()
1164 struct device *parent = component->dev->parent; in acp_dma_new()
1166 switch (adata->asic_type) { in acp_dma_new()
1168 snd_pcm_set_managed_buffer_all(rtd->pcm, in acp_dma_new()
1175 snd_pcm_set_managed_buffer_all(rtd->pcm, in acp_dma_new()
1185 static int acp_dma_close(struct snd_soc_component *component, in acp_dma_close()
1189 struct snd_pcm_runtime *runtime = substream->runtime; in acp_dma_close()
1190 struct audio_substream_data *rtd = runtime->private_data; in acp_dma_close()
1191 struct audio_drv_data *adata = dev_get_drvdata(component->dev); in acp_dma_close()
1193 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { in acp_dma_close()
1194 switch (rtd->i2s_instance) { in acp_dma_close()
1196 adata->play_i2sbt_stream = NULL; in acp_dma_close()
1199 adata->play_i2s_micsp_stream = NULL; in acp_dma_close()
1203 adata->play_i2ssp_stream = NULL; in acp_dma_close()
1211 if (adata->asic_type != CHIP_STONEY) { in acp_dma_close()
1213 acp_set_sram_bank_state(adata->acp_mmio, in acp_dma_close()
1218 switch (rtd->i2s_instance) { in acp_dma_close()
1220 adata->capture_i2sbt_stream = NULL; in acp_dma_close()
1225 adata->capture_i2ssp_stream = NULL; in acp_dma_close()
1226 if (adata->asic_type != CHIP_STONEY) { in acp_dma_close()
1228 acp_set_sram_bank_state(adata->acp_mmio, in acp_dma_close()
1238 if (!adata->play_i2ssp_stream && !adata->capture_i2ssp_stream && in acp_dma_close()
1239 !adata->play_i2sbt_stream && !adata->capture_i2sbt_stream && in acp_dma_close()
1240 !adata->play_i2s_micsp_stream) in acp_dma_close()
1241 acp_reg_write(0, adata->acp_mmio, mmACP_EXTERNAL_INTR_ENB); in acp_dma_close()
1258 static int acp_audio_probe(struct platform_device *pdev) in acp_audio_probe()
1260 int status, irq; in acp_audio_probe()
1262 const u32 *pdata = pdev->dev.platform_data; in acp_audio_probe()
1265 dev_err(&pdev->dev, "Missing platform data\n"); in acp_audio_probe()
1266 return -ENODEV; in acp_audio_probe()
1269 audio_drv_data = devm_kzalloc(&pdev->dev, sizeof(struct audio_drv_data), in acp_audio_probe()
1272 return -ENOMEM; in acp_audio_probe()
1274 audio_drv_data->acp_mmio = devm_platform_ioremap_resource(pdev, 0); in acp_audio_probe()
1275 if (IS_ERR(audio_drv_data->acp_mmio)) in acp_audio_probe()
1276 return PTR_ERR(audio_drv_data->acp_mmio); in acp_audio_probe()
1284 audio_drv_data->play_i2ssp_stream = NULL; in acp_audio_probe()
1285 audio_drv_data->capture_i2ssp_stream = NULL; in acp_audio_probe()
1286 audio_drv_data->play_i2sbt_stream = NULL; in acp_audio_probe()
1287 audio_drv_data->capture_i2sbt_stream = NULL; in acp_audio_probe()
1288 audio_drv_data->play_i2s_micsp_stream = NULL; in acp_audio_probe()
1290 audio_drv_data->asic_type = *pdata; in acp_audio_probe()
1294 return -ENODEV; in acp_audio_probe()
1296 status = devm_request_irq(&pdev->dev, irq, dma_irq_handler, in acp_audio_probe()
1297 0, "ACP_IRQ", &pdev->dev); in acp_audio_probe()
1299 dev_err(&pdev->dev, "ACP IRQ request failed\n"); in acp_audio_probe()
1303 dev_set_drvdata(&pdev->dev, audio_drv_data); in acp_audio_probe()
1306 status = acp_init(audio_drv_data->acp_mmio, audio_drv_data->asic_type); in acp_audio_probe()
1308 dev_err(&pdev->dev, "ACP Init failed status:%d\n", status); in acp_audio_probe()
1312 status = devm_snd_soc_register_component(&pdev->dev, in acp_audio_probe()
1315 dev_err(&pdev->dev, "Fail to register ALSA platform device\n"); in acp_audio_probe()
1319 pm_runtime_set_autosuspend_delay(&pdev->dev, 10000); in acp_audio_probe()
1320 pm_runtime_use_autosuspend(&pdev->dev); in acp_audio_probe()
1321 pm_runtime_enable(&pdev->dev); in acp_audio_probe()
1328 int status; in acp_audio_remove()
1329 struct audio_drv_data *adata = dev_get_drvdata(&pdev->dev); in acp_audio_remove()
1331 status = acp_deinit(adata->acp_mmio); in acp_audio_remove()
1333 dev_err(&pdev->dev, "ACP Deinit failed status:%d\n", status); in acp_audio_remove()
1334 pm_runtime_disable(&pdev->dev); in acp_audio_remove()
1337 static int acp_pcm_resume(struct device *dev) in acp_pcm_resume()
1340 int status; in acp_pcm_resume()
1344 status = acp_init(adata->acp_mmio, adata->asic_type); in acp_pcm_resume()
1350 if (adata->play_i2ssp_stream && adata->play_i2ssp_stream->runtime) { in acp_pcm_resume()
1356 if (adata->asic_type != CHIP_STONEY) { in acp_pcm_resume()
1358 acp_set_sram_bank_state(adata->acp_mmio, bank, in acp_pcm_resume()
1361 rtd = adata->play_i2ssp_stream->runtime->private_data; in acp_pcm_resume()
1362 config_acp_dma(adata->acp_mmio, rtd, adata->asic_type); in acp_pcm_resume()
1364 if (adata->capture_i2ssp_stream && in acp_pcm_resume()
1365 adata->capture_i2ssp_stream->runtime) { in acp_pcm_resume()
1366 if (adata->asic_type != CHIP_STONEY) { in acp_pcm_resume()
1368 acp_set_sram_bank_state(adata->acp_mmio, bank, in acp_pcm_resume()
1371 rtd = adata->capture_i2ssp_stream->runtime->private_data; in acp_pcm_resume()
1372 config_acp_dma(adata->acp_mmio, rtd, adata->asic_type); in acp_pcm_resume()
1374 if (adata->asic_type != CHIP_CARRIZO) { in acp_pcm_resume()
1375 if (adata->play_i2s_micsp_stream && in acp_pcm_resume()
1376 adata->play_i2s_micsp_stream->runtime) { in acp_pcm_resume()
1377 rtd = adata->play_i2s_micsp_stream->runtime->private_data; in acp_pcm_resume()
1378 config_acp_dma(adata->acp_mmio, rtd, adata->asic_type); in acp_pcm_resume()
1380 if (adata->play_i2sbt_stream && in acp_pcm_resume()
1381 adata->play_i2sbt_stream->runtime) { in acp_pcm_resume()
1382 rtd = adata->play_i2sbt_stream->runtime->private_data; in acp_pcm_resume()
1383 config_acp_dma(adata->acp_mmio, rtd, adata->asic_type); in acp_pcm_resume()
1385 if (adata->capture_i2sbt_stream && in acp_pcm_resume()
1386 adata->capture_i2sbt_stream->runtime) { in acp_pcm_resume()
1387 rtd = adata->capture_i2sbt_stream->runtime->private_data; in acp_pcm_resume()
1388 config_acp_dma(adata->acp_mmio, rtd, adata->asic_type); in acp_pcm_resume()
1391 acp_reg_write(1, adata->acp_mmio, mmACP_EXTERNAL_INTR_ENB); in acp_pcm_resume()
1395 static int acp_pcm_runtime_suspend(struct device *dev) in acp_pcm_runtime_suspend()
1397 int status; in acp_pcm_runtime_suspend()
1400 status = acp_deinit(adata->acp_mmio); in acp_pcm_runtime_suspend()
1403 acp_reg_write(0, adata->acp_mmio, mmACP_EXTERNAL_INTR_ENB); in acp_pcm_runtime_suspend()
1407 static int acp_pcm_runtime_resume(struct device *dev) in acp_pcm_runtime_resume()
1409 int status; in acp_pcm_runtime_resume()
1412 status = acp_init(adata->acp_mmio, adata->asic_type); in acp_pcm_runtime_resume()
1417 acp_reg_write(1, adata->acp_mmio, mmACP_EXTERNAL_INTR_ENB); in acp_pcm_runtime_resume()
1440 MODULE_DESCRIPTION("AMD ACP PCM Driver");