11802d0beSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 2e40da86aSTim Howe /* 3e40da86aSTim Howe * ALSA SoC CS4349 codec driver 4e40da86aSTim Howe * 5e40da86aSTim Howe * Copyright 2015 Cirrus Logic, Inc. 6e40da86aSTim Howe * 7e40da86aSTim Howe * Author: Tim Howe <Tim.Howe@cirrus.com> 8e40da86aSTim Howe */ 9e40da86aSTim Howe 10e40da86aSTim Howe #ifndef __CS4349_H__ 11e40da86aSTim Howe #define __CS4349_H__ 12e40da86aSTim Howe 13e40da86aSTim Howe /* CS4349 registers addresses */ 14e40da86aSTim Howe #define CS4349_CHIPID 0x01 /* Device and Rev ID, Read Only */ 15e40da86aSTim Howe #define CS4349_MODE 0x02 /* Mode Control */ 16e40da86aSTim Howe #define CS4349_VMI 0x03 /* Volume, Mixing, Inversion Control */ 17e40da86aSTim Howe #define CS4349_MUTE 0x04 /* Mute Control */ 18e40da86aSTim Howe #define CS4349_VOLA 0x05 /* DAC Channel A Volume Control */ 19e40da86aSTim Howe #define CS4349_VOLB 0x06 /* DAC Channel B Volume Control */ 20e40da86aSTim Howe #define CS4349_RMPFLT 0x07 /* Ramp and Filter Control */ 21e40da86aSTim Howe #define CS4349_MISC 0x08 /* Power Down,Freeze Control,Pop Stop*/ 22e40da86aSTim Howe 23e40da86aSTim Howe #define CS4349_I2C_INCR 0x80 24e40da86aSTim Howe 25e40da86aSTim Howe 26e40da86aSTim Howe /* Device and Revision ID */ 27e40da86aSTim Howe #define CS4349_REVA 0xF0 /* Rev A */ 28e40da86aSTim Howe #define CS4349_REVB 0xF1 /* Rev B */ 29e40da86aSTim Howe #define CS4349_REVC2 0xFF /* Rev C2 */ 30e40da86aSTim Howe 31e40da86aSTim Howe 32e40da86aSTim Howe /* PDN_DONE Poll Maximum 33e40da86aSTim Howe * If soft ramp is set it will take much longer to power down 34e40da86aSTim Howe * the system. 35e40da86aSTim Howe */ 36e40da86aSTim Howe #define PDN_POLL_MAX 900 37e40da86aSTim Howe 38e40da86aSTim Howe 39e40da86aSTim Howe /* Bitfield Definitions */ 40e40da86aSTim Howe 41e40da86aSTim Howe /* CS4349_MODE */ 42e40da86aSTim Howe /* (Digital Interface Format, De-Emphasis Control, Functional Mode */ 43e40da86aSTim Howe #define DIF2 (1 << 6) 44e40da86aSTim Howe #define DIF1 (1 << 5) 45e40da86aSTim Howe #define DIF0 (1 << 4) 46e40da86aSTim Howe #define DEM1 (1 << 3) 47e40da86aSTim Howe #define DEM0 (1 << 2) 48e40da86aSTim Howe #define FM1 (1 << 1) 49e40da86aSTim Howe #define DIF_LEFT_JST 0x00 50e40da86aSTim Howe #define DIF_I2S 0x01 51e40da86aSTim Howe #define DIF_RGHT_JST16 0x02 52e40da86aSTim Howe #define DIF_RGHT_JST24 0x03 53e40da86aSTim Howe #define DIF_TDM0 0x04 54e40da86aSTim Howe #define DIF_TDM1 0x05 55e40da86aSTim Howe #define DIF_TDM2 0x06 56e40da86aSTim Howe #define DIF_TDM3 0x07 57e40da86aSTim Howe #define DIF_MASK 0x70 58e40da86aSTim Howe #define MODE_FORMAT(x) (((x)&7)<<4) 59e40da86aSTim Howe #define DEM_MASK 0x0C 60e40da86aSTim Howe #define NO_DEM 0x00 61e40da86aSTim Howe #define DEM_441 0x04 62e40da86aSTim Howe #define DEM_48K 0x08 63e40da86aSTim Howe #define DEM_32K 0x0C 64e40da86aSTim Howe #define FM_AUTO 0x00 65e40da86aSTim Howe #define FM_SNGL 0x01 66e40da86aSTim Howe #define FM_DBL 0x02 67e40da86aSTim Howe #define FM_QUAD 0x03 68e40da86aSTim Howe #define FM_SNGL_MIN 30000 69e40da86aSTim Howe #define FM_SNGL_MAX 54000 70e40da86aSTim Howe #define FM_DBL_MAX 108000 71e40da86aSTim Howe #define FM_QUAD_MAX 216000 72e40da86aSTim Howe #define FM_MASK 0x03 73e40da86aSTim Howe 74e40da86aSTim Howe /* CS4349_VMI (VMI = Volume, Mixing and Inversion Controls) */ 75e40da86aSTim Howe #define VOLBISA (1 << 7) 76e40da86aSTim Howe #define VOLAISB (1 << 7) 77e40da86aSTim Howe /* INVERT_A only available for Left Jstfd, Right Jstfd16 and Right Jstfd24 */ 78e40da86aSTim Howe #define INVERT_A (1 << 6) 79e40da86aSTim Howe /* INVERT_B only available for Left Jstfd, Right Jstfd16 and Right Jstfd24 */ 80e40da86aSTim Howe #define INVERT_B (1 << 5) 81e40da86aSTim Howe #define ATAPI3 (1 << 3) 82e40da86aSTim Howe #define ATAPI2 (1 << 2) 83e40da86aSTim Howe #define ATAPI1 (1 << 1) 84e40da86aSTim Howe #define ATAPI0 (1 << 0) 85e40da86aSTim Howe #define MUTEAB 0x00 86e40da86aSTim Howe #define MUTEA_RIGHTB 0x01 87e40da86aSTim Howe #define MUTEA_LEFTB 0x02 88e40da86aSTim Howe #define MUTEA_SUMLRDIV2B 0x03 89e40da86aSTim Howe #define RIGHTA_MUTEB 0x04 90e40da86aSTim Howe #define RIGHTA_RIGHTB 0x05 91e40da86aSTim Howe #define RIGHTA_LEFTB 0x06 92e40da86aSTim Howe #define RIGHTA_SUMLRDIV2B 0x07 93e40da86aSTim Howe #define LEFTA_MUTEB 0x08 94e40da86aSTim Howe #define LEFTA_RIGHTB 0x09 /* Default */ 95e40da86aSTim Howe #define LEFTA_LEFTB 0x0A 96e40da86aSTim Howe #define LEFTA_SUMLRDIV2B 0x0B 97e40da86aSTim Howe #define SUMLRDIV2A_MUTEB 0x0C 98e40da86aSTim Howe #define SUMLRDIV2A_RIGHTB 0x0D 99e40da86aSTim Howe #define SUMLRDIV2A_LEFTB 0x0E 100e40da86aSTim Howe #define SUMLRDIV2_AB 0x0F 101e40da86aSTim Howe #define CHMIX_MASK 0x0F 102e40da86aSTim Howe 103e40da86aSTim Howe /* CS4349_MUTE */ 104e40da86aSTim Howe #define AUTOMUTE (1 << 7) 105e40da86aSTim Howe #define MUTEC_AB (1 << 5) 106e40da86aSTim Howe #define MUTE_A (1 << 4) 107e40da86aSTim Howe #define MUTE_B (1 << 3) 108e40da86aSTim Howe #define MUTE_AB_MASK 0x18 109e40da86aSTim Howe 110e40da86aSTim Howe /* CS4349_RMPFLT (Ramp and Filter Control) */ 111e40da86aSTim Howe #define SCZ1 (1 << 7) 112e40da86aSTim Howe #define SCZ0 (1 << 6) 113e40da86aSTim Howe #define RMP_UP (1 << 5) 114e40da86aSTim Howe #define RMP_DN (1 << 4) 115e40da86aSTim Howe #define FILT_SEL (1 << 2) 116e40da86aSTim Howe #define IMMDT_CHNG 0x31 117e40da86aSTim Howe #define ZEROCRSS 0x71 118e40da86aSTim Howe #define SOFT_RMP 0xB1 119e40da86aSTim Howe #define SFTRMP_ZEROCRSS 0xF1 120e40da86aSTim Howe #define SR_ZC_MASK 0xC0 121e40da86aSTim Howe 122e40da86aSTim Howe /* CS4349_MISC */ 123e40da86aSTim Howe #define PWR_DWN (1 << 7) 124e40da86aSTim Howe #define FREEZE (1 << 5) 125e40da86aSTim Howe #define POPG_EN (1 << 4) 126e40da86aSTim Howe 127e40da86aSTim Howe #endif /* __CS4349_H__ */ 128