Respeaker V1 4 Microphone array -- Why no support for RP4?

I really need the Raspberry Pi 4 for my application, but my old respeaker does not install properly on the 4. Does anyone know generally what is incompatible so I can attempt to dive into the code and correct it? Does anyone know where I should start at least?

DKMS make.log for seeed-voicecard-0.3 for kernel 5.15.84-v8+ (aarch64)
Sun 05 Feb 2023 07:44:16 PM EST
make: Entering directory '/usr/src/linux-headers-5.15.84-v8+'
  CC [M]  /var/lib/dkms/seeed-voicecard/0.3/build/wm8960.o
  CC [M]  /var/lib/dkms/seeed-voicecard/0.3/build/ac108.o
  CC [M]  /var/lib/dkms/seeed-voicecard/0.3/build/ac101.o
  CC [M]  /var/lib/dkms/seeed-voicecard/0.3/build/seeed-voicecard.o
/var/lib/dkms/seeed-voicecard/0.3/build/seeed-voicecard.c: In function ‘seeed_voice_card_dai_link_of’:
/var/lib/dkms/seeed-voicecard/0.3/build/seeed-voicecard.c:463:8: error: implicit declaration of function ‘asoc_simple_parse_cpu’; did you mean ‘asoc_simple_parse_clk’? [-Werror=implicit-function-declaration]
  463 |  ret = asoc_simple_parse_cpu(cpu, dai_link, &single_cpu);
      |        ^~~~~~~~~~~~~~~~~~~~~
      |        asoc_simple_parse_clk
/var/lib/dkms/seeed-voicecard/0.3/build/seeed-voicecard.c:468:8: error: implicit declaration of function ‘asoc_simple_parse_codec’; did you mean ‘asoc_simple_parse_dai’? [-Werror=implicit-function-declaration]
  468 |  ret = asoc_simple_parse_codec(codec, dai_link);
      |        ^~~~~~~~~~~~~~~~~~~~~~~
      |        asoc_simple_parse_dai
/var/lib/dkms/seeed-voicecard/0.3/build/seeed-voicecard.c:480:8: error: implicit declaration of function ‘asoc_simple_parse_platform’; did you mean ‘asoc_simple_parse_daifmt’? [-Werror=implicit-function-declaration]
  480 |  ret = asoc_simple_parse_platform(plat, dai_link);
      |        ^~~~~~~~~~~~~~~~~~~~~~~~~~
      |        asoc_simple_parse_daifmt
/var/lib/dkms/seeed-voicecard/0.3/build/seeed-voicecard.c:505:8: error: implicit declaration of function ‘asoc_simple_parse_clk_cpu’; did you mean ‘asoc_simple_parse_clk’? [-Werror=implicit-function-declaration]
  505 |  ret = asoc_simple_parse_clk_cpu(dev, cpu, dai_link, cpu_dai);
      |        ^~~~~~~~~~~~~~~~~~~~~~~~~
      |        asoc_simple_parse_clk
/var/lib/dkms/seeed-voicecard/0.3/build/seeed-voicecard.c:513:8: error: implicit declaration of function ‘asoc_simple_parse_clk_codec’; did you mean ‘asoc_simple_parse_clk’? [-Werror=implicit-function-declaration]
  513 |  ret = asoc_simple_parse_clk_codec(dev, codec, dai_link, codec_dai);
      |        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
      |        asoc_simple_parse_clk
/var/lib/dkms/seeed-voicecard/0.3/build/seeed-voicecard.c:546:31: error: passing argument 1 of ‘asoc_simple_canonicalize_cpu’ from incompatible pointer type [-Werror=incompatible-pointer-types]
  546 |  asoc_simple_canonicalize_cpu(dai_link, single_cpu);
      |                               ^~~~~~~~
      |                               |
      |                               struct snd_soc_dai_link *
In file included from /var/lib/dkms/seeed-voicecard/0.3/build/seeed-voicecard.c:28:
./include/sound/simple_card_utils.h:158:70: note: expected ‘struct snd_soc_dai_link_component *’ but argument is of type ‘struct snd_soc_dai_link *’
  158 | void asoc_simple_canonicalize_cpu(struct snd_soc_dai_link_component *cpus,
      |                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
/var/lib/dkms/seeed-voicecard/0.3/build/seeed-voicecard.c:548:36: error: passing argument 1 of ‘asoc_simple_canonicalize_platform’ from incompatible pointer type [-Werror=incompatible-pointer-types]
  548 |  asoc_simple_canonicalize_platform(dai_link);
      |                                    ^~~~~~~~
      |                                    |
      |                                    struct snd_soc_dai_link *
In file included from /var/lib/dkms/seeed-voicecard/0.3/build/seeed-voicecard.c:28:
./include/sound/simple_card_utils.h:156:75: note: expected ‘struct snd_soc_dai_link_component *’ but argument is of type ‘struct snd_soc_dai_link *’
  156 | void asoc_simple_canonicalize_platform(struct snd_soc_dai_link_component *platforms,
      |                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~
/var/lib/dkms/seeed-voicecard/0.3/build/seeed-voicecard.c:548:2: error: too few arguments to function ‘asoc_simple_canonicalize_platform’
  548 |  asoc_simple_canonicalize_platform(dai_link);
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /var/lib/dkms/seeed-voicecard/0.3/build/seeed-voicecard.c:28:
./include/sound/simple_card_utils.h:156:6: note: declared here
  156 | void asoc_simple_canonicalize_platform(struct snd_soc_dai_link_component *platforms,
      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
At top level:
/var/lib/dkms/seeed-voicecard/0.3/build/seeed-voicecard.c:263:12: warning: ‘asoc_simple_parse_dai’ defined but not used [-Wunused-function]
  263 | static int asoc_simple_parse_dai(struct device_node *node,
      |            ^~~~~~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
make[1]: *** [scripts/Makefile.build:289: /var/lib/dkms/seeed-voicecard/0.3/build/seeed-voicecard.o] Error 1
make[1]: *** Waiting for unfinished jobs....
/var/lib/dkms/seeed-voicecard/0.3/build/ac108.c:1148:3: error: ‘const struct snd_soc_dai_ops’ has no member named ‘digital_mute’
 1148 |  .digital_mute = ac108_aif_mute,
      |   ^~~~~~~~~~~~
/var/lib/dkms/seeed-voicecard/0.3/build/ac108.c:1148:18: error: initialization of ‘int (*)(struct snd_pcm_substream *, int,  struct snd_soc_dai *)’ from incompatible pointer type ‘int (*)(struct snd_soc_dai *, int)’ [-Werror=incompatible-pointer-types]
 1148 |  .digital_mute = ac108_aif_mute,
      |                  ^~~~~~~~~~~~~~
/var/lib/dkms/seeed-voicecard/0.3/build/ac108.c:1148:18: note: (near initialization for ‘ac108_dai_ops.bespoke_trigger’)
In file included from /var/lib/dkms/seeed-voicecard/0.3/build/wm8960.c:28:
/var/lib/dkms/seeed-voicecard/0.3/build/wm8960.c: In function ‘wm8960_configure_clocking’:
/var/lib/dkms/seeed-voicecard/0.3/build/sound-compatible-4.18.h:34:36: error: implicit declaration of function ‘snd_soc_component_read32’; did you mean ‘snd_soc_component_read’? [-Werror=implicit-function-declaration]
   34 | #define snd_soc_read               snd_soc_component_read32
      |                                    ^~~~~~~~~~~~~~~~~~~~~~~~
/var/lib/dkms/seeed-voicecard/0.3/build/wm8960.c:619:15: note: in expansion of macro ‘snd_soc_read’
  619 |  u16 iface1 = snd_soc_read(codec, WM8960_IFACE1);
      |               ^~~~~~~~~~~~
/var/lib/dkms/seeed-voicecard/0.3/build/wm8960.c: At top level:
/var/lib/dkms/seeed-voicecard/0.3/build/wm8960.c:1239:3: error: ‘const struct snd_soc_dai_ops’ has no member named ‘digital_mute’
 1239 |  .digital_mute = wm8960_mute,
      |   ^~~~~~~~~~~~
/var/lib/dkms/seeed-voicecard/0.3/build/wm8960.c:1239:18: error: initialization of ‘int (*)(struct snd_pcm_substream *, struct snd_soc_dai *)’ from incompatible pointer type ‘int (*)(struct snd_soc_dai *, int)’ [-Werror=incompatible-pointer-types]
 1239 |  .digital_mute = wm8960_mute,
      |                  ^~~~~~~~~~~
/var/lib/dkms/seeed-voicecard/0.3/build/wm8960.c:1239:18: note: (near initialization for ‘wm8960_dai_ops.prepare’)
cc1: some warnings being treated as errors
make[1]: *** [scripts/Makefile.build:289: /var/lib/dkms/seeed-voicecard/0.3/build/ac108.o] Error 1
cc1: some warnings being treated as errors
make[1]: *** [scripts/Makefile.build:289: /var/lib/dkms/seeed-voicecard/0.3/build/wm8960.o] Error 1
make: *** [Makefile:1902: /var/lib/dkms/seeed-voicecard/0.3/build] Error 2
make: Leaving directory '/usr/src/linux-headers-5.15.84-v8+'
1 Like

Hi, looking at the message you pasted, did the driver build fail to report an error?

I did a clean install just to make sure I was getting the same issue. I am using a Raspberry Pi 4B with 64 bit Raspbian.

Firstly, I had to install dkms because ./install.sh said it didn’t exist. After, here’s what the output of ./install.sh was:

resonant@raspberrypi:~/seeed-voicecard $ sudo ./install.sh
Hit:1 http://security.debian.org/debian-security bullseye-security InRelease
Hit:2 http://deb.debian.org/debian bullseye InRelease                          
Hit:3 http://deb.debian.org/debian bullseye-updates InRelease                  
Hit:4 http://archive.raspberrypi.org/debian bullseye InRelease                
Reading package lists... Done                              
Building dependency tree... Done
Reading state information... Done
All packages are up to date.
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
raspberrypi-kernel is already the newest version (1:1.20230106-1).
raspberrypi-kernel-headers is already the newest version (1:1.20230106-1).
The following package was automatically installed and is no longer required:
  libfuse2
Use 'sudo apt autoremove' to remove it.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package linux-raspi
E: Unable to locate package linux-headers-raspi
E: Unable to locate package linux-image-raspi
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
libasound2-plugins is already the newest version (1.2.2-2).
dkms is already the newest version (2.8.4-3).
i2c-tools is already the newest version (4.2-1+b1).
git is already the newest version (1:2.30.2-1+deb11u1).
The following package was automatically installed and is no longer required:
  libfuse2
Use 'sudo apt autoremove' to remove it.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
grep: /boot/kernel.img: No such file or directory

gzip: stdin: unexpected end of file
grep: /boot/kernel.img: No such file or directory

gzip: stdin: unexpected end of file

------------------------------
Deleting module version: 0.3
completely from the DKMS tree.
------------------------------
Done.

Creating symlink /var/lib/dkms/seeed-voicecard/0.3/source ->
                 /usr/src/seeed-voicecard-0.3

DKMS: add completed.

Kernel preparation unnecessary for this kernel.  Skipping...
applying patch back-to-v5.8.diff...patching file ac108.c
patching file sound-compatible-4.18.h
patching file wm8960.c


Building module:
cleaning build area...
make -j4 KERNELRELEASE=5.15.84-v8+ -C /lib/modules/5.15.84-v8+/build M=/var/lib/dkms/seeed-voicecard/0.3/build....(bad exit status: 2)
Error! Bad return status for module build on kernel: 5.15.84-v8+ (aarch64)
Consult /var/lib/dkms/seeed-voicecard/0.3/build/make.log for more information.
**git init**
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint: git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint: git branch -m <name>
Initialized empty Git repository in /etc/voicecard/.git/
git add --all
git commit -m "origin configures"
[master (root-commit) e372d90] origin configures
 7 files changed, 1482 insertions(+)
 create mode 100644 ac108_6mic.state
 create mode 100644 ac108_asound.state
 create mode 100644 asound_2mic.conf
 create mode 100644 asound_4mic.conf
 create mode 100644 asound_6mic.conf
 create mode 100644 dkms.conf
 create mode 100644 wm8960_asound.state
------------------------------------------------------
Please reboot your raspberry pi to apply all settings
Enjoy!
------------------------------------------------------

It looked like there were several issue.

  1. It couldn’t locate package linux-raspi, linux-header-raspi, linux-image-raspi
  2. Grep couldn’t locate /boot/kernel.img and there was a gzip EOF
  3. The kernel appears to have failed to build. It says to look at /var/lib/dkms/seeed-voicecard/0.3/build/make.log

After I manually installed dkms, the make log changed:
make.log

DKMS make.log for seeed-voicecard-0.3 for kernel 5.15.84-v8+ (aarch64)
Tue 07 Feb 2023 09:35:04 AM EST
make: Entering directory '/usr/src/linux-headers-5.15.84-v8+'
  CC [M]  /var/lib/dkms/seeed-voicecard/0.3/build/wm8960.o
  CC [M]  /var/lib/dkms/seeed-voicecard/0.3/build/ac108.o
  CC [M]  /var/lib/dkms/seeed-voicecard/0.3/build/ac101.o
  CC [M]  /var/lib/dkms/seeed-voicecard/0.3/build/seeed-voicecard.o
/var/lib/dkms/seeed-voicecard/0.3/build/ac108.c:1148:3: error: ‘const struct snd_soc_dai_ops’ has no member named ‘digital_mute’
 1148 |  .digital_mute = ac108_aif_mute,
      |   ^~~~~~~~~~~~
/var/lib/dkms/seeed-voicecard/0.3/build/ac108.c:1148:18: error: initialization of ‘int (*)(struct snd_pcm_substream *, int,  struct snd_soc_dai *)’ from incompatible pointer type ‘int (*)(struct snd_soc_dai *, int)’ [-Werror=incompatible-pointer-types]
 1148 |  .digital_mute = ac108_aif_mute,
      |                  ^~~~~~~~~~~~~~
/var/lib/dkms/seeed-voicecard/0.3/build/ac108.c:1148:18: note: (near initialization for ‘ac108_dai_ops.bespoke_trigger’)
In file included from /var/lib/dkms/seeed-voicecard/0.3/build/wm8960.c:28:
/var/lib/dkms/seeed-voicecard/0.3/build/wm8960.c: In function ‘wm8960_configure_clocking’:
/var/lib/dkms/seeed-voicecard/0.3/build/sound-compatible-4.18.h:34:36: error: implicit declaration of function ‘snd_soc_component_read32’; did you mean ‘snd_soc_component_read’? [-Werror=implicit-function-declaration]
   34 | #define snd_soc_read               snd_soc_component_read32
      |                                    ^~~~~~~~~~~~~~~~~~~~~~~~
/var/lib/dkms/seeed-voicecard/0.3/build/wm8960.c:619:15: note: in expansion of macro ‘snd_soc_read’
  619 |  u16 iface1 = snd_soc_read(codec, WM8960_IFACE1);
      |               ^~~~~~~~~~~~
/var/lib/dkms/seeed-voicecard/0.3/build/wm8960.c: At top level:
/var/lib/dkms/seeed-voicecard/0.3/build/wm8960.c:1239:3: error: ‘const struct snd_soc_dai_ops’ has no member named ‘digital_mute’
 1239 |  .digital_mute = wm8960_mute,
      |   ^~~~~~~~~~~~
/var/lib/dkms/seeed-voicecard/0.3/build/wm8960.c:1239:18: error: initialization of ‘int (*)(struct snd_pcm_substream *, struct snd_soc_dai *)’ from incompatible pointer type ‘int (*)(struct snd_soc_dai *, int)’ [-Werror=incompatible-pointer-types]
 1239 |  .digital_mute = wm8960_mute,
      |                  ^~~~~~~~~~~
/var/lib/dkms/seeed-voicecard/0.3/build/wm8960.c:1239:18: note: (near initialization for ‘wm8960_dai_ops.prepare’)
cc1: some warnings being treated as errors
make[1]: *** [scripts/Makefile.build:289: /var/lib/dkms/seeed-voicecard/0.3/build/ac108.o] Error 1
make[1]: *** Waiting for unfinished jobs....
cc1: some warnings being treated as errors
make[1]: *** [scripts/Makefile.build:289: /var/lib/dkms/seeed-voicecard/0.3/build/wm8960.o] Error 1
make: *** [Makefile:1902: /var/lib/dkms/seeed-voicecard/0.3/build] Error 2
make: Leaving directory '/usr/src/linux-headers-5.15.84-v8+'

I’ll test it and let you know the results as soon as I have them

1 Like

Have you had any luck?

Did you end up solving your issue?

Sorry Kalin… but I solved it because I notice that I’m st*pid… :slight_smile:

…I have my respeaker not fully pressed in the GPIO ports and that was the reason of not appearing anything about seeed voicecard when launching a ‘arecord -L’.

After pressing and rebooting it appears.

If you find something usefull about my ending config, I can tell you that what I installed has been:

raspbian buster. Exactly this version: 2022-09-22-raspios-buster-armhf.img.xz
This command shows the kernel I’m working on then…
# uname -r
5.10.103-v7l+

then:

  # sudo apt-get update
  # sudo apt-get upgrade
  # sudo reboot

(entening as user ‘pi’)

  # git clone https://github.com/respeaker/seeed-voicecard
  # cd seeed-voicecard
  # sudo ./install.sh

…no errors in all the .log. (apart from three ‘Unable to locate package’ which are not important)… everything compilled installed and after a reboot):

# arecord -L
(many lines with the new: seeed-2mic-voicecard, bcm2835-i2s-wm8960-hifi wm8960-hifi-0)

Thats on a raspberry pi 4 (2gb) on buster. Hope it helps you.

how did you manually install dkms?, Actually I am getting same error and unable to detect device when using “arecord -l”

“Error! Bad return status for module build on kernel: 5.15.84+”
I am using Raspberry Pi 4, and ReSpeaker 6-Mic Circular Array

I think it was as simple as sudo apt install dkms. Not entirely sure since this was a few weeks ago. Unfortunately I have not had any lucky resolving this issue. I was hoping @nengyu would have given some suggestions by now.

Got It, Thanks though

I was looking through the rest of the respeaker forum. People have had this issue for years. I’m doubtful this will ever get fixed. I wish there were other microphone arrays available… Respeaker seems to be the only seller. I had luck using a Pi 3 though a few years ago.

Found the solution,
What’s your raspberry pi os version?