Impossibilité de compiler le pilote wm8960 suite MàJ de l'OS
#1
Bug 
Bonjour tout le monde,

Suite à la mise à jour de l'OS ce jour, il m'est impossible de compiler le pilote wm8960.

La mise à jour a installé pas mal de paquets (voir fichier joint).

Ensuite comme d'habitude, redémarrage puis recompilation des différents pilotes.

Pour cr14 et tagtagtag-ears aucune erreur.

Par contre pour wm8960 ce n'est pas la même histoire.
Code :
pi@nabaztag:~/wm8960 $ git pull
Already up to date.
pi@nabaztag:~/wm8960 $ make clean
make -C /lib/modules/5.10.11+/build M=/home/pi/wm8960 clean
make[1]: Entering directory '/usr/src/linux-headers-5.10.11+'
  CLEAN  /home/pi/wm8960
  CLEAN  /home/pi/wm8960/Module.symvers
make[1]: Leaving directory '/usr/src/linux-headers-5.10.11+'
rm -f tagtagtag-mixerd tagtagtag-mixerd-test
pi@nabaztag:~/wm8960 $ make
cc -Wall -Werror -lasound -lpthread tagtagtag-mixerd.c -o tagtagtag-mixerd
make -C /lib/modules/5.10.11+/build M=/home/pi/wm8960 modules
make[1]: Entering directory '/usr/src/linux-headers-5.10.11+'
scripts/Makefile.lib:8: 'always' is deprecated. Please use 'always-y' instead
  CC [M]  /home/pi/wm8960/wm8960.o
/home/pi/wm8960/wm8960.c: In function ‘wm8960_configure_clocking’:
/home/pi/wm8960/wm8960.c:745:15: error: implicit declaration of function ‘snd_soc_component_read32’; did you mean ‘snd_soc_component_read’? [-Werror=implicit-function-declaration]
  u16 iface1 = snd_soc_component_read32(component, WM8960_IFACE1);
              ^~~~~~~~~~~~~~~~~~~~~~~~
              snd_soc_component_read
/home/pi/wm8960/wm8960.c:745:6: warning: unused variable ‘iface1’ [-Wunused-variable]
  u16 iface1 = snd_soc_component_read32(component, WM8960_IFACE1);
      ^~~~~~
/home/pi/wm8960/wm8960.c: At top level:
/home/pi/wm8960/wm8960.c:1318:3: error: ‘const struct snd_soc_dai_ops’ has no member named ‘digital_mute’
  .digital_mute = wm8960_mute,
  ^~~~~~~~~~~~
/home/pi/wm8960/wm8960.c:1318: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]
  .digital_mute = wm8960_mute,
                  ^~~~~~~~~~~
/home/pi/wm8960/wm8960.c:1318:18: note: (near initialization for ‘wm8960_dai_ops.prepare’)
cc1: some warnings being treated as errors
make[2]: *** [scripts/Makefile.build:279: /home/pi/wm8960/wm8960.o] Error 1
make[1]: *** [Makefile:1808: /home/pi/wm8960] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-5.10.11+'
make: *** [Makefile:17: all] Error 2

Concernant
Code :
scripts/Makefile.lib:8: 'always' is deprecated. Please use 'always-y' instead

J'ai corrigé dans le fichier Makefile pour passer de 'always' à 'always-y' comme préconisé ce qui permet de ne plus avoir cette alerte.

Concernant 
Code :
/home/pi/wm8960/wm8960.c:745:15: error: implicit declaration of function ‘snd_soc_component_read32’; did you mean ‘snd_soc_component_read’? [-Werror=implicit-function-declaration]
  u16 iface1 = snd_soc_component_read32(component, WM8960_IFACE1);

J'ai tenté de corriger dans le fichier wm8960.c la fonction ‘snd_soc_component_read32’ en ‘snd_soc_component_read’ mais toujours des erreurs
Code :
pi@nabaztag:~/wm8960 $ make clean
make -C /lib/modules/5.10.11+/build M=/home/pi/wm8960 clean
make[1]: Entering directory '/usr/src/linux-headers-5.10.11+'
make[1]: Leaving directory '/usr/src/linux-headers-5.10.11+'
rm -f tagtagtag-mixerd tagtagtag-mixerd-test
pi@nabaztag:~/wm8960 $ make
cc -Wall -Werror -lasound -lpthread tagtagtag-mixerd.c -o tagtagtag-mixerd
make -C /lib/modules/5.10.11+/build M=/home/pi/wm8960 modules
make[1]: Entering directory '/usr/src/linux-headers-5.10.11+'
  CC [M]  /home/pi/wm8960/wm8960.o
/home/pi/wm8960/wm8960.c: In function ‘wm8960_configure_clocking’:
/home/pi/wm8960/wm8960.c:745:6: warning: unused variable ‘iface1’ [-Wunused-variable]
  u16 iface1 = snd_soc_component_read(component, WM8960_IFACE1);
      ^~~~~~
/home/pi/wm8960/wm8960.c: At top level:
/home/pi/wm8960/wm8960.c:1318:3: error: ‘const struct snd_soc_dai_ops’ has no member named ‘digital_mute’
  .digital_mute = wm8960_mute,
  ^~~~~~~~~~~~
/home/pi/wm8960/wm8960.c:1318: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]
  .digital_mute = wm8960_mute,
                  ^~~~~~~~~~~
/home/pi/wm8960/wm8960.c:1318:18: note: (near initialization for ‘wm8960_dai_ops.prepare’)
cc1: some warnings being treated as errors
make[2]: *** [scripts/Makefile.build:279: /home/pi/wm8960/wm8960.o] Error 1
make[1]: *** [Makefile:1808: /home/pi/wm8960] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-5.10.11+'
make: *** [Makefile:17: all] Error 2

Du coup le lapin est en PLS Angel

Quelqu'un aurait une idée pour corriger ce problème ?


Pièces jointes
.txt   Log_updateOS.txt (Taille : 93.84 Ko / Téléchargements : 3)
Répondre
#2
(02-20-2021, 07:46 PM)nicos6 a écrit : Quelqu'un aurait une idée pour corriger ce problème ?
J'ai proposé sur GitHub un patch pour rendre le driver wm8960 compatible avec le noyau 5.10.11+:
Patch for kernel 5.10.11+
Répondre
#3
Thumbs Up 
Bon j'avais un premier bon départ Smile 

Merci pour le patch, j'ai corrigé ce qu'il me manquait et cette fois ça passe, malgré encore une alerte qu'il ne me semblait pas avoir avant avec les kernels précédents concernant iface1
Code :
pi@nabaztag:~/wm8960 $ make clean
make -C /lib/modules/5.10.11+/build M=/home/pi/wm8960 clean
make[1]: Entering directory '/usr/src/linux-headers-5.10.11+'
make[1]: Leaving directory '/usr/src/linux-headers-5.10.11+'
rm -f tagtagtag-mixerd tagtagtag-mixerd-test
pi@nabaztag:~/wm8960 $ make
cc -Wall -Werror -lasound -lpthread tagtagtag-mixerd.c -o tagtagtag-mixerd
make -C /lib/modules/5.10.11+/build M=/home/pi/wm8960 modules
make[1]: Entering directory '/usr/src/linux-headers-5.10.11+'
  CC [M]  /home/pi/wm8960/wm8960.o
/home/pi/wm8960/wm8960.c: In function ‘wm8960_configure_clocking’:
/home/pi/wm8960/wm8960.c:745:6: warning: unused variable ‘iface1’ [-Wunused-variable]
  u16 iface1 = snd_soc_component_read(component, WM8960_IFACE1);
      ^~~~~~
  LD [M]  /home/pi/wm8960/snd-soc-wm8960.o
  CC [M]  /home/pi/wm8960/max9759.o
  LD [M]  /home/pi/wm8960/snd-soc-max9759.o
  CC [M]  /home/pi/wm8960/volume-gpio.o
  LD [M]  /home/pi/wm8960/snd-soc-volume-gpio.o
  DTCO    /home/pi/wm8960/tagtagtag-sound.dtbo
  MODPOST /home/pi/wm8960/Module.symvers
  CC [M]  /home/pi/wm8960/snd-soc-max9759.mod.o
  LD [M]  /home/pi/wm8960/snd-soc-max9759.ko
  CC [M]  /home/pi/wm8960/snd-soc-volume-gpio.mod.o
  LD [M]  /home/pi/wm8960/snd-soc-volume-gpio.ko
  CC [M]  /home/pi/wm8960/snd-soc-wm8960.mod.o
  LD [M]  /home/pi/wm8960/snd-soc-wm8960.ko
make[1]: Leaving directory '/usr/src/linux-headers-5.10.11+'
pi@nabaztag:~/wm8960 $ sudo make install
install -o root -m 644 snd-soc-wm8960.ko /lib/modules/5.10.11+/kernel/sound/soc/codecs/
install -o root -m 644 snd-soc-max9759.ko /lib/modules/5.10.11+/kernel/sound/soc/codecs/
install -o root -m 644 snd-soc-volume-gpio.ko /lib/modules/5.10.11+/kernel/sound/soc/codecs/
depmod -a 5.10.11+
install -o root -m 644 tagtagtag-sound.dtbo /boot/overlays/
sed /boot/config.txt -i -e "s/^#dtparam=i2c_arm=on/dtparam=i2c_arm=on/"
grep -q -E "^dtparam=i2c_arm=on" /boot/config.txt || printf "dtparam=i2c_arm=on\n" >> /boot/config.txt
sed /boot/config.txt -i -e "s/^#dtoverlay=i2s-mmap/dtoverlay=i2s-mmap/"
grep -q -E "^dtoverlay=i2s-mmap" /boot/config.txt || printf "dtoverlay=i2s-mmap\n" >> /boot/config.txt
sed /boot/config.txt -i -e "s/^#dtparam=i2s=on/dtparam=i2s=on/"
grep -q -E "^dtparam=i2s=on" /boot/config.txt || printf "dtparam=i2s=on\n" >> /boot/config.txt
sed /boot/config.txt -i -e "s/^#dtoverlay=tagtagtag-sound/dtoverlay=tagtagtag-sound/"
grep -q -E "^dtoverlay=tagtagtag-sound" /boot/config.txt || printf "dtoverlay=tagtagtag-sound\n" >> /boot/config.txt
install -D -o root -m 644 mixer.conf.default /var/lib/tagtagtag-sound/mixer.conf.default
test -e /var/lib/tagtagtag-sound/mixer.conf || install -o root -m 644 mixer.conf.default /var/lib/tagtagtag-sound/mixer.conf
install -o root -m 755 tagtagtag-mixerd /usr/local/sbin/tagtagtag-mixerd
install -o root -m 644 tagtagtag-mixerd.service /lib/systemd/system/tagtagtag-mixerd.service
systemctl enable tagtagtag-mixerd

Le lapin est sorti de PLS Big Grin

Merci pour ton travail et ta réactivité !
Répondre
#4
(02-20-2021, 08:15 PM)nicos6 a écrit : Merci pour le patch, j'ai corrigé ce qu'il me manquait et cette fois ça passe, malgré encore une alerte qu'il ne me semblait pas avoir avant avec les kernels précédents concernant iface1
Non, cette variable non utilisée a toujours été là dans le driver.... ;-)
Répondre
#5
Oka, je n'y avais pas prêté attention comme tout se passait bien.

En tout cas merci encore et bonne soirée !
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)