162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 262306a36Sopenharmony_ci#ifndef __SOUND_AD1816A_H 362306a36Sopenharmony_ci#define __SOUND_AD1816A_H 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci/* 662306a36Sopenharmony_ci ad1816a.h - definitions for ADI SoundPort AD1816A chip. 762306a36Sopenharmony_ci Copyright (C) 1999-2000 by Massimo Piccioni <dafastidio@libero.it> 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci*/ 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#include <sound/control.h> 1262306a36Sopenharmony_ci#include <sound/pcm.h> 1362306a36Sopenharmony_ci#include <sound/timer.h> 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci#define AD1816A_REG(r) (chip->port + r) 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci#define AD1816A_CHIP_STATUS 0x00 1862306a36Sopenharmony_ci#define AD1816A_INDIR_ADDR 0x00 1962306a36Sopenharmony_ci#define AD1816A_INTERRUPT_STATUS 0x01 2062306a36Sopenharmony_ci#define AD1816A_INDIR_DATA_LOW 0x02 2162306a36Sopenharmony_ci#define AD1816A_INDIR_DATA_HIGH 0x03 2262306a36Sopenharmony_ci#define AD1816A_PIO_DEBUG 0x04 2362306a36Sopenharmony_ci#define AD1816A_PIO_STATUS 0x05 2462306a36Sopenharmony_ci#define AD1816A_PIO_DATA 0x06 2562306a36Sopenharmony_ci#define AD1816A_RESERVED_7 0x07 2662306a36Sopenharmony_ci#define AD1816A_PLAYBACK_CONFIG 0x08 2762306a36Sopenharmony_ci#define AD1816A_CAPTURE_CONFIG 0x09 2862306a36Sopenharmony_ci#define AD1816A_RESERVED_10 0x0a 2962306a36Sopenharmony_ci#define AD1816A_RESERVED_11 0x0b 3062306a36Sopenharmony_ci#define AD1816A_JOYSTICK_RAW_DATA 0x0c 3162306a36Sopenharmony_ci#define AD1816A_JOYSTICK_CTRL 0x0d 3262306a36Sopenharmony_ci#define AD1816A_JOY_POS_DATA_LOW 0x0e 3362306a36Sopenharmony_ci#define AD1816A_JOY_POS_DATA_HIGH 0x0f 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci#define AD1816A_LOW_BYTE_TMP 0x00 3662306a36Sopenharmony_ci#define AD1816A_INTERRUPT_ENABLE 0x01 3762306a36Sopenharmony_ci#define AD1816A_EXTERNAL_CTRL 0x01 3862306a36Sopenharmony_ci#define AD1816A_PLAYBACK_SAMPLE_RATE 0x02 3962306a36Sopenharmony_ci#define AD1816A_CAPTURE_SAMPLE_RATE 0x03 4062306a36Sopenharmony_ci#define AD1816A_VOICE_ATT 0x04 4162306a36Sopenharmony_ci#define AD1816A_FM_ATT 0x05 4262306a36Sopenharmony_ci#define AD1816A_I2S_1_ATT 0x06 4362306a36Sopenharmony_ci#define AD1816A_I2S_0_ATT 0x07 4462306a36Sopenharmony_ci#define AD1816A_PLAYBACK_BASE_COUNT 0x08 4562306a36Sopenharmony_ci#define AD1816A_PLAYBACK_CURR_COUNT 0x09 4662306a36Sopenharmony_ci#define AD1816A_CAPTURE_BASE_COUNT 0x0a 4762306a36Sopenharmony_ci#define AD1816A_CAPTURE_CURR_COUNT 0x0b 4862306a36Sopenharmony_ci#define AD1816A_TIMER_BASE_COUNT 0x0c 4962306a36Sopenharmony_ci#define AD1816A_TIMER_CURR_COUNT 0x0d 5062306a36Sopenharmony_ci#define AD1816A_MASTER_ATT 0x0e 5162306a36Sopenharmony_ci#define AD1816A_CD_GAIN_ATT 0x0f 5262306a36Sopenharmony_ci#define AD1816A_SYNTH_GAIN_ATT 0x10 5362306a36Sopenharmony_ci#define AD1816A_VID_GAIN_ATT 0x11 5462306a36Sopenharmony_ci#define AD1816A_LINE_GAIN_ATT 0x12 5562306a36Sopenharmony_ci#define AD1816A_MIC_GAIN_ATT 0x13 5662306a36Sopenharmony_ci#define AD1816A_PHONE_IN_GAIN_ATT 0x13 5762306a36Sopenharmony_ci#define AD1816A_ADC_SOURCE_SEL 0x14 5862306a36Sopenharmony_ci#define AD1816A_ADC_PGA 0x14 5962306a36Sopenharmony_ci#define AD1816A_CHIP_CONFIG 0x20 6062306a36Sopenharmony_ci#define AD1816A_DSP_CONFIG 0x21 6162306a36Sopenharmony_ci#define AD1816A_FM_SAMPLE_RATE 0x22 6262306a36Sopenharmony_ci#define AD1816A_I2S_1_SAMPLE_RATE 0x23 6362306a36Sopenharmony_ci#define AD1816A_I2S_0_SAMPLE_RATE 0x24 6462306a36Sopenharmony_ci#define AD1816A_RESERVED_37 0x25 6562306a36Sopenharmony_ci#define AD1816A_PROGRAM_CLOCK_RATE 0x26 6662306a36Sopenharmony_ci#define AD1816A_3D_PHAT_CTRL 0x27 6762306a36Sopenharmony_ci#define AD1816A_PHONE_OUT_ATT 0x27 6862306a36Sopenharmony_ci#define AD1816A_RESERVED_40 0x28 6962306a36Sopenharmony_ci#define AD1816A_HW_VOL_BUT 0x29 7062306a36Sopenharmony_ci#define AD1816A_DSP_MAILBOX_0 0x2a 7162306a36Sopenharmony_ci#define AD1816A_DSP_MAILBOX_1 0x2b 7262306a36Sopenharmony_ci#define AD1816A_POWERDOWN_CTRL 0x2c 7362306a36Sopenharmony_ci#define AD1816A_TIMER_CTRL 0x2c 7462306a36Sopenharmony_ci#define AD1816A_VERSION_ID 0x2d 7562306a36Sopenharmony_ci#define AD1816A_RESERVED_46 0x2e 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_ci#define AD1816A_READY 0x80 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_ci#define AD1816A_PLAYBACK_IRQ_PENDING 0x80 8062306a36Sopenharmony_ci#define AD1816A_CAPTURE_IRQ_PENDING 0x40 8162306a36Sopenharmony_ci#define AD1816A_TIMER_IRQ_PENDING 0x20 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ci#define AD1816A_PLAYBACK_ENABLE 0x01 8462306a36Sopenharmony_ci#define AD1816A_PLAYBACK_PIO 0x02 8562306a36Sopenharmony_ci#define AD1816A_CAPTURE_ENABLE 0x01 8662306a36Sopenharmony_ci#define AD1816A_CAPTURE_PIO 0x02 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_ci#define AD1816A_FMT_LINEAR_8 0x00 8962306a36Sopenharmony_ci#define AD1816A_FMT_ULAW_8 0x08 9062306a36Sopenharmony_ci#define AD1816A_FMT_LINEAR_16_LIT 0x10 9162306a36Sopenharmony_ci#define AD1816A_FMT_ALAW_8 0x18 9262306a36Sopenharmony_ci#define AD1816A_FMT_LINEAR_16_BIG 0x30 9362306a36Sopenharmony_ci#define AD1816A_FMT_ALL 0x38 9462306a36Sopenharmony_ci#define AD1816A_FMT_STEREO 0x04 9562306a36Sopenharmony_ci 9662306a36Sopenharmony_ci#define AD1816A_PLAYBACK_IRQ_ENABLE 0x8000 9762306a36Sopenharmony_ci#define AD1816A_CAPTURE_IRQ_ENABLE 0x4000 9862306a36Sopenharmony_ci#define AD1816A_TIMER_IRQ_ENABLE 0x2000 9962306a36Sopenharmony_ci#define AD1816A_TIMER_ENABLE 0x0080 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_ci#define AD1816A_SRC_LINE 0x00 10262306a36Sopenharmony_ci#define AD1816A_SRC_OUT 0x10 10362306a36Sopenharmony_ci#define AD1816A_SRC_CD 0x20 10462306a36Sopenharmony_ci#define AD1816A_SRC_SYNTH 0x30 10562306a36Sopenharmony_ci#define AD1816A_SRC_VIDEO 0x40 10662306a36Sopenharmony_ci#define AD1816A_SRC_MIC 0x50 10762306a36Sopenharmony_ci#define AD1816A_SRC_MONO 0x50 10862306a36Sopenharmony_ci#define AD1816A_SRC_PHONE_IN 0x60 10962306a36Sopenharmony_ci#define AD1816A_SRC_MASK 0x70 11062306a36Sopenharmony_ci 11162306a36Sopenharmony_ci#define AD1816A_CAPTURE_NOT_EQUAL 0x1000 11262306a36Sopenharmony_ci#define AD1816A_WSS_ENABLE 0x8000 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_cistruct snd_ad1816a { 11562306a36Sopenharmony_ci unsigned long port; 11662306a36Sopenharmony_ci struct resource *res_port; 11762306a36Sopenharmony_ci int irq; 11862306a36Sopenharmony_ci int dma1; 11962306a36Sopenharmony_ci int dma2; 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_ci unsigned short hardware; 12262306a36Sopenharmony_ci unsigned short version; 12362306a36Sopenharmony_ci 12462306a36Sopenharmony_ci spinlock_t lock; 12562306a36Sopenharmony_ci 12662306a36Sopenharmony_ci unsigned short mode; 12762306a36Sopenharmony_ci unsigned int clock_freq; 12862306a36Sopenharmony_ci 12962306a36Sopenharmony_ci struct snd_card *card; 13062306a36Sopenharmony_ci struct snd_pcm *pcm; 13162306a36Sopenharmony_ci 13262306a36Sopenharmony_ci struct snd_pcm_substream *playback_substream; 13362306a36Sopenharmony_ci struct snd_pcm_substream *capture_substream; 13462306a36Sopenharmony_ci unsigned int p_dma_size; 13562306a36Sopenharmony_ci unsigned int c_dma_size; 13662306a36Sopenharmony_ci 13762306a36Sopenharmony_ci struct snd_timer *timer; 13862306a36Sopenharmony_ci#ifdef CONFIG_PM 13962306a36Sopenharmony_ci unsigned short image[48]; 14062306a36Sopenharmony_ci#endif 14162306a36Sopenharmony_ci}; 14262306a36Sopenharmony_ci 14362306a36Sopenharmony_ci 14462306a36Sopenharmony_ci#define AD1816A_HW_AUTO 0 14562306a36Sopenharmony_ci#define AD1816A_HW_AD1816A 1 14662306a36Sopenharmony_ci#define AD1816A_HW_AD1815 2 14762306a36Sopenharmony_ci#define AD1816A_HW_AD18MAX10 3 14862306a36Sopenharmony_ci 14962306a36Sopenharmony_ci#define AD1816A_MODE_PLAYBACK 0x01 15062306a36Sopenharmony_ci#define AD1816A_MODE_CAPTURE 0x02 15162306a36Sopenharmony_ci#define AD1816A_MODE_TIMER 0x04 15262306a36Sopenharmony_ci#define AD1816A_MODE_OPEN (AD1816A_MODE_PLAYBACK | \ 15362306a36Sopenharmony_ci AD1816A_MODE_CAPTURE | \ 15462306a36Sopenharmony_ci AD1816A_MODE_TIMER) 15562306a36Sopenharmony_ci 15662306a36Sopenharmony_ci 15762306a36Sopenharmony_ciextern int snd_ad1816a_create(struct snd_card *card, unsigned long port, 15862306a36Sopenharmony_ci int irq, int dma1, int dma2, 15962306a36Sopenharmony_ci struct snd_ad1816a *chip); 16062306a36Sopenharmony_ci 16162306a36Sopenharmony_ciextern int snd_ad1816a_pcm(struct snd_ad1816a *chip, int device); 16262306a36Sopenharmony_ciextern int snd_ad1816a_mixer(struct snd_ad1816a *chip); 16362306a36Sopenharmony_ciextern int snd_ad1816a_timer(struct snd_ad1816a *chip, int device); 16462306a36Sopenharmony_ci#ifdef CONFIG_PM 16562306a36Sopenharmony_ciextern void snd_ad1816a_suspend(struct snd_ad1816a *chip); 16662306a36Sopenharmony_ciextern void snd_ad1816a_resume(struct snd_ad1816a *chip); 16762306a36Sopenharmony_ci#endif 16862306a36Sopenharmony_ci 16962306a36Sopenharmony_ci#endif /* __SOUND_AD1816A_H */ 170