linux/sound/isa/sc6000.c

// SPDX-License-Identifier: GPL-2.0-or-later
/*
 *  Driver for Gallant SC-6000 soundcard. This card is also known as
 *  Audio Excel DSP 16 or Zoltrix AV302.
 *  These cards use CompuMedia ASC-9308 chip + AD1848 codec.
 *  SC-6600 and SC-7000 cards are also supported. They are based on
 *  CompuMedia ASC-9408 chip and CS4231 codec.
 *
 *  Copyright (C) 2007 Krzysztof Helt <[email protected]>
 *
 *  I don't have documentation for this card. I used the driver
 *  for OSS/Free included in the kernel source as reference.
 */

#include <linux/module.h>
#include <linux/delay.h>
#include <linux/isa.h>
#include <linux/io.h>
#include <asm/dma.h>
#include <sound/core.h>
#include <sound/wss.h>
#include <sound/opl3.h>
#include <sound/mpu401.h>
#include <sound/control.h>
#define SNDRV_LEGACY_FIND_FREE_IRQ
#define SNDRV_LEGACY_FIND_FREE_DMA
#include <sound/initval.h>

MODULE_AUTHOR();
MODULE_DESCRIPTION();
MODULE_LICENSE();

static int index[SNDRV_CARDS] =;	/* Index 0-MAX */
static char *id[SNDRV_CARDS] =;	/* ID for this card */
static bool enable[SNDRV_CARDS] =;	/* Enable this card */
static long port[SNDRV_CARDS] =;	/* 0x220, 0x240 */
static int irq[SNDRV_CARDS] =;	/* 5, 7, 9, 10, 11 */
static long mss_port[SNDRV_CARDS] =;	/* 0x530, 0xe80 */
static long mpu_port[SNDRV_CARDS] =;
						/* 0x300, 0x310, 0x320, 0x330 */
static int mpu_irq[SNDRV_CARDS] =;	/* 5, 7, 9, 10, 0 */
static int dma[SNDRV_CARDS] =;	/* 0, 1, 3 */
static bool joystick[SNDRV_CARDS] =;

module_param_array();
MODULE_PARM_DESC();
module_param_array();
MODULE_PARM_DESC();
module_param_array();
MODULE_PARM_DESC();
module_param_hw_array(port, long, ioport, NULL, 0444);
MODULE_PARM_DESC();
module_param_hw_array(mss_port, long, ioport, NULL, 0444);
MODULE_PARM_DESC();
module_param_hw_array(mpu_port, long, ioport, NULL, 0444);
MODULE_PARM_DESC();
module_param_hw_array(irq, int, irq, NULL, 0444);
MODULE_PARM_DESC();
module_param_hw_array(mpu_irq, int, irq, NULL, 0444);
MODULE_PARM_DESC();
module_param_hw_array(dma, int, dma, NULL, 0444);
MODULE_PARM_DESC();
module_param_array();
MODULE_PARM_DESC();

/*
 * Commands of SC6000's DSP (SBPRO+special).
 * Some of them are COMMAND_xx, in the future they may change.
 */
#define WRITE_MDIRQ_CFG
#define COMMAND_52
#define READ_HARD_CFG
#define COMMAND_5C
#define COMMAND_60
#define COMMAND_66
#define COMMAND_6C
#define COMMAND_6E
#define COMMAND_88
#define DSP_INIT_MSS
#define COMMAND_C5
#define GET_DSP_VERSION
#define GET_DSP_COPYRIGHT

/*
 * Offsets of SC6000 DSP I/O ports. The offset is added to base I/O port
 * to have the actual I/O port.
 * Register permissions are:
 * (wo) == Write Only
 * (ro) == Read  Only
 * (w-) == Write
 * (r-) == Read
 */
#define DSP_RESET
#define DSP_READ
#define DSP_WRITE
#define DSP_COMMAND
#define DSP_STATUS
#define DSP_DATAVAIL

#define PFX
#define DRV_NAME

/* hardware dependent functions */

/*
 * sc6000_irq_to_softcfg - Decode irq number into cfg code.
 */
static unsigned char sc6000_irq_to_softcfg(int irq)
{}

/*
 * sc6000_dma_to_softcfg - Decode dma number into cfg code.
 */
static unsigned char sc6000_dma_to_softcfg(int dma)
{}

/*
 * sc6000_mpu_irq_to_softcfg - Decode MPU-401 irq number into cfg code.
 */
static unsigned char sc6000_mpu_irq_to_softcfg(int mpu_irq)
{}

static int sc6000_wait_data(char __iomem *vport)
{}

static int sc6000_read(char __iomem *vport)
{}

static int sc6000_write(char __iomem *vport, int cmd)
{}

static int sc6000_dsp_get_answer(char __iomem *vport, int command,
				 char *data, int data_len)
{}

static int sc6000_dsp_reset(char __iomem *vport)
{}

/* detection and initialization */
static int sc6000_hw_cfg_write(char __iomem *vport, const int *cfg)
{}

static int sc6000_cfg_write(char __iomem *vport, unsigned char softcfg)
{}

static int sc6000_setup_board(char __iomem *vport, int config)
{}

static int sc6000_init_mss(char __iomem *vport, int config,
			   char __iomem *vmss_port, int mss_config)
{}

static void sc6000_hw_cfg_encode(char __iomem *vport, int *cfg,
				 long xport, long xmpu,
				 long xmss_port, int joystick)
{}

static int sc6000_init_board(char __iomem *vport,
			     char __iomem *vmss_port, int dev)
{}

static int snd_sc6000_mixer(struct snd_wss *chip)
{}

static int snd_sc6000_match(struct device *devptr, unsigned int dev)
{}

static void snd_sc6000_free(struct snd_card *card)
{}

static int __snd_sc6000_probe(struct device *devptr, unsigned int dev)
{}

static int snd_sc6000_probe(struct device *devptr, unsigned int dev)
{}

static struct isa_driver snd_sc6000_driver =;


module_isa_driver(snd_sc6000_driver, SNDRV_CARDS);