Commit 9dd7c463 authored by Randy Dunlap's avatar Randy Dunlap Committed by Takashi Iwai
Browse files

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: default avatarArnd Bergmann <arnd@arndb.de>
Suggested-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: default avatarRandy Dunlap <rdunlap@infradead.org>
Reported-by: default avatarkernel 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: default avatarTakashi Iwai <tiwai@suse.de>
parent 9eb6f5c3
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -88,11 +88,7 @@ static inline int ioctl_return(int __user *addr, int value)
     */

extern int dmasound_init(void);
#ifdef MODULE
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 */

@@ -114,9 +110,7 @@ typedef struct {
    void *(*dma_alloc)(unsigned int, gfp_t);
    void (*dma_free)(void *, unsigned int);
    int (*irqinit)(void);
#ifdef MODULE
    void (*irqcleanup)(void);
#endif
    void (*init)(void);
    void (*silence)(void);
    int (*setFormat)(int);
+1 −23
Original line number Diff line number Diff line
@@ -206,12 +206,10 @@ module_param(writeBufSize, int, 0);

MODULE_LICENSE("GPL");

#ifdef MODULE
static int sq_unit = -1;
static int mixer_unit = -1;
static int state_unit = -1;
static int irq_installed;
#endif /* MODULE */

/* control over who can modify resources shared between play/record */
static fmode_t shared_resource_owner;
@@ -391,9 +389,6 @@ static const struct file_operations mixer_fops =

static void mixer_init(void)
{
#ifndef MODULE
	int mixer_unit;
#endif
	mixer_unit = register_sound_mixer(&mixer_fops, -1);
	if (mixer_unit < 0)
		return;
@@ -1171,9 +1166,6 @@ static const struct file_operations sq_fops =
static int sq_init(void)
{
	const struct file_operations *fops = &sq_fops;
#ifndef MODULE
	int sq_unit;
#endif

	sq_unit = register_sound_dsp(fops, -1);
	if (sq_unit < 0) {
@@ -1366,9 +1358,6 @@ static const struct file_operations state_fops = {

static int state_init(void)
{
#ifndef MODULE
	int state_unit;
#endif
	state_unit = register_sound_special(&state_fops, SND_DEV_STATUS);
	if (state_unit < 0)
		return state_unit ;
@@ -1386,10 +1375,9 @@ static int state_init(void)
int dmasound_init(void)
{
	int res ;
#ifdef MODULE

	if (irq_installed)
		return -EBUSY;
#endif

	/* 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");
		return -ENODEV;
	}
#ifdef MODULE
	irq_installed = 1;
#endif

	printk(KERN_INFO "%s DMA sound driver rev %03d installed\n",
		dmasound.mach.name, (DMASOUND_CORE_REVISION<<4) +
@@ -1424,8 +1410,6 @@ int dmasound_init(void)
	return 0;
}

#ifdef MODULE

void dmasound_deinit(void)
{
	if (irq_installed) {
@@ -1444,8 +1428,6 @@ void dmasound_deinit(void)
		unregister_sound_dsp(sq_unit);
}

#else /* !MODULE */

static int dmasound_setup(char *str)
{
	int ints[6], size;
@@ -1489,8 +1471,6 @@ static int dmasound_setup(char *str)

__setup("dmasound=", dmasound_setup);

#endif /* !MODULE */

    /*
     *  Conversion tables
     */
@@ -1577,9 +1557,7 @@ char dmasound_alaw2dma8[] = {

EXPORT_SYMBOL(dmasound);
EXPORT_SYMBOL(dmasound_init);
#ifdef MODULE
EXPORT_SYMBOL(dmasound_deinit);
#endif
EXPORT_SYMBOL(dmasound_write_sq);
EXPORT_SYMBOL(dmasound_catchRadius);
#ifdef HAS_8BIT_TABLES