170 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2#ifndef __SOUND_AD1816A_H3#define __SOUND_AD1816A_H4 5/*6 ad1816a.h - definitions for ADI SoundPort AD1816A chip.7 Copyright (C) 1999-2000 by Massimo Piccioni <dafastidio@libero.it>8 9*/10 11#include <sound/control.h>12#include <sound/pcm.h>13#include <sound/timer.h>14 15#define AD1816A_REG(r) (chip->port + r)16 17#define AD1816A_CHIP_STATUS 0x0018#define AD1816A_INDIR_ADDR 0x0019#define AD1816A_INTERRUPT_STATUS 0x0120#define AD1816A_INDIR_DATA_LOW 0x0221#define AD1816A_INDIR_DATA_HIGH 0x0322#define AD1816A_PIO_DEBUG 0x0423#define AD1816A_PIO_STATUS 0x0524#define AD1816A_PIO_DATA 0x0625#define AD1816A_RESERVED_7 0x0726#define AD1816A_PLAYBACK_CONFIG 0x0827#define AD1816A_CAPTURE_CONFIG 0x0928#define AD1816A_RESERVED_10 0x0a29#define AD1816A_RESERVED_11 0x0b30#define AD1816A_JOYSTICK_RAW_DATA 0x0c31#define AD1816A_JOYSTICK_CTRL 0x0d32#define AD1816A_JOY_POS_DATA_LOW 0x0e33#define AD1816A_JOY_POS_DATA_HIGH 0x0f34 35#define AD1816A_LOW_BYTE_TMP 0x0036#define AD1816A_INTERRUPT_ENABLE 0x0137#define AD1816A_EXTERNAL_CTRL 0x0138#define AD1816A_PLAYBACK_SAMPLE_RATE 0x0239#define AD1816A_CAPTURE_SAMPLE_RATE 0x0340#define AD1816A_VOICE_ATT 0x0441#define AD1816A_FM_ATT 0x0542#define AD1816A_I2S_1_ATT 0x0643#define AD1816A_I2S_0_ATT 0x0744#define AD1816A_PLAYBACK_BASE_COUNT 0x0845#define AD1816A_PLAYBACK_CURR_COUNT 0x0946#define AD1816A_CAPTURE_BASE_COUNT 0x0a47#define AD1816A_CAPTURE_CURR_COUNT 0x0b48#define AD1816A_TIMER_BASE_COUNT 0x0c49#define AD1816A_TIMER_CURR_COUNT 0x0d50#define AD1816A_MASTER_ATT 0x0e51#define AD1816A_CD_GAIN_ATT 0x0f52#define AD1816A_SYNTH_GAIN_ATT 0x1053#define AD1816A_VID_GAIN_ATT 0x1154#define AD1816A_LINE_GAIN_ATT 0x1255#define AD1816A_MIC_GAIN_ATT 0x1356#define AD1816A_PHONE_IN_GAIN_ATT 0x1357#define AD1816A_ADC_SOURCE_SEL 0x1458#define AD1816A_ADC_PGA 0x1459#define AD1816A_CHIP_CONFIG 0x2060#define AD1816A_DSP_CONFIG 0x2161#define AD1816A_FM_SAMPLE_RATE 0x2262#define AD1816A_I2S_1_SAMPLE_RATE 0x2363#define AD1816A_I2S_0_SAMPLE_RATE 0x2464#define AD1816A_RESERVED_37 0x2565#define AD1816A_PROGRAM_CLOCK_RATE 0x2666#define AD1816A_3D_PHAT_CTRL 0x2767#define AD1816A_PHONE_OUT_ATT 0x2768#define AD1816A_RESERVED_40 0x2869#define AD1816A_HW_VOL_BUT 0x2970#define AD1816A_DSP_MAILBOX_0 0x2a71#define AD1816A_DSP_MAILBOX_1 0x2b72#define AD1816A_POWERDOWN_CTRL 0x2c73#define AD1816A_TIMER_CTRL 0x2c74#define AD1816A_VERSION_ID 0x2d75#define AD1816A_RESERVED_46 0x2e76 77#define AD1816A_READY 0x8078 79#define AD1816A_PLAYBACK_IRQ_PENDING 0x8080#define AD1816A_CAPTURE_IRQ_PENDING 0x4081#define AD1816A_TIMER_IRQ_PENDING 0x2082 83#define AD1816A_PLAYBACK_ENABLE 0x0184#define AD1816A_PLAYBACK_PIO 0x0285#define AD1816A_CAPTURE_ENABLE 0x0186#define AD1816A_CAPTURE_PIO 0x0287 88#define AD1816A_FMT_LINEAR_8 0x0089#define AD1816A_FMT_ULAW_8 0x0890#define AD1816A_FMT_LINEAR_16_LIT 0x1091#define AD1816A_FMT_ALAW_8 0x1892#define AD1816A_FMT_LINEAR_16_BIG 0x3093#define AD1816A_FMT_ALL 0x3894#define AD1816A_FMT_STEREO 0x0495 96#define AD1816A_PLAYBACK_IRQ_ENABLE 0x800097#define AD1816A_CAPTURE_IRQ_ENABLE 0x400098#define AD1816A_TIMER_IRQ_ENABLE 0x200099#define AD1816A_TIMER_ENABLE 0x0080100 101#define AD1816A_SRC_LINE 0x00102#define AD1816A_SRC_OUT 0x10103#define AD1816A_SRC_CD 0x20104#define AD1816A_SRC_SYNTH 0x30105#define AD1816A_SRC_VIDEO 0x40106#define AD1816A_SRC_MIC 0x50107#define AD1816A_SRC_MONO 0x50108#define AD1816A_SRC_PHONE_IN 0x60109#define AD1816A_SRC_MASK 0x70110 111#define AD1816A_CAPTURE_NOT_EQUAL 0x1000112#define AD1816A_WSS_ENABLE 0x8000113 114struct snd_ad1816a {115 unsigned long port;116 struct resource *res_port;117 int irq;118 int dma1;119 int dma2;120 121 unsigned short hardware;122 unsigned short version;123 124 spinlock_t lock;125 126 unsigned short mode;127 unsigned int clock_freq;128 129 struct snd_card *card;130 struct snd_pcm *pcm;131 132 struct snd_pcm_substream *playback_substream;133 struct snd_pcm_substream *capture_substream;134 unsigned int p_dma_size;135 unsigned int c_dma_size;136 137 struct snd_timer *timer;138#ifdef CONFIG_PM139 unsigned short image[48];140#endif141};142 143 144#define AD1816A_HW_AUTO 0145#define AD1816A_HW_AD1816A 1146#define AD1816A_HW_AD1815 2147#define AD1816A_HW_AD18MAX10 3148 149#define AD1816A_MODE_PLAYBACK 0x01150#define AD1816A_MODE_CAPTURE 0x02151#define AD1816A_MODE_TIMER 0x04152#define AD1816A_MODE_OPEN (AD1816A_MODE_PLAYBACK | \153 AD1816A_MODE_CAPTURE | \154 AD1816A_MODE_TIMER)155 156 157extern int snd_ad1816a_create(struct snd_card *card, unsigned long port,158 int irq, int dma1, int dma2,159 struct snd_ad1816a *chip);160 161extern int snd_ad1816a_pcm(struct snd_ad1816a *chip, int device);162extern int snd_ad1816a_mixer(struct snd_ad1816a *chip);163extern int snd_ad1816a_timer(struct snd_ad1816a *chip, int device);164#ifdef CONFIG_PM165extern void snd_ad1816a_suspend(struct snd_ad1816a *chip);166extern void snd_ad1816a_resume(struct snd_ad1816a *chip);167#endif168 169#endif /* __SOUND_AD1816A_H */170