mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "Li.Xiubo@freescale.com" <Li.Xiubo@freescale.com>
To: Kuninori Morimoto <kuninori.morimoto.gx@gmail.com>
Cc: "broonie@kernel.org" <broonie@kernel.org>,
	"perex@perex.cz" <perex@perex.cz>,
	"lgirdwood@gmail.com" <lgirdwood@gmail.com>,
	"tiwai@suse.de" <tiwai@suse.de>,
	"moinejf@free.fr" <moinejf@free.fr>,
	"andrew@lunn.ch" <andrew@lunn.ch>,
	"kuninori.morimoto.gx@renesas.com"
	<kuninori.morimoto.gx@renesas.com>,
	"jsarha@ti.com" <jsarha@ti.com>,
	"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
	"alsa-devel@alsa-project.org" <alsa-devel@alsa-project.org>,
	"robh+dt@kernel.org" <robh+dt@kernel.org>,
	"pawel.moll@arm.com" <pawel.moll@arm.com>,
	"mark.rutland@arm.com" <mark.rutland@arm.com>,
	"ijc+devicetree@hellion.org.uk" <ijc+devicetree@hellion.org.uk>,
	"galak@codeaurora.org" <galak@codeaurora.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: RE: [alsa-devel] [PATCHv2 1/4] ASoC: simple-card: add asoc_simple_card_fmt_master() to simplify the code.
Date: Wed, 3 Sep 2014 02:21:54 +0000	[thread overview]
Message-ID: <b0ce0040e47a4ea8ab00ae7e113ecb41@BY2PR0301MB0613.namprd03.prod.outlook.com> (raw)
In-Reply-To: <87egvt7dmd.wl%kuninori.morimoto.gx@gmail.com>

Hi Kuninori-san,

Yes, I think it make sense to set all fmt in one function, and will
Be more readable.

I agree with you, could you please just wait, because there has many
Replications and good Ideas about this patch, and I will revise it.
Then you can improve it as your patch blow.


Thanks,

BRs
Xiubo


> Subject: Re: [alsa-devel] [PATCHv2 1/4] ASoC: simple-card: add
> asoc_simple_card_fmt_master() to simplify the code.
> 
> 
> Hi Xiubo
> 
> I was very surprised about this patch
> because the idea is same as my local patch
> (I was planned to send it to ML :)
> 
> I attached my local patch to sharing idea.
> 
> > +static inline unsigned int
> > +asoc_simple_card_fmt_master(struct device_node *np,
> > +			    struct device_node *bitclkmaster,
> > +			    struct device_node *framemaster)
> > +{
> > +	switch (((np == bitclkmaster) << 4) | (np == framemaster)) {
> > +	case 0x11:
> > +		return SND_SOC_DAIFMT_CBS_CFS;
> > +	case 0x10:
> > +		return SND_SOC_DAIFMT_CBS_CFM;
> > +	case 0x01:
> > +		return SND_SOC_DAIFMT_CBM_CFS;
> > +	default:
> > +		return SND_SOC_DAIFMT_CBM_CFM;
> > +	}
> > +
> > +	/* Shouldn't be here */
> > +	return -EINVAL;
> > +}
> 
> I think this concept is nice,
> but setting all fmt in this function is good for me
> see my local patch
> 
> ----------
> From 85562eb1587e5c184e4f4e0b183bd7063aaa81b7 Mon Sep 17 00:00:00 2001
> From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
> Date: Thu, 28 Aug 2014 19:20:14 +0900
> Subject: [PATCH] ASoC: simple-card: add asoc_simple_card_parse_daifmt()
> 
> Current daifmt setting method in simple-card driver is
> placed to many places, and using un-readable/confusable method.
> This patch adds new asoc_simple_card_parse_daifmt()
> and tidyup code.
> 
> Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
> 
> diff --git a/sound/soc/generic/simple-card.c b/sound/soc/generic/simple-card.c
> index bea5901..c932103 100644
> --- a/sound/soc/generic/simple-card.c
> +++ b/sound/soc/generic/simple-card.c
> @@ -167,6 +167,64 @@ asoc_simple_card_sub_parse_of(struct device_node *np,
>  	return 0;
>  }
> 
> +static int asoc_simple_card_parse_daifmt(struct device_node *node,
> +					 struct simple_card_data *priv,
> +					 struct device_node *cpu,
> +					 struct device_node *codec,
> +					 char *prefix, int idx)
> +{
> +	struct device *dev = simple_priv_to_dev(priv);
> +	struct device_node *bitclkmaster = NULL;
> +	struct device_node *framemaster = NULL;
> +	struct simple_dai_props *dai_props = simple_priv_to_props(priv, idx);
> +	struct asoc_simple_dai *cpu_dai = &dai_props->cpu_dai;
> +	struct asoc_simple_dai *codec_dai = &dai_props->codec_dai;
> +	unsigned int daifmt;
> +
> +	daifmt = snd_soc_of_parse_daifmt(node, prefix,
> +					 &bitclkmaster, &framemaster);
> +	daifmt &= ~SND_SOC_DAIFMT_MASTER_MASK;
> +
> +	if (strlen(prefix) && !bitclkmaster && !framemaster) {
> +		/*
> +		 * No dai-link level and master setting was not found from
> +		 * sound node level, revert back to legacy DT parsing and
> +		 * take the settings from codec node.
> +		 */
> +		dev_dbg(dev, "Revert to legacy daifmt parsing\n");
> +
> +		cpu_dai->fmt = codec_dai->fmt =
> +			snd_soc_of_parse_daifmt(codec, NULL, NULL, NULL) |
> +			(daifmt & ~SND_SOC_DAIFMT_CLOCK_MASK);
> +	} else {
> +
> +		switch (((codec == bitclkmaster) << 4) | (codec == framemaster))
> {
> +		case 0x11:
> +			daifmt |= SND_SOC_DAIFMT_CBM_CFM;
> +			break;
> +		case 0x10:
> +			daifmt |= SND_SOC_DAIFMT_CBM_CFS;
> +			break;
> +		case 0x01:
> +			daifmt |= SND_SOC_DAIFMT_CBS_CFM;
> +			break;
> +		default:
> +			daifmt |= SND_SOC_DAIFMT_CBS_CFS;
> +			break;
> +		}
> +
> +		cpu_dai->fmt = daifmt;
> +		codec_dai->fmt = daifmt;
> +	}
> +
> +	if (bitclkmaster)
> +		of_node_put(bitclkmaster);
> +	if (framemaster)
> +		of_node_put(framemaster);
> +
> +	return 0;
> +}
> +
>  static int asoc_simple_card_dai_link_of(struct device_node *node,
>  					struct simple_card_data *priv,
>  					int idx,
> @@ -175,10 +233,8 @@ static int asoc_simple_card_dai_link_of(struct
> device_node *node,
>  	struct device *dev = simple_priv_to_dev(priv);
>  	struct snd_soc_dai_link *dai_link = simple_priv_to_link(priv, idx);
>  	struct simple_dai_props *dai_props = simple_priv_to_props(priv, idx);
> -	struct device_node *np = NULL;
> -	struct device_node *bitclkmaster = NULL;
> -	struct device_node *framemaster = NULL;
> -	unsigned int daifmt;
> +	struct device_node *cpu = NULL;
> +	struct device_node *codec = NULL;
>  	char *name;
>  	char prop[128];
>  	char *prefix = "";
> @@ -187,82 +243,35 @@ static int asoc_simple_card_dai_link_of(struct
> device_node *node,
>  	if (is_top_level_node)
>  		prefix = "simple-audio-card,";
> 
> -	daifmt = snd_soc_of_parse_daifmt(node, prefix,
> -					 &bitclkmaster, &framemaster);
> -	daifmt &= ~SND_SOC_DAIFMT_MASTER_MASK;
> -
>  	snprintf(prop, sizeof(prop), "%scpu", prefix);
> -	np = of_get_child_by_name(node, prop);
> -	if (!np) {
> +	cpu = of_get_child_by_name(node, prop);
> +
> +	snprintf(prop, sizeof(prop), "%scodec", prefix);
> +	codec = of_get_child_by_name(node, prop);
> +
> +	if (!cpu || !codec) {
>  		ret = -EINVAL;
>  		dev_err(dev, "%s: Can't find %s DT node\n", __func__, prop);
>  		goto dai_link_of_err;
>  	}
> 
> -	ret = asoc_simple_card_sub_parse_of(np, &dai_props->cpu_dai,
> -					    &dai_link->cpu_of_node,
> -					    &dai_link->cpu_dai_name);
> +	ret = asoc_simple_card_parse_daifmt(node, priv,
> +					    cpu, codec, prefix, idx);
>  	if (ret < 0)
>  		goto dai_link_of_err;
> 
> -	dai_props->cpu_dai.fmt = daifmt;
> -	switch (((np == bitclkmaster) << 4) | (np == framemaster)) {
> -	case 0x11:
> -		dai_props->cpu_dai.fmt |= SND_SOC_DAIFMT_CBS_CFS;
> -		break;
> -	case 0x10:
> -		dai_props->cpu_dai.fmt |= SND_SOC_DAIFMT_CBS_CFM;
> -		break;
> -	case 0x01:
> -		dai_props->cpu_dai.fmt |= SND_SOC_DAIFMT_CBM_CFS;
> -		break;
> -	default:
> -		dai_props->cpu_dai.fmt |= SND_SOC_DAIFMT_CBM_CFM;
> -		break;
> -	}
> -
> -	of_node_put(np);
> -	snprintf(prop, sizeof(prop), "%scodec", prefix);
> -	np = of_get_child_by_name(node, prop);
> -	if (!np) {
> -		ret = -EINVAL;
> -		dev_err(dev, "%s: Can't find %s DT node\n", __func__, prop);
> +	ret = asoc_simple_card_sub_parse_of(cpu, &dai_props->cpu_dai,
> +					    &dai_link->cpu_of_node,
> +					    &dai_link->cpu_dai_name);
> +	if (ret < 0)
>  		goto dai_link_of_err;
> -	}
> 
> -	ret = asoc_simple_card_sub_parse_of(np, &dai_props->codec_dai,
> +	ret = asoc_simple_card_sub_parse_of(codec, &dai_props->codec_dai,
>  					    &dai_link->codec_of_node,
>  					    &dai_link->codec_dai_name);
>  	if (ret < 0)
>  		goto dai_link_of_err;
> 
> -	if (strlen(prefix) && !bitclkmaster && !framemaster) {
> -		/* No dai-link level and master setting was not found from
> -		   sound node level, revert back to legacy DT parsing and
> -		   take the settings from codec node. */
> -		dev_dbg(dev, "%s: Revert to legacy daifmt parsing\n",
> -			__func__);
> -		dai_props->cpu_dai.fmt = dai_props->codec_dai.fmt =
> -			snd_soc_of_parse_daifmt(np, NULL, NULL, NULL) |
> -			(daifmt & ~SND_SOC_DAIFMT_CLOCK_MASK);
> -	} else {
> -		dai_props->codec_dai.fmt = daifmt;
> -		switch (((np == bitclkmaster) << 4) | (np == framemaster)) {
> -		case 0x11:
> -			dai_props->codec_dai.fmt |= SND_SOC_DAIFMT_CBM_CFM;
> -			break;
> -		case 0x10:
> -			dai_props->codec_dai.fmt |= SND_SOC_DAIFMT_CBM_CFS;
> -			break;
> -		case 0x01:
> -			dai_props->codec_dai.fmt |= SND_SOC_DAIFMT_CBS_CFM;
> -			break;
> -		default:
> -			dai_props->codec_dai.fmt |= SND_SOC_DAIFMT_CBS_CFS;
> -			break;
> -		}
> -	}
> -
>  	if (!dai_link->cpu_dai_name || !dai_link->codec_dai_name) {
>  		ret = -EINVAL;
>  		goto dai_link_of_err;
> @@ -304,12 +313,10 @@ static int asoc_simple_card_dai_link_of(struct
> device_node *node,
>  	dai_link->cpu_dai_name = NULL;
> 
>  dai_link_of_err:
> -	if (np)
> -		of_node_put(np);
> -	if (bitclkmaster)
> -		of_node_put(bitclkmaster);
> -	if (framemaster)
> -		of_node_put(framemaster);
> +	if (cpu)
> +		of_node_put(cpu);
> +	if (codec)
> +		of_node_put(codec);
>  	return ret;
>  }
> 
> ---------
> 
> Best regards
> ---
> Kuninori Morimoto

  reply	other threads:[~2014-09-03  2:21 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-02  9:26 [PATCHv2 0/4] simple-card: " Xiubo Li
2014-09-02  9:26 ` [PATCHv2 1/4] ASoC: simple-card: add asoc_simple_card_fmt_master() to " Xiubo Li
2014-09-02 10:21   ` Varka Bhadram
2014-09-02 10:38     ` Jean-Francois Moine
2014-09-02 10:42       ` Varka Bhadram
2014-09-02 11:04         ` Takashi Iwai
2014-09-02 11:09         ` Jean-Francois Moine
2014-09-02 11:32           ` Jyri Sarha
2014-09-02 11:10   ` Jyri Sarha
2014-09-03  2:37     ` Li.Xiubo
2014-09-03  8:36       ` Jyri Sarha
2014-09-03  8:39         ` Li.Xiubo
2014-09-03  0:26   ` [alsa-devel] " Kuninori Morimoto
2014-09-03  2:21     ` Li.Xiubo [this message]
2014-09-03  3:36       ` Kuninori Morimoto
2014-09-03  3:41         ` Li.Xiubo
2014-09-03  3:37     ` Li.Xiubo
2014-09-03  4:13       ` Kuninori Morimoto
2014-09-03  5:33         ` Li.Xiubo
2014-09-03  6:48         ` Jean-Francois Moine
2014-09-02  9:26 ` [PATCHv2 2/4] ASoC: simple-card: Merge single and muti DAI link(s) code Xiubo Li
2014-09-02  9:26 ` [PATCHv2 3/4] ASoC: simple-card: Adjust the comments of simple card Xiubo Li
2014-09-02 10:44   ` Jean-Francois Moine
2014-09-03  1:55     ` Li.Xiubo
2014-09-03  2:14       ` [alsa-devel] " Kuninori Morimoto
2014-09-03  2:24         ` Li.Xiubo
2014-09-02  9:26 ` [PATCHv2 4/4] ASoC: simple-card: binding: update binding to support the new style Xiubo Li
2014-09-02 10:41   ` Jean-Francois Moine
2014-09-03  1:54     ` Li.Xiubo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b0ce0040e47a4ea8ab00ae7e113ecb41@BY2PR0301MB0613.namprd03.prod.outlook.com \
    --to=li.xiubo@freescale.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=andrew@lunn.ch \
    --cc=broonie@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=galak@codeaurora.org \
    --cc=ijc+devicetree@hellion.org.uk \
    --cc=jsarha@ti.com \
    --cc=kuninori.morimoto.gx@gmail.com \
    --cc=kuninori.morimoto.gx@renesas.com \
    --cc=lgirdwood@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=moinejf@free.fr \
    --cc=pawel.moll@arm.com \
    --cc=perex@perex.cz \
    --cc=robh+dt@kernel.org \
    --cc=tiwai@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®