您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ snd_soc_dai_get_dma_data函数代码示例

51自学网 2021-06-03 08:02:54
  C++
这篇教程C++ snd_soc_dai_get_dma_data函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中snd_soc_dai_get_dma_data函数的典型用法代码示例。如果您正苦于以下问题:C++ snd_soc_dai_get_dma_data函数的具体用法?C++ snd_soc_dai_get_dma_data怎么用?C++ snd_soc_dai_get_dma_data使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了snd_soc_dai_get_dma_data函数的22个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: omap_pcm_hw_params

/* this may get called several times by oss emulation */static int omap_pcm_hw_params(struct snd_pcm_substream *substream,			      struct snd_pcm_hw_params *params){	struct snd_pcm_runtime *runtime = substream->runtime;	struct snd_soc_pcm_runtime *rtd = substream->private_data;	struct omap_pcm_dma_data *dma_data;	struct dma_slave_config config;	struct dma_chan *chan;	int err = 0;	dma_data = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);	/* return if this is a bufferless transfer e.g.	 * codec <--> BT codec or GSM modem -- lg FIXME */	if (!dma_data)		return 0;	snd_pcm_set_runtime_buffer(substream, &substream->dma_buffer);	runtime->dma_bytes = params_buffer_bytes(params);	chan = snd_dmaengine_pcm_get_chan(substream);	if (!chan)		return -EINVAL;	/* fills in addr_width and direction */	err = snd_hwparams_to_dma_slave_config(substream, params, &config);	if (err)		return err;	snd_dmaengine_pcm_set_config_from_dai_data(substream,			snd_soc_dai_get_dma_data(rtd->cpu_dai, substream),			&config);	return dmaengine_slave_config(chan, &config);}
开发者ID:19Dan01,项目名称:linux,代码行数:36,


示例2: snd_soc_dai_get_dma_data

static struct cygnus_aio_port *cygnus_dai_get_dma_data(				struct snd_pcm_substream *substream){	struct snd_soc_pcm_runtime *soc_runtime = substream->private_data;	return snd_soc_dai_get_dma_data(soc_runtime->cpu_dai, substream);}
开发者ID:AK101111,项目名称:linux,代码行数:7,


示例3: snd_imx_dma_err_callback

static void snd_imx_dma_err_callback(int channel, void *data, int err){	struct snd_pcm_substream *substream = data;	struct snd_soc_pcm_runtime *rtd = substream->private_data;	struct imx_pcm_dma_params *dma_params = 		snd_soc_dai_get_dma_data(rtd->dai->cpu_dai, substream);	struct snd_pcm_runtime *runtime = substream->runtime;	struct imx_pcm_runtime_data *iprtd = runtime->private_data;	int ret;	pr_err("DMA timeout on channel %d -%s%s%s%s/n",		 channel,		 err & IMX_DMA_ERR_BURST ?    " burst" : "",		 err & IMX_DMA_ERR_REQUEST ?  " request" : "",		 err & IMX_DMA_ERR_TRANSFER ? " transfer" : "",		 err & IMX_DMA_ERR_BUFFER ?   " buffer" : "");	imx_dma_disable(iprtd->dma);	ret = imx_dma_setup_sg(iprtd->dma, iprtd->sg_list, iprtd->sg_count,			IMX_DMA_LENGTH_LOOP, dma_params->dma_addr,			substream->stream == SNDRV_PCM_STREAM_PLAYBACK ?			DMA_MODE_WRITE : DMA_MODE_READ);	if (!ret)		imx_dma_enable(iprtd->dma);}
开发者ID:AdiPat,项目名称:android_kernel_tegra_n1,代码行数:25,


示例4: snd_imx_pcm_prepare

static int snd_imx_pcm_prepare(struct snd_pcm_substream *substream){	struct snd_pcm_runtime *runtime = substream->runtime;	struct snd_soc_pcm_runtime *rtd = substream->private_data;	struct imx_pcm_dma_params *dma_params;	struct imx_pcm_runtime_data *iprtd = runtime->private_data;	int err;	dma_params = snd_soc_dai_get_dma_data(rtd->dai->cpu_dai, substream);	iprtd->substream = substream;	iprtd->buf = (unsigned int *)substream->dma_buffer.area;	iprtd->period_cnt = 0;	pr_debug("%s: buf: %p period: %d periods: %d/n",			__func__, iprtd->buf, iprtd->period, iprtd->periods);	err = imx_dma_setup_sg(iprtd->dma, iprtd->sg_list, iprtd->sg_count,			IMX_DMA_LENGTH_LOOP, dma_params->dma_addr,			substream->stream == SNDRV_PCM_STREAM_PLAYBACK ?			DMA_MODE_WRITE : DMA_MODE_READ);	if (err)		return err;	return 0;}
开发者ID:AdiPat,项目名称:android_kernel_tegra_n1,代码行数:26,


示例5: s3c24xx_i2s_hw_params

static int s3c24xx_i2s_hw_params(struct snd_pcm_substream *substream,                                 struct snd_pcm_hw_params *params,                                 struct snd_soc_dai *dai){    struct snd_dmaengine_dai_dma_data *dma_data;    u32 iismod;    pr_debug("Entered %s/n", __func__);    dma_data = snd_soc_dai_get_dma_data(dai, substream);    /* Working copies of register */    iismod = readl(s3c24xx_i2s.regs + S3C2410_IISMOD);    pr_debug("hw_params r: IISMOD: %x/n", iismod);    switch (params_width(params)) {    case 8:        iismod &= ~S3C2410_IISMOD_16BIT;        dma_data->addr_width = 1;        break;    case 16:        iismod |= S3C2410_IISMOD_16BIT;        dma_data->addr_width = 2;        break;    default:        return -EINVAL;    }    writel(iismod, s3c24xx_i2s.regs + S3C2410_IISMOD);    pr_debug("hw_params w: IISMOD: %x/n", iismod);    return 0;}
开发者ID:superna9999,项目名称:linux,代码行数:32,


示例6: skl_link_pcm_trigger

static int skl_link_pcm_trigger(struct snd_pcm_substream *substream,	int cmd, struct snd_soc_dai *dai){	struct hdac_ext_stream *link_dev =				snd_soc_dai_get_dma_data(dai, substream);	struct hdac_ext_bus *ebus = get_bus_ctx(substream);	struct hdac_ext_stream *stream = get_hdac_ext_stream(substream);	dev_dbg(dai->dev, "In %s cmd=%d/n", __func__, cmd);	switch (cmd) {	case SNDRV_PCM_TRIGGER_RESUME:		skl_link_pcm_prepare(substream, dai);	case SNDRV_PCM_TRIGGER_START:	case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:		snd_hdac_ext_stream_decouple(ebus, stream, true);		snd_hdac_ext_link_stream_start(link_dev);		break;	case SNDRV_PCM_TRIGGER_PAUSE_PUSH:	case SNDRV_PCM_TRIGGER_SUSPEND:	case SNDRV_PCM_TRIGGER_STOP:		snd_hdac_ext_link_stream_clear(link_dev);		if (cmd == SNDRV_PCM_TRIGGER_SUSPEND)			snd_hdac_ext_stream_decouple(ebus, stream, false);		break;	default:		return -EINVAL;	}	return 0;}
开发者ID:AK101111,项目名称:linux,代码行数:31,


示例7: skl_link_hw_params

static int skl_link_hw_params(struct snd_pcm_substream *substream,				struct snd_pcm_hw_params *params,				struct snd_soc_dai *dai){	struct hdac_ext_bus *ebus = dev_get_drvdata(dai->dev);	struct hdac_ext_stream *link_dev;	struct snd_soc_pcm_runtime *rtd = snd_pcm_substream_chip(substream);	struct hdac_ext_dma_params *dma_params;	struct snd_soc_dai *codec_dai = rtd->codec_dai;	struct skl_pipe_params p_params = {0};	link_dev = snd_hdac_ext_stream_assign(ebus, substream,					HDAC_EXT_STREAM_TYPE_LINK);	if (!link_dev)		return -EBUSY;	snd_soc_dai_set_dma_data(dai, substream, (void *)link_dev);	/* set the stream tag in the codec dai dma params  */	dma_params = snd_soc_dai_get_dma_data(codec_dai, substream);	if (dma_params)		dma_params->stream_tag =  hdac_stream(link_dev)->stream_tag;	p_params.s_fmt = snd_pcm_format_width(params_format(params));	p_params.ch = params_channels(params);	p_params.s_freq = params_rate(params);	p_params.stream = substream->stream;	p_params.link_dma_id = hdac_stream(link_dev)->stream_tag - 1;	return skl_tplg_be_update_params(dai, &p_params);}
开发者ID:AK101111,项目名称:linux,代码行数:31,


示例8: skl_pcm_close

static void skl_pcm_close(struct snd_pcm_substream *substream,		struct snd_soc_dai *dai){	struct hdac_ext_stream *stream = get_hdac_ext_stream(substream);	struct hdac_ext_bus *ebus = dev_get_drvdata(dai->dev);	struct skl_dma_params *dma_params = NULL;	struct skl *skl = ebus_to_skl(ebus);	dev_dbg(dai->dev, "%s: %s/n", __func__, dai->name);	snd_hdac_ext_stream_release(stream, skl_get_host_stream_type(ebus));	dma_params = snd_soc_dai_get_dma_data(dai, substream);	/*	 * now we should set this to NULL as we are freeing by the	 * dma_params	 */	snd_soc_dai_set_dma_data(dai, substream, NULL);	skl_set_suspend_active(substream, dai, false);	/*	 * check if close is for "Reference Pin" and set back the	 * CGCTL.MISCBDCGE if disabled by driver	 */	if (!strncmp(dai->name, "Reference Pin", 13) &&			skl->skl_sst->miscbdcg_disabled) {		skl->skl_sst->enable_miscbdcge(dai->dev, true);		skl->skl_sst->miscbdcg_disabled = false;	}	kfree(dma_params);}
开发者ID:AK101111,项目名称:linux,代码行数:32,


示例9: skl_get_format

static int skl_get_format(struct snd_pcm_substream *substream,		struct snd_soc_dai *dai){	struct snd_soc_pcm_runtime *rtd = snd_pcm_substream_chip(substream);	struct skl_dma_params *dma_params;	struct hdac_ext_bus *ebus = dev_get_drvdata(dai->dev);	int format_val = 0;	if (ebus->ppcap) {		struct snd_pcm_runtime *runtime = substream->runtime;		format_val = snd_hdac_calc_stream_format(runtime->rate,						runtime->channels,						runtime->format,						32, 0);	} else {		struct snd_soc_dai *codec_dai = rtd->codec_dai;		dma_params = snd_soc_dai_get_dma_data(codec_dai, substream);		if (dma_params)			format_val = dma_params->format;	}	return format_val;}
开发者ID:AK101111,项目名称:linux,代码行数:25,


示例10: tegra_pcm_hw_params

static int tegra_pcm_hw_params(struct snd_pcm_substream *substream,				struct snd_pcm_hw_params *params){	struct snd_pcm_runtime *runtime = substream->runtime;	struct tegra_runtime_data *prtd = runtime->private_data;	struct snd_soc_pcm_runtime *rtd = substream->private_data;	struct tegra_pcm_dma_params * dmap;	snd_pcm_set_runtime_buffer(substream, &substream->dma_buffer);	dmap = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);	if (dmap) {		if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {			setup_dma_tx_request(&prtd->dma_req[0], dmap);			setup_dma_tx_request(&prtd->dma_req[1], dmap);		} else {			setup_dma_rx_request(&prtd->dma_req[0], dmap);			setup_dma_rx_request(&prtd->dma_req[1], dmap);		}	}	prtd->dma_req[0].size = params_period_bytes(params);	prtd->dma_req[1].size = prtd->dma_req[0].size;	return 0;}
开发者ID:Astinj,项目名称:bricked-grouper-3.x,代码行数:25,


示例11: atmel_pcm_configure_dma

static int atmel_pcm_configure_dma(struct snd_pcm_substream *substream,	struct snd_pcm_hw_params *params, struct dma_slave_config *slave_config){	struct snd_soc_pcm_runtime *rtd = substream->private_data;	struct atmel_pcm_dma_params *prtd;	struct ssc_device *ssc;	int ret;	prtd = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);	ssc = prtd->ssc;	ret = snd_hwparams_to_dma_slave_config(substream, params, slave_config);	if (ret) {		pr_err("atmel-pcm: hwparams to dma slave configure failed/n");		return ret;	}	slave_config->dst_addr = ssc->phybase + SSC_THR;	slave_config->dst_maxburst = 1;	slave_config->src_addr = ssc->phybase + SSC_RHR;	slave_config->src_maxburst = 1;	prtd->dma_intr_handler = atmel_pcm_dma_irq;	return 0;}
开发者ID:020gzh,项目名称:linux,代码行数:27,


示例12: atmel_pcm_hw_params

/*--------------------------------------------------------------------------*/ * PCM operations/*--------------------------------------------------------------------------*/static int atmel_pcm_hw_params(struct snd_pcm_substream *substream,	struct snd_pcm_hw_params *params){	struct snd_pcm_runtime *runtime = substream->runtime;	struct atmel_runtime_data *prtd = runtime->private_data;	struct snd_soc_pcm_runtime *rtd = substream->private_data;	/* this may get called several times by oss emulation	 * with different params */	snd_pcm_set_runtime_buffer(substream, &substream->dma_buffer);	runtime->dma_bytes = params_buffer_bytes(params);	prtd->params = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);	prtd->params->dma_intr_handler = atmel_pcm_dma_irq;	prtd->dma_buffer = runtime->dma_addr;	prtd->dma_buffer_end = runtime->dma_addr + runtime->dma_bytes;	prtd->period_size = params_period_bytes(params);	pr_debug("atmel-pcm: "		"hw_params: DMA for %s initialized "		"(dma_bytes=%u, period_size=%u)/n",		prtd->params->name,		runtime->dma_bytes,		prtd->period_size);	return 0;}
开发者ID:404992361,项目名称:mi1_kernel,代码行数:31,


示例13: atmel_pcm_dma_irq

/** * atmel_pcm_dma_irq: SSC interrupt handler for DMAENGINE enabled SSC * * We use DMAENGINE to send/receive data to/from SSC so this ISR is only to * check if any overrun occured. */static void atmel_pcm_dma_irq(u32 ssc_sr,	struct snd_pcm_substream *substream){	struct snd_soc_pcm_runtime *rtd = substream->private_data;	struct atmel_pcm_dma_params *prtd;	prtd = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);	if (ssc_sr & prtd->mask->ssc_error) {		if (snd_pcm_running(substream))			pr_warn("atmel-pcm: buffer %s on %s (SSC_SR=%#x)/n",				substream->stream == SNDRV_PCM_STREAM_PLAYBACK				? "underrun" : "overrun", prtd->name,				ssc_sr);		/* stop RX and capture: will be enabled again at restart */		ssc_writex(prtd->ssc->regs, SSC_CR, prtd->mask->ssc_disable);		snd_pcm_stream_lock(substream);		snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN);		snd_pcm_stream_unlock(substream);		/* now drain RHR and read status to remove xrun condition */		ssc_readx(prtd->ssc->regs, SSC_RHR);		ssc_readx(prtd->ssc->regs, SSC_SR);	}}
开发者ID:AeroGirl,项目名称:VAR-SOM-AM33-SDK7-Kernel,代码行数:32,


示例14: bf5xx_pcm_pointer

static snd_pcm_uframes_t bf5xx_pcm_pointer(struct snd_pcm_substream *substream){	struct snd_soc_pcm_runtime *rtd = substream->private_data;	struct snd_pcm_runtime *runtime = substream->runtime;	struct sport_device *sport = runtime->private_data;	unsigned int diff;	snd_pcm_uframes_t frames;	struct bf5xx_i2s_pcm_data *dma_data;	dma_data = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);	pr_debug("%s enter/n", __func__);	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {		diff = sport_curr_offset_tx(sport);	} else {		diff = sport_curr_offset_rx(sport);	}	/*	 * TX at least can report one frame beyond the end of the	 * buffer if we hit the wraparound case - clamp to within the	 * buffer as the ALSA APIs require.	 */	if (diff == snd_pcm_lib_buffer_bytes(substream))		diff = 0;	frames = bytes_to_frames(substream->runtime, diff);	if (dma_data->tdm_mode)		frames = frames * runtime->channels / 8;	return frames;}
开发者ID:AnadoluPanteri,项目名称:kernel-plus-harmattan,代码行数:32,


示例15: bf5xx_pcm_prepare

static int bf5xx_pcm_prepare(struct snd_pcm_substream *substream){	struct snd_soc_pcm_runtime *rtd = substream->private_data;	struct snd_pcm_runtime *runtime = substream->runtime;	struct sport_device *sport = runtime->private_data;	int period_bytes = frames_to_bytes(runtime, runtime->period_size);	struct bf5xx_i2s_pcm_data *dma_data;	dma_data = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);	if (dma_data->tdm_mode)		period_bytes = period_bytes / runtime->channels * 8;	pr_debug("%s enter/n", __func__);	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {		sport_set_tx_callback(sport, bf5xx_dma_irq, substream);		sport_config_tx_dma(sport, runtime->dma_area,			runtime->periods, period_bytes);	} else {		sport_set_rx_callback(sport, bf5xx_dma_irq, substream);		sport_config_rx_dma(sport, runtime->dma_area,			runtime->periods, period_bytes);	}	return 0;}
开发者ID:AnadoluPanteri,项目名称:kernel-plus-harmattan,代码行数:26,


示例16: tegra_pcm_hw_params

int tegra_pcm_hw_params(struct snd_pcm_substream *substream,				struct snd_pcm_hw_params *params){	struct snd_pcm_runtime *runtime = substream->runtime;	struct tegra_runtime_data *prtd = runtime->private_data;	struct snd_soc_pcm_runtime *rtd = substream->private_data;	struct tegra_pcm_dma_params * dmap;	int i;	snd_pcm_set_runtime_buffer(substream, &substream->dma_buffer);	/* Limit dma_req_count to period count */	if (prtd->dma_req_count > params_periods(params))		prtd->dma_req_count = params_periods(params);	dmap = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);	if (dmap) {		if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {			for (i = 0; i < prtd->dma_req_count; i++)				setup_dma_tx_request(&prtd->dma_req[i], dmap);		} else {			for (i = 0; i < prtd->dma_req_count; i++)				setup_dma_rx_request(&prtd->dma_req[i], dmap);		}	}	for (i = 0; i < prtd->dma_req_count; i++)		prtd->dma_req[i].size = params_period_bytes(params);	return 0;}
开发者ID:cb22,项目名称:tf300tg_jb_kernel,代码行数:29,


示例17: sun5i_spdif_trigger

static int sun5i_spdif_trigger(struct snd_pcm_substream *substream,                              int cmd, struct snd_soc_dai *dai){	int ret = 0;	struct snd_soc_pcm_runtime *rtd = substream->private_data;	struct sun5i_dma_params *dma_data = 					snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);	switch (cmd) {		case SNDRV_PCM_TRIGGER_START:		case SNDRV_PCM_TRIGGER_RESUME:		case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:			if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) {				sun5i_snd_rxctrl(1);			} else {				sun5i_snd_txctrl(substream, 1);			}			sw_dma_ctrl(dma_data->channel, SW_DMAOP_STARTED);			break;		case SNDRV_PCM_TRIGGER_STOP:		case SNDRV_PCM_TRIGGER_SUSPEND:		case SNDRV_PCM_TRIGGER_PAUSE_PUSH:			if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) {				sun5i_snd_rxctrl(0);			} else {			  sun5i_snd_txctrl(substream, 0);			}			break;		default:			ret = -EINVAL;			break;	}		return ret;}					
开发者ID:panlinbing,项目名称:lichee_linux-3.0,代码行数:35,


示例18: omap_mcbsp_set_threshold

/* * Stream DMA parameters. DMA request line and port address are set runtime * since they are different between OMAP1 and later OMAPs */static void omap_mcbsp_set_threshold(struct snd_pcm_substream *substream){	struct snd_soc_pcm_runtime *rtd = substream->private_data;	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;	struct omap_mcbsp *mcbsp = snd_soc_dai_get_drvdata(cpu_dai);	struct omap_pcm_dma_data *dma_data;	int words;	dma_data = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);	/*	 * Configure McBSP threshold based on either:	 * packet_size, when the sDMA is in packet mode, or based on the	 * period size in THRESHOLD mode, otherwise use McBSP threshold = 1	 * for mono streams.	 */	if (dma_data->packet_size)		words = dma_data->packet_size;	else		words = 1;	/* Configure McBSP internal buffer usage */	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)		omap_mcbsp_set_tx_threshold(mcbsp, words);	else		omap_mcbsp_set_rx_threshold(mcbsp, words);}
开发者ID:AdrianHuang,项目名称:linux-3.8.13,代码行数:31,


示例19: ux500_pcm_prepare_slave_config

static int ux500_pcm_prepare_slave_config(struct snd_pcm_substream *substream,        struct snd_pcm_hw_params *params,        struct dma_slave_config *slave_config){    struct snd_soc_pcm_runtime *rtd = substream->private_data;    struct ux500_msp_dma_params *dma_params;    struct stedma40_chan_cfg *dma_cfg;    int ret;    dma_params = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);    dma_cfg = dma_params->dma_cfg;    ret = snd_hwparams_to_dma_slave_config(substream, params, slave_config);    if (ret)        return ret;    slave_config->dst_maxburst = 4;    slave_config->dst_addr_width = dma_cfg->dst_info.data_width;    slave_config->src_maxburst = 4;    slave_config->src_addr_width = dma_cfg->src_info.data_width;    if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)        slave_config->dst_addr = dma_params->tx_rx_addr;    else        slave_config->src_addr = dma_params->tx_rx_addr;    return 0;}
开发者ID:yuwgit,项目名称:pmfs,代码行数:28,


示例20: bf5xx_pcm_silence

static int bf5xx_pcm_silence(struct snd_pcm_substream *substream,			     int channel, unsigned long pos,			     unsigned long count){	struct snd_soc_pcm_runtime *rtd = substream->private_data;	struct snd_pcm_runtime *runtime = substream->runtime;	unsigned int sample_size = runtime->sample_bits / 8;	void *buf = runtime->dma_area;	struct bf5xx_i2s_pcm_data *dma_data;	unsigned int offset, samples;	dma_data = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);	if (dma_data->tdm_mode) {		offset = bytes_to_frames(runtime, pos) * 8 * sample_size;		samples = bytes_to_frames(runtime, count) * 8;	} else {		offset = pos;		samples = bytes_to_samples(runtime, count);	}	snd_pcm_format_set_silence(runtime->format, buf + offset, samples);	return 0;}
开发者ID:mdamt,项目名称:linux,代码行数:25,


示例21: ssp_dai_hw_params

/** * ssp_dai_hw_params - Allocate memory for Ring Buffer according * to hw_params. * It's called in a non-atomic context * * @param substream Substream for which the stream function is called * @param hw_params Stream command thats requested from upper layer * @param cpu_dai Pointer to the CPU DAI that is used * return status 0 ==> OK * */static int ssp_dai_hw_params(struct snd_pcm_substream *substream,		struct snd_pcm_hw_params *hw_params,		struct snd_soc_dai *cpu_dai){	struct intel_ssp_config *ssp_config;	pr_info("SSP DAI: FCT %s enters/n",			__func__);	WARN(!cpu_dai, "SSP DAI: ERROR NULL cpu_dai/n");	if (!cpu_dai)		return -EINVAL;	ssp_config = snd_soc_dai_get_dma_data(cpu_dai, substream);	pr_info("SSP DAI: FCT %s ssp_config %p/n",				__func__,				ssp_config);	/*	 * The set HW Config is only once for a CPU DAI	 */	if (cpu_dai->active == 1) {		intel_mid_i2s_command(ssp_config->i2s_handle,						SSP_CMD_SET_HW_CONFIG,						&(ssp_config->i2s_settings));	}	switch (substream->stream) {	case SNDRV_PCM_STREAM_PLAYBACK:		if (intel_mid_i2s_command(ssp_config->i2s_handle,				SSP_CMD_ALLOC_TX, NULL)) {			pr_err("can not alloc TX DMA Channel/n");			return -EBUSY;		}		break;	case SNDRV_PCM_STREAM_CAPTURE:		if (intel_mid_i2s_command(ssp_config->i2s_handle,				SSP_CMD_ALLOC_RX, NULL)) {			pr_err("can not alloc RX DMA Channel/n");			return -EBUSY;		}		break;	default:		pr_err("SSP DAI: FCT %s Bad stream_dir: %d/n",				__func__, substream->stream);		return -EINVAL;	}	ssp_config->intel_mid_dma_alloc = true;	pr_debug("SSP DAI: FCT %s leaves/n",			__func__);	return 0;}
开发者ID:kamarush,项目名称:ZTE_GXIn_Kernel-3.0.8,代码行数:70,


示例22: bf5xx_pcm_copy

static int bf5xx_pcm_copy(struct snd_pcm_substream *substream,			  int channel, unsigned long pos,			  void *buf, unsigned long count){	struct snd_soc_pcm_runtime *rtd = substream->private_data;	struct snd_pcm_runtime *runtime = substream->runtime;	unsigned int sample_size = runtime->sample_bits / 8;	struct bf5xx_i2s_pcm_data *dma_data;	unsigned int i;	void *src, *dst;	dma_data = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);	if (dma_data->tdm_mode) {		pos = bytes_to_frames(runtime, pos);		count = bytes_to_frames(runtime, count);		if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {			src = buf;			dst = runtime->dma_area;			dst += pos * sample_size * 8;			while (count--) {				for (i = 0; i < runtime->channels; i++) {					memcpy(dst + dma_data->map[i] *						sample_size, src, sample_size);					src += sample_size;				}				dst += 8 * sample_size;			}		} else {			src = runtime->dma_area;			src += pos * sample_size * 8;			dst = buf;			while (count--) {				for (i = 0; i < runtime->channels; i++) {					memcpy(dst, src + dma_data->map[i] *						sample_size, sample_size);					dst += sample_size;				}				src += 8 * sample_size;			}		}	} else {		if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {			src = buf;			dst = runtime->dma_area;			dst += pos;		} else {			src = runtime->dma_area;			src += pos;			dst = buf;		}		memcpy(dst, src, count);	}	return 0;}
开发者ID:mdamt,项目名称:linux,代码行数:59,



注:本文中的snd_soc_dai_get_dma_data函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ snd_soc_dai_get_drvdata函数代码示例
C++ snd_soc_component_get_drvdata函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。