I support a product that is running the 2.4.18 linux kernel, and was trying to install alsa-driver-1.0.15, and ran into a problem.
The alsa-kernel/pci/cs5535audio/cs5535audio_pm.c contains:
if (pci_save_state(pci)) { ...
and a similar line for pci_restore_state().
But, in include/adriver.h, pci_save_state is #defined to snd_pci_compat_save_state, which is declared to return void, so the compiler complains that the void return isn't being ignored.
Now, pci_save_state() appears to be supposed to return status, although in the 2.4 kernel at least, it returns a constant 0.
Nevertheless, to get things to work, I changed snd_pci_compat_save_state(), snd_pci_orig_save_state(), and the corresponding restore functions to return an int with the following patch. (The other obvious solution would be to remove the test in cs5535audio_pm.c, but pci_save_state() is *supposed* to return an int...)
-- Marcus Hall marcus@tuells.org
---------
Index: alsa-driver/acore/misc_driver.c =================================================================== RCS file: /usr/local/cvs_repos/almond/alsa/alsa-driver/acore/misc_driver.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- alsa-driver/acore/misc_driver.c 20 Jan 2008 16:52:35 -0000 1.1 +++ alsa-driver/acore/misc_driver.c 20 Jan 2008 17:14:23 -0000 1.2 @@ -105,14 +105,14 @@ #ifdef CONFIG_PCI #ifndef CONFIG_HAVE_NEW_PCI_SAVE_STATE #ifdef CONFIG_HAVE_PCI_SAVED_CONFIG -void snd_pci_compat_save_state(struct pci_dev *pci) +int snd_pci_compat_save_state(struct pci_dev *pci) { - snd_pci_orig_save_state(pci, pci->saved_config_space); + return snd_pci_orig_save_state(pci, pci->saved_config_space); } EXPORT_SYMBOL(snd_pci_compat_save_state); -void snd_pci_compat_restore_state(struct pci_dev *pci) +int snd_pci_compat_restore_state(struct pci_dev *pci) { - snd_pci_orig_restore_state(pci, pci->saved_config_space); + return snd_pci_orig_restore_state(pci, pci->saved_config_space); } EXPORT_SYMBOL(snd_pci_compat_restore_state); #else /* !CONFIG_HAVE_PCI_SAVED_CONFIG */ @@ -122,7 +122,7 @@ }; static struct saved_config_tbl saved_tbl[16];
-void snd_pci_compat_save_state(struct pci_dev *pci) +int snd_pci_compat_save_state(struct pci_dev *pci) { int i; /* FIXME: mutex needed for race? */ @@ -130,14 +130,15 @@ if (! saved_tbl[i].pci) { saved_tbl[i].pci = pci; snd_pci_orig_save_state(pci, saved_tbl[i].config); - return; + return 0; } } printk(KERN_DEBUG "snd: no pci config space found!\n"); + return 1; } EXPORT_SYMBOL(snd_pci_compat_save_state);
-void snd_pci_compat_restore_state(struct pci_dev *pci) +int snd_pci_compat_restore_state(struct pci_dev *pci) { int i; /* FIXME: mutex needed for race? */ @@ -145,10 +146,11 @@ if (saved_tbl[i].pci == pci) { saved_tbl[i].pci = NULL; snd_pci_orig_restore_state(pci, saved_tbl[i].config); - return; + return 0; } } printk(KERN_DEBUG "snd: no saved pci config!\n"); + return 1; } EXPORT_SYMBOL(snd_pci_compat_restore_state); #endif /* CONFIG_HAVE_PCI_SAVED_CONFIG */ Index: alsa-driver/include/adriver.h =================================================================== RCS file: /usr/local/cvs_repos/almond/alsa/alsa-driver/include/adriver.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- alsa-driver/include/adriver.h 20 Jan 2008 16:52:37 -0000 1.1 +++ alsa-driver/include/adriver.h 20 Jan 2008 17:14:23 -0000 1.2 @@ -1165,15 +1165,15 @@ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0) #ifdef CONFIG_PCI #ifndef CONFIG_HAVE_NEW_PCI_SAVE_STATE -void snd_pci_compat_save_state(struct pci_dev *pci); -void snd_pci_compat_restore_state(struct pci_dev *pci); -static inline void snd_pci_orig_save_state(struct pci_dev *pci, u32 *buffer) +int snd_pci_compat_save_state(struct pci_dev *pci); +int snd_pci_compat_restore_state(struct pci_dev *pci); +static inline int snd_pci_orig_save_state(struct pci_dev *pci, u32 *buffer) { - pci_save_state(pci, buffer); + return pci_save_state(pci, buffer); } -static inline void snd_pci_orig_restore_state(struct pci_dev *pci, u32 *buffer) +static inline int snd_pci_orig_restore_state(struct pci_dev *pci, u32 *buffer) { - pci_restore_state(pci, buffer); + return pci_restore_state(pci, buffer); }
#undef pci_save_state