All of lore.kernel.org
 help / color / mirror / Atom feed
From: Banajit Goswami <bgoswami@codeaurora.org>
To: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
	andy.gross@linaro.org, broonie@kernel.org,
	linux-arm-msm@vger.kernel.org, alsa-devel@alsa-project.org,
	robh+dt@kernel.org
Cc: gregkh@linuxfoundation.org, david.brown@linaro.org,
	mark.rutland@arm.com, lgirdwood@gmail.com, plai@codeaurora.org,
	tiwai@suse.com, perex@perex.cz, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, rohkumar@qti.qualcomm.com,
	spatakok@qti.qualcomm.com
Subject: Re: [PATCH v7 23/24] ASoC: qcom: apq8096: Add db820c machine driver
Date: Wed, 9 May 2018 02:15:18 -0700	[thread overview]
Message-ID: <c52fc35d-95a6-6675-6c6e-32a0d5f486d4@codeaurora.org> (raw)
In-Reply-To: <20180501120820.11016-24-srinivas.kandagatla@linaro.org>


On 5/1/2018 5:08 AM, Srinivas Kandagatla wrote:
> This patch adds support to DB820c machine driver.
>
> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
> ---
>   sound/soc/qcom/Kconfig   |   9 ++
>   sound/soc/qcom/Makefile  |   2 +
>   sound/soc/qcom/apq8096.c | 238 +++++++++++++++++++++++++++++++++++++++++++++++
>   3 files changed, 249 insertions(+)
>   create mode 100644 sound/soc/qcom/apq8096.c
<snip>

> +
> +static int apq8096_sbc_parse_of(struct snd_soc_card *card)
> +{
> +	struct device_node *np, *codec, *platform, *cpu, *node;
> +	struct device *dev = card->dev;
> +	struct snd_soc_dai_link *link;
> +	int ret, num_links;
> +
> +	ret = snd_soc_of_parse_card_name(card, "qcom,model");
> +	if (ret) {
> +		dev_err(dev, "Error parsing card name: %d\n", ret);
> +		return ret;
> +	}
> +
> +	node = dev->of_node;
> +
> +	/* DAPM routes */
> +	if (of_property_read_bool(node, "qcom,audio-routing")) {
> +		ret = snd_soc_of_parse_audio_routing(card,
> +					"qcom,audio-routing");
> +		if (ret)
> +			return ret;
> +	}
> +
> +	/* Populate links */
> +	num_links = of_get_child_count(node);
> +
> +	/* Allocate the DAI link array */
> +	card->dai_link = kcalloc(num_links, sizeof(*link), GFP_KERNEL);
> +	if (!card->dai_link)
> +		return -ENOMEM;
> +
> +	card->num_links	= num_links;
> +	link = card->dai_link;
> +
> +	for_each_child_of_node(node, np) {
> +		cpu = of_get_child_by_name(np, "cpu");
> +		platform = of_get_child_by_name(np, "platform");
> +		codec = of_get_child_by_name(np, "codec");
> +
> +		if (!cpu) {
> +			dev_err(dev, "Can't find cpu DT node\n");
clean up missing to kfree(card->dai_link)?

> +			return -EINVAL;
> +		}
> +
> +		link->cpu_of_node = of_parse_phandle(cpu, "sound-dai", 0);
> +		if (!link->cpu_of_node) {
> +			dev_err(card->dev, "error getting cpu phandle\n");
ditto

> +			return -EINVAL;
> +		}
> +
> +		ret = snd_soc_of_get_dai_name(cpu, &link->cpu_dai_name);
> +		if (ret) {
> +			dev_err(card->dev, "error getting cpu dai name\n");
ditto

> +			return ret;
> +		}
> +
> +		if (codec && platform) {
> +			link->platform_of_node = of_parse_phandle(platform,
> +								  "sound-dai",
> +								   0);
> +			if (!link->platform_of_node) {
> +				dev_err(card->dev, "platform dai not found\n");
ditto

> +				return -EINVAL;
> +			}
> +
> +			ret = snd_soc_of_get_dai_link_codecs(dev, codec, link);
> +			if (ret < 0) {
> +				dev_err(card->dev, "codec dai not found\n");
ditto

> +				return ret;
> +			}
> +			link->no_pcm = 1;
> +			link->ignore_suspend = 1;
ignore_suspend will also need to be set for FE DAIs?

> +			link->ignore_pmdown_time = 1;
> +			link->be_hw_params_fixup = apq8096_be_hw_params_fixup;
> +		} else {
> +			link->platform_of_node = link->cpu_of_node;
> +			link->codec_dai_name = "snd-soc-dummy-dai";
> +			link->codec_name = "snd-soc-dummy";
> +			link->dynamic = 1;
> +		}
> +
> +		ret = of_property_read_string(np, "link-name", &link->name);
> +		if (ret) {
> +			dev_err(card->dev, "error getting codec dai_link name\n");
clean up

> +			return ret;
> +		}
> +
> +		link->dpcm_playback = 1;
> +		link->dpcm_capture = 1;
> +		link->stream_name = link->name;
> +		link++;
> +	}
> +
> +	return ret;
> +}
> +
> +static int apq8096_bind(struct device *dev)
> +{
> +	struct snd_soc_card *card;
> +	int ret;
> +
> +	card = kzalloc(sizeof(*card), GFP_KERNEL);
> +	if (!card)
> +		return -ENOMEM;
> +
> +	component_bind_all(dev, card);
> +	card->dev = dev;
> +	ret = apq8096_sbc_parse_of(card);
> +	if (ret) {
> +		dev_err(dev, "Error parsing OF data\n");
> +		component_unbind_all(dev, card);
> +		return ret;
> +	}
> +
> +	return snd_soc_register_card(card);
> +}
> +
> +static void apq8096_unbind(struct device *dev)
> +{
> +	struct snd_soc_card *card = dev_get_drvdata(dev);
> +
> +	component_unbind_all(dev, card);
> +	snd_soc_unregister_card(card);
Should sound card not be unregistered first, before calling 
component_unbind_all()?

-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project

WARNING: multiple messages have this Message-ID (diff)
From: bgoswami@codeaurora.org (Banajit Goswami)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v7 23/24] ASoC: qcom: apq8096: Add db820c machine driver
Date: Wed, 9 May 2018 02:15:18 -0700	[thread overview]
Message-ID: <c52fc35d-95a6-6675-6c6e-32a0d5f486d4@codeaurora.org> (raw)
In-Reply-To: <20180501120820.11016-24-srinivas.kandagatla@linaro.org>


On 5/1/2018 5:08 AM, Srinivas Kandagatla wrote:
> This patch adds support to DB820c machine driver.
>
> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
> ---
>   sound/soc/qcom/Kconfig   |   9 ++
>   sound/soc/qcom/Makefile  |   2 +
>   sound/soc/qcom/apq8096.c | 238 +++++++++++++++++++++++++++++++++++++++++++++++
>   3 files changed, 249 insertions(+)
>   create mode 100644 sound/soc/qcom/apq8096.c
<snip>

> +
> +static int apq8096_sbc_parse_of(struct snd_soc_card *card)
> +{
> +	struct device_node *np, *codec, *platform, *cpu, *node;
> +	struct device *dev = card->dev;
> +	struct snd_soc_dai_link *link;
> +	int ret, num_links;
> +
> +	ret = snd_soc_of_parse_card_name(card, "qcom,model");
> +	if (ret) {
> +		dev_err(dev, "Error parsing card name: %d\n", ret);
> +		return ret;
> +	}
> +
> +	node = dev->of_node;
> +
> +	/* DAPM routes */
> +	if (of_property_read_bool(node, "qcom,audio-routing")) {
> +		ret = snd_soc_of_parse_audio_routing(card,
> +					"qcom,audio-routing");
> +		if (ret)
> +			return ret;
> +	}
> +
> +	/* Populate links */
> +	num_links = of_get_child_count(node);
> +
> +	/* Allocate the DAI link array */
> +	card->dai_link = kcalloc(num_links, sizeof(*link), GFP_KERNEL);
> +	if (!card->dai_link)
> +		return -ENOMEM;
> +
> +	card->num_links	= num_links;
> +	link = card->dai_link;
> +
> +	for_each_child_of_node(node, np) {
> +		cpu = of_get_child_by_name(np, "cpu");
> +		platform = of_get_child_by_name(np, "platform");
> +		codec = of_get_child_by_name(np, "codec");
> +
> +		if (!cpu) {
> +			dev_err(dev, "Can't find cpu DT node\n");
clean up missing to kfree(card->dai_link)?

> +			return -EINVAL;
> +		}
> +
> +		link->cpu_of_node = of_parse_phandle(cpu, "sound-dai", 0);
> +		if (!link->cpu_of_node) {
> +			dev_err(card->dev, "error getting cpu phandle\n");
ditto

> +			return -EINVAL;
> +		}
> +
> +		ret = snd_soc_of_get_dai_name(cpu, &link->cpu_dai_name);
> +		if (ret) {
> +			dev_err(card->dev, "error getting cpu dai name\n");
ditto

> +			return ret;
> +		}
> +
> +		if (codec && platform) {
> +			link->platform_of_node = of_parse_phandle(platform,
> +								  "sound-dai",
> +								   0);
> +			if (!link->platform_of_node) {
> +				dev_err(card->dev, "platform dai not found\n");
ditto

> +				return -EINVAL;
> +			}
> +
> +			ret = snd_soc_of_get_dai_link_codecs(dev, codec, link);
> +			if (ret < 0) {
> +				dev_err(card->dev, "codec dai not found\n");
ditto

> +				return ret;
> +			}
> +			link->no_pcm = 1;
> +			link->ignore_suspend = 1;
ignore_suspend will also need to be set for FE DAIs?

> +			link->ignore_pmdown_time = 1;
> +			link->be_hw_params_fixup = apq8096_be_hw_params_fixup;
> +		} else {
> +			link->platform_of_node = link->cpu_of_node;
> +			link->codec_dai_name = "snd-soc-dummy-dai";
> +			link->codec_name = "snd-soc-dummy";
> +			link->dynamic = 1;
> +		}
> +
> +		ret = of_property_read_string(np, "link-name", &link->name);
> +		if (ret) {
> +			dev_err(card->dev, "error getting codec dai_link name\n");
clean up

> +			return ret;
> +		}
> +
> +		link->dpcm_playback = 1;
> +		link->dpcm_capture = 1;
> +		link->stream_name = link->name;
> +		link++;
> +	}
> +
> +	return ret;
> +}
> +
> +static int apq8096_bind(struct device *dev)
> +{
> +	struct snd_soc_card *card;
> +	int ret;
> +
> +	card = kzalloc(sizeof(*card), GFP_KERNEL);
> +	if (!card)
> +		return -ENOMEM;
> +
> +	component_bind_all(dev, card);
> +	card->dev = dev;
> +	ret = apq8096_sbc_parse_of(card);
> +	if (ret) {
> +		dev_err(dev, "Error parsing OF data\n");
> +		component_unbind_all(dev, card);
> +		return ret;
> +	}
> +
> +	return snd_soc_register_card(card);
> +}
> +
> +static void apq8096_unbind(struct device *dev)
> +{
> +	struct snd_soc_card *card = dev_get_drvdata(dev);
> +
> +	component_unbind_all(dev, card);
> +	snd_soc_unregister_card(card);
Should sound card not be unregistered first, before calling 
component_unbind_all()?

-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project

  reply	other threads:[~2018-05-09  9:15 UTC|newest]

Thread overview: 154+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-01 12:07 [PATCH v7 00/24] ASoC: qcom: Add support to QDSP based Audio Srinivas Kandagatla
2018-05-01 12:07 ` Srinivas Kandagatla
2018-05-01 12:07 ` Srinivas Kandagatla
2018-05-01 12:07 ` [PATCH v7 01/24] soc: qcom dt-bindings: Add APR bus bindings Srinivas Kandagatla
2018-05-01 12:07   ` Srinivas Kandagatla
2018-05-01 12:07   ` Srinivas Kandagatla
2018-05-03 23:30   ` [alsa-devel] " Banajit Goswami
2018-05-03 23:30     ` Banajit Goswami
2018-05-04 17:33   ` Bjorn Andersson
2018-05-04 17:33     ` Bjorn Andersson
2018-05-04 17:33     ` Bjorn Andersson
2018-05-01 12:07 ` [PATCH v7 02/24] soc: qcom: Add APR bus driver Srinivas Kandagatla
2018-05-01 12:07   ` Srinivas Kandagatla
2018-05-04 17:45   ` Bjorn Andersson
2018-05-04 17:45     ` Bjorn Andersson
2018-05-04 17:45     ` Bjorn Andersson
2018-05-11  3:18   ` Applied "soc: qcom: Add APR bus driver" to the asoc tree Mark Brown
2018-05-11  3:18     ` Mark Brown
2018-05-11  3:18     ` Mark Brown
2018-05-01 12:07 ` [PATCH v7 03/24] ASoC: qdsp6: dt-bindings: Add q6core dt bindings Srinivas Kandagatla
2018-05-01 12:07   ` Srinivas Kandagatla
2018-05-01 12:07   ` Srinivas Kandagatla
2018-05-03 23:45   ` Banajit Goswami
2018-05-03 23:45     ` Banajit Goswami
2018-05-03 23:45     ` Banajit Goswami
2018-05-01 12:08 ` [PATCH v7 04/24] ASoC: qdsp6: dt-bindings: Add q6afe " Srinivas Kandagatla
2018-05-01 12:08   ` Srinivas Kandagatla
2018-05-01 12:37   ` Rob Herring
2018-05-01 12:37     ` Rob Herring
2018-05-01 12:37     ` Rob Herring
2018-05-03 23:50   ` Banajit Goswami
2018-05-03 23:50     ` Banajit Goswami
2018-05-03 23:50     ` Banajit Goswami
2018-05-11  3:17   ` Applied "ASoC: qdsp6: dt-bindings: Add q6afe dt bindings" to the asoc tree Mark Brown
2018-05-11  3:17     ` Mark Brown
2018-05-11  3:17     ` Mark Brown
2018-05-01 12:08 ` [PATCH v7 05/24] ASoC: qdsp6: dt-bindings: Add q6adm dt bindings Srinivas Kandagatla
2018-05-01 12:08   ` Srinivas Kandagatla
2018-05-01 12:08   ` Srinivas Kandagatla
2018-05-03 23:53   ` Banajit Goswami
2018-05-03 23:53     ` Banajit Goswami
2018-05-01 12:08 ` [PATCH v7 06/24] ASoC: qdsp6: dt-bindings: Add q6asm " Srinivas Kandagatla
2018-05-01 12:08   ` Srinivas Kandagatla
2018-05-01 12:08   ` Srinivas Kandagatla
2018-05-03 23:56   ` Banajit Goswami
2018-05-03 23:56     ` Banajit Goswami
2018-05-01 12:08 ` [PATCH v7 07/24] ASoC: qdsp6: q6common: Add qdsp6 helper functions Srinivas Kandagatla
2018-05-01 12:08   ` Srinivas Kandagatla
2018-05-01 12:08   ` Srinivas Kandagatla
2018-05-04  1:35   ` Banajit Goswami
2018-05-04  1:35     ` Banajit Goswami
2018-05-04  1:35     ` Banajit Goswami
2018-05-11  3:15   ` Applied "ASoC: qdsp6: q6common: Add qdsp6 helper functions" to the asoc tree Mark Brown
2018-05-11  3:15     ` Mark Brown
2018-05-11  3:15     ` Mark Brown
2018-05-01 12:08 ` [PATCH v7 08/24] ASoC: qdsp6: q6core: Add q6core driver Srinivas Kandagatla
2018-05-01 12:08   ` Srinivas Kandagatla
2018-05-01 12:08   ` Srinivas Kandagatla
2018-05-04 19:04   ` Banajit Goswami
2018-05-04 19:04     ` Banajit Goswami
2018-05-09  6:06     ` Srinivas Kandagatla
2018-05-09  6:06       ` Srinivas Kandagatla
2018-05-09  6:06       ` Srinivas Kandagatla
2018-05-01 12:08 ` [PATCH v7 09/24] ASoC: qdsp6: q6afe: Add q6afe driver Srinivas Kandagatla
2018-05-01 12:08   ` Srinivas Kandagatla
2018-05-01 12:08   ` Srinivas Kandagatla
2018-05-09  2:40   ` Banajit Goswami
2018-05-09  2:40     ` Banajit Goswami
2018-05-01 12:08 ` [PATCH v7 10/24] ASoC: qdsp6: qdafe: Add SLIMBus port Support Srinivas Kandagatla
2018-05-01 12:08   ` Srinivas Kandagatla
2018-05-01 12:08   ` Srinivas Kandagatla
2018-05-09  2:55   ` Banajit Goswami
2018-05-09  2:55     ` Banajit Goswami
2018-05-09  2:55     ` Banajit Goswami
2018-05-01 12:08 ` [PATCH v7 11/24] ASoC: qdsp6: q6afe: Add support to MI2S ports Srinivas Kandagatla
2018-05-01 12:08   ` Srinivas Kandagatla
2018-05-01 12:08   ` Srinivas Kandagatla
2018-05-09  3:21   ` Banajit Goswami
2018-05-09  3:21     ` Banajit Goswami
2018-05-09  3:21     ` Banajit Goswami
2018-05-09  6:05     ` Srinivas Kandagatla
2018-05-09  6:05       ` Srinivas Kandagatla
2018-05-09  6:05       ` Srinivas Kandagatla
2018-05-01 12:08 ` [PATCH v7 12/24] ASoC: qdsp6: q6afe: Add support to MI2S sysclks Srinivas Kandagatla
2018-05-01 12:08   ` Srinivas Kandagatla
2018-05-01 12:08   ` Srinivas Kandagatla
2018-05-09  4:29   ` Banajit Goswami
2018-05-09  4:29     ` Banajit Goswami
2018-05-09  4:29     ` Banajit Goswami
2018-05-01 12:08 ` [PATCH v7 13/24] ASoC: qdsp6: q6adm: Add q6adm driver Srinivas Kandagatla
2018-05-01 12:08   ` Srinivas Kandagatla
2018-05-09  7:55   ` Banajit Goswami
2018-05-09  7:55     ` Banajit Goswami
2018-05-09  8:08     ` Srinivas Kandagatla
2018-05-09  8:08       ` Srinivas Kandagatla
2018-05-01 12:08 ` [PATCH v7 14/24] ASoC: qdsp6: q6asm: Add q6asm driver Srinivas Kandagatla
2018-05-01 12:08   ` Srinivas Kandagatla
2018-05-09  8:10   ` Banajit Goswami
2018-05-09  8:10     ` Banajit Goswami
2018-05-09  8:15     ` Srinivas Kandagatla
2018-05-09  8:15       ` Srinivas Kandagatla
2018-05-01 12:08 ` [PATCH v7 15/24] ASoC: qdsp6: q6asm: Add support to memory map and unmap Srinivas Kandagatla
2018-05-01 12:08   ` Srinivas Kandagatla
2018-05-09  8:23   ` Banajit Goswami
2018-05-09  8:23     ` Banajit Goswami
2018-05-09  8:23     ` Banajit Goswami
2018-05-01 12:08 ` [PATCH v7 16/24] ASoC: qdsp6: q6asm: Add support to audio stream apis Srinivas Kandagatla
2018-05-01 12:08   ` Srinivas Kandagatla
2018-05-01 12:08   ` Srinivas Kandagatla
2018-05-04  7:11   ` [alsa-devel] " Rohit Kumar
2018-05-04  7:11     ` Rohit Kumar
2018-05-04  8:24     ` Srinivas Kandagatla
2018-05-04  8:24       ` Srinivas Kandagatla
2018-05-09 10:16   ` Banajit Goswami
2018-05-09 10:16     ` Banajit Goswami
2018-05-01 12:08 ` [PATCH v7 17/24] ASoC: qdsp6: q6routing: Add q6routing driver Srinivas Kandagatla
2018-05-01 12:08   ` Srinivas Kandagatla
2018-05-01 12:08   ` Srinivas Kandagatla
2018-05-09  8:56   ` Banajit Goswami
2018-05-09  8:56     ` Banajit Goswami
2018-05-09  8:56     ` Banajit Goswami
2018-05-01 12:08 ` [PATCH v7 18/24] ASoC: qdsp6: q6routing: Add support to all SLIMBus Mixers Srinivas Kandagatla
2018-05-01 12:08   ` Srinivas Kandagatla
2018-05-09  8:39   ` Banajit Goswami
2018-05-09  8:39     ` Banajit Goswami
2018-05-09  8:39     ` Banajit Goswami
2018-05-01 12:08 ` [PATCH v7 19/24] ASoC: qdsp6: q6routing: Add support to MI2S Mixers Srinivas Kandagatla
2018-05-01 12:08   ` Srinivas Kandagatla
2018-05-09  8:34   ` Banajit Goswami
2018-05-09  8:34     ` Banajit Goswami
2018-05-01 12:08 ` [PATCH v7 20/24] ASoC: qdsp6: q6afe: Add q6afe dai driver Srinivas Kandagatla
2018-05-01 12:08   ` Srinivas Kandagatla
2018-05-09  9:42   ` Banajit Goswami
2018-05-09  9:42     ` Banajit Goswami
2018-05-09  9:43     ` Srinivas Kandagatla
2018-05-09  9:43       ` Srinivas Kandagatla
2018-05-01 12:08 ` [PATCH v7 21/24] ASoC: qdsp6: q6asm: Add q6asm " Srinivas Kandagatla
2018-05-01 12:08   ` Srinivas Kandagatla
2018-05-09  9:57   ` Banajit Goswami
2018-05-09  9:57     ` Banajit Goswami
2018-05-01 12:08 ` [PATCH v7 22/24] ASoC: qdsp6: dt-bindings: Add apq8096 machine bindings Srinivas Kandagatla
2018-05-01 12:08   ` Srinivas Kandagatla
2018-05-09  9:01   ` Banajit Goswami
2018-05-09  9:01     ` Banajit Goswami
2018-05-01 12:08 ` [PATCH v7 23/24] ASoC: qcom: apq8096: Add db820c machine driver Srinivas Kandagatla
2018-05-01 12:08   ` Srinivas Kandagatla
2018-05-09  9:15   ` Banajit Goswami [this message]
2018-05-09  9:15     ` Banajit Goswami
2018-05-09 10:03     ` Srinivas Kandagatla
2018-05-09 10:03       ` Srinivas Kandagatla
2018-05-01 12:08 ` [PATCH v7 24/24] MAINTAINERS: Add myself as co-maintainer of qcom audio Srinivas Kandagatla
2018-05-01 12:08   ` Srinivas Kandagatla
2018-05-09  9:16   ` Banajit Goswami
2018-05-09  9:16     ` Banajit Goswami

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=c52fc35d-95a6-6675-6c6e-32a0d5f486d4@codeaurora.org \
    --to=bgoswami@codeaurora.org \
    --cc=alsa-devel@alsa-project.org \
    --cc=andy.gross@linaro.org \
    --cc=broonie@kernel.org \
    --cc=david.brown@linaro.org \
    --cc=devicetree@vger.kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=lgirdwood@gmail.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=perex@perex.cz \
    --cc=plai@codeaurora.org \
    --cc=robh+dt@kernel.org \
    --cc=rohkumar@qti.qualcomm.com \
    --cc=spatakok@qti.qualcomm.com \
    --cc=srinivas.kandagatla@linaro.org \
    --cc=tiwai@suse.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.