From: kernel test robot <lkp@intel.com>
To: oe-kbuild@lists.linux.dev
Cc: lkp@intel.com
Subject: [jsarha:topic/cros-sof-v4.14-rebase 3532/9999] sound/soc/soc-topology.c:1138:60: sparse: sparse: incorrect type in argument 3 (different base types)
Date: Sun, 30 Jul 2023 02:58:35 +0800 [thread overview]
Message-ID: <202307300215.WjcSLtZq-lkp@intel.com> (raw)
::::::
:::::: Manual check reason: "low confidence bisect report"
::::::
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
TO: Liam Girdwood <liam.r.girdwood@linux.intel.com>
CC: Samaga Prasanna Krishna <samaga.krishna@intel.corp-partner.google.com>
CC: Curtis Malainey <cujomalainey@chromium.org>
tree: https://github.com/jsarha/linux topic/cros-sof-v4.14-rebase
head: 18a233f3f676a98dde00947535d99ab1a54da340
commit: 9e1491388e755ed2b1dcffbaa54f76b2ad7a67ea [3532/9999] FROMLIST: ASoC: SOF: Add Build support for SOF core and Intel drivers
:::::: branch date: 4 years, 2 months ago
:::::: commit date: 4 years, 9 months ago
config: x86_64-randconfig-x062-20230728 (https://download.01.org/0day-ci/archive/20230730/202307300215.WjcSLtZq-lkp@intel.com/config)
compiler: gcc-7 (Ubuntu 7.5.0-6ubuntu2) 7.5.0
reproduce: (https://download.01.org/0day-ci/archive/20230730/202307300215.WjcSLtZq-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/r/202307300215.WjcSLtZq-lkp@intel.com/
sparse warnings: (new ones prefixed by >>)
sound/soc/soc-topology.c:2503:45: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:261:28: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:262:39: sparse: sparse: incorrect type in return expression (different base types) @@ expected int @@ got restricted __le32 [usertype] reg @@
sound/soc/soc-topology.c:262:39: sparse: expected int
sound/soc/soc-topology.c:262:39: sparse: got restricted __le32 [usertype] reg
sound/soc/soc-topology.c:274:28: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:275:39: sparse: sparse: incorrect type in return expression (different base types) @@ expected int @@ got restricted __le32 [usertype] shift @@
sound/soc/soc-topology.c:275:39: sparse: expected int
sound/soc/soc-topology.c:275:39: sparse: got restricted __le32 [usertype] shift
sound/soc/soc-topology.c:604:21: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:623:70: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:625:70: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:640:60: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:642:60: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:644:61: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:657:60: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:659:60: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:661:61: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:720:14: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int @@ got restricted __le32 [usertype] min @@
sound/soc/soc-topology.c:720:14: sparse: expected unsigned int
sound/soc/soc-topology.c:720:14: sparse: got restricted __le32 [usertype] min
sound/soc/soc-topology.c:721:22: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:733:17: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:736:17: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:738:33: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:789:33: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:799:27: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [addressable] [assigned] access @@ got restricted __le32 [usertype] access @@
sound/soc/soc-topology.c:799:27: sparse: expected unsigned int [addressable] [assigned] access
sound/soc/soc-topology.c:799:27: sparse: got restricted __le32 [usertype] access
sound/soc/soc-topology.c:801:26: sparse: sparse: incorrect type in assignment (different base types) @@ expected int max @@ got restricted __le32 [usertype] max @@
sound/soc/soc-topology.c:801:26: sparse: expected int max
sound/soc/soc-topology.c:801:26: sparse: got restricted __le32 [usertype] max
sound/soc/soc-topology.c:869:33: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:879:27: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [addressable] [assigned] access @@ got restricted __le32 [usertype] access @@
sound/soc/soc-topology.c:879:27: sparse: expected unsigned int [addressable] [assigned] access
sound/soc/soc-topology.c:879:27: sparse: got restricted __le32 [usertype] access
sound/soc/soc-topology.c:891:25: sparse: sparse: incorrect type in assignment (different base types) @@ expected int max @@ got restricted __le32 [usertype] max @@
sound/soc/soc-topology.c:891:25: sparse: expected int max
sound/soc/soc-topology.c:891:25: sparse: got restricted __le32 [usertype] max
sound/soc/soc-topology.c:892:25: sparse: sparse: incorrect type in assignment (different base types) @@ expected int min @@ got restricted __le32 [usertype] min @@
sound/soc/soc-topology.c:892:25: sparse: expected int min
sound/soc/soc-topology.c:892:25: sparse: got restricted __le32 [usertype] min
sound/soc/soc-topology.c:893:28: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int invert:1 @@ got restricted __le32 [usertype] invert @@
sound/soc/soc-topology.c:893:28: sparse: expected unsigned int invert:1
sound/soc/soc-topology.c:893:28: sparse: got restricted __le32 [usertype] invert
sound/soc/soc-topology.c:894:34: sparse: sparse: incorrect type in assignment (different base types) @@ expected int platform_max @@ got restricted __le32 [usertype] platform_max @@
sound/soc/soc-topology.c:894:34: sparse: expected int platform_max
sound/soc/soc-topology.c:894:34: sparse: got restricted __le32 [usertype] platform_max
sound/soc/soc-topology.c:944:44: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:948:27: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:976:15: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:980:46: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1008:33: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1026:27: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [addressable] [assigned] access @@ got restricted __le32 [usertype] access @@
sound/soc/soc-topology.c:1026:27: sparse: expected unsigned int [addressable] [assigned] access
sound/soc/soc-topology.c:1026:27: sparse: got restricted __le32 [usertype] access
sound/soc/soc-topology.c:1034:27: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int items @@ got restricted __le32 [usertype] items @@
sound/soc/soc-topology.c:1034:27: sparse: expected unsigned int items
sound/soc/soc-topology.c:1034:27: sparse: got restricted __le32 [usertype] items
sound/soc/soc-topology.c:1035:26: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int mask @@ got restricted __le32 [usertype] mask @@
sound/soc/soc-topology.c:1035:26: sparse: expected unsigned int mask
sound/soc/soc-topology.c:1035:26: sparse: got restricted __le32 [usertype] mask
sound/soc/soc-topology.c:1041:36: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1041:36: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1041:36: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1041:36: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1041:36: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1114:33: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1114:45: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1121:28: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1125:32: sparse: sparse: restricted __le32 degrades to integer
>> sound/soc/soc-topology.c:1138:60: sparse: sparse: incorrect type in argument 3 (different base types) @@ expected unsigned long [usertype] size @@ got restricted __le32 [usertype] payload_size @@
sound/soc/soc-topology.c:1138:60: sparse: expected unsigned long [usertype] size
sound/soc/soc-topology.c:1138:60: sparse: got restricted __le32 [usertype] payload_size
sound/soc/soc-topology.c:1145:59: sparse: sparse: incorrect type in argument 3 (different base types) @@ expected unsigned long [usertype] size @@ got restricted __le32 [usertype] payload_size @@
sound/soc/soc-topology.c:1145:59: sparse: expected unsigned long [usertype] size
sound/soc/soc-topology.c:1145:59: sparse: got restricted __le32 [usertype] payload_size
sound/soc/soc-topology.c:1148:60: sparse: sparse: incorrect type in argument 3 (different base types) @@ expected unsigned long [usertype] size @@ got restricted __le32 [usertype] payload_size @@
sound/soc/soc-topology.c:1148:60: sparse: expected unsigned long [usertype] size
sound/soc/soc-topology.c:1148:60: sparse: got restricted __le32 [usertype] payload_size
sound/soc/soc-topology.c:1130:41: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1130:41: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1130:41: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1130:41: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1130:41: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1130:41: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1130:41: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1130:41: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1130:41: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1130:41: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1130:41: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1130:41: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1130:41: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1176:24: sparse: sparse: incorrect type in initializer (different base types) @@ expected int count @@ got restricted __le32 [usertype] count @@
sound/soc/soc-topology.c:1176:24: sparse: expected int count
sound/soc/soc-topology.c:1176:24: sparse: got restricted __le32 [usertype] count
sound/soc/soc-topology.c:1179:33: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1179:45: sparse: sparse: restricted __le32 degrades to integer
>> sound/soc/soc-topology.c:1185:27: sparse: sparse: incorrect type in argument 4 (different base types) @@ expected unsigned long [usertype] bytes @@ got restricted __le32 [usertype] payload_size @@
sound/soc/soc-topology.c:1185:27: sparse: expected unsigned long [usertype] bytes
sound/soc/soc-topology.c:1185:27: sparse: got restricted __le32 [usertype] payload_size
sound/soc/soc-topology.c:1246:33: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1261:30: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int access @@ got restricted __le32 [usertype] access @@
sound/soc/soc-topology.c:1261:30: sparse: expected unsigned int access
sound/soc/soc-topology.c:1261:30: sparse: got restricted __le32 [usertype] access
sound/soc/soc-topology.c:1273:25: sparse: sparse: incorrect type in assignment (different base types) @@ expected int max @@ got restricted __le32 [usertype] max @@
sound/soc/soc-topology.c:1273:25: sparse: expected int max
sound/soc/soc-topology.c:1273:25: sparse: got restricted __le32 [usertype] max
sound/soc/soc-topology.c:1274:25: sparse: sparse: incorrect type in assignment (different base types) @@ expected int min @@ got restricted __le32 [usertype] min @@
sound/soc/soc-topology.c:1274:25: sparse: expected int min
sound/soc/soc-topology.c:1274:25: sparse: got restricted __le32 [usertype] min
sound/soc/soc-topology.c:1275:28: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int invert:1 @@ got restricted __le32 [usertype] invert @@
sound/soc/soc-topology.c:1275:28: sparse: expected unsigned int invert:1
sound/soc/soc-topology.c:1275:28: sparse: got restricted __le32 [usertype] invert
sound/soc/soc-topology.c:1276:34: sparse: sparse: incorrect type in assignment (different base types) @@ expected int platform_max @@ got restricted __le32 [usertype] platform_max @@
sound/soc/soc-topology.c:1276:34: sparse: expected int platform_max
sound/soc/soc-topology.c:1276:34: sparse: got restricted __le32 [usertype] platform_max
sound/soc/soc-topology.c:1345:30: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int access @@ got restricted __le32 [usertype] access @@
sound/soc/soc-topology.c:1345:30: sparse: expected unsigned int access
sound/soc/soc-topology.c:1345:30: sparse: got restricted __le32 [usertype] access
sound/soc/soc-topology.c:1354:27: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int items @@ got restricted __le32 [usertype] items @@
sound/soc/soc-topology.c:1354:27: sparse: expected unsigned int items
sound/soc/soc-topology.c:1354:27: sparse: got restricted __le32 [usertype] items
sound/soc/soc-topology.c:1355:26: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int mask @@ got restricted __le32 [usertype] mask @@
sound/soc/soc-topology.c:1355:26: sparse: expected unsigned int mask
sound/soc/soc-topology.c:1355:26: sparse: got restricted __le32 [usertype] mask
sound/soc/soc-topology.c:1358:36: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1358:36: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1358:36: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1358:36: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1358:36: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1401:41: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1414:35: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1451:33: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1462:30: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int access @@ got restricted __le32 [usertype] access @@
sound/soc/soc-topology.c:1462:30: sparse: expected unsigned int access
sound/soc/soc-topology.c:1462:30: sparse: got restricted __le32 [usertype] access
sound/soc/soc-topology.c:1464:26: sparse: sparse: incorrect type in assignment (different base types) @@ expected int max @@ got restricted __le32 [usertype] max @@
sound/soc/soc-topology.c:1464:26: sparse: expected int max
sound/soc/soc-topology.c:1464:26: sparse: got restricted __le32 [usertype] max
sound/soc/soc-topology.c:1521:38: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected int tplg_type @@ got restricted __le32 [usertype] id @@
sound/soc/soc-topology.c:1521:38: sparse: expected int tplg_type
sound/soc/soc-topology.c:1521:38: sparse: got restricted __le32 [usertype] id
sound/soc/soc-topology.c:1534:22: sparse: sparse: incorrect type in assignment (different base types) @@ expected int [addressable] [assigned] reg @@ got restricted __le32 [usertype] reg @@
sound/soc/soc-topology.c:1534:22: sparse: expected int [addressable] [assigned] reg
sound/soc/soc-topology.c:1534:22: sparse: got restricted __le32 [usertype] reg
sound/soc/soc-topology.c:1535:24: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned char [addressable] [assigned] shift @@ got restricted __le32 [usertype] shift @@
sound/soc/soc-topology.c:1535:24: sparse: expected unsigned char [addressable] [assigned] shift
sound/soc/soc-topology.c:1535:24: sparse: got restricted __le32 [usertype] shift
sound/soc/soc-topology.c:1536:23: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [addressable] [assigned] mask @@ got restricted __le32 [usertype] mask @@
sound/soc/soc-topology.c:1536:23: sparse: expected unsigned int [addressable] [assigned] mask
sound/soc/soc-topology.c:1536:23: sparse: got restricted __le32 [usertype] mask
sound/soc/soc-topology.c:1537:25: sparse: sparse: incorrect type in assignment (different base types) @@ expected int [addressable] [assigned] subseq @@ got restricted __le32 [usertype] subseq @@
sound/soc/soc-topology.c:1537:25: sparse: expected int [addressable] [assigned] subseq
sound/soc/soc-topology.c:1537:25: sparse: got restricted __le32 [usertype] subseq
sound/soc/soc-topology.c:1540:33: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned char [addressable] [assigned] ignore_suspend:1 @@ got restricted __le32 [usertype] ignore_suspend @@
sound/soc/soc-topology.c:1540:33: sparse: expected unsigned char [addressable] [assigned] ignore_suspend:1
sound/soc/soc-topology.c:1540:33: sparse: got restricted __le32 [usertype] ignore_suspend
sound/soc/soc-topology.c:1541:30: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned short [addressable] [assigned] event_flags @@ got restricted __le16 [usertype] event_flags @@
sound/soc/soc-topology.c:1541:30: sparse: expected unsigned short [addressable] [assigned] event_flags
sound/soc/soc-topology.c:1541:30: sparse: got restricted __le16 [usertype] event_flags
sound/soc/soc-topology.c:1545:67: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1564:40: sparse: sparse: incorrect type in assignment (different base types) @@ expected int [addressable] [assigned] num_kcontrols @@ got restricted __le32 [usertype] num_kcontrols @@
sound/soc/soc-topology.c:1564:40: sparse: expected int [addressable] [assigned] num_kcontrols
sound/soc/soc-topology.c:1564:40: sparse: got restricted __le32 [usertype] num_kcontrols
sound/soc/soc-topology.c:1579:40: sparse: sparse: incorrect type in assignment (different base types) @@ expected int [addressable] [assigned] num_kcontrols @@ got restricted __le32 [usertype] num_kcontrols @@
sound/soc/soc-topology.c:1579:40: sparse: expected int [addressable] [assigned] num_kcontrols
sound/soc/soc-topology.c:1579:40: sparse: got restricted __le32 [usertype] num_kcontrols
sound/soc/soc-topology.c:1590:40: sparse: sparse: incorrect type in assignment (different base types) @@ expected int [addressable] [assigned] num_kcontrols @@ got restricted __le32 [usertype] num_kcontrols @@
sound/soc/soc-topology.c:1590:40: sparse: expected int [addressable] [assigned] num_kcontrols
sound/soc/soc-topology.c:1590:40: sparse: got restricted __le32 [usertype] num_kcontrols
sound/soc/soc-topology.c:1556:33: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1556:33: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1556:33: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1556:33: sparse: sparse: restricted __le32 degrades to integer
sound/soc/soc-topology.c:1556:33: sparse: sparse: too many warnings
sound/soc/soc-topology.c: In function 'soc_tplg_denum_create':
sound/soc/soc-topology.c:1045:7: warning: this statement may fall through [-Wimplicit-fallthrough=]
if (err < 0) {
^
sound/soc/soc-topology.c:1053:3: note: here
case SND_SOC_TPLG_CTL_ENUM:
^~~~
sound/soc/soc-topology.c: In function 'soc_tplg_dapm_widget_denum_create':
sound/soc/soc-topology.c:1362:7: warning: this statement may fall through [-Wimplicit-fallthrough=]
if (err < 0) {
^
sound/soc/soc-topology.c:1368:3: note: here
case SND_SOC_TPLG_CTL_ENUM:
^~~~
vim +1138 sound/soc/soc-topology.c
8a9782346dccd8 Liam Girdwood 2015-05-29 987
8a9782346dccd8 Liam Girdwood 2015-05-29 988 static int soc_tplg_denum_create(struct soc_tplg *tplg, unsigned int count,
8a9782346dccd8 Liam Girdwood 2015-05-29 989 size_t size)
8a9782346dccd8 Liam Girdwood 2015-05-29 990 {
8a9782346dccd8 Liam Girdwood 2015-05-29 991 struct snd_soc_tplg_enum_control *ec;
8a9782346dccd8 Liam Girdwood 2015-05-29 992 struct soc_enum *se;
8a9782346dccd8 Liam Girdwood 2015-05-29 993 struct snd_kcontrol_new kc;
8a9782346dccd8 Liam Girdwood 2015-05-29 994 int i, ret, err;
8a9782346dccd8 Liam Girdwood 2015-05-29 995
8a9782346dccd8 Liam Girdwood 2015-05-29 996 if (soc_tplg_check_elem_count(tplg,
8a9782346dccd8 Liam Girdwood 2015-05-29 997 sizeof(struct snd_soc_tplg_enum_control),
8a9782346dccd8 Liam Girdwood 2015-05-29 998 count, size, "enums")) {
8a9782346dccd8 Liam Girdwood 2015-05-29 999
8a9782346dccd8 Liam Girdwood 2015-05-29 1000 dev_err(tplg->dev, "ASoC: invalid count %d for enum controls\n",
8a9782346dccd8 Liam Girdwood 2015-05-29 1001 count);
8a9782346dccd8 Liam Girdwood 2015-05-29 1002 return -EINVAL;
8a9782346dccd8 Liam Girdwood 2015-05-29 1003 }
8a9782346dccd8 Liam Girdwood 2015-05-29 1004
8a9782346dccd8 Liam Girdwood 2015-05-29 1005 for (i = 0; i < count; i++) {
8a9782346dccd8 Liam Girdwood 2015-05-29 1006 ec = (struct snd_soc_tplg_enum_control *)tplg->pos;
8a9782346dccd8 Liam Girdwood 2015-05-29 1007 tplg->pos += (sizeof(struct snd_soc_tplg_enum_control) +
8a9782346dccd8 Liam Girdwood 2015-05-29 1008 ec->priv.size);
8a9782346dccd8 Liam Girdwood 2015-05-29 1009
8a9782346dccd8 Liam Girdwood 2015-05-29 1010 /* validate kcontrol */
8a9782346dccd8 Liam Girdwood 2015-05-29 1011 if (strnlen(ec->hdr.name, SNDRV_CTL_ELEM_ID_NAME_MAXLEN) ==
8a9782346dccd8 Liam Girdwood 2015-05-29 1012 SNDRV_CTL_ELEM_ID_NAME_MAXLEN)
8a9782346dccd8 Liam Girdwood 2015-05-29 1013 return -EINVAL;
8a9782346dccd8 Liam Girdwood 2015-05-29 1014
8a9782346dccd8 Liam Girdwood 2015-05-29 1015 se = kzalloc((sizeof(*se)), GFP_KERNEL);
8a9782346dccd8 Liam Girdwood 2015-05-29 1016 if (se == NULL)
8a9782346dccd8 Liam Girdwood 2015-05-29 1017 return -ENOMEM;
8a9782346dccd8 Liam Girdwood 2015-05-29 1018
8a9782346dccd8 Liam Girdwood 2015-05-29 1019 dev_dbg(tplg->dev, "ASoC: adding enum kcontrol %s size %d\n",
8a9782346dccd8 Liam Girdwood 2015-05-29 1020 ec->hdr.name, ec->items);
8a9782346dccd8 Liam Girdwood 2015-05-29 1021
8a9782346dccd8 Liam Girdwood 2015-05-29 1022 memset(&kc, 0, sizeof(kc));
8a9782346dccd8 Liam Girdwood 2015-05-29 1023 kc.name = ec->hdr.name;
8a9782346dccd8 Liam Girdwood 2015-05-29 1024 kc.private_value = (long)se;
8a9782346dccd8 Liam Girdwood 2015-05-29 1025 kc.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
8a9782346dccd8 Liam Girdwood 2015-05-29 1026 kc.access = ec->hdr.access;
8a9782346dccd8 Liam Girdwood 2015-05-29 1027
8a9782346dccd8 Liam Girdwood 2015-05-29 1028 se->reg = tplc_chan_get_reg(tplg, ec->channel, SNDRV_CHMAP_FL);
8a9782346dccd8 Liam Girdwood 2015-05-29 1029 se->shift_l = tplc_chan_get_shift(tplg, ec->channel,
8a9782346dccd8 Liam Girdwood 2015-05-29 1030 SNDRV_CHMAP_FL);
8a9782346dccd8 Liam Girdwood 2015-05-29 1031 se->shift_r = tplc_chan_get_shift(tplg, ec->channel,
8a9782346dccd8 Liam Girdwood 2015-05-29 1032 SNDRV_CHMAP_FL);
8a9782346dccd8 Liam Girdwood 2015-05-29 1033
8a9782346dccd8 Liam Girdwood 2015-05-29 1034 se->items = ec->items;
8a9782346dccd8 Liam Girdwood 2015-05-29 1035 se->mask = ec->mask;
8a9782346dccd8 Liam Girdwood 2015-05-29 1036 se->dobj.index = tplg->index;
8a9782346dccd8 Liam Girdwood 2015-05-29 1037 se->dobj.type = SND_SOC_DOBJ_ENUM;
8a9782346dccd8 Liam Girdwood 2015-05-29 1038 se->dobj.ops = tplg->ops;
8a9782346dccd8 Liam Girdwood 2015-05-29 1039 INIT_LIST_HEAD(&se->dobj.list);
8a9782346dccd8 Liam Girdwood 2015-05-29 1040
8a9782346dccd8 Liam Girdwood 2015-05-29 @1041 switch (ec->hdr.ops.info) {
8a9782346dccd8 Liam Girdwood 2015-05-29 1042 case SND_SOC_TPLG_DAPM_CTL_ENUM_VALUE:
8a9782346dccd8 Liam Girdwood 2015-05-29 1043 case SND_SOC_TPLG_CTL_ENUM_VALUE:
8a9782346dccd8 Liam Girdwood 2015-05-29 1044 err = soc_tplg_denum_create_values(se, ec);
8a9782346dccd8 Liam Girdwood 2015-05-29 1045 if (err < 0) {
8a9782346dccd8 Liam Girdwood 2015-05-29 1046 dev_err(tplg->dev,
8a9782346dccd8 Liam Girdwood 2015-05-29 1047 "ASoC: could not create values for %s\n",
8a9782346dccd8 Liam Girdwood 2015-05-29 1048 ec->hdr.name);
8a9782346dccd8 Liam Girdwood 2015-05-29 1049 kfree(se);
8a9782346dccd8 Liam Girdwood 2015-05-29 1050 continue;
8a9782346dccd8 Liam Girdwood 2015-05-29 1051 }
8a9782346dccd8 Liam Girdwood 2015-05-29 1052 /* fall through and create texts */
8a9782346dccd8 Liam Girdwood 2015-05-29 1053 case SND_SOC_TPLG_CTL_ENUM:
8a9782346dccd8 Liam Girdwood 2015-05-29 1054 case SND_SOC_TPLG_DAPM_CTL_ENUM_DOUBLE:
8a9782346dccd8 Liam Girdwood 2015-05-29 1055 case SND_SOC_TPLG_DAPM_CTL_ENUM_VIRT:
8a9782346dccd8 Liam Girdwood 2015-05-29 1056 err = soc_tplg_denum_create_texts(se, ec);
8a9782346dccd8 Liam Girdwood 2015-05-29 1057 if (err < 0) {
8a9782346dccd8 Liam Girdwood 2015-05-29 1058 dev_err(tplg->dev,
8a9782346dccd8 Liam Girdwood 2015-05-29 1059 "ASoC: could not create texts for %s\n",
8a9782346dccd8 Liam Girdwood 2015-05-29 1060 ec->hdr.name);
8a9782346dccd8 Liam Girdwood 2015-05-29 1061 kfree(se);
8a9782346dccd8 Liam Girdwood 2015-05-29 1062 continue;
8a9782346dccd8 Liam Girdwood 2015-05-29 1063 }
8a9782346dccd8 Liam Girdwood 2015-05-29 1064 break;
8a9782346dccd8 Liam Girdwood 2015-05-29 1065 default:
8a9782346dccd8 Liam Girdwood 2015-05-29 1066 dev_err(tplg->dev,
8a9782346dccd8 Liam Girdwood 2015-05-29 1067 "ASoC: invalid enum control type %d for %s\n",
8a9782346dccd8 Liam Girdwood 2015-05-29 1068 ec->hdr.ops.info, ec->hdr.name);
8a9782346dccd8 Liam Girdwood 2015-05-29 1069 kfree(se);
8a9782346dccd8 Liam Girdwood 2015-05-29 1070 continue;
8a9782346dccd8 Liam Girdwood 2015-05-29 1071 }
8a9782346dccd8 Liam Girdwood 2015-05-29 1072
8a9782346dccd8 Liam Girdwood 2015-05-29 1073 /* map io handlers */
2b5cdb9156f761 Mengdong Lin 2015-08-18 1074 err = soc_tplg_kcontrol_bind_io(&ec->hdr, &kc, tplg);
8a9782346dccd8 Liam Girdwood 2015-05-29 1075 if (err) {
8a9782346dccd8 Liam Girdwood 2015-05-29 1076 soc_control_err(tplg, &ec->hdr, ec->hdr.name);
8a9782346dccd8 Liam Girdwood 2015-05-29 1077 kfree(se);
8a9782346dccd8 Liam Girdwood 2015-05-29 1078 continue;
8a9782346dccd8 Liam Girdwood 2015-05-29 1079 }
8a9782346dccd8 Liam Girdwood 2015-05-29 1080
8a9782346dccd8 Liam Girdwood 2015-05-29 1081 /* pass control to driver for optional further init */
8a9782346dccd8 Liam Girdwood 2015-05-29 1082 err = soc_tplg_init_kcontrol(tplg, &kc,
8a9782346dccd8 Liam Girdwood 2015-05-29 1083 (struct snd_soc_tplg_ctl_hdr *) ec);
8a9782346dccd8 Liam Girdwood 2015-05-29 1084 if (err < 0) {
8a9782346dccd8 Liam Girdwood 2015-05-29 1085 dev_err(tplg->dev, "ASoC: failed to init %s\n",
8a9782346dccd8 Liam Girdwood 2015-05-29 1086 ec->hdr.name);
8a9782346dccd8 Liam Girdwood 2015-05-29 1087 kfree(se);
8a9782346dccd8 Liam Girdwood 2015-05-29 1088 continue;
8a9782346dccd8 Liam Girdwood 2015-05-29 1089 }
8a9782346dccd8 Liam Girdwood 2015-05-29 1090
8a9782346dccd8 Liam Girdwood 2015-05-29 1091 /* register control here */
8a9782346dccd8 Liam Girdwood 2015-05-29 1092 ret = soc_tplg_add_kcontrol(tplg,
8a9782346dccd8 Liam Girdwood 2015-05-29 1093 &kc, &se->dobj.control.kcontrol);
8a9782346dccd8 Liam Girdwood 2015-05-29 1094 if (ret < 0) {
8a9782346dccd8 Liam Girdwood 2015-05-29 1095 dev_err(tplg->dev, "ASoC: could not add kcontrol %s\n",
8a9782346dccd8 Liam Girdwood 2015-05-29 1096 ec->hdr.name);
8a9782346dccd8 Liam Girdwood 2015-05-29 1097 kfree(se);
8a9782346dccd8 Liam Girdwood 2015-05-29 1098 continue;
8a9782346dccd8 Liam Girdwood 2015-05-29 1099 }
8a9782346dccd8 Liam Girdwood 2015-05-29 1100
8a9782346dccd8 Liam Girdwood 2015-05-29 1101 list_add(&se->dobj.list, &tplg->comp->dobj_list);
8a9782346dccd8 Liam Girdwood 2015-05-29 1102 }
8a9782346dccd8 Liam Girdwood 2015-05-29 1103
8a9782346dccd8 Liam Girdwood 2015-05-29 1104 return 0;
8a9782346dccd8 Liam Girdwood 2015-05-29 1105 }
8a9782346dccd8 Liam Girdwood 2015-05-29 1106
8a9782346dccd8 Liam Girdwood 2015-05-29 1107 static int soc_tplg_kcontrol_elems_load(struct soc_tplg *tplg,
8a9782346dccd8 Liam Girdwood 2015-05-29 1108 struct snd_soc_tplg_hdr *hdr)
8a9782346dccd8 Liam Girdwood 2015-05-29 1109 {
8a9782346dccd8 Liam Girdwood 2015-05-29 1110 struct snd_soc_tplg_ctl_hdr *control_hdr;
8a9782346dccd8 Liam Girdwood 2015-05-29 1111 int i;
8a9782346dccd8 Liam Girdwood 2015-05-29 1112
8a9782346dccd8 Liam Girdwood 2015-05-29 1113 if (tplg->pass != SOC_TPLG_PASS_MIXER) {
8a9782346dccd8 Liam Girdwood 2015-05-29 1114 tplg->pos += hdr->size + hdr->payload_size;
8a9782346dccd8 Liam Girdwood 2015-05-29 1115 return 0;
8a9782346dccd8 Liam Girdwood 2015-05-29 1116 }
8a9782346dccd8 Liam Girdwood 2015-05-29 1117
8a9782346dccd8 Liam Girdwood 2015-05-29 1118 dev_dbg(tplg->dev, "ASoC: adding %d kcontrols at 0x%lx\n", hdr->count,
8a9782346dccd8 Liam Girdwood 2015-05-29 1119 soc_tplg_get_offset(tplg));
8a9782346dccd8 Liam Girdwood 2015-05-29 1120
8a9782346dccd8 Liam Girdwood 2015-05-29 1121 for (i = 0; i < hdr->count; i++) {
8a9782346dccd8 Liam Girdwood 2015-05-29 1122
8a9782346dccd8 Liam Girdwood 2015-05-29 1123 control_hdr = (struct snd_soc_tplg_ctl_hdr *)tplg->pos;
8a9782346dccd8 Liam Girdwood 2015-05-29 1124
06eb49f72fa57f Mengdong Lin 2016-04-27 1125 if (control_hdr->size != sizeof(*control_hdr)) {
06eb49f72fa57f Mengdong Lin 2016-04-27 1126 dev_err(tplg->dev, "ASoC: invalid control size\n");
06eb49f72fa57f Mengdong Lin 2016-04-27 1127 return -EINVAL;
06eb49f72fa57f Mengdong Lin 2016-04-27 1128 }
06eb49f72fa57f Mengdong Lin 2016-04-27 1129
8a9782346dccd8 Liam Girdwood 2015-05-29 @1130 switch (control_hdr->ops.info) {
8a9782346dccd8 Liam Girdwood 2015-05-29 1131 case SND_SOC_TPLG_CTL_VOLSW:
8a9782346dccd8 Liam Girdwood 2015-05-29 1132 case SND_SOC_TPLG_CTL_STROBE:
8a9782346dccd8 Liam Girdwood 2015-05-29 1133 case SND_SOC_TPLG_CTL_VOLSW_SX:
8a9782346dccd8 Liam Girdwood 2015-05-29 1134 case SND_SOC_TPLG_CTL_VOLSW_XR_SX:
8a9782346dccd8 Liam Girdwood 2015-05-29 1135 case SND_SOC_TPLG_CTL_RANGE:
8a9782346dccd8 Liam Girdwood 2015-05-29 1136 case SND_SOC_TPLG_DAPM_CTL_VOLSW:
8a9782346dccd8 Liam Girdwood 2015-05-29 1137 case SND_SOC_TPLG_DAPM_CTL_PIN:
8a9782346dccd8 Liam Girdwood 2015-05-29 @1138 soc_tplg_dmixer_create(tplg, 1, hdr->payload_size);
8a9782346dccd8 Liam Girdwood 2015-05-29 1139 break;
8a9782346dccd8 Liam Girdwood 2015-05-29 1140 case SND_SOC_TPLG_CTL_ENUM:
8a9782346dccd8 Liam Girdwood 2015-05-29 1141 case SND_SOC_TPLG_CTL_ENUM_VALUE:
8a9782346dccd8 Liam Girdwood 2015-05-29 1142 case SND_SOC_TPLG_DAPM_CTL_ENUM_DOUBLE:
8a9782346dccd8 Liam Girdwood 2015-05-29 1143 case SND_SOC_TPLG_DAPM_CTL_ENUM_VIRT:
8a9782346dccd8 Liam Girdwood 2015-05-29 1144 case SND_SOC_TPLG_DAPM_CTL_ENUM_VALUE:
8a9782346dccd8 Liam Girdwood 2015-05-29 1145 soc_tplg_denum_create(tplg, 1, hdr->payload_size);
8a9782346dccd8 Liam Girdwood 2015-05-29 1146 break;
8a9782346dccd8 Liam Girdwood 2015-05-29 1147 case SND_SOC_TPLG_CTL_BYTES:
8a9782346dccd8 Liam Girdwood 2015-05-29 1148 soc_tplg_dbytes_create(tplg, 1, hdr->payload_size);
8a9782346dccd8 Liam Girdwood 2015-05-29 1149 break;
8a9782346dccd8 Liam Girdwood 2015-05-29 1150 default:
8a9782346dccd8 Liam Girdwood 2015-05-29 1151 soc_bind_err(tplg, control_hdr, i);
8a9782346dccd8 Liam Girdwood 2015-05-29 1152 return -EINVAL;
8a9782346dccd8 Liam Girdwood 2015-05-29 1153 }
8a9782346dccd8 Liam Girdwood 2015-05-29 1154 }
8a9782346dccd8 Liam Girdwood 2015-05-29 1155
8a9782346dccd8 Liam Girdwood 2015-05-29 1156 return 0;
8a9782346dccd8 Liam Girdwood 2015-05-29 1157 }
8a9782346dccd8 Liam Girdwood 2015-05-29 1158
cefcae315215e6 Liam Girdwood 2018-06-14 1159 /* optionally pass new dynamic kcontrol to component driver. */
cefcae315215e6 Liam Girdwood 2018-06-14 1160 static int soc_tplg_add_route(struct soc_tplg *tplg,
cefcae315215e6 Liam Girdwood 2018-06-14 1161 struct snd_soc_dapm_route *route)
cefcae315215e6 Liam Girdwood 2018-06-14 1162 {
cefcae315215e6 Liam Girdwood 2018-06-14 1163 if (tplg->comp && tplg->ops && tplg->ops->dapm_route_load)
cefcae315215e6 Liam Girdwood 2018-06-14 1164 return tplg->ops->dapm_route_load(tplg->comp, tplg->index,
cefcae315215e6 Liam Girdwood 2018-06-14 1165 route);
cefcae315215e6 Liam Girdwood 2018-06-14 1166
cefcae315215e6 Liam Girdwood 2018-06-14 1167 return 0;
cefcae315215e6 Liam Girdwood 2018-06-14 1168 }
cefcae315215e6 Liam Girdwood 2018-06-14 1169
8a9782346dccd8 Liam Girdwood 2015-05-29 1170 static int soc_tplg_dapm_graph_elems_load(struct soc_tplg *tplg,
8a9782346dccd8 Liam Girdwood 2015-05-29 1171 struct snd_soc_tplg_hdr *hdr)
8a9782346dccd8 Liam Girdwood 2015-05-29 1172 {
8a9782346dccd8 Liam Girdwood 2015-05-29 1173 struct snd_soc_dapm_context *dapm = &tplg->comp->dapm;
8a9782346dccd8 Liam Girdwood 2015-05-29 1174 struct snd_soc_dapm_route route;
8a9782346dccd8 Liam Girdwood 2015-05-29 1175 struct snd_soc_tplg_dapm_graph_elem *elem;
8a9782346dccd8 Liam Girdwood 2015-05-29 1176 int count = hdr->count, i;
8a9782346dccd8 Liam Girdwood 2015-05-29 1177
8a9782346dccd8 Liam Girdwood 2015-05-29 1178 if (tplg->pass != SOC_TPLG_PASS_GRAPH) {
8a9782346dccd8 Liam Girdwood 2015-05-29 1179 tplg->pos += hdr->size + hdr->payload_size;
8a9782346dccd8 Liam Girdwood 2015-05-29 1180 return 0;
8a9782346dccd8 Liam Girdwood 2015-05-29 1181 }
8a9782346dccd8 Liam Girdwood 2015-05-29 1182
8a9782346dccd8 Liam Girdwood 2015-05-29 1183 if (soc_tplg_check_elem_count(tplg,
8a9782346dccd8 Liam Girdwood 2015-05-29 1184 sizeof(struct snd_soc_tplg_dapm_graph_elem),
8a9782346dccd8 Liam Girdwood 2015-05-29 @1185 count, hdr->payload_size, "graph")) {
8a9782346dccd8 Liam Girdwood 2015-05-29 1186
8a9782346dccd8 Liam Girdwood 2015-05-29 1187 dev_err(tplg->dev, "ASoC: invalid count %d for DAPM routes\n",
8a9782346dccd8 Liam Girdwood 2015-05-29 1188 count);
8a9782346dccd8 Liam Girdwood 2015-05-29 1189 return -EINVAL;
8a9782346dccd8 Liam Girdwood 2015-05-29 1190 }
8a9782346dccd8 Liam Girdwood 2015-05-29 1191
b75a65118d287a Liam Girdwood 2017-06-29 1192 dev_dbg(tplg->dev, "ASoC: adding %d DAPM routes for index %d\n", count,
b75a65118d287a Liam Girdwood 2017-06-29 1193 hdr->index);
8a9782346dccd8 Liam Girdwood 2015-05-29 1194
8a9782346dccd8 Liam Girdwood 2015-05-29 1195 for (i = 0; i < count; i++) {
8a9782346dccd8 Liam Girdwood 2015-05-29 1196 elem = (struct snd_soc_tplg_dapm_graph_elem *)tplg->pos;
8a9782346dccd8 Liam Girdwood 2015-05-29 1197 tplg->pos += sizeof(struct snd_soc_tplg_dapm_graph_elem);
8a9782346dccd8 Liam Girdwood 2015-05-29 1198
8a9782346dccd8 Liam Girdwood 2015-05-29 1199 /* validate routes */
8a9782346dccd8 Liam Girdwood 2015-05-29 1200 if (strnlen(elem->source, SNDRV_CTL_ELEM_ID_NAME_MAXLEN) ==
8a9782346dccd8 Liam Girdwood 2015-05-29 1201 SNDRV_CTL_ELEM_ID_NAME_MAXLEN)
8a9782346dccd8 Liam Girdwood 2015-05-29 1202 return -EINVAL;
8a9782346dccd8 Liam Girdwood 2015-05-29 1203 if (strnlen(elem->sink, SNDRV_CTL_ELEM_ID_NAME_MAXLEN) ==
8a9782346dccd8 Liam Girdwood 2015-05-29 1204 SNDRV_CTL_ELEM_ID_NAME_MAXLEN)
8a9782346dccd8 Liam Girdwood 2015-05-29 1205 return -EINVAL;
8a9782346dccd8 Liam Girdwood 2015-05-29 1206 if (strnlen(elem->control, SNDRV_CTL_ELEM_ID_NAME_MAXLEN) ==
8a9782346dccd8 Liam Girdwood 2015-05-29 1207 SNDRV_CTL_ELEM_ID_NAME_MAXLEN)
8a9782346dccd8 Liam Girdwood 2015-05-29 1208 return -EINVAL;
8a9782346dccd8 Liam Girdwood 2015-05-29 1209
8a9782346dccd8 Liam Girdwood 2015-05-29 1210 route.source = elem->source;
8a9782346dccd8 Liam Girdwood 2015-05-29 1211 route.sink = elem->sink;
8a9782346dccd8 Liam Girdwood 2015-05-29 1212 route.connected = NULL; /* set to NULL atm for tplg users */
8a9782346dccd8 Liam Girdwood 2015-05-29 1213 if (strnlen(elem->control, SNDRV_CTL_ELEM_ID_NAME_MAXLEN) == 0)
8a9782346dccd8 Liam Girdwood 2015-05-29 1214 route.control = NULL;
8a9782346dccd8 Liam Girdwood 2015-05-29 1215 else
8a9782346dccd8 Liam Girdwood 2015-05-29 1216 route.control = elem->control;
8a9782346dccd8 Liam Girdwood 2015-05-29 1217
cefcae315215e6 Liam Girdwood 2018-06-14 1218 soc_tplg_add_route(tplg, &route);
cefcae315215e6 Liam Girdwood 2018-06-14 1219
8a9782346dccd8 Liam Girdwood 2015-05-29 1220 /* add route, but keep going if some fail */
8a9782346dccd8 Liam Girdwood 2015-05-29 1221 snd_soc_dapm_add_routes(dapm, &route, 1);
8a9782346dccd8 Liam Girdwood 2015-05-29 1222 }
8a9782346dccd8 Liam Girdwood 2015-05-29 1223
8a9782346dccd8 Liam Girdwood 2015-05-29 1224 return 0;
8a9782346dccd8 Liam Girdwood 2015-05-29 1225 }
8a9782346dccd8 Liam Girdwood 2015-05-29 1226
:::::: The code at line 1138 was first introduced by commit
:::::: 8a9782346dccd82cf912552735bda619de4efd8c ASoC: topology: Add topology core
:::::: TO: Liam Girdwood <liam.r.girdwood@linux.intel.com>
:::::: CC: Mark Brown <broonie@kernel.org>
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
next reply other threads:[~2023-07-29 18:59 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-29 18:58 kernel test robot [this message]
-- strict thread matches above, loose matches on Subject: below --
2023-07-06 2:08 [jsarha:topic/cros-sof-v4.14-rebase 3532/9999] sound/soc/soc-topology.c:1138:60: sparse: sparse: incorrect type in argument 3 (different base types) kernel test robot
2023-06-08 12:00 kernel test robot
2023-04-21 13:35 kernel test robot
2022-12-06 9:01 kernel test robot
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=202307300215.WjcSLtZq-lkp@intel.com \
--to=lkp@intel.com \
--cc=oe-kbuild@lists.linux.dev \
/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.