mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-08 12:58:12 -04:00
sound/codecs:add ti2558 driver
sofiar use smart pa ti2558, add kernel drivers. Change-Id: I02b490c17e96224d2fd9510d3e214900a4172b4a Reviewed-on: https://gerrit.mot.com/1396120 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Tested-by: Jira Key Reviewed-by: Yuesheng Huang <huangys@motorola.com> Reviewed-by: Hujun Liao <liaohj@motorola.com> Submit-Approved: Jira Key
This commit is contained in:
parent
5a28fcc34d
commit
720af089a6
9 changed files with 3275 additions and 0 deletions
|
|
@ -24,3 +24,9 @@ LOCAL_MODULE := tas2560_calib.ko
|
|||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := tas2562.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
|
|
|
|||
|
|
@ -19,6 +19,11 @@ ifneq (,$(filter channel%, $(TARGET_PRODUCT)))
|
|||
EXTRA_CFLAGS += -DCONFIG_TAS2560_REGMAP -DCONFIG_TAS2560_CODEC -DCONFIG_TAS2560_MISC -DCONFIG_SND_SOC_TAS2560
|
||||
endif
|
||||
|
||||
ifneq (,$(filter sofiar%, $(TARGET_PRODUCT)))
|
||||
EXTRA_CFLAGS += -DCONFIG_TAS2562_REGMAP -DCONFIG_TAS2562_CODEC -DCONFIG_SND_SOC_TAS2562 -DTAS2558_CODEC
|
||||
endif
|
||||
|
||||
|
||||
ifeq ($(KDIR),)
|
||||
PLMA_HOSTSW_DIR=$(realpath -f $(srctree)/$(src))
|
||||
else
|
||||
|
|
@ -49,3 +54,6 @@ obj-m += tas2560_algo.o
|
|||
|
||||
tas2560_calib-objs = tas2560-calib.o
|
||||
obj-m += tas2560_calib.o
|
||||
|
||||
tas2562-objs = tas2562-codec.o tas2562-regmap.o
|
||||
obj-m += tas2562.o
|
||||
|
|
|
|||
1098
sound/soc/codecs/tas2562-codec.c
Normal file
1098
sound/soc/codecs/tas2562-codec.c
Normal file
File diff suppressed because it is too large
Load diff
31
sound/soc/codecs/tas2562-codec.h
Normal file
31
sound/soc/codecs/tas2562-codec.h
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
/*
|
||||
* =============================================================================
|
||||
* Copyright (c) 2016 Texas Instruments Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation; version 2.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* File:
|
||||
* tas2562-codec.h
|
||||
*
|
||||
* Description:
|
||||
* header file for tas2562-codec.c
|
||||
*
|
||||
* =============================================================================
|
||||
*/
|
||||
|
||||
#ifndef _TAS2562_CODEC_H
|
||||
#define _TAS2562_CODEC_H
|
||||
|
||||
#include "tas2562.h"
|
||||
|
||||
int tas2562_register_codec(struct tas2562_priv *p_tas2562);
|
||||
int tas2562_deregister_codec(struct tas2562_priv *p_tas2562);
|
||||
int tas2562_load_config(struct tas2562_priv *p_tas2562);
|
||||
|
||||
#endif /* _TAS2562_CODEC_H */
|
||||
259
sound/soc/codecs/tas2562-misc.c
Normal file
259
sound/soc/codecs/tas2562-misc.c
Normal file
|
|
@ -0,0 +1,259 @@
|
|||
/*
|
||||
* =============================================================================
|
||||
* Copyright (c) 2016 Texas Instruments Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation; version 2.
|
||||
*
|
||||
* 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.
|
||||
* File:
|
||||
* tas2562-misc.c
|
||||
*
|
||||
* Description:
|
||||
* misc driver for Texas Instruments
|
||||
* TAS2562 High Performance 4W Smart Amplifier
|
||||
*
|
||||
* =============================================================================
|
||||
*/
|
||||
|
||||
#define DEBUG
|
||||
#include <linux/module.h>
|
||||
#include <linux/moduleparam.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/pm.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
#include <linux/firmware.h>
|
||||
#include <linux/regmap.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_gpio.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/syscalls.h>
|
||||
#include <linux/fcntl.h>
|
||||
#include <linux/miscdevice.h>
|
||||
#include <linux/uaccess.h>
|
||||
|
||||
#include "tas2562.h"
|
||||
#include "tas2562-misc.h"
|
||||
#include <linux/dma-mapping.h>
|
||||
|
||||
static int g_log_enable = 1;
|
||||
static struct tas2562_priv *g_tas2562;
|
||||
|
||||
static int tas2562_file_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
struct tas2562_priv *p_tas2562 = g_tas2562;
|
||||
|
||||
if (!try_module_get(THIS_MODULE))
|
||||
return -ENODEV;
|
||||
|
||||
file->private_data = (void *)p_tas2562;
|
||||
|
||||
if (g_log_enable)
|
||||
dev_info(p_tas2562->dev, "%s\n", __func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int tas2562_file_release(struct inode *inode, struct file *file)
|
||||
{
|
||||
struct tas2562_priv *p_tas2562 =
|
||||
(struct tas2562_priv *)file->private_data;
|
||||
|
||||
if (g_log_enable)
|
||||
dev_info(p_tas2562->dev, "%s\n", __func__);
|
||||
|
||||
file->private_data = (void *)NULL;
|
||||
module_put(THIS_MODULE);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static ssize_t tas2562_file_read(struct file *file,
|
||||
char *buf, size_t count, loff_t *ppos)
|
||||
{
|
||||
struct tas2562_priv *p_tas2562 =
|
||||
(struct tas2562_priv *)file->private_data;
|
||||
int ret = 0;
|
||||
unsigned int n_value = 0;
|
||||
unsigned char value = 0;
|
||||
unsigned char *p_kbuf = NULL;
|
||||
|
||||
mutex_lock(&p_tas2562->file_lock);
|
||||
|
||||
switch (p_tas2562->mn_dbg_cmd) {
|
||||
case TIAUDIO_CMD_REG_READ:
|
||||
{
|
||||
if (g_log_enable)
|
||||
dev_info(p_tas2562->dev,
|
||||
"TIAUDIO_CMD_REG_READ: current_reg = 0x%x, count=%d\n",
|
||||
p_tas2562->mn_current_reg, (int)count);
|
||||
if (count == 1) {
|
||||
ret = p_tas2562->read(p_tas2562,
|
||||
p_tas2562->mn_current_reg, &n_value);
|
||||
if (ret < 0) {
|
||||
dev_err(p_tas2562->dev,
|
||||
"dev read fail %d\n", ret);
|
||||
break;
|
||||
}
|
||||
|
||||
value = (u8)n_value;
|
||||
if (g_log_enable)
|
||||
dev_info(p_tas2562->dev, "TIAUDIO_CMD_REG_READ: n_value=0x%x, value=0x%x\n",
|
||||
n_value, value);
|
||||
ret = copy_to_user(buf, &value, 1);
|
||||
if (ret != 0) {
|
||||
/* Failed to copy all the data, exit */
|
||||
dev_err(p_tas2562->dev,
|
||||
"copy to user fail %d\n", ret);
|
||||
}
|
||||
} else if (count > 1) {
|
||||
p_kbuf = kzalloc(count, GFP_KERNEL);
|
||||
if (p_kbuf != NULL) {
|
||||
ret = p_tas2562->bulk_read(p_tas2562,
|
||||
p_tas2562->mn_current_reg, p_kbuf, count);
|
||||
if (ret < 0) {
|
||||
dev_err(p_tas2562->dev,
|
||||
"dev bulk read fail %d\n", ret);
|
||||
} else {
|
||||
ret = copy_to_user(buf, p_kbuf, count);
|
||||
if (ret != 0) {
|
||||
/* Failed to copy all the data, exit */
|
||||
dev_err(p_tas2562->dev,
|
||||
"copy to user fail %d\n", ret);
|
||||
}
|
||||
}
|
||||
|
||||
kfree(p_kbuf);
|
||||
} else {
|
||||
dev_err(p_tas2562->dev, "read no mem\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
p_tas2562->mn_dbg_cmd = 0;
|
||||
|
||||
mutex_unlock(&p_tas2562->file_lock);
|
||||
return count;
|
||||
}
|
||||
|
||||
static ssize_t tas2562_file_write(struct file *file,
|
||||
const char *buf, size_t count, loff_t *ppos)
|
||||
{
|
||||
struct tas2562_priv *p_tas2562 =
|
||||
(struct tas2562_priv *)file->private_data;
|
||||
int ret = 0;
|
||||
unsigned char *p_kbuf = NULL;
|
||||
unsigned int reg = 0;
|
||||
unsigned int len = 0;
|
||||
|
||||
mutex_lock(&p_tas2562->file_lock);
|
||||
|
||||
p_kbuf = kzalloc(count, GFP_KERNEL);
|
||||
if (p_kbuf == NULL) {
|
||||
/* dev_err(p_tas2562->dev, "write no mem\n"); */
|
||||
goto err;
|
||||
}
|
||||
|
||||
ret = copy_from_user(p_kbuf, buf, count);
|
||||
if (ret != 0) {
|
||||
dev_err(p_tas2562->dev, "copy_from_user failed.\n");
|
||||
goto err;
|
||||
}
|
||||
|
||||
p_tas2562->mn_dbg_cmd = p_kbuf[0];
|
||||
switch (p_tas2562->mn_dbg_cmd) {
|
||||
case TIAUDIO_CMD_REG_WITE:
|
||||
if (count > 5) {
|
||||
reg = ((unsigned int)p_kbuf[1] << 24) +
|
||||
((unsigned int)p_kbuf[2] << 16) +
|
||||
((unsigned int)p_kbuf[3] << 8) +
|
||||
(unsigned int)p_kbuf[4];
|
||||
len = count - 5;
|
||||
if (len == 1) {
|
||||
ret = p_tas2562->write(p_tas2562, reg, p_kbuf[5]);
|
||||
if (g_log_enable)
|
||||
dev_info(p_tas2562->dev,
|
||||
"TIAUDIO_CMD_REG_WITE, Reg=0x%x, Val=0x%x\n",
|
||||
reg, p_kbuf[5]);
|
||||
} else {
|
||||
ret = p_tas2562->bulk_write(p_tas2562,
|
||||
reg, &p_kbuf[5], len);
|
||||
}
|
||||
} else {
|
||||
dev_err(p_tas2562->dev, "%s, write len fail, count=%d.\n",
|
||||
__func__, (int)count);
|
||||
}
|
||||
p_tas2562->mn_dbg_cmd = 0;
|
||||
break;
|
||||
|
||||
case TIAUDIO_CMD_REG_READ:
|
||||
if (count == 5) {
|
||||
p_tas2562->mn_current_reg = ((unsigned int)p_kbuf[1] << 24) +
|
||||
((unsigned int)p_kbuf[2] << 16) +
|
||||
((unsigned int)p_kbuf[3] << 8) +
|
||||
(unsigned int)p_kbuf[4];
|
||||
if (g_log_enable) {
|
||||
dev_info(p_tas2562->dev,
|
||||
"TIAUDIO_CMD_REG_READ, whole=0x%x\n",
|
||||
p_tas2562->mn_current_reg);
|
||||
}
|
||||
} else {
|
||||
dev_err(p_tas2562->dev, "read len fail.\n");
|
||||
}
|
||||
break;
|
||||
}
|
||||
err:
|
||||
if (p_kbuf != NULL)
|
||||
kfree(p_kbuf);
|
||||
|
||||
mutex_unlock(&p_tas2562->file_lock);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
static const struct file_operations fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.read = tas2562_file_read,
|
||||
.write = tas2562_file_write,
|
||||
.unlocked_ioctl = NULL,
|
||||
.open = tas2562_file_open,
|
||||
.release = tas2562_file_release,
|
||||
};
|
||||
|
||||
#define MODULE_NAME "tas2562"
|
||||
static struct miscdevice tas2562_misc = {
|
||||
.minor = MISC_DYNAMIC_MINOR,
|
||||
.name = MODULE_NAME,
|
||||
.fops = &fops,
|
||||
};
|
||||
|
||||
int tas2562_register_misc(struct tas2562_priv *p_tas2562)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
g_tas2562 = p_tas2562;
|
||||
ret = misc_register(&tas2562_misc);
|
||||
if (ret)
|
||||
dev_err(p_tas2562->dev, "TAS2562 misc fail: %d\n", ret);
|
||||
|
||||
dev_info(p_tas2562->dev, "%s, leave\n", __func__);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int tas2562_deregister_misc(struct tas2562_priv *p_tas2562)
|
||||
{
|
||||
misc_deregister(&tas2562_misc);
|
||||
return 0;
|
||||
}
|
||||
|
||||
MODULE_AUTHOR("Texas Instruments Inc.");
|
||||
MODULE_DESCRIPTION("TAS2562 Misc Smart Amplifier driver");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
38
sound/soc/codecs/tas2562-misc.h
Normal file
38
sound/soc/codecs/tas2562-misc.h
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
/*
|
||||
* =============================================================================
|
||||
* Copyright (c) 2016 Texas Instruments Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation; version 2.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* File:
|
||||
* tas2562-misc.h
|
||||
*
|
||||
* Description:
|
||||
* header file for tas2562-misc.c
|
||||
*
|
||||
* =============================================================================
|
||||
*/
|
||||
|
||||
#ifndef _TAS2562_MISC_H
|
||||
#define _TAS2562_MISC_H
|
||||
|
||||
#define TIAUDIO_CMD_REG_WITE 1
|
||||
#define TIAUDIO_CMD_REG_READ 2
|
||||
#define TIAUDIO_CMD_DEBUG_ON 3
|
||||
#define TIAUDIO_CMD_CALIBRATION 7
|
||||
#define TIAUDIO_CMD_SAMPLERATE 8
|
||||
#define TIAUDIO_CMD_BITRATE 9
|
||||
#define TIAUDIO_CMD_DACVOLUME 10
|
||||
#define TIAUDIO_CMD_SPEAKER 11
|
||||
|
||||
int tas2562_register_misc(struct tas2562_priv *p_tas2562);
|
||||
int tas2562_deregister_misc(struct tas2562_priv *p_tas2562);
|
||||
|
||||
#endif /* _TAS2562_MISC_H */
|
||||
1135
sound/soc/codecs/tas2562-regmap.c
Normal file
1135
sound/soc/codecs/tas2562-regmap.c
Normal file
File diff suppressed because it is too large
Load diff
655
sound/soc/codecs/tas2562.h
Normal file
655
sound/soc/codecs/tas2562.h
Normal file
|
|
@ -0,0 +1,655 @@
|
|||
|
||||
#ifndef __TAS2562_
|
||||
#define __TAS2562_
|
||||
|
||||
#define TAS2562_DRIVER_ID "2.1.0"
|
||||
|
||||
/* Page Control Register */
|
||||
#define TAS2562_PAGECTL_REG 0
|
||||
|
||||
/* Book Control Register (available in page0 of each book) */
|
||||
#define TAS2562_BOOKCTL_PAGE 0
|
||||
#define TAS2562_BOOKCTL_REG 127
|
||||
|
||||
#define TAS2562_REG(book, page, reg) (((book * 256 * 128) + \
|
||||
(page * 128)) + reg)
|
||||
|
||||
#define TAS2562_BOOK_ID(reg) (reg / (256 * 128))
|
||||
|
||||
#define TAS2562_PAGE_ID(reg) ((reg % (256 * 128)) / 128)
|
||||
|
||||
#define TAS2562_BOOK_REG(reg) (reg % (256 * 128))
|
||||
|
||||
#define TAS2562_PAGE_REG(reg) ((reg % (256 * 128)) % 128)
|
||||
|
||||
|
||||
/* Software Reset */
|
||||
#define TAS2562_SOFTWARERESET TAS2562_REG(0x0, 0x0, 0x01)
|
||||
#define TAS2562_SOFTWARERESET_SOFTWARERESET_MASK (0x1 << 0),
|
||||
#define TAS2562_SOFTWARERESET_SOFTWARERESET_DONTRESET (0x0 << 0)
|
||||
#define TAS2562_SOFTWARERESET_SOFTWARERESET_RESET (0x1 << 0)
|
||||
|
||||
/* Power Control */
|
||||
#define TAS2562_POWERCONTROL TAS2562_REG(0x0, 0x0, 0x02)
|
||||
#define TAS2562_POWERCONTROL_ISNSPOWER_MASK (0x1 << 3)
|
||||
#define TAS2562_POWERCONTROL_ISNSPOWER_ACTIVE (0x0 << 3)
|
||||
#define TAS2562_POWERCONTROL_ISNSPOWER_POWEREDDOWN (0x1 << 3)
|
||||
#define TAS2562_POWERCONTROL_VSNSPOWER_MASK (0x1 << 2)
|
||||
#define TAS2562_POWERCONTROL_VSNSPOWER_ACTIVE (0x0 << 2)
|
||||
#define TAS2562_POWERCONTROL_VSNSPOWER_POWEREDDOWN (0x1 << 2)
|
||||
#define TAS2562_POWERCONTROL_OPERATIONALMODE10_MASK (0x3 << 0)
|
||||
#define TAS2562_POWERCONTROL_OPERATIONALMODE10_ACTIVE (0x0 << 0)
|
||||
#define TAS2562_POWERCONTROL_OPERATIONALMODE10_MUTE (0x1 << 0)
|
||||
#define TAS2562_POWERCONTROL_OPERATIONALMODE10_SHUTDOWN (0x2 << 0)
|
||||
|
||||
/* data format */
|
||||
#define TAS2562_DATAFORMAT_SHIFT 2
|
||||
#define TAS2562_DATAFORMAT_I2S 0x0
|
||||
#define TAS2562_DATAFORMAT_DSP 0x1
|
||||
#define TAS2562_DATAFORMAT_RIGHT_J 0x2
|
||||
#define TAS2562_DATAFORMAT_LEFT_J 0x3
|
||||
|
||||
#define TAS2562_DAI_FMT_MASK (0x7 << TAS2562_DATAFORMAT_SHIFT)
|
||||
|
||||
/* Playback Configuration Reg0 */
|
||||
#define TAS2562_PLAYBACKCONFIGURATIONREG0 TAS2562_REG(0x0, 0x0, 0x03)
|
||||
#define TAS2562_PLAYBACKCONFIGURATIONREG0_DCBLOCKER_MASK (0x1 << 6)
|
||||
#define TAS2562_PLAYBACKCONFIGURATIONREG0_DCBLOCKER_ENABLED (0x0 << 6)
|
||||
#define TAS2562_PLAYBACKCONFIGURATIONREG0_DCBLOCKER_DISABLED (0x1 << 6)
|
||||
#define TAS2562_PLAYBACKCONFIGURATIONREG0_AMPLIFIERLEVEL51_MASK (0x1f << 1)
|
||||
|
||||
/* Misc Configuration Reg0 */
|
||||
#define TAS2562_MISCCONFIGURATIONREG0 TAS2562_REG(0x0, 0x0, 0x04)
|
||||
#define TAS2562_MISCCONFIGURATIONREG0_CPPGRETRY_MASK (0x1 << 7)
|
||||
#define TAS2562_MISCCONFIGURATIONREG0_CPPGRETRY_DONOTRETRY (0x0 << 7)
|
||||
#define TAS2562_MISCCONFIGURATIONREG0_CPPGRETRY_RETRY (0x1 << 7)
|
||||
#define TAS2562_MISCCONFIGURATIONREG0_VBATPRORETRY_MASK (0x1 << 6)
|
||||
#define TAS2562_MISCCONFIGURATIONREG0_VBATPRORETRY_DONOTRETRY (0x0 << 6)
|
||||
#define TAS2562_MISCCONFIGURATIONREG0_VBATPRORETRY_RETRY (0x1 << 6)
|
||||
#define TAS2562_MISCCONFIGURATIONREG0_OCERETRY_MASK (0x1 << 5)
|
||||
#define TAS2562_MISCCONFIGURATIONREG0_OCERETRY_DONOTRETRY (0x0 << 5)
|
||||
#define TAS2562_MISCCONFIGURATIONREG0_OCERETRY_RETRY (0x1 << 5)
|
||||
#define TAS2562_MISCCONFIGURATIONREG0_OTERETRY_MASK (0x1 << 4)
|
||||
#define TAS2562_MISCCONFIGURATIONREG0_OTERETRY_DONOTRETRY (0x0 << 4)
|
||||
#define TAS2562_MISCCONFIGURATIONREG0_OTERETRY_RETRY (0x1 << 4)
|
||||
#define TAS2562_MISCCONFIGURATIONREG0_IRQZPULL_MASK (0x1 << 3)
|
||||
#define TAS2562_MISCCONFIGURATIONREG0_IRQZPULL_DISABLED (0x0 << 3)
|
||||
#define TAS2562_MISCCONFIGURATIONREG0_IRQZPULL_ENABLED (0x1 << 3)
|
||||
#define TAS2562_MISCCONFIGURATIONREG0_AMPSS_MASK (0x1 << 2)
|
||||
#define TAS2562_MISCCONFIGURATIONREG0_AMPSS_DISABLED (0x0 << 2)
|
||||
#define TAS2562_MISCCONFIGURATIONREG0_AMPSS_ENABLED (0x1 << 2)
|
||||
|
||||
/* TDM Configuration Reg0 */
|
||||
#define TAS2562_TDMCONFIGURATIONREG0 TAS2562_REG(0x0, 0x0, 0x06)
|
||||
#define TAS2562_TDMCONFIGURATIONREG0_SAMPRATERAMP_MASK (0x1 << 5)
|
||||
#define TAS2562_TDMCONFIGURATIONREG0_SAMPRATERAMP_48KHZ (0x0 << 5)
|
||||
#define TAS2562_TDMCONFIGURATIONREG0_SAMPRATERAMP_44_1KHZ (0x1 << 5)
|
||||
#define TAS2562_TDMCONFIGURATIONREG0_DETECTSAMPRATE_MASK (0x1 << 4)
|
||||
#define TAS2562_TDMCONFIGURATIONREG0_DETECTSAMPRATE_DISABLED (0x1 << 4)
|
||||
#define TAS2562_TDMCONFIGURATIONREG0_DETECTSAMPRATE_ENABLED (0x0 << 4)
|
||||
#define TAS2562_TDMCONFIGURATIONREG0_SAMPRATE31_MASK (0x7 << 1)
|
||||
#define TAS2562_TDMCONFIGURATIONREG0_SAMPRATE31_14_7_16KHZ (0x1 << 1)
|
||||
#define TAS2562_TDMCONFIGURATIONREG0_SAMPRATE31_44_1_48KHZ (0x4 << 1)
|
||||
#define TAS2562_TDMCONFIGURATIONREG0_SAMPRATE31_88_2_96KHZ (0x5 << 1)
|
||||
#define TAS2562_TDMCONFIGURATIONREG0_SAMPRATE31_176_4_192KHZ (0x6 << 1)
|
||||
#define TAS2562_TDMCONFIGURATIONREG0_FRAMESTART_MASK (0x1 << 0)
|
||||
#define TAS2562_TDMCONFIGURATIONREG0_FRAMESTART_LOWTOHIGH (0x0 << 0)
|
||||
#define TAS2562_TDMCONFIGURATIONREG0_FRAMESTART_HIGHTOLOW (0x1 << 0)
|
||||
|
||||
/* TDM Configuration Reg1 */
|
||||
#define TAS2562_TDMCONFIGURATIONREG1 TAS2562_REG(0x0, 0x0, 0x07)
|
||||
#define TAS2562_TDMCONFIGURATIONREG1_RXJUSTIFY_MASK (0x1 << 6)
|
||||
#define TAS2562_TDMCONFIGURATIONREG1_RXJUSTIFY_LEFT (0x0 << 6)
|
||||
#define TAS2562_TDMCONFIGURATIONREG1_RXJUSTIFY_RIGHT (0x1 << 6)
|
||||
#define TAS2562_TDMCONFIGURATIONREG1_RXOFFSET51_MASK (0x1f << 1)
|
||||
#define TAS2562_TDMCONFIGURATIONREG1_RXOFFSET51_SHIFT (1)
|
||||
#define TAS2562_TDMCONFIGURATIONREG1_RXEDGE_MASK (0x1 << 0)
|
||||
#define TAS2562_TDMCONFIGURATIONREG1_RXEDGE_RISING (0x0 << 0)
|
||||
#define TAS2562_TDMCONFIGURATIONREG1_RXEDGE_FALLING (0x1 << 0)
|
||||
|
||||
/* TDM Configuration Reg2 */
|
||||
#define TAS2562_TDMCONFIGURATIONREG2 TAS2562_REG(0x0, 0x0, 0x08)
|
||||
#define TAS2562_TDMCONFIGURATIONREG2_RXSCFG54_MASK (0x3 << 4)
|
||||
#define TAS2562_TDMCONFIGURATIONREG2_RXSCFG54_MONO_I2C (0x0 << 4)
|
||||
#define TAS2562_TDMCONFIGURATIONREG2_RXSCFG54_MONO_LEFT (0x1 << 4)
|
||||
#define TAS2562_TDMCONFIGURATIONREG2_RXSCFG54_MONO_RIGHT (0x2 << 4)
|
||||
#define TAS2562_TDMCONFIGURATIONREG2_RXSCFG54_STEREO_DOWNMIX (0x3 << 4)
|
||||
#define TAS2562_TDMCONFIGURATIONREG2_RXWLEN32_MASK (0x3 << 2)
|
||||
#define TAS2562_TDMCONFIGURATIONREG2_RXWLEN32_16BITS (0x0 << 2)
|
||||
#define TAS2562_TDMCONFIGURATIONREG2_RXWLEN32_20BITS (0x1 << 2)
|
||||
#define TAS2562_TDMCONFIGURATIONREG2_RXWLEN32_24BITS (0x2 << 2)
|
||||
#define TAS2562_TDMCONFIGURATIONREG2_RXWLEN32_32BITS (0x3 << 2)
|
||||
#define TAS2562_TDMCONFIGURATIONREG2_RXSLEN10_MASK (0x3 << 0)
|
||||
#define TAS2562_TDMCONFIGURATIONREG2_RXSLEN10_16BITS (0x0 << 0)
|
||||
#define TAS2562_TDMCONFIGURATIONREG2_RXSLEN10_24BITS (0x1 << 0)
|
||||
#define TAS2562_TDMCONFIGURATIONREG2_RXSLEN10_32BITS (0x2 << 0)
|
||||
|
||||
/* TDM Configuration Reg3 */
|
||||
#define TAS2562_TDMCONFIGURATIONREG3 TAS2562_REG(0x0, 0x0, 0x09)
|
||||
#define TAS2562_TDMCONFIGURATIONREG3_RXSLOTRIGHT74_MASK (0xf << 4)
|
||||
#define TAS2562_TDMCONFIGURATIONREG3_RXSLOTLeft30_Mask (0xf << 0)
|
||||
|
||||
/* TDM Configuration Reg4 */
|
||||
#define TAS2562_TDMConfigurationReg4 TAS2562_REG(0x0, 0x0, 0x0A)
|
||||
#define TAS2562_TDMCONFIGURATIONREG4_TXKEEPER_MASK (0x1 << 5)
|
||||
#define TAS2562_TDMCONFIGURATIONREG4_TXKEEPER_DISABLE (0x0 << 5)
|
||||
#define TAS2562_TDMCONFIGURATIONREG4_TXKEEPER_ENABLE (0x1 << 5)
|
||||
#define TAS2562_TDMCONFIGURATIONREG4_TXFILL_MASK (0x1 << 4)
|
||||
#define TAS2562_TDMCONFIGURATIONREG4_TXFILL_TRANSMIT0 (0x0 << 4)
|
||||
#define TAS2562_TDMCONFIGURATIONREG4_TXFILL_TRANSMITHIZ (0x1 << 4)
|
||||
#define TAS2562_TDMCONFIGURATIONREG4_TXOFFSET31_MASK (0x7 << 1)
|
||||
#define TAS2562_TDMCONFIGURATIONREG4_TXEDGE_MASK (0x1 << 0)
|
||||
#define TAS2562_TDMCONFIGURATIONREG4_TXEDGE_RISING (0x0 << 0)
|
||||
#define TAS2562_TDMCONFIGURATIONREG4_TXEDGE_FALLING (0x1 << 0)
|
||||
|
||||
/* TDM Configuration Reg5 */
|
||||
#define TAS2562_TDMCONFIGURATIONREG5 TAS2562_REG(0x0, 0x0, 0x0B)
|
||||
#define TAS2562_TDMCONFIGURATIONREG5_VSNSTX_MASK (0x1 << 6)
|
||||
#define TAS2562_TDMCONFIGURATIONREG5_VSNSTX_DISABLE (0x0 << 6),
|
||||
#define TAS2562_TDMCONFIGURATIONREG5_VSNSTX_ENABLE (0x1 << 6),
|
||||
#define TAS2562_TDMCONFIGURATIONREG5_VSNSSLOT50_MASK (0x3f << 0)
|
||||
|
||||
/* TDM Configuration Reg6 */
|
||||
#define TAS2562_TDMCONFIGURATIONREG6 TAS2562_REG(0x0, 0x0, 0x0C)
|
||||
#define TAS2562_TDMCONFIGURATIONREG6_ISNSTX_MASK (0x1 << 6)
|
||||
#define TAS2562_TDMCONFIGURATIONREG6_ISNSTX_DISABLE (0x0 << 6),
|
||||
#define TAS2562_TDMCONFIGURATIONREG6_ISNSTX_ENABLE (0x1 << 6),
|
||||
#define TAS2562_TDMCONFIGURATIONREG6_ISNSSLOT50_MASK (0x3f << 0)
|
||||
|
||||
/* TDM Configuration Reg7 */
|
||||
#define TAS2562_TDMCONFIGURATIONREG7 TAS2562_REG(0x0, 0x0, 0x0D)
|
||||
#define TAS2562_TDMCONFIGURATIONREG7_VBATSLEN_MASK (0x1 << 7)
|
||||
#define TAS2562_TDMCONFIGURATIONREG7_VBATSLEN_8BITS (0x0 << 7)
|
||||
#define TAS2562_TDMCONFIGURATIONREG7_VBATSLEN_16BITS (0x1 << 7)
|
||||
#define TAS2562_TDMCONFIGURATIONREG7_VBATTX_MASK (0x1 << 6)
|
||||
#define TAS2562_TDMCONFIGURATIONREG7_VBATTX_DISABLE (0x0 << 6)
|
||||
#define TAS2562_TDMCONFIGURATIONREG7_VBATTX_ENABLE (0x1 << 6)
|
||||
#define TAS2562_TDMCONFIGURATIONREG7_VBATSLOT50_MASK (0x3f << 0)
|
||||
|
||||
/* TDM Configuration Reg8 */
|
||||
#define TAS2562_TDMCONFIGURATIONREG8 TAS2562_REG(0x0, 0x0, 0x0E)
|
||||
#define TAS2562_TDMCONFIGURATIONREG8_TEMPTX_MASK (0x1 << 6)
|
||||
#define TAS2562_TDMCONFIGURATIONREG8_TEMPTX_DISABLE (0x0 << 6)
|
||||
#define TAS2562_TDMCONFIGURATIONREG8_TEMPTX_ENABLE (0x1 << 6)
|
||||
#define TAS2562_TDMCONFIGURATIONREG8_TEMPSLOT50_MASK (0x3f << 0)
|
||||
|
||||
/* TDM Configuration Reg9 */
|
||||
#define TAS2562_TDMCONFIGURATIONREG9 TAS2562_REG(0x0, 0x0, 0x0F)
|
||||
#define TAS2562_TDMCONFIGURATIONREG9_GAINTX_MASK (0x1 << 6)
|
||||
#define TAS2562_TDMCONFIGURATIONREG9_GAINTX_DISABLE (0x0 << 6)
|
||||
#define TAS2562_TDMCONFIGURATIONREG9_GAINTX_ENABLE (0x1 << 6)
|
||||
#define TAS2562_TDMCONFIGURATIONREG9_GAINSLOT50_MASK (0x3f << 0)
|
||||
|
||||
/* Limiter Configuration Reg0 */
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG0 TAS2562_REG(0x0, 0x0, 0x12)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG0_LIMATKST54_MASK (0x3 << 4)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG0_LIMATKST54_1 (0x2 << 4)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG0_LIMATKST54_2 (0x3 << 4)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG0_LIMATKST54_0_25 (0x0 << 4)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG0_LIMATKST54_0_5 (0x1 << 4)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG0_LIMATKRT31_MASK (0x7 << 1)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG0_LIMATKRT31_5 (0x0 << 1)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG0_LIMATKRT31_10 (0x1 << 1)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG0_LIMATKRT31_20 (0x2 << 1)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG0_LIMATKRT31_40 (0x3 << 1)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG0_LIMATKRT31_80 (0x4 << 1)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG0_LIMATKRT31_160 (0x5 << 1)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG0_LIMATKRT31_320 (0x6 << 1)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG0_LIMATKRT31_640 (0x7 << 1)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG0_LIMEN_MASK (0x1 << 0)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG0_LIMEN_DISABLED (0x0 << 0)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG0_LIMEN_ENABLED (0x1 << 0)
|
||||
|
||||
/* Limiter Configuration Reg1 */
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG1 TAS2562_REG(0x0, 0x0, 0x13)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG1_LIMRLSST76_MASK (0x3 << 6)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG1_LIMRLSST76_1 (0x2 << 6)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG1_LIMRLSST76_2 (0x3 << 6)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG1_LIMRLSST76_0_25 (0x0 << 6)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG1_LIMRLSST76_0_5 (0x1 << 6)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG1_LIMRLSRT53_MASK (0x7 << 3)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG1_LIMRLSRT53_10 (0x0 << 3)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG1_LIMRLSRT53_50 (0x1 << 3)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG1_LIMRLSRT53_100 (0x2 << 3)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG1_LIMRLSRT53_250 (0x3 << 3)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG1_LIMRLSRT53_500 (0x4 << 3)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG1_LIMRLSRT53_750 (0x5 << 3)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG1_LIMRLSRT53_1000 (0x6 << 3)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG1_LIMRLSRT53_1500 (0x7 << 3)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG1_LIMHLDTM20_MASK (0x7 << 0)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG1_LIMHLDTM20_0 (0x0 << 0)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG1_LIMHLDTM20_10 (0x1 << 0)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG1_LIMHLDTM20_25 (0x2 << 0)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG1_LIMHLDTM20_50 (0x3 << 0)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG1_LIMHLDTM20_100 (0x4 << 0)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG1_LIMHLDTM20_250 (0x5 << 0)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG1_LIMHLDTM20_500 (0x6 << 0)
|
||||
#define TAS2562_LIMITERCONFIGURATIONREG1_LIMHLDTM20_1000 (0x7 << 0)
|
||||
|
||||
/* Brown Out Prevention Reg0 */
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG0 TAS2562_REG(0x0, 0x0, 0x14)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG0_BOPSDEN_MASK (0x1 << 4)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG0_BOPSDEN_DISABLED (0x0 << 4)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG0_BOPSDEN_ENABLED (0x1 << 4)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG0_BOPHLDCLR_MASK (0x1 << 3)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG0_BOPHLDCLR_DONTCLEAR (0x0 << 3)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG0_BOPHLDCLR_CLEAR (0x1 << 3)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG0_BOPINFHLD_MASK (0x1 << 2)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG0_BOPINFHLD_USEHOLDTIME (0x0 << 2)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG0_BOPINFHLD_HOLDUNTILCLEARED (0x1 << 2)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG0_BOPMUTE_MASK (0x1 << 1)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG0_BOPMUTE_DONOTMUTE (0x0 << 1)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG0_BOPMUTE_MUTE (0x1 << 1)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG0_BOPEN_MASK (0x1 << 0)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG0_BOPEN_DISABLED (0x0 << 0)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG0_BOPEN_ENABLED (0x1 << 0)
|
||||
|
||||
/* Brown Out Prevention Reg1 */
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG1 TAS2562_REG(0x0, 0x0, 0x15)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG1_BOPATKRT75_MASK (0x7 << 5)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG1_BOPATKRT75_1 (0x0 << 5)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG1_BOPATKRT75_2 (0x1 << 5)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG1_BOPATKRT75_4 (0x2 << 5)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG1_BOPATKRT75_8 (0x3 << 5)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG1_BOPATKRT75_16 (0x4 << 5)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG1_BOPATKRT75_32 (0x5 << 5)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG1_BOPATKRT75_64 (0x6 << 5)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG1_BOPATKRT75_128 (0x7 << 5)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG1_BOPATKST43_MASK (0x3 << 3)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG1_BOPATKST43_1 (0x1 << 3)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG1_BOPATKST43_2 (0x3 << 3)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG1_BOPATKST43_0_5 (0x0 << 3)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG1_BOPATKST43_1_5 (0x2 << 3)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG1_BOPHLDTM20_MASK (0x7 << 0)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG1_BOPHLDTM20_0 (0x0 << 0)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG1_BOPHLDTM20_10 (0x1 << 0)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG1_BOPHLDTM20_25 (0x2 << 0)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG1_BOPHLDTM20_50 (0x3 << 0)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG1_BOPHLDTM20_100 (0x4 << 0)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG1_BOPHLDTM20_250 (0x5 << 0)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG1_BOPHLDTM20_500 (0x6 << 0)
|
||||
#define TAS2562_BROWNOUTPREVENTIONREG1_BOPHLDTM20_1000 (0x7 << 0)
|
||||
|
||||
/* Interrupt Mask Reg0 */
|
||||
#define TAS2562_INTERRUPTMASKREG0 TAS2562_REG(0x0, 0x0, 0x1A)
|
||||
#define TAS2562_INTERRUPTMASKREG0_LIMMUTEINTMASK_MASK (0x1 << 7)
|
||||
#define TAS2562_INTERRUPTMASKREG0_LIMMUTEINTMASK_UNMASK (0x0 << 7)
|
||||
#define TAS2562_INTERRUPTMASKREG0_LIMMUTEINTMASK_DISABLE (0x1 << 7)
|
||||
#define TAS2562_INTERRUPTMASKREG0_LIMINFHLDINTMASK_MASK (0x1 << 6)
|
||||
#define TAS2562_INTERRUPTMASKREG0_LIMINFHLDINTMASK_UNMASK (0x0 << 6)
|
||||
#define TAS2562_INTERRUPTMASKREG0_LIMINFHLDINTMASK_DISABLE (0x1 << 6)
|
||||
#define TAS2562_INTERRUPTMASKREG0_LIMMAXATNINTMASK_MASK (0x1 << 5)
|
||||
#define TAS2562_INTERRUPTMASKREG0_LIMMAXATNINTMASK_UNMASK (0x0 << 5)
|
||||
#define TAS2562_INTERRUPTMASKREG0_LIMMAXATNINTMASK_DISABLE (0x1 << 5)
|
||||
#define TAS2562_INTERRUPTMASKREG0_VBATLESSTHANINFINTMASK_MASK (0x1 << 4)
|
||||
#define TAS2562_INTERRUPTMASKREG0_VBATLESSTHANINFINTMASK_UNMASK (0x0 << 4)
|
||||
#define TAS2562_INTERRUPTMASKREG0_VBATLESSTHANINFINTMASK_DISABLE (0x1 << 4)
|
||||
#define TAS2562_INTERRUPTMASKREG0_LIMACTIVEFLAGINTMASK_MASK (0x1 << 3)
|
||||
#define TAS2562_INTERRUPTMASKREG0_LIMACTIVEFLAGINTMASK_UNMASK (0x0 << 3)
|
||||
#define TAS2562_INTERRUPTMASKREG0_LIMACTIVEFLAGINTMASK_DISABLE (0x1 << 3)
|
||||
#define TAS2562_INTERRUPTMASKREG0_TDMCLOCKERRORINTMASK_MASK (0x1 << 2)
|
||||
#define TAS2562_INTERRUPTMASKREG0_TDMCLOCKERRORINTMASK_UNMASK (0x0 << 2)
|
||||
#define TAS2562_INTERRUPTMASKREG0_TDMCLOCKERRORINTMASK_DISABLE (0x1 << 2)
|
||||
#define TAS2562_INTERRUPTMASKREG0_OCEINTMASK_MASK (0x1 << 1)
|
||||
#define TAS2562_INTERRUPTMASKREG0_OCEINTMASK_UNMASK (0x0 << 1)
|
||||
#define TAS2562_INTERRUPTMASKREG0_OCEINTMASK_DISABLE (0x1 << 1)
|
||||
#define TAS2562_INTERRUPTMASKREG0_OTEINTMASK_MASK (0x1 << 0)
|
||||
#define TAS2562_INTERRUPTMASKREG0_OTEINTMASK_UNMASK (0x0 << 0)
|
||||
#define TAS2562_INTERRUPTMASKREG0_OTEINTMASK_DISABLE (0x1 << 0)
|
||||
#define TAS2562_INTERRUPTMASKREG0_DISABLE 0xff
|
||||
|
||||
/* Interrupt Mask Reg1 */
|
||||
#define TAS2562_INTERRUPTMASKREG1 TAS2562_REG(0x0, 0x0, 0x1B)
|
||||
#define TAS2562_INTERRUPTMASKREG1_DSPOUTPUTINTMASK_MASK (0x1 << 7)
|
||||
#define TAS2562_INTERRUPTMASKREG1_DSPOUTPUTINTMASK_UNMASK (0x0 << 7)
|
||||
#define TAS2562_INTERRUPTMASKREG1_DSPOUTPUTINTMASK_DISABLE (0x1 << 7)
|
||||
#define TAS2562_INTERRUPTMASKREG1_CRCINTMASK_MASK (0x1 << 6)
|
||||
#define TAS2562_INTERRUPTMASKREG1_CRCINTMASK_UNMASK (0x0 << 6)
|
||||
#define TAS2562_INTERRUPTMASKREG1_CRCINTMASK_DISABLE (0x1 << 6)
|
||||
#define TAS2562_INTERRUPTMASKREG1_VBATOVLOINTMASK_MASK (0x1 << 2)
|
||||
#define TAS2562_INTERRUPTMASKREG1_VBATOVLOINTMASK_UNMASK (0x0 << 2)
|
||||
#define TAS2562_INTERRUPTMASKREG1_VBATOVLOINTMASK_DISABLE (0x1 << 2)
|
||||
#define TAS2562_INTERRUPTMASKREG1_VBATUVLOINTMASK_MASK (0x1 << 1)
|
||||
#define TAS2562_INTERRUPTMASKREG1_VBATUVLOINTMASK_UNMASK (0x0 << 1)
|
||||
#define TAS2562_INTERRUPTMASKREG1_VBATUVLOINTMASK_DISABLE (0x1 << 1)
|
||||
#define TAS2562_INTERRUPTMASKREG1_BROWNOUTFLAGINTMASK_MASK (0x1 << 0)
|
||||
#define TAS2562_INTERRUPTMASKREG1_BROWNOUTFLAGINTMASK_UNMASK (0x0 << 0)
|
||||
#define TAS2562_INTERRUPTMASKREG1_BROWNOUTFLAGINTMASK_DISABLE (0x1 << 0)
|
||||
#define TAS2562_INTERRUPTMASKREG1_DISABLE 0xff
|
||||
|
||||
/* Interrupt Mask Reg2 */
|
||||
#define TAS2562_INTERRUPTMASKREG2 TAS2562_REG(0x0, 0x0, 0x1C)
|
||||
#define TAS2562_INTERRUPTMASKREG2_DACLKINTMASK_MASK (0x1 << 7)
|
||||
#define TAS2562_INTERRUPTMASKREG2_DACLKINTMASK_UNMASK (0x0 << 7)
|
||||
#define TAS2562_INTERRUPTMASKREG2_DACLKINTMASK_DISABLE (0x1 << 7)
|
||||
#define TAS2562_INTERRUPTMASKREG2_BSTCLKINTMASK_MASK (0x1 << 6)
|
||||
#define TAS2562_INTERRUPTMASKREG2_BSTCLKINTMASK_UNMASK (0x0 << 6)
|
||||
#define TAS2562_INTERRUPTMASKREG2_BSTCLKINTMASK_DISABLE (0x1 << 6)
|
||||
#define TAS2562_INTERRUPTMASKREG2_VBATPORCLKINTMASK_MASK (0x1 << 5)
|
||||
#define TAS2562_INTERRUPTMASKREG2_VBATPORCLKINTMASK_UNMASK (0x0 << 5)
|
||||
#define TAS2562_INTERRUPTMASKREG2_VBATPORCLKINTMASK_DISABLE (0x1 << 5)
|
||||
#define TAS2562_INTERRUPTMASKREG2_PLLOCKINTMASK_MASK (0x1 << 4)
|
||||
#define TAS2562_INTERRUPTMASKREG2_PLLOCKINTMASK_UNMASK (0x0 << 4)
|
||||
#define TAS2562_INTERRUPTMASKREG2_PLLOCKINTMASK_DISABLE (0x1 << 4)
|
||||
#define TAS2562_INTERRUPTMASKREG2_DCDETECTINTMASK_MASK (0x1 << 3)
|
||||
#define TAS2562_INTERRUPTMASKREG2_DCDETECTINTMASK_UNMASK (0x0 << 3)
|
||||
#define TAS2562_INTERRUPTMASKREG2_DCDETECTINTMASK_DISABLE (0x1 << 3)
|
||||
|
||||
/* Live-Interrupt Reg0 */
|
||||
#define TAS2562_LIVEINTERRUPTREG0 TAS2562_REG(0x0, 0x0, 0x1F)
|
||||
#define TAS2562_LIVEINTERRUPTREG0_LIMMUTE_MASK (0x1 << 7)
|
||||
#define TAS2562_LIVEINTERRUPTREG0_LIMMUTE_NOINTERRUPT (0x0 << 7)
|
||||
#define TAS2562_LIVEINTERRUPTREG0_LIMMUTE_INTERRUPT (0x1 << 7)
|
||||
#define TAS2562_LIVEINTERRUPTREG0_LIMINFHLD_MASK (0x1 << 6)
|
||||
#define TAS2562_LIVEINTERRUPTREG0_LIMINFHLD_NOINTERRUPT (0x0 << 6)
|
||||
#define TAS2562_LIVEINTERRUPTREG0_LIMINFHLD_INTERRUPT (0x1 << 6)
|
||||
#define TAS2562_LIVEINTERRUPTREG0_LIMMAXATN_MASK (0x1 << 5)
|
||||
#define TAS2562_LIVEINTERRUPTREG0_LIMMAXATN_NOINTERRUPT (0x0 << 5)
|
||||
#define TAS2562_LIVEINTERRUPTREG0_LIMMAXATN_INTERRUPT (0x1 << 5)
|
||||
#define TAS2562_LIVEINTERRUPTREG0_VBATLESSTHANINF_MASK (0x1 << 4)
|
||||
#define TAS2562_LIVEINTERRUPTREG0_VBATLESSTHANINF_NOINTERRUPT (0x0 << 4)
|
||||
#define TAS2562_LIVEINTERRUPTREG0_VBATLESSTHANINF_INTERRUPT (0x1 << 4)
|
||||
#define TAS2562_LIVEINTERRUPTREG0_LIMACTIVEFLAG_MASK (0x1 << 3)
|
||||
#define TAS2562_LIVEINTERRUPTREG0_LIMACTIVEFLAG_NOINTERRUPT (0x0 << 3)
|
||||
#define TAS2562_LIVEINTERRUPTREG0_LIMACTIVEFLAG_INTERRUPT (0x1 << 3)
|
||||
#define TAS2562_LIVEINTERRUPTREG0_TDMCLOCKERROR_MASK (0x1 << 2)
|
||||
#define TAS2562_LIVEINTERRUPTREG0_TDMCLOCKERROR_NOINTERRUPT (0x0 << 2)
|
||||
#define TAS2562_LIVEINTERRUPTREG0_TDMCLOCKERROR_INTERRUPT (0x1 << 2)
|
||||
#define TAS2562_LIVEINTERRUPTREG0_OCEFLAG_MASK (0x1 << 1)
|
||||
#define TAS2562_LIVEINTERRUPTREG0_OCEFLAG_NOINTERRUPT (0x0 << 1)
|
||||
#define TAS2562_LIVEINTERRUPTREG0_OCEFLAG_INTERRUPT (0x1 << 1)
|
||||
#define TAS2562_LIVEINTERRUPTREG0_OTEFLAG_MASK (0x1 << 0)
|
||||
#define TAS2562_LIVEINTERRUPTREG0_OTEFLAG_NOINTERRUPT (0x0 << 0)
|
||||
#define TAS2562_LIVEINTERRUPTREG0_OTEFLAG_INTERRUPT (0x1 << 0)
|
||||
|
||||
/* Live-Interrupt Reg1 */
|
||||
#define TAS2562_LIVEINTERRUPTREG1 TAS2562_REG(0x0, 0x0, 0x20)
|
||||
#define TAS2562_LIVEINTERRUPTREG1_DSPINTOUTPUT_MASK (0x1 << 7)
|
||||
#define TAS2562_LIVEINTERRUPTREG1_DSPINTOUTPUT_NOINTERRUPT (0x0 << 7)
|
||||
#define TAS2562_LIVEINTERRUPTREG1_DSPINTOUTPUT_INTERRUPT (0x1 << 7)
|
||||
#define TAS2562_LIVEINTERRUPTREG1_OTPCRC_MASK (0x1 << 6)
|
||||
#define TAS2562_LIVEINTERRUPTREG1_OTPCRC_NOINTERRUPT (0x0 << 6)
|
||||
#define TAS2562_LIVEINTERRUPTREG1_OTPCRC_INTERRUPT (0x1 << 6)
|
||||
#define TAS2562_LIVEINTERRUPTREG1_BROWNOUTFLAG_MASK (0x1 << 1)
|
||||
#define TAS2562_LIVEINTERRUPTREG1_BROWNOUTFLAG_NOINTERRUPT (0x0 << 1)
|
||||
#define TAS2562_LIVEINTERRUPTREG1_BROWNOUTFLAG_INTERRUPT (0x1 << 1)
|
||||
#define TAS2562_LIVEINTERRUPTREG1_BROWNOUTDETECTED_MASK (0x1 << 1)
|
||||
#define TAS2562_LIVEINTERRUPTREG1_BROWNOUTDETECTED_NOINTERRUPT (0x0 << 1)
|
||||
#define TAS2562_LIVEINTERRUPTREG1_BROWNOUTDETECTED_INTERRUPT (0x1 << 1)
|
||||
|
||||
/* Latched-Interrupt Reg0 */
|
||||
#define TAS2562_LATCHEDINTERRUPTREG0 TAS2562_REG(0x0, 0x0, 0x24)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG0_LIMMUTESTICKY_MASK (0x1 << 7)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG0_LIMMUTESTICKY_NOINTERRUPT (0x0 << 7)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG0_LIMMUTESTICKY_INTERRUPT (0x1 << 7)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG0_LIMINFHLDSTICKY_MASK (0x1 << 6)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG0_LIMINFHLDSTICKY_NOINTERRUPT (0x0 << 6)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG0_LIMINFHLDSTICKY_INTERRUPT (0x1 << 6)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG0_LIMMAXATNSTICKY_MASK (0x1 << 5)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG0_LIMMAXATNSTICKY_NOINTERRUPT (0x0 << 5)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG0_LIMMAXATNSTICKY_INTERRUPT (0x1 << 5)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG0_VBATLESSTHANINFSTICKY_MASK (0x1 << 4)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG0_VBATLESSTHANINFSTICKY_NOINTERRUPT \
|
||||
(0x0 << 4)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG0_VBATLESSTHANINFSTICKY_INTERRUPT (0x1 << 4)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG0_LIMACTIVEFLAGSTICKY_MASK (0x1 << 3)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG0_LIMACTIVEFLAGSTICKY_NOINTERRUPT (0x0 << 3)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG0_LIMACTIVEFLAGSTICKY_INTERRUPT (0x1 << 3)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG0_TDMCLOCKERRORSTICKY_MASK (0x1 << 2)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG0_TDMCLOCKERRORSTICKY_NOINTERRUPT (0x0 << 2)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG0_TDMCLOCKERRORSTICKY_INTERRUPT (0x1 << 2)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG0_OCEFLAGSTICKY_MASK (0x1 << 1)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG0_OCEFLAGSTICKY_NOINTERRUPT (0x0 << 1)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG0_OCEFLAGSTICKY_INTERRUPT (0x1 << 1)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG0_OTEFLAGSTICKY_MASK (0x1 << 0)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG0_OTEFLAGSTICKY_NOINTERRUPT (0x0 << 0)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG0_OTEFLAGSTICKY_INTERRUPT (0x1 << 0)
|
||||
|
||||
/* Latched-Interrupt Reg1 */
|
||||
#define TAS2562_LATCHEDINTERRUPTREG1 TAS2562_REG(0x0, 0x0, 0x25)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG1_PDMAUDDATAINVALIDSTICKY_MASK (0x1 << 7)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG1_PDMAUDDATAINVALIDSTICKY_NOINTERRUPT \
|
||||
(0x0 << 7)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG1_PDMAUDDATAINVALIDSTICKY_INTERRUPT \
|
||||
(0x1 << 7)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG1_VBATOVLOSTICKY_MASK (0x1 << 3)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG1_VBATOVLOSTICKY_NOINTERRUPT (0x0 << 3)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG1_VBATOVLOSTICKY_INTERRUPT (0x1 << 3)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG1_VBATUVLOSTICKY_MASK (0x1 << 2)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG1_VBATUVLOSTICKY_NOINTERRUPT (0x0 << 2)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG1_VBATUVLOSTICKY_INTERRUPT (0x1 << 2)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG1_BROWNOUTFLAGSTICKY_MASK (0x1 << 1)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG1_BROWNOUTFLAGSTICKY_NOINTERRUPT (0x0 << 1)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG1_BROWNOUTFLAGSTICKY_INTERRUPT (0x1 << 1)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG1_PDMCLOCKERRORSTICKY_MASK (0x1 << 0)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG1_PDMCLOCKERRORSTICKY_NOINTERRUPT (0x0 << 0)
|
||||
#define TAS2562_LATCHEDINTERRUPTREG1_PDMCLOCKERRORSTICKY_INTERRUPT (0x1 << 0)
|
||||
|
||||
/* VBAT MSB */
|
||||
#define TAS2562_VBATMSB TAS2562_REG(0x0, 0x0, 0x2A)
|
||||
#define TAS2562_VBATMSB_VBATMSB70_MASK (0xff << 0)
|
||||
|
||||
/* VBAT LSB */
|
||||
#define TAS2562_VBATLSB TAS2562_REG(0x0, 0x0, 0x2B)
|
||||
#define TAS2562_VBATLSB_VBATLSB74_MASK (0xf << 4)
|
||||
|
||||
/* TEMP */
|
||||
#define TAS2562_TEMP TAS2562_REG(0x0, 0x0, 0x2C)
|
||||
#define TAS2562_TEMP_TEMPMSB70_MASK (0xff << 0)
|
||||
|
||||
|
||||
/* Interrupt Configuration */
|
||||
#define TAS2562_INTERRUPTCONFIGURATION TAS2562_REG(0x0, 0x0, 0x30)
|
||||
#define TAS2562_INTERRUPTCONFIGURATION_LTCHINTCLEAR_MASK (0x1 << 2)
|
||||
#define TAS2562_INTERRUPTCONFIGURATION_LTCHINTCLEAR (0x1 << 2)
|
||||
#define TAS2562_INTERRUPTCONFIGURATION_PININTCONFIG10_MASK (0x3 << 0)
|
||||
#define TAS2562_INTERRUPTCONFIGURATION_PININTCONFIG10_ASSERTONLIVEINTERRUPTS \
|
||||
(0x0 << 0)
|
||||
#define \
|
||||
TAS2562_INTERRUPTCONFIGURATION_PININTCONFIG10_ASSERTONLATCHEDINTERRUPTS \
|
||||
(0x1 << 0)
|
||||
#define \
|
||||
TAS2562_INTERRUPTCONFIGURATION_PININTCONFIG10_ASSERT2MSONLIVEINTERRUPTS \
|
||||
(0x2 << 0)
|
||||
#define \
|
||||
TAS2562_INTERRUPTCONFIGURATION_PININTCONFIG10_ASSERT2MSONLATCHEDINTERRUPTS \
|
||||
(0x3 << 0)
|
||||
|
||||
/* Digital Input Pin Pull Down */
|
||||
#define TAS2562_DIGITALINPUTPINPULLDOWN TAS2562_REG(0x0, 0x0, 0x31)
|
||||
#define TAS2562_DIGITALINPUTPINPULLDOWN_WKPULLDOWNSDOUT_MASK (0x1 << 7)
|
||||
#define TAS2562_DIGITALINPUTPINPULLDOWN_WKPULLDOWNSDOUT_DISABLED (0x0 << 7)
|
||||
#define TAS2562_DIGITALINPUTPINPULLDOWN_WKPULLDOWNSDOUT_ENABLED (0x1 << 7)
|
||||
#define TAS2562_DIGITALINPUTPINPULLDOWN_WKPULLDOWNSDIN_MASK (0x1 << 6)
|
||||
#define TAS2562_DIGITALINPUTPINPULLDOWN_WKPULLDOWNSDIN_DISABLED (0x0 << 6)
|
||||
#define TAS2562_DIGITALINPUTPINPULLDOWN_WKPULLDOWNSDIN_ENABLED (0x1 << 6)
|
||||
#define TAS2562_DIGITALINPUTPINPULLDOWN_WKPULLDOWNFSYNC_MASK (0x1 << 5)
|
||||
#define TAS2562_DIGITALINPUTPINPULLDOWN_WKPULLDOWNFSYNC_DISABLED (0x0 << 5)
|
||||
#define TAS2562_DIGITALINPUTPINPULLDOWN_WKPULLDOWNFSYNC_ENABLED (0x1 << 5)
|
||||
#define TAS2562_DIGITALINPUTPINPULLDOWN_WKPULLDOWNSBCLK_MASK (0x1 << 4)
|
||||
#define TAS2562_DIGITALINPUTPINPULLDOWN_WKPULLDOWNSBCLK_DISABLED (0x0 << 4)
|
||||
#define TAS2562_DIGITALINPUTPINPULLDOWN_WKPULLDOWNSBCLK_ENABLED (0x1 << 4)
|
||||
#define TAS2562_DIGITALINPUTPINPULLDOWN_WKPULLDOWNPDMD0_MASK (0x1 << 3)
|
||||
#define TAS2562_DIGITALINPUTPINPULLDOWN_WKPULLDOWNPDMD0_DISABLED (0x0 << 3)
|
||||
#define TAS2562_DIGITALINPUTPINPULLDOWN_WKPULLDOWNPDMD0_ENABLED (0x1 << 3)
|
||||
#define TAS2562_DIGITALINPUTPINPULLDOWN_WKPULLDOWNPDMD1_MASK (0x1 << 2)
|
||||
#define TAS2562_DIGITALINPUTPINPULLDOWN_WKPULLDOWNPDMD1_DISABLED (0x0 << 2)
|
||||
#define TAS2562_DIGITALINPUTPINPULLDOWN_WKPULLDOWNPDMD1_ENABLED (0x1 << 2)
|
||||
#define TAS2562_DIGITALINPUTPINPULLDOWN_WKPULLDOWNPDMCK0_MASK (0x1 << 1)
|
||||
#define TAS2562_DIGITALINPUTPINPULLDOWN_WKPULLDOWNPDMCK0_DISABLED (0x0 << 1)
|
||||
#define TAS2562_DIGITALINPUTPINPULLDOWN_WKPULLDOWNPDMCK0_ENABLED (0x1 << 1)
|
||||
#define TAS2562_DIGITALINPUTPINPULLDOWN_WKPULLDOWNPDMCK1_MASK (0x1 << 0)
|
||||
#define TAS2562_DIGITALINPUTPINPULLDOWN_WKPULLDOWNPDMCK1_DISABLED (0x0 << 0)
|
||||
#define TAS2562_DIGITALINPUTPINPULLDOWN_WKPULLDOWNPDMCK1_ENABLED (0x1 << 0)
|
||||
|
||||
/* Misc IRQ */
|
||||
#define TAS2562_MISCIRQ TAS2562_REG(0x0, 0x0, 0x32)
|
||||
#define TAS2562_MISCIRQ_IRQZREQD_MASK (0x1 << 7)
|
||||
#define TAS2562_MISCIRQ_IRQZREQD_ACTIVEHIGH (0x0 << 7)
|
||||
#define TAS2562_MISCIRQ_IRQZREQD_ACTIVELOW (0x1 << 7)
|
||||
#define TAS2562_MISCIRQ_IRQZBITBANG_MASK (0x1 << 0)
|
||||
#define TAS2562_MISCIRQ_IRQZBITBANG_IRQZINPUTBUF0 (0x0 << 0)
|
||||
#define TAS2562_MISCIRQ_IRQZBITBANG_IRQZINPUTBUF1 (0x1 << 0)
|
||||
|
||||
#define TAS2562_BOOSTCONFIGURATION2 TAS2562_REG(0x0, 0x0, 0x34)
|
||||
#define TAS2562_BOOSTCONFIGURATION2_BOOSTMAXVOLTAGE_MASK (0x0f << 0)
|
||||
|
||||
#define TAS2562_BOOSTSLOPE TAS2562_REG(0x0, 0x0, 0x35)
|
||||
#define TAS2562_BOOSTSLOPE_MASK (0x3 << 2)
|
||||
#define TAS2562_BOOSTSLOPE_3AV (0x1 << 2)
|
||||
#define TAS2562_BOOSTSLOPE_2AV (0x2 << 2)
|
||||
|
||||
/* Clock Configuration */
|
||||
#define TAS2562_CLOCKCONFIGURATION TAS2562_REG(0x0, 0x0, 0x38)
|
||||
#define TAS2562_CLOCKCONFIGURATION_SBCLKTOFS52_MASK (0xf << 2)
|
||||
#define TAS2562_CLOCKCONFIGURATION_SBCLKtoFS52_16 (0x0 << 2)
|
||||
#define TAS2562_CLOCKCONFIGURATION_SBCLKtoFS52_24 (0x1 << 2)
|
||||
#define TAS2562_CLOCKCONFIGURATION_SBCLKtoFS52_32 (0x2 << 2)
|
||||
#define TAS2562_CLOCKCONFIGURATION_SBCLKtoFS52_48 (0x3 << 2)
|
||||
#define TAS2562_CLOCKCONFIGURATION_SBCLKtoFS52_64 (0x4 << 2)
|
||||
#define TAS2562_CLOCKCONFIGURATION_SBCLKtoFS52_96 (0x5 << 2)
|
||||
#define TAS2562_CLOCKCONFIGURATION_SBCLKtoFS52_128 (0x6 << 2)
|
||||
#define TAS2562_CLOCKCONFIGURATION_SBCLKtoFS52_192 (0x7 << 2)
|
||||
#define TAS2562_CLOCKCONFIGURATION_SBCLKtoFS52_256 (0x8 << 2)
|
||||
#define TAS2562_CLOCKCONFIGURATION_SBCLKtoFS52_384 (0x9 << 2)
|
||||
#define TAS2562_CLOCKCONFIGURATION_SBCLKtoFS52_512 (0xa << 2)
|
||||
#define TAS2562_CLOCKCONFIGURATION_DISCLKRATEDETECT10_MASK (0x3 << 0)
|
||||
#define TAS2562_CLOCKCONFIGURATION_DISCLKRATEDETECT10_DISABLED (0x1 << 0)
|
||||
#define TAS2562_CLOCKCONFIGURATION_DISCLKRATEDETECT10_ENABLED (0x0 << 0)
|
||||
|
||||
#define TAS2562_VBATFILTER TAS2562_REG(0x0, 0x0, 0x3b)
|
||||
#define TAS2562_CLASSHRELEASETIMER TAS2562_REG(0x0, 0x0, 0x3c)
|
||||
|
||||
#define TAS2562_ICN_REG TAS2562_REG(0x0, 0x2, 0x64)
|
||||
|
||||
#define TAS2562_TESTPAGECONFIGURATION TAS2562_REG(0x0, 0xfd, 0xd)
|
||||
#define TAS2562_CLASSDCONFIGURATION1 TAS2562_REG(0x0, 0xfd, 0x19)
|
||||
#define TAS2562_CLASSDCONFIGURATION2 TAS2562_REG(0x0, 0xfd, 0x32)
|
||||
#define TAS2562_CLASSDCONFIGURATION3 TAS2562_REG(0x0, 0xfd, 0x33)
|
||||
#define TAS2562_CLASSDCONFIGURATION4 TAS2562_REG(0x0, 0xfd, 0x3f)
|
||||
#define TAS2562_EFFICIENCYCONFIGURATION TAS2562_REG(0x0, 0xfd, 0x5f)
|
||||
|
||||
#define TAS2562_CLASSHHEADROOM TAS2562_REG(0x64, 0x7, 0x48)
|
||||
#define TAS2562_CLASSHHYSTERESIS TAS2562_REG(0x64, 0x7, 0x4c)
|
||||
#define TAS2562_CLASSHMTCT TAS2562_REG(0x64, 0x5, 0x4c)
|
||||
|
||||
/* Revision and PG ID */
|
||||
#define TAS2562_REVISIONANDPGID TAS2562_REG(0x0, 0x0, 0x7D)
|
||||
#define TAS2562_REVISIONANDPGID_REVISIONID74_MASK (0xf << 4)
|
||||
#define TAS2562_REVISIONANDPGID_PGID30_MASK (0xf << 0)
|
||||
|
||||
/* I2C Checksum */
|
||||
#define TAS2562_I2CCHECKSUM TAS2562_REG(0x0, 0x0, 0x7E)
|
||||
#define TAS2562_I2CCHECKSUM_I2CCHECKSUM70_MASK (0xff << 0)
|
||||
|
||||
/* Book */
|
||||
#define TAS2562_BOOK TAS2562_REG(0x0, 0x0, 0x7F)
|
||||
#define TAS2562_BOOK_BOOK70_MASK (0xff << 0)
|
||||
|
||||
#define TAS2562_POWER_ACTIVE 0
|
||||
#define TAS2562_POWER_MUTE 1
|
||||
#define TAS2562_POWER_SHUTDOWN 2
|
||||
|
||||
#define ERROR_NONE 0x0000000
|
||||
#define ERROR_PLL_ABSENT 0x0000000
|
||||
#define ERROR_DEVA_I2C_COMM 0x0000000
|
||||
#define ERROR_DEVB_I2C_COMM 0x0000000
|
||||
#define ERROR_CLOCK 0x0000000
|
||||
#define ERROR_YRAM_CRCCHK 0x0000001
|
||||
#define ERROR_OVER_CURRENT 0x0000002
|
||||
#define ERROR_DIE_OVERTEMP 0x0000004
|
||||
#define ERROR_OVER_VOLTAGE 0x0000008
|
||||
#define ERROR_UNDER_VOLTAGE 0x0000010
|
||||
#define ERROR_BROWNOUT 0x0000020
|
||||
#define ERROR_CLASSD_PWR 0x0000040
|
||||
#define ERROR_FAILSAFE 0x4000000
|
||||
|
||||
#define CHECK_PERIOD 5000 /* 5 second */
|
||||
|
||||
#define TAS2562_I2C_RETRY_COUNT 3
|
||||
#define ERROR_I2C_SUSPEND -1
|
||||
#define ERROR_I2C_FAILED -2
|
||||
|
||||
struct tas2562_register {
|
||||
int book;
|
||||
int page;
|
||||
int reg;
|
||||
};
|
||||
|
||||
struct tas2562_dai_cfg {
|
||||
unsigned int dai_fmt;
|
||||
unsigned int tdm_delay;
|
||||
};
|
||||
|
||||
enum channel {
|
||||
channel_left = 0x01,
|
||||
channel_right = 0x02,
|
||||
channel_both = channel_left|channel_right
|
||||
};
|
||||
|
||||
struct tas2562_priv {
|
||||
struct device *dev;
|
||||
struct i2c_client *client;
|
||||
struct regmap *regmap;
|
||||
struct mutex dev_lock;
|
||||
struct delayed_work irq_work;
|
||||
struct delayed_work init_work;
|
||||
struct hrtimer mtimer;
|
||||
bool mb_power_up;
|
||||
int mn_power_state;
|
||||
int mn_l_current_book;
|
||||
int mn_l_current_page;
|
||||
int mn_r_current_book;
|
||||
int mn_r_current_page;
|
||||
int mn_l_addr;
|
||||
int mn_r_addr;
|
||||
int mn_asi_format;
|
||||
int mn_reset_gpio;
|
||||
int mn_irq_gpio;
|
||||
int mn_irq;
|
||||
int mn_reset_gpio2;
|
||||
int mn_irq_gpio2;
|
||||
int mn_irq2;
|
||||
bool mb_irq_eable;
|
||||
int mn_sampling_rate;
|
||||
int mn_frame_size;
|
||||
int mn_ppg;
|
||||
int mn_ch_size;
|
||||
int mn_slot_width;
|
||||
int mn_pcm_format;
|
||||
bool mb_mute;
|
||||
bool i2c_suspend;
|
||||
int mn_channels;
|
||||
int spk_l_control;
|
||||
int spk_r_control;
|
||||
int (*read)(struct tas2562_priv *p_tas2562, enum channel chn,
|
||||
unsigned int reg, unsigned int *pValue);
|
||||
int (*write)(struct tas2562_priv *p_tas2562, enum channel chn,
|
||||
unsigned int reg, unsigned int Value);
|
||||
int (*bulk_read)(struct tas2562_priv *p_tas2562, enum channel chn,
|
||||
unsigned int reg, unsigned char *p_data, unsigned int len);
|
||||
int (*bulk_write)(struct tas2562_priv *p_tas2562, enum channel chn,
|
||||
unsigned int reg, unsigned char *p_data, unsigned int len);
|
||||
int (*update_bits)(struct tas2562_priv *p_tas2562, enum channel chn,
|
||||
unsigned int reg, unsigned int mask, unsigned int value);
|
||||
void (*hw_reset)(struct tas2562_priv *p_tas2562);
|
||||
void (*clear_irq)(struct tas2562_priv *p_tas2562);
|
||||
void (*enable_irq)(struct tas2562_priv *p_tas2562, bool enable);
|
||||
/* device is working, but system is suspended */
|
||||
int (*runtime_suspend)(struct tas2562_priv *p_tas2562);
|
||||
int (*runtime_resume)(struct tas2562_priv *p_tas2562);
|
||||
bool mb_runtime_suspend;
|
||||
|
||||
unsigned int mn_err_code;
|
||||
#ifdef CONFIG_TAS2562_CODEC
|
||||
struct mutex codec_lock;
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_TAS2562_MISC
|
||||
int mn_dbg_cmd;
|
||||
int mn_current_reg;
|
||||
struct mutex file_lock;
|
||||
#endif
|
||||
};
|
||||
|
||||
#endif /* __TAS2562_ */
|
||||
45
sound/soc/codecs/tas2562.txt
Normal file
45
sound/soc/codecs/tas2562.txt
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
Texas Instruments TAS2562 Smart PA
|
||||
|
||||
Required properties:
|
||||
|
||||
- compatible: Should contain "ti,tas2562".
|
||||
- reg: The i2c address. Should contain <0x4c>, <0x4d>,
|
||||
<0x4e>, or <0x4f>.
|
||||
|
||||
Optional properties:
|
||||
|
||||
- ti,left-channel: The i2c address of left device.
|
||||
|
||||
- ti,right-channel: The i2c address of right device.
|
||||
It can be NULL for mono design.
|
||||
|
||||
|
||||
- ti,channels: This property is channels number from 1 to 2.
|
||||
If given 1, it is mono design.
|
||||
If given 2, it is stereo design.
|
||||
|
||||
- ti,reset-gpio: Reset GPIO number of left device.
|
||||
|
||||
- ti,reset-gpio2: Reset GPIO number of right device.
|
||||
It can be NULL for mono design.
|
||||
|
||||
- irq-gpio: IRQ GPIO number of left device.
|
||||
|
||||
- irq-gpio2: IRQ GPIO number of right device.
|
||||
It can be NULL for mono design.
|
||||
|
||||
Examples:
|
||||
|
||||
tas2562:tas2562@4c {
|
||||
#sound-dai-cells = <0>;
|
||||
compatible = "ti,tas2562";
|
||||
reg = <0x4c>;
|
||||
ti,left-channel = <0x4c>;
|
||||
ti,right-channel = <0x4d>;
|
||||
ti,channels = <2>; /* channel number */
|
||||
ti,reset-gpio = <&gpio1 17 0>;
|
||||
ti,reset-gpio2 = <&gpio1 16 0>;
|
||||
ti,irq-gpio = <&gpio1 15 0>;
|
||||
ti,irq-gpio2 = <&gpio1 14 0>;
|
||||
status = "ok";
|
||||
};
|
||||
Loading…
Reference in a new issue