Unverified Commit 624fee45 authored by Kuninori Morimoto's avatar Kuninori Morimoto Committed by Mark Brown
Browse files

ASoC: soc-dai.h: merge DAI call back functions into ops



snd_soc_dai_driver has .ops for call back functions (A), but it also
has other call back functions (B). It is duplicated and confusable.

	struct snd_soc_dai_driver {
		...
 ^		int (*probe)(...);
 |		int (*remove)(...);
(B)		int (*compress_new)(...);
 |		int (*pcm_new)(...);
 v		...
(A)		const struct snd_soc_dai_ops *ops;
		...
	}

This patch merges (B) into (A).

Signed-off-by: default avatarKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Link: https://lore.kernel.org/r/87v8dpb0w6.wl-kuninori.morimoto.gx@renesas.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 85cc1ee9
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -274,6 +274,15 @@ int snd_soc_dai_compr_get_metadata(struct snd_soc_dai *dai,
const char *snd_soc_dai_name_get(struct snd_soc_dai *dai);

struct snd_soc_dai_ops {
	/* DAI driver callbacks */
	int (*probe)(struct snd_soc_dai *dai);
	int (*remove)(struct snd_soc_dai *dai);
	/* compress dai */
	int (*compress_new)(struct snd_soc_pcm_runtime *rtd, int num);
	/* Optional Callback used at pcm creation*/
	int (*pcm_new)(struct snd_soc_pcm_runtime *rtd,
		       struct snd_soc_dai *dai);

	/*
	 * DAI clocking configuration, all optional.
	 * Called by soc_card drivers, normally in their hw_params.
@@ -355,6 +364,10 @@ struct snd_soc_dai_ops {
	u64 *auto_selectable_formats;
	int num_auto_selectable_formats;

	/* probe ordering - for components with runtime dependencies */
	int probe_order;
	int remove_order;

	/* bit field */
	unsigned int no_capture_mute:1;
};
+1 −1
Original line number Diff line number Diff line
@@ -60,7 +60,7 @@ static bool soc_component_is_pcm(struct snd_soc_dai_link_component *dlc)
	struct snd_soc_dai *dai = snd_soc_find_dai_with_mutex(dlc);

	if (dai && (dai->component->driver->pcm_construct ||
		    dai->driver->pcm_new))
		    (dai->driver->ops && dai->driver->ops->pcm_new)))
		return true;

	return false;
+25 −0
Original line number Diff line number Diff line
@@ -2510,6 +2510,7 @@ struct snd_soc_dai *snd_soc_register_dai(struct snd_soc_component *component,
{
	struct device *dev = component->dev;
	struct snd_soc_dai *dai;
	struct snd_soc_dai_ops *ops; /* REMOVE ME */

	lockdep_assert_held(&client_mutex);

@@ -2538,6 +2539,30 @@ struct snd_soc_dai *snd_soc_register_dai(struct snd_soc_component *component,
	if (!dai->name)
		return NULL;

	/* REMOVE ME */
	if (dai_drv->probe		||
	    dai_drv->remove		||
	    dai_drv->compress_new	||
	    dai_drv->pcm_new		||
	    dai_drv->probe_order	||
	    dai_drv->remove_order) {

		ops = devm_kzalloc(dev, sizeof(struct snd_soc_dai_ops), GFP_KERNEL);
		if (!ops)
			return NULL;
		if (dai_drv->ops)
			memcpy(ops, dai_drv->ops, sizeof(struct snd_soc_dai_ops));

		ops->probe		= dai_drv->probe;
		ops->remove		= dai_drv->remove;
		ops->compress_new	= dai_drv->compress_new;
		ops->pcm_new		= dai_drv->pcm_new;
		ops->probe_order	= dai_drv->probe_order;
		ops->remove_order	= dai_drv->remove_order;

		dai_drv->ops = ops;
	}

	dai->component = component;
	dai->dev = dev;
	dai->driver = dai_drv;
+25 −19
Original line number Diff line number Diff line
@@ -460,8 +460,9 @@ int snd_soc_dai_compress_new(struct snd_soc_dai *dai,
			     struct snd_soc_pcm_runtime *rtd, int num)
{
	int ret = -ENOTSUPP;
	if (dai->driver->compress_new)
		ret = dai->driver->compress_new(rtd, num);
	if (dai->driver->ops &&
	    dai->driver->ops->compress_new)
		ret = dai->driver->ops->compress_new(rtd, num);
	return soc_dai_ret(dai, ret);
}

@@ -545,19 +546,20 @@ int snd_soc_pcm_dai_probe(struct snd_soc_pcm_runtime *rtd, int order)
	int i;

	for_each_rtd_dais(rtd, i, dai) {
		if (dai->driver->probe_order != order)
		if (dai->probed)
			continue;

		if (dai->probed)
		if (dai->driver->ops) {
			if (dai->driver->ops->probe_order != order)
				continue;

		if (dai->driver->probe) {
			int ret = dai->driver->probe(dai);
			if (dai->driver->ops->probe) {
				int ret = dai->driver->ops->probe(dai);

				if (ret < 0)
					return soc_dai_ret(dai, ret);
			}

		}
		dai->probed = 1;
	}

@@ -570,16 +572,19 @@ int snd_soc_pcm_dai_remove(struct snd_soc_pcm_runtime *rtd, int order)
	int i, r, ret = 0;

	for_each_rtd_dais(rtd, i, dai) {
		if (dai->driver->remove_order != order)
		if (!dai->probed)
			continue;

		if (dai->probed &&
		    dai->driver->remove) {
			r = dai->driver->remove(dai);
		if (dai->driver->ops) {
			if (dai->driver->ops->remove_order != order)
				continue;

			if (dai->driver->ops->remove) {
				r = dai->driver->ops->remove(dai);
				if (r < 0)
					ret = r; /* use last error */
			}

		}
		dai->probed = 0;
	}

@@ -592,8 +597,9 @@ int snd_soc_pcm_dai_new(struct snd_soc_pcm_runtime *rtd)
	int i;

	for_each_rtd_dais(rtd, i, dai) {
		if (dai->driver->pcm_new) {
			int ret = dai->driver->pcm_new(rtd, dai);
		if (dai->driver->ops &&
		    dai->driver->ops->pcm_new) {
			int ret = dai->driver->ops->pcm_new(rtd, dai);
			if (ret < 0)
				return soc_dai_ret(dai, ret);
		}