linux/include/sound/ak4114.h

/* SPDX-License-Identifier: GPL-2.0-or-later */
#ifndef __SOUND_AK4114_H
#define __SOUND_AK4114_H

/*
 *  Routines for Asahi Kasei AK4114
 *  Copyright (c) by Jaroslav Kysela <[email protected]>,
 */

/* AK4114 registers */
#define AK4114_REG_PWRDN
#define AK4114_REG_FORMAT
#define AK4114_REG_IO0
#define AK4114_REG_IO1
#define AK4114_REG_INT0_MASK
#define AK4114_REG_INT1_MASK
#define AK4114_REG_RCS0
#define AK4114_REG_RCS1
#define AK4114_REG_RXCSB0
#define AK4114_REG_RXCSB1
#define AK4114_REG_RXCSB2
#define AK4114_REG_RXCSB3
#define AK4114_REG_RXCSB4
#define AK4114_REG_TXCSB0
#define AK4114_REG_TXCSB1
#define AK4114_REG_TXCSB2
#define AK4114_REG_TXCSB3
#define AK4114_REG_TXCSB4
#define AK4114_REG_Pc0
#define AK4114_REG_Pc1
#define AK4114_REG_Pd0
#define AK4114_REG_Pd1
#define AK4114_REG_QSUB_ADDR
#define AK4114_REG_QSUB_TRACK
#define AK4114_REG_QSUB_INDEX
#define AK4114_REG_QSUB_MINUTE
#define AK4114_REG_QSUB_SECOND
#define AK4114_REG_QSUB_FRAME
#define AK4114_REG_QSUB_ZERO
#define AK4114_REG_QSUB_ABSMIN
#define AK4114_REG_QSUB_ABSSEC
#define AK4114_REG_QSUB_ABSFRM

/* sizes */
#define AK4114_REG_RXCSB_SIZE
#define AK4114_REG_TXCSB_SIZE
#define AK4114_REG_QSUB_SIZE

/* AK4117_REG_PWRDN bits */
#define AK4114_CS12
#define AK4114_BCU
#define AK4114_CM1
#define AK4114_CM0
#define AK4114_OCKS1
#define AK4114_OCKS0
#define AK4114_PWN
#define AK4114_RST

/* AK4114_REQ_FORMAT bits */
#define AK4114_MONO
#define AK4114_DIF2
#define AK4114_DIF1
#define AK4114_DIF0
#define AK4114_DIF_16R
#define AK4114_DIF_18R
#define AK4114_DIF_20R
#define AK4114_DIF_24R
#define AK4114_DIF_24L
#define AK4114_DIF_24I2S
#define AK4114_DIF_I24L
#define AK4114_DIF_I24I2S
#define AK4114_DEAU
#define AK4114_DEM1
#define AK4114_DEM0
#define AK4114_DEM_44KHZ
#define AK4114_DEM_48KHZ
#define AK4114_DEM_32KHZ
#define AK4114_DEM_96KHZ
#define AK4114_DFS

/* AK4114_REG_IO0 */
#define AK4114_TX1E
#define AK4114_OPS12
#define AK4114_OPS11
#define AK4114_OPS10
#define AK4114_TX0E
#define AK4114_OPS02
#define AK4114_OPS01
#define AK4114_OPS00

/* AK4114_REG_IO1 */
#define AK4114_EFH1
#define AK4114_EFH0
#define AK4114_EFH_512
#define AK4114_EFH_1024
#define AK4114_EFH_2048
#define AK4114_EFH_4096
#define AK4114_UDIT
#define AK4114_TLR
#define AK4114_DIT
#define AK4114_IPS2
#define AK4114_IPS1
#define AK4114_IPS0
#define AK4114_IPS(x)

/* AK4114_REG_INT0_MASK && AK4114_REG_INT1_MASK*/
#define AK4117_MQI
#define AK4117_MAT
#define AK4117_MCI
#define AK4117_MUL
#define AK4117_MDTS
#define AK4117_MPE
#define AK4117_MAN
#define AK4117_MPR

/* AK4114_REG_RCS0 */
#define AK4114_QINT
#define AK4114_AUTO
#define AK4114_CINT
#define AK4114_UNLCK
#define AK4114_DTSCD
#define AK4114_PEM
#define AK4114_AUDION
#define AK4114_PAR

/* AK4114_REG_RCS1 */
#define AK4114_FS3
#define AK4114_FS2
#define AK4114_FS1
#define AK4114_FS0
#define AK4114_FS_44100HZ
#define AK4114_FS_48000HZ
#define AK4114_FS_32000HZ
#define AK4114_FS_88200HZ
#define AK4114_FS_96000HZ
#define AK4114_FS_176400HZ
#define AK4114_FS_192000HZ
#define AK4114_V
#define AK4114_QCRC
#define AK4114_CCRC

/* flags for snd_ak4114_check_rate_and_errors() */
#define AK4114_CHECK_NO_STAT
#define AK4114_CHECK_NO_RATE

#define AK4114_CONTROLS

ak4114_write_t;
ak4114_read_t;

enum {};

struct ak4114 {};

int snd_ak4114_create(struct snd_card *card,
		      ak4114_read_t *read, ak4114_write_t *write,
		      const unsigned char pgm[6], const unsigned char txcsb[5],
		      void *private_data, struct ak4114 **r_ak4114);
void snd_ak4114_reg_write(struct ak4114 *ak4114, unsigned char reg, unsigned char mask, unsigned char val);
void snd_ak4114_reinit(struct ak4114 *ak4114);
int snd_ak4114_build(struct ak4114 *ak4114,
		     struct snd_pcm_substream *playback_substream,
                     struct snd_pcm_substream *capture_substream);
int snd_ak4114_external_rate(struct ak4114 *ak4114);
int snd_ak4114_check_rate_and_errors(struct ak4114 *ak4114, unsigned int flags);

#ifdef CONFIG_PM
void snd_ak4114_suspend(struct ak4114 *chip);
void snd_ak4114_resume(struct ak4114 *chip);
#else
static inline void snd_ak4114_suspend(struct ak4114 *chip) {}
static inline void snd_ak4114_resume(struct ak4114 *chip) {}
#endif

#endif /* __SOUND_AK4114_H */