summaryrefslogtreecommitdiff
path: root/sound/soc/codecs/ak4458.h
diff options
context:
space:
mode:
Diffstat (limited to 'sound/soc/codecs/ak4458.h')
-rw-r--r--sound/soc/codecs/ak4458.h130
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