162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * ALSA SoC CS4349 codec driver 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright 2015 Cirrus Logic, Inc. 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci * Author: Tim Howe <Tim.Howe@cirrus.com> 862306a36Sopenharmony_ci */ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#ifndef __CS4349_H__ 1162306a36Sopenharmony_ci#define __CS4349_H__ 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci/* CS4349 registers addresses */ 1462306a36Sopenharmony_ci#define CS4349_CHIPID 0x01 /* Device and Rev ID, Read Only */ 1562306a36Sopenharmony_ci#define CS4349_MODE 0x02 /* Mode Control */ 1662306a36Sopenharmony_ci#define CS4349_VMI 0x03 /* Volume, Mixing, Inversion Control */ 1762306a36Sopenharmony_ci#define CS4349_MUTE 0x04 /* Mute Control */ 1862306a36Sopenharmony_ci#define CS4349_VOLA 0x05 /* DAC Channel A Volume Control */ 1962306a36Sopenharmony_ci#define CS4349_VOLB 0x06 /* DAC Channel B Volume Control */ 2062306a36Sopenharmony_ci#define CS4349_RMPFLT 0x07 /* Ramp and Filter Control */ 2162306a36Sopenharmony_ci#define CS4349_MISC 0x08 /* Power Down,Freeze Control,Pop Stop*/ 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci#define CS4349_I2C_INCR 0x80 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci/* Device and Revision ID */ 2762306a36Sopenharmony_ci#define CS4349_REVA 0xF0 /* Rev A */ 2862306a36Sopenharmony_ci#define CS4349_REVB 0xF1 /* Rev B */ 2962306a36Sopenharmony_ci#define CS4349_REVC2 0xFF /* Rev C2 */ 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci/* PDN_DONE Poll Maximum 3362306a36Sopenharmony_ci * If soft ramp is set it will take much longer to power down 3462306a36Sopenharmony_ci * the system. 3562306a36Sopenharmony_ci */ 3662306a36Sopenharmony_ci#define PDN_POLL_MAX 900 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci/* Bitfield Definitions */ 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci/* CS4349_MODE */ 4262306a36Sopenharmony_ci/* (Digital Interface Format, De-Emphasis Control, Functional Mode */ 4362306a36Sopenharmony_ci#define DIF2 (1 << 6) 4462306a36Sopenharmony_ci#define DIF1 (1 << 5) 4562306a36Sopenharmony_ci#define DIF0 (1 << 4) 4662306a36Sopenharmony_ci#define DEM1 (1 << 3) 4762306a36Sopenharmony_ci#define DEM0 (1 << 2) 4862306a36Sopenharmony_ci#define FM1 (1 << 1) 4962306a36Sopenharmony_ci#define DIF_LEFT_JST 0x00 5062306a36Sopenharmony_ci#define DIF_I2S 0x01 5162306a36Sopenharmony_ci#define DIF_RGHT_JST16 0x02 5262306a36Sopenharmony_ci#define DIF_RGHT_JST24 0x03 5362306a36Sopenharmony_ci#define DIF_TDM0 0x04 5462306a36Sopenharmony_ci#define DIF_TDM1 0x05 5562306a36Sopenharmony_ci#define DIF_TDM2 0x06 5662306a36Sopenharmony_ci#define DIF_TDM3 0x07 5762306a36Sopenharmony_ci#define DIF_MASK 0x70 5862306a36Sopenharmony_ci#define MODE_FORMAT(x) (((x)&7)<<4) 5962306a36Sopenharmony_ci#define DEM_MASK 0x0C 6062306a36Sopenharmony_ci#define NO_DEM 0x00 6162306a36Sopenharmony_ci#define DEM_441 0x04 6262306a36Sopenharmony_ci#define DEM_48K 0x08 6362306a36Sopenharmony_ci#define DEM_32K 0x0C 6462306a36Sopenharmony_ci#define FM_AUTO 0x00 6562306a36Sopenharmony_ci#define FM_SNGL 0x01 6662306a36Sopenharmony_ci#define FM_DBL 0x02 6762306a36Sopenharmony_ci#define FM_QUAD 0x03 6862306a36Sopenharmony_ci#define FM_SNGL_MIN 30000 6962306a36Sopenharmony_ci#define FM_SNGL_MAX 54000 7062306a36Sopenharmony_ci#define FM_DBL_MAX 108000 7162306a36Sopenharmony_ci#define FM_QUAD_MAX 216000 7262306a36Sopenharmony_ci#define FM_MASK 0x03 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_ci/* CS4349_VMI (VMI = Volume, Mixing and Inversion Controls) */ 7562306a36Sopenharmony_ci#define VOLBISA (1 << 7) 7662306a36Sopenharmony_ci#define VOLAISB (1 << 7) 7762306a36Sopenharmony_ci/* INVERT_A only available for Left Jstfd, Right Jstfd16 and Right Jstfd24 */ 7862306a36Sopenharmony_ci#define INVERT_A (1 << 6) 7962306a36Sopenharmony_ci/* INVERT_B only available for Left Jstfd, Right Jstfd16 and Right Jstfd24 */ 8062306a36Sopenharmony_ci#define INVERT_B (1 << 5) 8162306a36Sopenharmony_ci#define ATAPI3 (1 << 3) 8262306a36Sopenharmony_ci#define ATAPI2 (1 << 2) 8362306a36Sopenharmony_ci#define ATAPI1 (1 << 1) 8462306a36Sopenharmony_ci#define ATAPI0 (1 << 0) 8562306a36Sopenharmony_ci#define MUTEAB 0x00 8662306a36Sopenharmony_ci#define MUTEA_RIGHTB 0x01 8762306a36Sopenharmony_ci#define MUTEA_LEFTB 0x02 8862306a36Sopenharmony_ci#define MUTEA_SUMLRDIV2B 0x03 8962306a36Sopenharmony_ci#define RIGHTA_MUTEB 0x04 9062306a36Sopenharmony_ci#define RIGHTA_RIGHTB 0x05 9162306a36Sopenharmony_ci#define RIGHTA_LEFTB 0x06 9262306a36Sopenharmony_ci#define RIGHTA_SUMLRDIV2B 0x07 9362306a36Sopenharmony_ci#define LEFTA_MUTEB 0x08 9462306a36Sopenharmony_ci#define LEFTA_RIGHTB 0x09 /* Default */ 9562306a36Sopenharmony_ci#define LEFTA_LEFTB 0x0A 9662306a36Sopenharmony_ci#define LEFTA_SUMLRDIV2B 0x0B 9762306a36Sopenharmony_ci#define SUMLRDIV2A_MUTEB 0x0C 9862306a36Sopenharmony_ci#define SUMLRDIV2A_RIGHTB 0x0D 9962306a36Sopenharmony_ci#define SUMLRDIV2A_LEFTB 0x0E 10062306a36Sopenharmony_ci#define SUMLRDIV2_AB 0x0F 10162306a36Sopenharmony_ci#define CHMIX_MASK 0x0F 10262306a36Sopenharmony_ci 10362306a36Sopenharmony_ci/* CS4349_MUTE */ 10462306a36Sopenharmony_ci#define AUTOMUTE (1 << 7) 10562306a36Sopenharmony_ci#define MUTEC_AB (1 << 5) 10662306a36Sopenharmony_ci#define MUTE_A (1 << 4) 10762306a36Sopenharmony_ci#define MUTE_B (1 << 3) 10862306a36Sopenharmony_ci#define MUTE_AB_MASK 0x18 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_ci/* CS4349_RMPFLT (Ramp and Filter Control) */ 11162306a36Sopenharmony_ci#define SCZ1 (1 << 7) 11262306a36Sopenharmony_ci#define SCZ0 (1 << 6) 11362306a36Sopenharmony_ci#define RMP_UP (1 << 5) 11462306a36Sopenharmony_ci#define RMP_DN (1 << 4) 11562306a36Sopenharmony_ci#define FILT_SEL (1 << 2) 11662306a36Sopenharmony_ci#define IMMDT_CHNG 0x31 11762306a36Sopenharmony_ci#define ZEROCRSS 0x71 11862306a36Sopenharmony_ci#define SOFT_RMP 0xB1 11962306a36Sopenharmony_ci#define SFTRMP_ZEROCRSS 0xF1 12062306a36Sopenharmony_ci#define SR_ZC_MASK 0xC0 12162306a36Sopenharmony_ci 12262306a36Sopenharmony_ci/* CS4349_MISC */ 12362306a36Sopenharmony_ci#define PWR_DWN (1 << 7) 12462306a36Sopenharmony_ci#define FREEZE (1 << 5) 12562306a36Sopenharmony_ci#define POPG_EN (1 << 4) 12662306a36Sopenharmony_ci 12762306a36Sopenharmony_ci#endif /* __CS4349_H__ */ 128