sound/oss/dmasound: fix build when drivers are mixed =y/=m
When CONFIG_DMASOUND_ATARI=m and CONFIG_DMASOUND_Q40=y (or vice versa), dmasound_core.o can be built without dmasound_deinit() being defined, causing a build error: ERROR: modpost: "dmasound_deinit" [sound/oss/dmasound/dmasound_atari.ko] undefined! Modify dmasound_core.c and dmasound.h so that dmasound_deinit() is always available. The mixed modes (=y/=m) also mean that several variables and structs have to be declared in all cases. Suggested-by: Arnd Bergmann <arnd@arndb.de> Suggested-by: Geert Uytterhoeven <geert@linux-m68k.org> Signed-off-by: Randy Dunlap <rdunlap@infradead.org> Reported-by: kernel test robot <lkp@intel.com> Link: lore.kernel.org/r/202204032138.EFT9qGEd-lkp@intel.com Cc: Geert Uytterhoeven <geert@linux-m68k.org> Cc: Jaroslav Kysela <perex@perex.cz> Cc: Takashi Iwai <tiwai@suse.com> Cc: alsa-devel@alsa-project.org Link: https://lore.kernel.org/r/20220405234118.24830-1-rdunlap@infradead.org Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Родитель
9eb6f5c388
Коммит
9dd7c46346
|
@ -88,11 +88,7 @@ static inline int ioctl_return(int __user *addr, int value)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern int dmasound_init(void);
|
extern int dmasound_init(void);
|
||||||
#ifdef MODULE
|
|
||||||
extern void dmasound_deinit(void);
|
extern void dmasound_deinit(void);
|
||||||
#else
|
|
||||||
#define dmasound_deinit() do { } while (0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* description of the set-up applies to either hard or soft settings */
|
/* description of the set-up applies to either hard or soft settings */
|
||||||
|
|
||||||
|
@ -114,9 +110,7 @@ typedef struct {
|
||||||
void *(*dma_alloc)(unsigned int, gfp_t);
|
void *(*dma_alloc)(unsigned int, gfp_t);
|
||||||
void (*dma_free)(void *, unsigned int);
|
void (*dma_free)(void *, unsigned int);
|
||||||
int (*irqinit)(void);
|
int (*irqinit)(void);
|
||||||
#ifdef MODULE
|
|
||||||
void (*irqcleanup)(void);
|
void (*irqcleanup)(void);
|
||||||
#endif
|
|
||||||
void (*init)(void);
|
void (*init)(void);
|
||||||
void (*silence)(void);
|
void (*silence)(void);
|
||||||
int (*setFormat)(int);
|
int (*setFormat)(int);
|
||||||
|
|
|
@ -206,12 +206,10 @@ module_param(writeBufSize, int, 0);
|
||||||
|
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
|
|
||||||
#ifdef MODULE
|
|
||||||
static int sq_unit = -1;
|
static int sq_unit = -1;
|
||||||
static int mixer_unit = -1;
|
static int mixer_unit = -1;
|
||||||
static int state_unit = -1;
|
static int state_unit = -1;
|
||||||
static int irq_installed;
|
static int irq_installed;
|
||||||
#endif /* MODULE */
|
|
||||||
|
|
||||||
/* control over who can modify resources shared between play/record */
|
/* control over who can modify resources shared between play/record */
|
||||||
static fmode_t shared_resource_owner;
|
static fmode_t shared_resource_owner;
|
||||||
|
@ -391,9 +389,6 @@ static const struct file_operations mixer_fops =
|
||||||
|
|
||||||
static void mixer_init(void)
|
static void mixer_init(void)
|
||||||
{
|
{
|
||||||
#ifndef MODULE
|
|
||||||
int mixer_unit;
|
|
||||||
#endif
|
|
||||||
mixer_unit = register_sound_mixer(&mixer_fops, -1);
|
mixer_unit = register_sound_mixer(&mixer_fops, -1);
|
||||||
if (mixer_unit < 0)
|
if (mixer_unit < 0)
|
||||||
return;
|
return;
|
||||||
|
@ -1171,9 +1166,6 @@ static const struct file_operations sq_fops =
|
||||||
static int sq_init(void)
|
static int sq_init(void)
|
||||||
{
|
{
|
||||||
const struct file_operations *fops = &sq_fops;
|
const struct file_operations *fops = &sq_fops;
|
||||||
#ifndef MODULE
|
|
||||||
int sq_unit;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
sq_unit = register_sound_dsp(fops, -1);
|
sq_unit = register_sound_dsp(fops, -1);
|
||||||
if (sq_unit < 0) {
|
if (sq_unit < 0) {
|
||||||
|
@ -1366,9 +1358,6 @@ static const struct file_operations state_fops = {
|
||||||
|
|
||||||
static int state_init(void)
|
static int state_init(void)
|
||||||
{
|
{
|
||||||
#ifndef MODULE
|
|
||||||
int state_unit;
|
|
||||||
#endif
|
|
||||||
state_unit = register_sound_special(&state_fops, SND_DEV_STATUS);
|
state_unit = register_sound_special(&state_fops, SND_DEV_STATUS);
|
||||||
if (state_unit < 0)
|
if (state_unit < 0)
|
||||||
return state_unit ;
|
return state_unit ;
|
||||||
|
@ -1386,10 +1375,9 @@ static int state_init(void)
|
||||||
int dmasound_init(void)
|
int dmasound_init(void)
|
||||||
{
|
{
|
||||||
int res ;
|
int res ;
|
||||||
#ifdef MODULE
|
|
||||||
if (irq_installed)
|
if (irq_installed)
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Set up sound queue, /dev/audio and /dev/dsp. */
|
/* Set up sound queue, /dev/audio and /dev/dsp. */
|
||||||
|
|
||||||
|
@ -1408,9 +1396,7 @@ int dmasound_init(void)
|
||||||
printk(KERN_ERR "DMA sound driver: Interrupt initialization failed\n");
|
printk(KERN_ERR "DMA sound driver: Interrupt initialization failed\n");
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
#ifdef MODULE
|
|
||||||
irq_installed = 1;
|
irq_installed = 1;
|
||||||
#endif
|
|
||||||
|
|
||||||
printk(KERN_INFO "%s DMA sound driver rev %03d installed\n",
|
printk(KERN_INFO "%s DMA sound driver rev %03d installed\n",
|
||||||
dmasound.mach.name, (DMASOUND_CORE_REVISION<<4) +
|
dmasound.mach.name, (DMASOUND_CORE_REVISION<<4) +
|
||||||
|
@ -1424,8 +1410,6 @@ int dmasound_init(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef MODULE
|
|
||||||
|
|
||||||
void dmasound_deinit(void)
|
void dmasound_deinit(void)
|
||||||
{
|
{
|
||||||
if (irq_installed) {
|
if (irq_installed) {
|
||||||
|
@ -1444,8 +1428,6 @@ void dmasound_deinit(void)
|
||||||
unregister_sound_dsp(sq_unit);
|
unregister_sound_dsp(sq_unit);
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* !MODULE */
|
|
||||||
|
|
||||||
static int dmasound_setup(char *str)
|
static int dmasound_setup(char *str)
|
||||||
{
|
{
|
||||||
int ints[6], size;
|
int ints[6], size;
|
||||||
|
@ -1489,8 +1471,6 @@ static int dmasound_setup(char *str)
|
||||||
|
|
||||||
__setup("dmasound=", dmasound_setup);
|
__setup("dmasound=", dmasound_setup);
|
||||||
|
|
||||||
#endif /* !MODULE */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Conversion tables
|
* Conversion tables
|
||||||
*/
|
*/
|
||||||
|
@ -1577,9 +1557,7 @@ char dmasound_alaw2dma8[] = {
|
||||||
|
|
||||||
EXPORT_SYMBOL(dmasound);
|
EXPORT_SYMBOL(dmasound);
|
||||||
EXPORT_SYMBOL(dmasound_init);
|
EXPORT_SYMBOL(dmasound_init);
|
||||||
#ifdef MODULE
|
|
||||||
EXPORT_SYMBOL(dmasound_deinit);
|
EXPORT_SYMBOL(dmasound_deinit);
|
||||||
#endif
|
|
||||||
EXPORT_SYMBOL(dmasound_write_sq);
|
EXPORT_SYMBOL(dmasound_write_sq);
|
||||||
EXPORT_SYMBOL(dmasound_catchRadius);
|
EXPORT_SYMBOL(dmasound_catchRadius);
|
||||||
#ifdef HAS_8BIT_TABLES
|
#ifdef HAS_8BIT_TABLES
|
||||||
|
|
Загрузка…
Ссылка в новой задаче