コード例 #1
0
ファイル: ssi.c プロジェクト: Astralix/mainline-dss11
/*
 *		ssi mod function
 */
struct rsnd_mod *rsnd_ssi_mod_get_frm_dai(struct rsnd_priv *priv,
					  int dai_id, int is_play)
{
	struct rsnd_dai_platform_info *dai_info = NULL;
	struct rsnd_dai_path_info *path_info = NULL;
	struct rsnd_ssi_platform_info *target_info = NULL;
	struct rsnd_ssi *ssi;
	int i, has_play;

	if (priv->rdai)
		dai_info = priv->rdai[dai_id].info;
	if (dai_info)
		path_info = (is_play) ? &dai_info->playback : &dai_info->capture;
	if (path_info)
		target_info = path_info->ssi;

	is_play = !!is_play;

	for_each_rsnd_ssi(ssi, priv, i) {
		if (target_info == ssi->info)
			return &ssi->mod;

		/* for compatible */
		if (rsnd_ssi_dai_id(ssi) != dai_id)
			continue;

		has_play = rsnd_ssi_is_play(&ssi->mod);

		if (is_play == has_play)
			return &ssi->mod;
	}

	return NULL;
}
コード例 #2
0
ファイル: src.c プロジェクト: 908626950/linux
static int rsnd_src_probe_gen2(struct rsnd_mod *mod,
			       struct rsnd_dai *rdai,
			       struct rsnd_dai_stream *io)
{
	struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
	struct rcar_snd_info *info = rsnd_priv_to_info(priv);
	struct rsnd_src *src = rsnd_mod_to_src(mod);
	struct rsnd_mod *ssi = rsnd_ssi_mod_get(priv, rsnd_mod_id(mod));
	struct device *dev = rsnd_priv_to_dev(priv);
	int ret;
	int is_play;

	if (info->dai_info)
		is_play = rsnd_info_is_playback(priv, src);
	else
		is_play = rsnd_ssi_is_play(ssi);

	ret = rsnd_dma_init(priv,
			    rsnd_mod_to_dma(mod),
			    is_play,
			    src->info->dma_id);
	if (ret < 0)
		dev_err(dev, "SRC DMA failed\n");

	return ret;
}
コード例 #3
0
ファイル: ssi.c プロジェクト: Astralix/mainline-dss11
static int rsnd_ssi_dma_probe(struct rsnd_mod *mod,
			  struct rsnd_dai *rdai,
			  struct rsnd_dai_stream *io)
{
	struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
	struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
	struct rcar_snd_info *info = rsnd_priv_to_info(priv);
	struct device *dev = rsnd_priv_to_dev(priv);
	int dma_id = ssi->info->dma_id;
	int is_play;
	int ret;

	if (info->dai_info)
		is_play = rsnd_info_is_playback(priv, ssi);
	else
		is_play = rsnd_ssi_is_play(&ssi->mod);

	ret = rsnd_dma_init(
		priv, rsnd_mod_to_dma(mod),
		is_play,
		dma_id);

	if (ret < 0)
		dev_err(dev, "SSI DMA failed\n");

	return ret;
}