1d2912cb1SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 21dcf98ffSMark Brown /* 31dcf98ffSMark Brown * wm8523.h -- WM8423 ASoC driver 41dcf98ffSMark Brown * 51dcf98ffSMark Brown * Copyright 2009 Wolfson Microelectronics, plc 61dcf98ffSMark Brown * 71dcf98ffSMark Brown * Author: Mark Brown <broonie@opensource.wolfsonmicro.com> 81dcf98ffSMark Brown * 91dcf98ffSMark Brown * Based on wm8753.h 101dcf98ffSMark Brown */ 111dcf98ffSMark Brown 121dcf98ffSMark Brown #ifndef _WM8523_H 131dcf98ffSMark Brown #define _WM8523_H 141dcf98ffSMark Brown 151dcf98ffSMark Brown /* 161dcf98ffSMark Brown * Register values. 171dcf98ffSMark Brown */ 181dcf98ffSMark Brown #define WM8523_DEVICE_ID 0x00 191dcf98ffSMark Brown #define WM8523_REVISION 0x01 201dcf98ffSMark Brown #define WM8523_PSCTRL1 0x02 211dcf98ffSMark Brown #define WM8523_AIF_CTRL1 0x03 221dcf98ffSMark Brown #define WM8523_AIF_CTRL2 0x04 231dcf98ffSMark Brown #define WM8523_DAC_CTRL3 0x05 241dcf98ffSMark Brown #define WM8523_DAC_GAINL 0x06 251dcf98ffSMark Brown #define WM8523_DAC_GAINR 0x07 261dcf98ffSMark Brown #define WM8523_ZERO_DETECT 0x08 271dcf98ffSMark Brown 281dcf98ffSMark Brown #define WM8523_REGISTER_COUNT 9 291dcf98ffSMark Brown #define WM8523_MAX_REGISTER 0x08 301dcf98ffSMark Brown 311dcf98ffSMark Brown /* 321dcf98ffSMark Brown * Field Definitions. 331dcf98ffSMark Brown */ 341dcf98ffSMark Brown 351dcf98ffSMark Brown /* 361dcf98ffSMark Brown * R0 (0x00) - DEVICE_ID 371dcf98ffSMark Brown */ 381dcf98ffSMark Brown #define WM8523_CHIP_ID_MASK 0xFFFF /* CHIP_ID - [15:0] */ 391dcf98ffSMark Brown #define WM8523_CHIP_ID_SHIFT 0 /* CHIP_ID - [15:0] */ 401dcf98ffSMark Brown #define WM8523_CHIP_ID_WIDTH 16 /* CHIP_ID - [15:0] */ 411dcf98ffSMark Brown 421dcf98ffSMark Brown /* 431dcf98ffSMark Brown * R1 (0x01) - REVISION 441dcf98ffSMark Brown */ 451dcf98ffSMark Brown #define WM8523_CHIP_REV_MASK 0x0007 /* CHIP_REV - [2:0] */ 461dcf98ffSMark Brown #define WM8523_CHIP_REV_SHIFT 0 /* CHIP_REV - [2:0] */ 471dcf98ffSMark Brown #define WM8523_CHIP_REV_WIDTH 3 /* CHIP_REV - [2:0] */ 481dcf98ffSMark Brown 491dcf98ffSMark Brown /* 501dcf98ffSMark Brown * R2 (0x02) - PSCTRL1 511dcf98ffSMark Brown */ 521dcf98ffSMark Brown #define WM8523_SYS_ENA_MASK 0x0003 /* SYS_ENA - [1:0] */ 531dcf98ffSMark Brown #define WM8523_SYS_ENA_SHIFT 0 /* SYS_ENA - [1:0] */ 541dcf98ffSMark Brown #define WM8523_SYS_ENA_WIDTH 2 /* SYS_ENA - [1:0] */ 551dcf98ffSMark Brown 561dcf98ffSMark Brown /* 571dcf98ffSMark Brown * R3 (0x03) - AIF_CTRL1 581dcf98ffSMark Brown */ 591dcf98ffSMark Brown #define WM8523_TDM_MODE_MASK 0x1800 /* TDM_MODE - [12:11] */ 601dcf98ffSMark Brown #define WM8523_TDM_MODE_SHIFT 11 /* TDM_MODE - [12:11] */ 611dcf98ffSMark Brown #define WM8523_TDM_MODE_WIDTH 2 /* TDM_MODE - [12:11] */ 621dcf98ffSMark Brown #define WM8523_TDM_SLOT_MASK 0x0600 /* TDM_SLOT - [10:9] */ 631dcf98ffSMark Brown #define WM8523_TDM_SLOT_SHIFT 9 /* TDM_SLOT - [10:9] */ 641dcf98ffSMark Brown #define WM8523_TDM_SLOT_WIDTH 2 /* TDM_SLOT - [10:9] */ 651dcf98ffSMark Brown #define WM8523_DEEMPH 0x0100 /* DEEMPH */ 661dcf98ffSMark Brown #define WM8523_DEEMPH_MASK 0x0100 /* DEEMPH */ 671dcf98ffSMark Brown #define WM8523_DEEMPH_SHIFT 8 /* DEEMPH */ 681dcf98ffSMark Brown #define WM8523_DEEMPH_WIDTH 1 /* DEEMPH */ 691dcf98ffSMark Brown #define WM8523_AIF_MSTR 0x0080 /* AIF_MSTR */ 701dcf98ffSMark Brown #define WM8523_AIF_MSTR_MASK 0x0080 /* AIF_MSTR */ 711dcf98ffSMark Brown #define WM8523_AIF_MSTR_SHIFT 7 /* AIF_MSTR */ 721dcf98ffSMark Brown #define WM8523_AIF_MSTR_WIDTH 1 /* AIF_MSTR */ 731dcf98ffSMark Brown #define WM8523_LRCLK_INV 0x0040 /* LRCLK_INV */ 741dcf98ffSMark Brown #define WM8523_LRCLK_INV_MASK 0x0040 /* LRCLK_INV */ 751dcf98ffSMark Brown #define WM8523_LRCLK_INV_SHIFT 6 /* LRCLK_INV */ 761dcf98ffSMark Brown #define WM8523_LRCLK_INV_WIDTH 1 /* LRCLK_INV */ 771dcf98ffSMark Brown #define WM8523_BCLK_INV 0x0020 /* BCLK_INV */ 781dcf98ffSMark Brown #define WM8523_BCLK_INV_MASK 0x0020 /* BCLK_INV */ 791dcf98ffSMark Brown #define WM8523_BCLK_INV_SHIFT 5 /* BCLK_INV */ 801dcf98ffSMark Brown #define WM8523_BCLK_INV_WIDTH 1 /* BCLK_INV */ 811dcf98ffSMark Brown #define WM8523_WL_MASK 0x0018 /* WL - [4:3] */ 821dcf98ffSMark Brown #define WM8523_WL_SHIFT 3 /* WL - [4:3] */ 831dcf98ffSMark Brown #define WM8523_WL_WIDTH 2 /* WL - [4:3] */ 841dcf98ffSMark Brown #define WM8523_FMT_MASK 0x0007 /* FMT - [2:0] */ 851dcf98ffSMark Brown #define WM8523_FMT_SHIFT 0 /* FMT - [2:0] */ 861dcf98ffSMark Brown #define WM8523_FMT_WIDTH 3 /* FMT - [2:0] */ 871dcf98ffSMark Brown 881dcf98ffSMark Brown /* 891dcf98ffSMark Brown * R4 (0x04) - AIF_CTRL2 901dcf98ffSMark Brown */ 911dcf98ffSMark Brown #define WM8523_DAC_OP_MUX_MASK 0x00C0 /* DAC_OP_MUX - [7:6] */ 921dcf98ffSMark Brown #define WM8523_DAC_OP_MUX_SHIFT 6 /* DAC_OP_MUX - [7:6] */ 931dcf98ffSMark Brown #define WM8523_DAC_OP_MUX_WIDTH 2 /* DAC_OP_MUX - [7:6] */ 941dcf98ffSMark Brown #define WM8523_BCLKDIV_MASK 0x0038 /* BCLKDIV - [5:3] */ 951dcf98ffSMark Brown #define WM8523_BCLKDIV_SHIFT 3 /* BCLKDIV - [5:3] */ 961dcf98ffSMark Brown #define WM8523_BCLKDIV_WIDTH 3 /* BCLKDIV - [5:3] */ 971dcf98ffSMark Brown #define WM8523_SR_MASK 0x0007 /* SR - [2:0] */ 981dcf98ffSMark Brown #define WM8523_SR_SHIFT 0 /* SR - [2:0] */ 991dcf98ffSMark Brown #define WM8523_SR_WIDTH 3 /* SR - [2:0] */ 1001dcf98ffSMark Brown 1011dcf98ffSMark Brown /* 1021dcf98ffSMark Brown * R5 (0x05) - DAC_CTRL3 1031dcf98ffSMark Brown */ 1041dcf98ffSMark Brown #define WM8523_ZC 0x0010 /* ZC */ 1051dcf98ffSMark Brown #define WM8523_ZC_MASK 0x0010 /* ZC */ 1061dcf98ffSMark Brown #define WM8523_ZC_SHIFT 4 /* ZC */ 1071dcf98ffSMark Brown #define WM8523_ZC_WIDTH 1 /* ZC */ 1081dcf98ffSMark Brown #define WM8523_DACR 0x0008 /* DACR */ 1091dcf98ffSMark Brown #define WM8523_DACR_MASK 0x0008 /* DACR */ 1101dcf98ffSMark Brown #define WM8523_DACR_SHIFT 3 /* DACR */ 1111dcf98ffSMark Brown #define WM8523_DACR_WIDTH 1 /* DACR */ 1121dcf98ffSMark Brown #define WM8523_DACL 0x0004 /* DACL */ 1131dcf98ffSMark Brown #define WM8523_DACL_MASK 0x0004 /* DACL */ 1141dcf98ffSMark Brown #define WM8523_DACL_SHIFT 2 /* DACL */ 1151dcf98ffSMark Brown #define WM8523_DACL_WIDTH 1 /* DACL */ 1161dcf98ffSMark Brown #define WM8523_VOL_UP_RAMP 0x0002 /* VOL_UP_RAMP */ 1171dcf98ffSMark Brown #define WM8523_VOL_UP_RAMP_MASK 0x0002 /* VOL_UP_RAMP */ 1181dcf98ffSMark Brown #define WM8523_VOL_UP_RAMP_SHIFT 1 /* VOL_UP_RAMP */ 1191dcf98ffSMark Brown #define WM8523_VOL_UP_RAMP_WIDTH 1 /* VOL_UP_RAMP */ 1201dcf98ffSMark Brown #define WM8523_VOL_DOWN_RAMP 0x0001 /* VOL_DOWN_RAMP */ 1211dcf98ffSMark Brown #define WM8523_VOL_DOWN_RAMP_MASK 0x0001 /* VOL_DOWN_RAMP */ 1221dcf98ffSMark Brown #define WM8523_VOL_DOWN_RAMP_SHIFT 0 /* VOL_DOWN_RAMP */ 1231dcf98ffSMark Brown #define WM8523_VOL_DOWN_RAMP_WIDTH 1 /* VOL_DOWN_RAMP */ 1241dcf98ffSMark Brown 1251dcf98ffSMark Brown /* 1261dcf98ffSMark Brown * R6 (0x06) - DAC_GAINL 1271dcf98ffSMark Brown */ 1281dcf98ffSMark Brown #define WM8523_DACL_VU 0x0200 /* DACL_VU */ 1291dcf98ffSMark Brown #define WM8523_DACL_VU_MASK 0x0200 /* DACL_VU */ 1301dcf98ffSMark Brown #define WM8523_DACL_VU_SHIFT 9 /* DACL_VU */ 1311dcf98ffSMark Brown #define WM8523_DACL_VU_WIDTH 1 /* DACL_VU */ 1321dcf98ffSMark Brown #define WM8523_DACL_VOL_MASK 0x01FF /* DACL_VOL - [8:0] */ 1331dcf98ffSMark Brown #define WM8523_DACL_VOL_SHIFT 0 /* DACL_VOL - [8:0] */ 1341dcf98ffSMark Brown #define WM8523_DACL_VOL_WIDTH 9 /* DACL_VOL - [8:0] */ 1351dcf98ffSMark Brown 1361dcf98ffSMark Brown /* 1371dcf98ffSMark Brown * R7 (0x07) - DAC_GAINR 1381dcf98ffSMark Brown */ 1391dcf98ffSMark Brown #define WM8523_DACR_VU 0x0200 /* DACR_VU */ 1401dcf98ffSMark Brown #define WM8523_DACR_VU_MASK 0x0200 /* DACR_VU */ 1411dcf98ffSMark Brown #define WM8523_DACR_VU_SHIFT 9 /* DACR_VU */ 1421dcf98ffSMark Brown #define WM8523_DACR_VU_WIDTH 1 /* DACR_VU */ 1431dcf98ffSMark Brown #define WM8523_DACR_VOL_MASK 0x01FF /* DACR_VOL - [8:0] */ 1441dcf98ffSMark Brown #define WM8523_DACR_VOL_SHIFT 0 /* DACR_VOL - [8:0] */ 1451dcf98ffSMark Brown #define WM8523_DACR_VOL_WIDTH 9 /* DACR_VOL - [8:0] */ 1461dcf98ffSMark Brown 1471dcf98ffSMark Brown /* 1481dcf98ffSMark Brown * R8 (0x08) - ZERO_DETECT 1491dcf98ffSMark Brown */ 1501dcf98ffSMark Brown #define WM8523_ZD_COUNT_MASK 0x0003 /* ZD_COUNT - [1:0] */ 1511dcf98ffSMark Brown #define WM8523_ZD_COUNT_SHIFT 0 /* ZD_COUNT - [1:0] */ 1521dcf98ffSMark Brown #define WM8523_ZD_COUNT_WIDTH 2 /* ZD_COUNT - [1:0] */ 1531dcf98ffSMark Brown 1541dcf98ffSMark Brown #endif 155