blob: 04ecdf280d45bde134d7089774b12fc5e1030490 [file] [log] [blame]
/*
* 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