16ee47d4aSKirill Marinushkin /* SPDX-License-Identifier: GPL-2.0 */ 26ee47d4aSKirill Marinushkin /* 36ee47d4aSKirill Marinushkin * PCM3060 codec driver 46ee47d4aSKirill Marinushkin * 59e944c9bSKirill Marinushkin * Copyright (C) 2018 Kirill Marinushkin <kmarinushkin@birdec.com> 66ee47d4aSKirill Marinushkin */ 76ee47d4aSKirill Marinushkin 86ee47d4aSKirill Marinushkin #ifndef _SND_SOC_PCM3060_H 96ee47d4aSKirill Marinushkin #define _SND_SOC_PCM3060_H 106ee47d4aSKirill Marinushkin 116ee47d4aSKirill Marinushkin #include <linux/device.h> 126ee47d4aSKirill Marinushkin #include <linux/regmap.h> 136ee47d4aSKirill Marinushkin 146ee47d4aSKirill Marinushkin extern const struct regmap_config pcm3060_regmap; 156ee47d4aSKirill Marinushkin 166ee47d4aSKirill Marinushkin #define PCM3060_DAI_ID_DAC 0 176ee47d4aSKirill Marinushkin #define PCM3060_DAI_ID_ADC 1 186ee47d4aSKirill Marinushkin #define PCM3060_DAI_IDS_NUM 2 196ee47d4aSKirill Marinushkin 201e61405eSKirill Marinushkin /* ADC and DAC can be clocked from separate or same sources CLK1 and CLK2 */ 211e61405eSKirill Marinushkin #define PCM3060_CLK_DEF 0 /* default: CLK1->ADC, CLK2->DAC */ 221e61405eSKirill Marinushkin #define PCM3060_CLK1 1 231e61405eSKirill Marinushkin #define PCM3060_CLK2 2 241e61405eSKirill Marinushkin 256ee47d4aSKirill Marinushkin struct pcm3060_priv_dai { 26*3c7d8a35SMark Brown bool is_provider; 276ee47d4aSKirill Marinushkin unsigned int sclk_freq; 286ee47d4aSKirill Marinushkin }; 296ee47d4aSKirill Marinushkin 306ee47d4aSKirill Marinushkin struct pcm3060_priv { 316ee47d4aSKirill Marinushkin struct regmap *regmap; 326ee47d4aSKirill Marinushkin struct pcm3060_priv_dai dai[PCM3060_DAI_IDS_NUM]; 339d4b17efSKirill Marinushkin u8 out_se: 1; 346ee47d4aSKirill Marinushkin }; 356ee47d4aSKirill Marinushkin 366ee47d4aSKirill Marinushkin int pcm3060_probe(struct device *dev); 376ee47d4aSKirill Marinushkin int pcm3060_remove(struct device *dev); 386ee47d4aSKirill Marinushkin 396ee47d4aSKirill Marinushkin /* registers */ 406ee47d4aSKirill Marinushkin 416ee47d4aSKirill Marinushkin #define PCM3060_REG64 0x40 426ee47d4aSKirill Marinushkin #define PCM3060_REG_MRST 0x80 436ee47d4aSKirill Marinushkin #define PCM3060_REG_SRST 0x40 446ee47d4aSKirill Marinushkin #define PCM3060_REG_ADPSV 0x20 45bb9963b8SKirill Marinushkin #define PCM3060_REG_SHIFT_ADPSV 0x05 466ee47d4aSKirill Marinushkin #define PCM3060_REG_DAPSV 0x10 47bb9963b8SKirill Marinushkin #define PCM3060_REG_SHIFT_DAPSV 0x04 486ee47d4aSKirill Marinushkin #define PCM3060_REG_SE 0x01 496ee47d4aSKirill Marinushkin 506ee47d4aSKirill Marinushkin #define PCM3060_REG65 0x41 516ee47d4aSKirill Marinushkin #define PCM3060_REG66 0x42 526ee47d4aSKirill Marinushkin #define PCM3060_REG_AT2_MIN 0x36 536ee47d4aSKirill Marinushkin #define PCM3060_REG_AT2_MAX 0xFF 546ee47d4aSKirill Marinushkin 556ee47d4aSKirill Marinushkin #define PCM3060_REG67 0x43 566ee47d4aSKirill Marinushkin #define PCM3060_REG72 0x48 576ee47d4aSKirill Marinushkin #define PCM3060_REG_CSEL 0x80 586ee47d4aSKirill Marinushkin #define PCM3060_REG_MASK_MS 0x70 596ee47d4aSKirill Marinushkin #define PCM3060_REG_MS_S 0x00 606ee47d4aSKirill Marinushkin #define PCM3060_REG_MS_M768 (0x01 << 4) 616ee47d4aSKirill Marinushkin #define PCM3060_REG_MS_M512 (0x02 << 4) 626ee47d4aSKirill Marinushkin #define PCM3060_REG_MS_M384 (0x03 << 4) 636ee47d4aSKirill Marinushkin #define PCM3060_REG_MS_M256 (0x04 << 4) 646ee47d4aSKirill Marinushkin #define PCM3060_REG_MS_M192 (0x05 << 4) 656ee47d4aSKirill Marinushkin #define PCM3060_REG_MS_M128 (0x06 << 4) 666ee47d4aSKirill Marinushkin #define PCM3060_REG_MASK_FMT 0x03 676ee47d4aSKirill Marinushkin #define PCM3060_REG_FMT_I2S 0x00 686ee47d4aSKirill Marinushkin #define PCM3060_REG_FMT_LJ 0x01 696ee47d4aSKirill Marinushkin #define PCM3060_REG_FMT_RJ 0x02 706ee47d4aSKirill Marinushkin 716ee47d4aSKirill Marinushkin #define PCM3060_REG68 0x44 726ee47d4aSKirill Marinushkin #define PCM3060_REG_OVER 0x40 736ee47d4aSKirill Marinushkin #define PCM3060_REG_DREV2 0x04 746ee47d4aSKirill Marinushkin #define PCM3060_REG_SHIFT_MUT21 0x00 756ee47d4aSKirill Marinushkin #define PCM3060_REG_SHIFT_MUT22 0x01 766ee47d4aSKirill Marinushkin 776ee47d4aSKirill Marinushkin #define PCM3060_REG69 0x45 786ee47d4aSKirill Marinushkin #define PCM3060_REG_FLT 0x80 796ee47d4aSKirill Marinushkin #define PCM3060_REG_MASK_DMF 0x60 806ee47d4aSKirill Marinushkin #define PCM3060_REG_DMC 0x10 816ee47d4aSKirill Marinushkin #define PCM3060_REG_ZREV 0x02 826ee47d4aSKirill Marinushkin #define PCM3060_REG_AZRO 0x01 836ee47d4aSKirill Marinushkin 846ee47d4aSKirill Marinushkin #define PCM3060_REG70 0x46 856ee47d4aSKirill Marinushkin #define PCM3060_REG71 0x47 866ee47d4aSKirill Marinushkin #define PCM3060_REG_AT1_MIN 0x0E 876ee47d4aSKirill Marinushkin #define PCM3060_REG_AT1_MAX 0xFF 886ee47d4aSKirill Marinushkin 896ee47d4aSKirill Marinushkin #define PCM3060_REG73 0x49 906ee47d4aSKirill Marinushkin #define PCM3060_REG_ZCDD 0x10 916ee47d4aSKirill Marinushkin #define PCM3060_REG_BYP 0x08 926ee47d4aSKirill Marinushkin #define PCM3060_REG_DREV1 0x04 936ee47d4aSKirill Marinushkin #define PCM3060_REG_SHIFT_MUT11 0x00 946ee47d4aSKirill Marinushkin #define PCM3060_REG_SHIFT_MUT12 0x01 956ee47d4aSKirill Marinushkin 966ee47d4aSKirill Marinushkin #endif /* _SND_SOC_PCM3060_H */ 97