diff options
Diffstat (limited to 'sound/soc/codecs/ak4458.h')
-rw-r--r-- | sound/soc/codecs/ak4458.h | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/sound/soc/codecs/ak4458.h b/sound/soc/codecs/ak4458.h new file mode 100644 index 000000000000..04ecdf280d45 --- /dev/null +++ b/sound/soc/codecs/ak4458.h @@ -0,0 +1,130 @@ +/* + * ak4458.h -- audio driver for AK4458 + * + * Copyright (C) 2016 Asahi Kasei Microdevices Corporation + * Author: Tsuyoshi Mutsuro + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#ifndef _AK4458_H +#define _AK4458_H + +#include <linux/regmap.h> + +/* Settings */ +#define AK4458_ACKS_USE_MANUAL_MODE + +#define AK4458_00_CONTROL1 0x00 +#define AK4458_01_CONTROL2 0x01 +#define AK4458_02_CONTROL3 0x02 +#define AK4458_03_LCHATT 0x03 +#define AK4458_04_RCHATT 0x04 +#define AK4458_05_CONTROL4 0x05 +#define AK4458_06_DSD1 0x06 +#define AK4458_07_CONTROL5 0x07 +#define AK4458_08_SOUND_CONTROL 0x08 +#define AK4458_09_DSD2 0x09 +#define AK4458_0A_CONTROL6 0x0A +#define AK4458_0B_CONTROL7 0x0B +#define AK4458_0C_CONTROL8 0x0C +#define AK4458_0D_CONTROL9 0x0D +#define AK4458_0E_CONTROL10 0x0E +#define AK4458_0F_L2CHATT 0x0F +#define AK4458_10_R2CHATT 0x10 +#define AK4458_11_L3CHATT 0x11 +#define AK4458_12_R3CHATT 0x12 +#define AK4458_13_L4CHATT 0x13 +#define AK4458_14_R4CHATT 0x14 + +/* Bitfield Definitions */ + +/* AK4458_00_CONTROL1 (0x00) Fields */ +//Addr Register Name D7 D6 D5 D4 D3 D2 D1 D0 +//00H Control 1 ACKS 0 0 0 DIF2 DIF1 DIF0 RSTN + +//MONO1 & SELLR1 bits +#define AK4458_DAC1_LR_MASK 0x0A +#define AK4458_DAC1_INV_MASK 0xC0 + +//MONO2 & SELLR2 bits +#define AK4458_DAC2_MASK1 0x20 +#define AK4458_DAC2_MASK2 0x38 + +//MONO3 & SELLR3 bits +#define AK4458_DAC3_LR_MASK 0x44 +#define AK4458_DAC3_INV_MASK 0x30 + +//MONO4 & SELLR4 bits +#define AK4458_DAC4_LR_MASK 0x88 +#define AK4458_DAC4_INV_MASK 0xC0 + + +//SDS2-0 bits +#define AK4458_SDS0__MASK 0x10 +#define AK4458_SDS12_MASK 0x30 + +//Digital Filter (SD, SLOW, SSLOW) +#define AK4458_SD_MASK 0x20 +#define AK4458_SLOW_MASK 0x01 +#define AK4458_SSLOW_MASK 0x01 + +//DIF2 1 0 +// x 1 0 MSB justified Figure 3 (default) +// x 1 1 I2S Compliment Figure 4 +#define AK4458_DIF_MASK 0x0E +#define AK4458_DIF_MSB_LOW_FS_MODE (2 << 1) +#define AK4458_DIF_I2S_LOW_FS_MODE (3 << 1) + +#define AK4458_DIF_16BIT_LSB (0 << 1) +#define AK4458_DIF_20BIT_LSB (1 << 1) +#define AK4458_DIF_24BIT_MSB (2 << 1) +#define AK4458_DIF_24BIT_I2S (3 << 1) +#define AK4458_DIF_24BIT_LSB (4 << 1) +#define AK4458_DIF_32BIT_LSB (5 << 1) +#define AK4458_DIF_32BIT_MSB (6 << 1) +#define AK4458_DIF_32BIT_I2S (7 << 1) + + +// ACKS is Auto mode so disable the Manual feature +//#define AK4458_ACKS_USE_MANUAL_MODE +/* AK4458_00_CONTROL1 (0x00) D0 bit */ +#define AK4458_RSTN_MASK 0x01 +#define AK4458_RSTN (0x1 << 0) + + +#ifdef AK4458_ACKS_USE_MANUAL_MODE +/* AK4458_01_CONTROL2 (0x01) and AK4458_05_CONTROL4 (0x05) Fields */ +#define AK4458_DFS01_MASK 0x18 +#define AK4458_DFS2__MASK 0x02 +#define AK4458_DFS01_48KHZ (0x0 << 3) // 30kHz to 54kHz +#define AK4458_DFS2__48KHZ (0x0 << 1) // 30kHz to 54kHz + +#define AK4458_DFS01_96KHZ (0x1 << 3) // 54kHz to 108kHz +#define AK4458_DFS2__96KHZ (0x0 << 1) // 54kHz to 108kHz + +#define AK4458_DFS01_192KHZ (0x2 << 3) // 120kHz to 216kHz +#define AK4458_DFS2__192KHZ (0x0 << 1) // 120kHz to 216kHz + +#define AK4458_DFS01_384KHZ (0x0 << 3) // 384kHz +#define AK4458_DFS2__384KHZ (0x1 << 1) // 384kHz + +#define AK4458_DFS01_768KHZ (0x1 << 3) // 768kHz +#define AK4458_DFS2__768KHZ (0x1 << 1) // 768kHz +#endif + +extern const struct regmap_config ak4458_i2c_regmap_config; +extern const struct regmap_config ak4458_spi_regmap_config; +extern const struct dev_pm_ops ak4458_pm; + +int ak4458_probe(struct device *dev, struct regmap *regmap); +void ak4458_remove(struct device *dev); + +#endif |