root/sound/soc/codecs/cs35l35.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*
   3  * cs35l35.h -- CS35L35 ALSA SoC audio driver
   4  *
   5  * Copyright 2016 Cirrus Logic, Inc.
   6  *
   7  * Author: Brian Austin <brian.austin@cirrus.com>
   8  */
   9 
  10 #ifndef __CS35L35_H__
  11 #define __CS35L35_H__
  12 
  13 #define CS35L35_FIRSTREG                0x01
  14 #define CS35L35_LASTREG                 0x7E
  15 #define CS35L35_CHIP_ID                 0x00035A35
  16 #define CS35L35_DEVID_AB                0x01    /* Device ID A & B [RO] */
  17 #define CS35L35_DEVID_CD                0x02    /* Device ID C & D [RO] */
  18 #define CS35L35_DEVID_E                 0x03    /* Device ID E [RO] */
  19 #define CS35L35_FAB_ID                  0x04    /* Fab ID [RO] */
  20 #define CS35L35_REV_ID                  0x05    /* Revision ID [RO] */
  21 #define CS35L35_PWRCTL1                 0x06    /* Power Ctl 1 */
  22 #define CS35L35_PWRCTL2                 0x07    /* Power Ctl 2 */
  23 #define CS35L35_PWRCTL3                 0x08    /* Power Ctl 3 */
  24 #define CS35L35_CLK_CTL1                0x0A    /* Clocking Ctl 1 */
  25 #define CS35L35_CLK_CTL2                0x0B    /* Clocking Ctl 2 */
  26 #define CS35L35_CLK_CTL3                0x0C    /* Clocking Ctl 3 */
  27 #define CS35L35_SP_FMT_CTL1             0x0D    /* Serial Port Format CTL1 */
  28 #define CS35L35_SP_FMT_CTL2             0x0E    /* Serial Port Format CTL2 */
  29 #define CS35L35_SP_FMT_CTL3             0x0F    /* Serial Port Format CTL3 */
  30 #define CS35L35_MAG_COMP_CTL            0x13    /* Magnitude Comp CTL */
  31 #define CS35L35_AMP_INP_DRV_CTL         0x14    /* Amp Input Drive Ctl */
  32 #define CS35L35_AMP_DIG_VOL_CTL         0x15    /* Amplifier Dig Volume Ctl */
  33 #define CS35L35_AMP_DIG_VOL             0x16    /* Amplifier Dig Volume */
  34 #define CS35L35_ADV_DIG_VOL             0x17    /* Advisory Digital Volume */
  35 #define CS35L35_PROTECT_CTL             0x18    /* Amp Gain - Prot Ctl Param */
  36 #define CS35L35_AMP_GAIN_AUD_CTL        0x19    /* Amp Serial Port Gain Ctl */
  37 #define CS35L35_AMP_GAIN_PDM_CTL        0x1A    /* Amplifier Gain PDM Ctl */
  38 #define CS35L35_AMP_GAIN_ADV_CTL        0x1B    /* Amplifier Gain Ctl */
  39 #define CS35L35_GPI_CTL                 0x1C    /* GPI Ctl */
  40 #define CS35L35_BST_CVTR_V_CTL          0x1D    /* Boost Conv Voltage Ctl */
  41 #define CS35L35_BST_PEAK_I              0x1E    /* Boost Conv Peak Current */
  42 #define CS35L35_BST_RAMP_CTL            0x20    /* Boost Conv Soft Ramp Ctl */
  43 #define CS35L35_BST_CONV_COEF_1         0x21    /* Boost Conv Coefficients 1 */
  44 #define CS35L35_BST_CONV_COEF_2         0x22    /* Boost Conv Coefficients 2 */
  45 #define CS35L35_BST_CONV_SLOPE_COMP     0x23    /* Boost Conv Slope Comp */
  46 #define CS35L35_BST_CONV_SW_FREQ        0x24    /* Boost Conv L BST SW Freq */
  47 #define CS35L35_CLASS_H_CTL             0x30    /* CLS H Control */
  48 #define CS35L35_CLASS_H_HEADRM_CTL      0x31    /* CLS H Headroom Ctl */
  49 #define CS35L35_CLASS_H_RELEASE_RATE    0x32    /* CLS H Release Rate */
  50 #define CS35L35_CLASS_H_FET_DRIVE_CTL   0x33    /* CLS H Weak FET Drive Ctl */
  51 #define CS35L35_CLASS_H_VP_CTL          0x34    /* CLS H VP Ctl */
  52 #define CS35L35_CLASS_H_STATUS          0x38    /* CLS H Status */
  53 #define CS35L35_VPBR_CTL                0x3A    /* VPBR Ctl */
  54 #define CS35L35_VPBR_VOL_CTL            0x3B    /* VPBR Volume Ctl */
  55 #define CS35L35_VPBR_TIMING_CTL         0x3C    /* VPBR Timing Ctl */
  56 #define CS35L35_VPBR_MODE_VOL_CTL       0x3D    /* VPBR Mode/Attack Vol Ctl */
  57 #define CS35L35_VPBR_ATTEN_STATUS       0x4B    /* VPBR Attenuation Status */
  58 #define CS35L35_SPKR_MON_CTL            0x4E    /* Speaker Monitoring Ctl */
  59 #define CS35L35_IMON_SCALE_CTL          0x51    /* IMON Scale Ctl */
  60 #define CS35L35_AUDIN_RXLOC_CTL         0x52    /* Audio Input RX Loc Ctl */
  61 #define CS35L35_ADVIN_RXLOC_CTL         0x53    /* Advisory Input RX Loc Ctl */
  62 #define CS35L35_VMON_TXLOC_CTL          0x54    /* VMON TX Loc Ctl */
  63 #define CS35L35_IMON_TXLOC_CTL          0x55    /* IMON TX Loc Ctl */
  64 #define CS35L35_VPMON_TXLOC_CTL         0x56    /* VPMON TX Loc Ctl */
  65 #define CS35L35_VBSTMON_TXLOC_CTL       0x57    /* VBSTMON TX Loc Ctl */
  66 #define CS35L35_VPBR_STATUS_TXLOC_CTL   0x58    /* VPBR Status TX Loc Ctl */
  67 #define CS35L35_ZERO_FILL_LOC_CTL       0x59    /* Zero Fill Loc Ctl */
  68 #define CS35L35_AUDIN_DEPTH_CTL         0x5A    /* Audio Input Depth Ctl */
  69 #define CS35L35_SPKMON_DEPTH_CTL        0x5B    /* SPK Mon Output Depth Ctl */
  70 #define CS35L35_SUPMON_DEPTH_CTL        0x5C    /* Supply Mon Out Depth Ctl */
  71 #define CS35L35_ZEROFILL_DEPTH_CTL      0x5D    /* Zero Fill Mon Output Ctl */
  72 #define CS35L35_MULT_DEV_SYNCH1         0x62    /* Multidevice Synch */
  73 #define CS35L35_MULT_DEV_SYNCH2         0x63    /* Multidevice Synch 2 */
  74 #define CS35L35_PROT_RELEASE_CTL        0x64    /* Protection Release Ctl */
  75 #define CS35L35_DIAG_MODE_REG_LOCK      0x68    /* Diagnostic Mode Reg Lock */
  76 #define CS35L35_DIAG_MODE_CTL_1         0x69    /* Diagnostic Mode Ctl 1 */
  77 #define CS35L35_DIAG_MODE_CTL_2         0x6A    /* Diagnostic Mode Ctl 2 */
  78 #define CS35L35_INT_MASK_1              0x70    /* Interrupt Mask 1 */
  79 #define CS35L35_INT_MASK_2              0x71    /* Interrupt Mask 2 */
  80 #define CS35L35_INT_MASK_3              0x72    /* Interrupt Mask 3 */
  81 #define CS35L35_INT_MASK_4              0x73    /* Interrupt Mask 4 */
  82 #define CS35L35_INT_STATUS_1            0x74    /* Interrupt Status 1 */
  83 #define CS35L35_INT_STATUS_2            0x75    /* Interrupt Status 2 */
  84 #define CS35L35_INT_STATUS_3            0x76    /* Interrupt Status 3 */
  85 #define CS35L35_INT_STATUS_4            0x77    /* Interrupt Status 4 */
  86 #define CS35L35_PLL_STATUS              0x78    /* PLL Status */
  87 #define CS35L35_OTP_TRIM_STATUS         0x7E    /* OTP Trim Status */
  88 
  89 #define CS35L35_MAX_REGISTER            0x7F
  90 
  91 /* CS35L35_PWRCTL1 */
  92 #define CS35L35_SFT_RST                 0x80
  93 #define CS35L35_DISCHG_FLT              0x02
  94 #define CS35L35_PDN_ALL                 0x01
  95 
  96 /* CS35L35_PWRCTL2 */
  97 #define CS35L35_PDN_VMON                0x80
  98 #define CS35L35_PDN_IMON                0x40
  99 #define CS35L35_PDN_CLASSH              0x20
 100 #define CS35L35_PDN_VPBR                0x10
 101 #define CS35L35_PDN_BST                 0x04
 102 #define CS35L35_PDN_AMP                 0x01
 103 
 104 /* CS35L35_PWRCTL3 */
 105 #define CS35L35_PDN_VBSTMON_OUT         0x10
 106 #define CS35L35_PDN_VMON_OUT            0x08
 107 
 108 #define CS35L35_AUDIN_DEPTH_MASK        0x03
 109 #define CS35L35_AUDIN_DEPTH_SHIFT       0
 110 #define CS35L35_ADVIN_DEPTH_MASK        0x0C
 111 #define CS35L35_ADVIN_DEPTH_SHIFT       2
 112 #define CS35L35_SDIN_DEPTH_8            0x01
 113 #define CS35L35_SDIN_DEPTH_16           0x02
 114 #define CS35L35_SDIN_DEPTH_24           0x03
 115 
 116 #define CS35L35_SDOUT_DEPTH_8           0x01
 117 #define CS35L35_SDOUT_DEPTH_12          0x02
 118 #define CS35L35_SDOUT_DEPTH_16          0x03
 119 
 120 #define CS35L35_AUD_IN_LR_MASK          0x80
 121 #define CS35L35_AUD_IN_LR_SHIFT         7
 122 #define CS35L35_ADV_IN_LR_MASK          0x80
 123 #define CS35L35_ADV_IN_LR_SHIFT         7
 124 #define CS35L35_AUD_IN_LOC_MASK         0x0F
 125 #define CS35L35_AUD_IN_LOC_SHIFT        0
 126 #define CS35L35_ADV_IN_LOC_MASK         0x0F
 127 #define CS35L35_ADV_IN_LOC_SHIFT        0
 128 
 129 #define CS35L35_IMON_DEPTH_MASK         0x03
 130 #define CS35L35_IMON_DEPTH_SHIFT        0
 131 #define CS35L35_VMON_DEPTH_MASK         0x0C
 132 #define CS35L35_VMON_DEPTH_SHIFT        2
 133 #define CS35L35_VBSTMON_DEPTH_MASK      0x03
 134 #define CS35L35_VBSTMON_DEPTH_SHIFT     0
 135 #define CS35L35_VPMON_DEPTH_MASK        0x0C
 136 #define CS35L35_VPMON_DEPTH_SHIFT       2
 137 #define CS35L35_VPBRSTAT_DEPTH_MASK     0x30
 138 #define CS35L35_VPBRSTAT_DEPTH_SHIFT    4
 139 #define CS35L35_ZEROFILL_DEPTH_MASK     0x03
 140 #define CS35L35_ZEROFILL_DEPTH_SHIFT    0x00
 141 
 142 #define CS35L35_MON_TXLOC_MASK          0x3F
 143 #define CS35L35_MON_TXLOC_SHIFT         0
 144 #define CS35L35_MON_FRM_MASK            0x80
 145 #define CS35L35_MON_FRM_SHIFT           7
 146 
 147 #define CS35L35_IMON_SCALE_MASK         0xF8
 148 #define CS35L35_IMON_SCALE_SHIFT        3
 149 
 150 #define CS35L35_MS_MASK                 0x80
 151 #define CS35L35_MS_SHIFT                7
 152 #define CS35L35_SPMODE_MASK             0x40
 153 #define CS35L35_SP_DRV_MASK             0x10
 154 #define CS35L35_SP_DRV_SHIFT            4
 155 #define CS35L35_CLK_CTL2_MASK           0xFF
 156 #define CS35L35_PDM_MODE_MASK           0x40
 157 #define CS35L35_PDM_MODE_SHIFT          6
 158 #define CS35L35_CLK_SOURCE_MASK         0x03
 159 #define CS35L35_CLK_SOURCE_SHIFT        0
 160 #define CS35L35_CLK_SOURCE_MCLK         0
 161 #define CS35L35_CLK_SOURCE_SCLK         1
 162 #define CS35L35_CLK_SOURCE_PDM          2
 163 
 164 #define CS35L35_SP_SCLKS_MASK           0x0F
 165 #define CS35L35_SP_SCLKS_SHIFT          0x00
 166 #define CS35L35_SP_SCLKS_16FS           0x03
 167 #define CS35L35_SP_SCLKS_32FS           0x07
 168 #define CS35L35_SP_SCLKS_48FS           0x0B
 169 #define CS35L35_SP_SCLKS_64FS           0x0F
 170 #define CS35L35_SP_RATE_MASK            0xC0
 171 
 172 #define CS35L35_PDN_BST_MASK            0x06
 173 #define CS35L35_PDN_BST_FETON_SHIFT     1
 174 #define CS35L35_PDN_BST_FETOFF_SHIFT    2
 175 #define CS35L35_PWR2_PDN_MASK           0xE0
 176 #define CS35L35_PWR3_PDN_MASK           0x1E
 177 #define CS35L35_PDN_ALL_MASK            0x01
 178 #define CS35L35_DISCHG_FILT_MASK        0x02
 179 #define CS35L35_DISCHG_FILT_SHIFT       1
 180 #define CS35L35_MCLK_DIS_MASK           0x04
 181 #define CS35L35_MCLK_DIS_SHIFT          2
 182 
 183 #define CS35L35_BST_CTL_MASK            0x7F
 184 #define CS35L35_BST_CTL_SHIFT           0
 185 #define CS35L35_BST_IPK_MASK            0x1F
 186 #define CS35L35_BST_IPK_SHIFT           0
 187 #define CS35L35_AMP_MUTE_MASK           0x20
 188 #define CS35L35_AMP_MUTE_SHIFT          5
 189 #define CS35L35_AMP_GAIN_ZC_MASK        0x10
 190 #define CS35L35_AMP_GAIN_ZC_SHIFT       4
 191 
 192 #define CS35L35_AMP_DIGSFT_MASK         0x02
 193 #define CS35L35_AMP_DIGSFT_SHIFT        1
 194 
 195 /* CS35L35_SP_FMT_CTL3 */
 196 #define CS35L35_SP_I2S_DRV_MASK         0x03
 197 #define CS35L35_SP_I2S_DRV_SHIFT        0
 198 
 199 /* Boost Converter Config */
 200 #define CS35L35_BST_CONV_COEFF_MASK     0xFF
 201 #define CS35L35_BST_CONV_SLOPE_MASK     0xFF
 202 #define CS35L35_BST_CONV_LBST_MASK      0x03
 203 #define CS35L35_BST_CONV_SWFREQ_MASK    0xF0
 204 
 205 /* Class H Algorithm Control */
 206 #define CS35L35_CH_STEREO_MASK          0x40
 207 #define CS35L35_CH_STEREO_SHIFT         6
 208 #define CS35L35_CH_BST_OVR_MASK         0x04
 209 #define CS35L35_CH_BST_OVR_SHIFT        2
 210 #define CS35L35_CH_BST_LIM_MASK         0x08
 211 #define CS35L35_CH_BST_LIM_SHIFT        3
 212 #define CS35L35_CH_MEM_DEPTH_MASK       0x01
 213 #define CS35L35_CH_MEM_DEPTH_SHIFT      0
 214 #define CS35L35_CH_HDRM_CTL_MASK        0x3F
 215 #define CS35L35_CH_HDRM_CTL_SHIFT       0
 216 #define CS35L35_CH_REL_RATE_MASK        0xFF
 217 #define CS35L35_CH_REL_RATE_SHIFT       0
 218 #define CS35L35_CH_WKFET_DIS_MASK       0x80
 219 #define CS35L35_CH_WKFET_DIS_SHIFT      7
 220 #define CS35L35_CH_WKFET_DEL_MASK       0x70
 221 #define CS35L35_CH_WKFET_DEL_SHIFT      4
 222 #define CS35L35_CH_WKFET_THLD_MASK      0x0F
 223 #define CS35L35_CH_WKFET_THLD_SHIFT     0
 224 #define CS35L35_CH_VP_AUTO_MASK         0x80
 225 #define CS35L35_CH_VP_AUTO_SHIFT        7
 226 #define CS35L35_CH_VP_RATE_MASK         0x60
 227 #define CS35L35_CH_VP_RATE_SHIFT        5
 228 #define CS35L35_CH_VP_MAN_MASK          0x1F
 229 #define CS35L35_CH_VP_MAN_SHIFT         0
 230 
 231 /* CS35L35_PROT_RELEASE_CTL */
 232 #define CS35L35_CAL_ERR_RLS             0x80
 233 #define CS35L35_SHORT_RLS               0x04
 234 #define CS35L35_OTW_RLS                 0x02
 235 #define CS35L35_OTE_RLS                 0x01
 236 
 237 /* INT Mask Registers */
 238 #define CS35L35_INT1_CRIT_MASK          0x38
 239 #define CS35L35_INT2_CRIT_MASK          0xEF
 240 #define CS35L35_INT3_CRIT_MASK          0xEE
 241 #define CS35L35_INT4_CRIT_MASK          0xFF
 242 
 243 /* PDN DONE Masks */
 244 #define CS35L35_M_PDN_DONE_SHIFT        4
 245 #define CS35L35_M_PDN_DONE_MASK         0x10
 246 
 247 /* CS35L35_INT_1 */
 248 #define CS35L35_CAL_ERR                 0x80
 249 #define CS35L35_OTP_ERR                 0x40
 250 #define CS35L35_LRCLK_ERR               0x20
 251 #define CS35L35_SPCLK_ERR               0x10
 252 #define CS35L35_MCLK_ERR                0x08
 253 #define CS35L35_AMP_SHORT               0x04
 254 #define CS35L35_OTW                     0x02
 255 #define CS35L35_OTE                     0x01
 256 
 257 /* CS35L35_INT_2 */
 258 #define CS35L35_PDN_DONE                0x10
 259 #define CS35L35_VPBR_ERR                0x02
 260 #define CS35L35_VPBR_CLR                0x01
 261 
 262 /* CS35L35_INT_3 */
 263 #define CS35L35_BST_HIGH                0x10
 264 #define CS35L35_BST_HIGH_FLAG           0x08
 265 #define CS35L35_BST_IPK_FLAG            0x04
 266 #define CS35L35_LBST_SHORT              0x01
 267 
 268 /* CS35L35_INT_4 */
 269 #define CS35L35_VMON_OVFL               0x08
 270 #define CS35L35_IMON_OVFL               0x04
 271 
 272 #define CS35L35_FORMATS (SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S16_LE | \
 273                         SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
 274 
 275 struct  cs35l35_private {
 276         struct device *dev;
 277         struct cs35l35_platform_data pdata;
 278         struct regmap *regmap;
 279         struct regulator_bulk_data supplies[2];
 280         int num_supplies;
 281         int sysclk;
 282         int sclk;
 283         bool pdm_mode;
 284         bool i2s_mode;
 285         bool slave_mode;
 286         /* GPIO for /RST */
 287         struct gpio_desc *reset_gpio;
 288         struct completion pdn_done;
 289 };
 290 
 291 static const char * const cs35l35_supplies[] = {
 292         "VA",
 293         "VP",
 294 };
 295 
 296 #endif

/* [<][>][^][v][top][bottom][index][help] */