xref: /kernel/linux/linux-6.6/include/sound/ad1816a.h (revision 62306a36)
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