0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #include <linux/module.h>
0011 #include <linux/moduleparam.h>
0012 #include <linux/init.h>
0013 #include <linux/delay.h>
0014 #include <linux/pm.h>
0015 #include <linux/i2c.h>
0016 #include <linux/interrupt.h>
0017 #include <linux/gpio.h>
0018 #include <linux/regulator/consumer.h>
0019 #include <linux/slab.h>
0020 #include <sound/core.h>
0021 #include <sound/pcm.h>
0022 #include <sound/pcm_params.h>
0023 #include <sound/soc.h>
0024 #include <sound/initval.h>
0025 #include <sound/tlv.h>
0026
0027 #include <sound/tlv320dac33-plat.h>
0028 #include "tlv320dac33.h"
0029
0030
0031
0032
0033
0034
0035
0036 #define DAC33_FIFO_SIZE_16BIT 6144
0037 #define DAC33_FIFO_SIZE_24BIT 4096
0038 #define DAC33_MODE7_MARGIN 10
0039
0040 #define BURST_BASEFREQ_HZ 49152000
0041
0042 #define SAMPLES_TO_US(rate, samples) \
0043 (1000000000 / (((rate) * 1000) / (samples)))
0044
0045 #define US_TO_SAMPLES(rate, us) \
0046 ((rate) / (1000000 / ((us) < 1000000 ? (us) : 1000000)))
0047
0048 #define UTHR_FROM_PERIOD_SIZE(samples, playrate, burstrate) \
0049 (((samples)*5000) / (((burstrate)*5000) / ((burstrate) - (playrate))))
0050
0051 static void dac33_calculate_times(struct snd_pcm_substream *substream,
0052 struct snd_soc_component *component);
0053 static int dac33_prepare_chip(struct snd_pcm_substream *substream,
0054 struct snd_soc_component *component);
0055
0056 enum dac33_state {
0057 DAC33_IDLE = 0,
0058 DAC33_PREFILL,
0059 DAC33_PLAYBACK,
0060 DAC33_FLUSH,
0061 };
0062
0063 enum dac33_fifo_modes {
0064 DAC33_FIFO_BYPASS = 0,
0065 DAC33_FIFO_MODE1,
0066 DAC33_FIFO_MODE7,
0067 DAC33_FIFO_LAST_MODE,
0068 };
0069
0070 #define DAC33_NUM_SUPPLIES 3
0071 static const char *dac33_supply_names[DAC33_NUM_SUPPLIES] = {
0072 "AVDD",
0073 "DVDD",
0074 "IOVDD",
0075 };
0076
0077 struct tlv320dac33_priv {
0078 struct mutex mutex;
0079 struct work_struct work;
0080 struct snd_soc_component *component;
0081 struct regulator_bulk_data supplies[DAC33_NUM_SUPPLIES];
0082 struct snd_pcm_substream *substream;
0083 int power_gpio;
0084 int chip_power;
0085 int irq;
0086 unsigned int refclk;
0087
0088 unsigned int alarm_threshold;
0089 enum dac33_fifo_modes fifo_mode;
0090 unsigned int fifo_size;
0091 unsigned int nsample;
0092 int mode1_latency;
0093
0094 u8 burst_bclkdiv;
0095 u8 *reg_cache;
0096 unsigned int burst_rate;
0097
0098 int keep_bclk;
0099
0100 spinlock_t lock;
0101 unsigned long long t_stamp1;
0102 unsigned long long t_stamp2;
0103
0104 unsigned int mode1_us_burst;
0105
0106 unsigned int mode7_us_to_lthr;
0107
0108 unsigned int uthr;
0109
0110 enum dac33_state state;
0111 struct i2c_client *i2c;
0112 };
0113
0114 static const u8 dac33_reg[DAC33_CACHEREGNUM] = {
0115 0x00, 0x00, 0x00, 0x00,
0116 0x00, 0x00, 0x00, 0x00,
0117 0x00, 0x00, 0x00, 0x00,
0118 0x00, 0x00, 0x00, 0x00,
0119 0x00, 0x00, 0x00, 0x00,
0120 0x00, 0x00, 0x00, 0x00,
0121 0x00, 0x00, 0x00, 0x00,
0122 0x00, 0x00, 0x00, 0x00,
0123 0x00, 0x00, 0x00, 0x00,
0124 0x00, 0x00, 0x00, 0x00,
0125 0x00, 0x00, 0x00, 0x00,
0126 0x00, 0x00, 0x00, 0x80,
0127 0x80, 0x00, 0x00, 0x00,
0128 0x00, 0x00, 0x00, 0x00,
0129 0x00, 0x00,
0130
0131 0x00, 0x00,
0132 0x00, 0x00, 0x00, 0x00,
0133
0134 0x00, 0x00, 0x00, 0x00,
0135 0x00, 0x80,
0136
0137 0x80, 0x80,
0138
0139 0x80, 0x00, 0x00,
0140
0141 0x00,
0142 0x00, 0x00, 0x00, 0x00,
0143 0x00, 0x00, 0x00, 0x00,
0144 0x00, 0x00, 0x00, 0x00,
0145 0x00, 0x00, 0x00, 0x00,
0146 0x00, 0x00, 0x00, 0x00,
0147 0x00, 0x00, 0x00, 0x00,
0148 0x00, 0x00, 0x00, 0x00,
0149 0x00, 0x00, 0x00, 0x00,
0150 0x00, 0x00, 0x00, 0x00,
0151 0x00, 0x00, 0x00, 0x00,
0152 0x00, 0x00, 0x00, 0x00,
0153 0x00, 0x00, 0x00, 0x00,
0154 0x00,
0155
0156 0xda, 0x33, 0x03,
0157 };
0158
0159
0160 static inline unsigned int dac33_read_reg_cache(struct snd_soc_component *component,
0161 unsigned reg)
0162 {
0163 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component);
0164 u8 *cache = dac33->reg_cache;
0165 if (reg >= DAC33_CACHEREGNUM)
0166 return 0;
0167
0168 return cache[reg];
0169 }
0170
0171 static inline void dac33_write_reg_cache(struct snd_soc_component *component,
0172 u8 reg, u8 value)
0173 {
0174 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component);
0175 u8 *cache = dac33->reg_cache;
0176 if (reg >= DAC33_CACHEREGNUM)
0177 return;
0178
0179 cache[reg] = value;
0180 }
0181
0182 static int dac33_read(struct snd_soc_component *component, unsigned int reg,
0183 u8 *value)
0184 {
0185 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component);
0186 int val, ret = 0;
0187
0188 *value = reg & 0xff;
0189
0190
0191 if (dac33->chip_power) {
0192 val = i2c_smbus_read_byte_data(dac33->i2c, value[0]);
0193 if (val < 0) {
0194 dev_err(component->dev, "Read failed (%d)\n", val);
0195 value[0] = dac33_read_reg_cache(component, reg);
0196 ret = val;
0197 } else {
0198 value[0] = val;
0199 dac33_write_reg_cache(component, reg, val);
0200 }
0201 } else {
0202 value[0] = dac33_read_reg_cache(component, reg);
0203 }
0204
0205 return ret;
0206 }
0207
0208 static int dac33_write(struct snd_soc_component *component, unsigned int reg,
0209 unsigned int value)
0210 {
0211 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component);
0212 u8 data[2];
0213 int ret = 0;
0214
0215
0216
0217
0218
0219
0220 data[0] = reg & 0xff;
0221 data[1] = value & 0xff;
0222
0223 dac33_write_reg_cache(component, data[0], data[1]);
0224 if (dac33->chip_power) {
0225 ret = i2c_master_send(dac33->i2c, data, 2);
0226 if (ret != 2)
0227 dev_err(component->dev, "Write failed (%d)\n", ret);
0228 else
0229 ret = 0;
0230 }
0231
0232 return ret;
0233 }
0234
0235 static int dac33_write_locked(struct snd_soc_component *component, unsigned int reg,
0236 unsigned int value)
0237 {
0238 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component);
0239 int ret;
0240
0241 mutex_lock(&dac33->mutex);
0242 ret = dac33_write(component, reg, value);
0243 mutex_unlock(&dac33->mutex);
0244
0245 return ret;
0246 }
0247
0248 #define DAC33_I2C_ADDR_AUTOINC 0x80
0249 static int dac33_write16(struct snd_soc_component *component, unsigned int reg,
0250 unsigned int value)
0251 {
0252 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component);
0253 u8 data[3];
0254 int ret = 0;
0255
0256
0257
0258
0259
0260
0261
0262 data[0] = reg & 0xff;
0263 data[1] = (value >> 8) & 0xff;
0264 data[2] = value & 0xff;
0265
0266 dac33_write_reg_cache(component, data[0], data[1]);
0267 dac33_write_reg_cache(component, data[0] + 1, data[2]);
0268
0269 if (dac33->chip_power) {
0270
0271 data[0] |= DAC33_I2C_ADDR_AUTOINC;
0272 ret = i2c_master_send(dac33->i2c, data, 3);
0273 if (ret != 3)
0274 dev_err(component->dev, "Write failed (%d)\n", ret);
0275 else
0276 ret = 0;
0277 }
0278
0279 return ret;
0280 }
0281
0282 static void dac33_init_chip(struct snd_soc_component *component)
0283 {
0284 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component);
0285
0286 if (unlikely(!dac33->chip_power))
0287 return;
0288
0289
0290 dac33_write(component, DAC33_DAC_CTRL_A, DAC33_DACRATE(0));
0291
0292 dac33_write(component, DAC33_DAC_CTRL_B, DAC33_DACSRCR_RIGHT |
0293 DAC33_DACSRCL_LEFT);
0294
0295 dac33_write(component, DAC33_DAC_CTRL_C, 0x00);
0296
0297
0298
0299 dac33_write(component, DAC33_ANA_VOL_SOFT_STEP_CTRL, DAC33_VOLCLKEN);
0300
0301
0302 dac33_write(component, DAC33_LDAC_DIG_VOL_CTRL,
0303 dac33_read_reg_cache(component, DAC33_LDAC_DIG_VOL_CTRL));
0304 dac33_write(component, DAC33_RDAC_DIG_VOL_CTRL,
0305 dac33_read_reg_cache(component, DAC33_RDAC_DIG_VOL_CTRL));
0306
0307 dac33_write(component, DAC33_LINEL_TO_LLO_VOL,
0308 dac33_read_reg_cache(component, DAC33_LINEL_TO_LLO_VOL));
0309 dac33_write(component, DAC33_LINER_TO_RLO_VOL,
0310 dac33_read_reg_cache(component, DAC33_LINER_TO_RLO_VOL));
0311
0312 dac33_write(component, DAC33_OUT_AMP_CTRL,
0313 dac33_read_reg_cache(component, DAC33_OUT_AMP_CTRL));
0314
0315 dac33_write(component, DAC33_LDAC_PWR_CTRL,
0316 dac33_read_reg_cache(component, DAC33_LDAC_PWR_CTRL));
0317 dac33_write(component, DAC33_RDAC_PWR_CTRL,
0318 dac33_read_reg_cache(component, DAC33_RDAC_PWR_CTRL));
0319 }
0320
0321 static inline int dac33_read_id(struct snd_soc_component *component)
0322 {
0323 int i, ret = 0;
0324 u8 reg;
0325
0326 for (i = 0; i < 3; i++) {
0327 ret = dac33_read(component, DAC33_DEVICE_ID_MSB + i, ®);
0328 if (ret < 0)
0329 break;
0330 }
0331
0332 return ret;
0333 }
0334
0335 static inline void dac33_soft_power(struct snd_soc_component *component, int power)
0336 {
0337 u8 reg;
0338
0339 reg = dac33_read_reg_cache(component, DAC33_PWR_CTRL);
0340 if (power)
0341 reg |= DAC33_PDNALLB;
0342 else
0343 reg &= ~(DAC33_PDNALLB | DAC33_OSCPDNB |
0344 DAC33_DACRPDNB | DAC33_DACLPDNB);
0345 dac33_write(component, DAC33_PWR_CTRL, reg);
0346 }
0347
0348 static inline void dac33_disable_digital(struct snd_soc_component *component)
0349 {
0350 u8 reg;
0351
0352
0353 reg = dac33_read_reg_cache(component, DAC33_SER_AUDIOIF_CTRL_B);
0354 reg &= ~DAC33_BCLKON;
0355 dac33_write(component, DAC33_SER_AUDIOIF_CTRL_B, reg);
0356
0357
0358 reg = dac33_read_reg_cache(component, DAC33_PWR_CTRL);
0359 reg &= ~(DAC33_OSCPDNB | DAC33_DACRPDNB | DAC33_DACLPDNB);
0360 dac33_write(component, DAC33_PWR_CTRL, reg);
0361 }
0362
0363 static int dac33_hard_power(struct snd_soc_component *component, int power)
0364 {
0365 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component);
0366 int ret = 0;
0367
0368 mutex_lock(&dac33->mutex);
0369
0370
0371 if (unlikely(power == dac33->chip_power)) {
0372 dev_dbg(component->dev, "Trying to set the same power state: %s\n",
0373 power ? "ON" : "OFF");
0374 goto exit;
0375 }
0376
0377 if (power) {
0378 ret = regulator_bulk_enable(ARRAY_SIZE(dac33->supplies),
0379 dac33->supplies);
0380 if (ret != 0) {
0381 dev_err(component->dev,
0382 "Failed to enable supplies: %d\n", ret);
0383 goto exit;
0384 }
0385
0386 if (dac33->power_gpio >= 0)
0387 gpio_set_value(dac33->power_gpio, 1);
0388
0389 dac33->chip_power = 1;
0390 } else {
0391 dac33_soft_power(component, 0);
0392 if (dac33->power_gpio >= 0)
0393 gpio_set_value(dac33->power_gpio, 0);
0394
0395 ret = regulator_bulk_disable(ARRAY_SIZE(dac33->supplies),
0396 dac33->supplies);
0397 if (ret != 0) {
0398 dev_err(component->dev,
0399 "Failed to disable supplies: %d\n", ret);
0400 goto exit;
0401 }
0402
0403 dac33->chip_power = 0;
0404 }
0405
0406 exit:
0407 mutex_unlock(&dac33->mutex);
0408 return ret;
0409 }
0410
0411 static int dac33_playback_event(struct snd_soc_dapm_widget *w,
0412 struct snd_kcontrol *kcontrol, int event)
0413 {
0414 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
0415 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component);
0416
0417 switch (event) {
0418 case SND_SOC_DAPM_PRE_PMU:
0419 if (likely(dac33->substream)) {
0420 dac33_calculate_times(dac33->substream, component);
0421 dac33_prepare_chip(dac33->substream, component);
0422 }
0423 break;
0424 case SND_SOC_DAPM_POST_PMD:
0425 dac33_disable_digital(component);
0426 break;
0427 }
0428 return 0;
0429 }
0430
0431 static int dac33_get_fifo_mode(struct snd_kcontrol *kcontrol,
0432 struct snd_ctl_elem_value *ucontrol)
0433 {
0434 struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
0435 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component);
0436
0437 ucontrol->value.enumerated.item[0] = dac33->fifo_mode;
0438
0439 return 0;
0440 }
0441
0442 static int dac33_set_fifo_mode(struct snd_kcontrol *kcontrol,
0443 struct snd_ctl_elem_value *ucontrol)
0444 {
0445 struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
0446 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component);
0447 int ret = 0;
0448
0449 if (dac33->fifo_mode == ucontrol->value.enumerated.item[0])
0450 return 0;
0451
0452 if (snd_soc_component_active(component))
0453 return -EPERM;
0454
0455 if (ucontrol->value.enumerated.item[0] >= DAC33_FIFO_LAST_MODE)
0456 ret = -EINVAL;
0457 else
0458 dac33->fifo_mode = ucontrol->value.enumerated.item[0];
0459
0460 return ret;
0461 }
0462
0463
0464 static const char *dac33_fifo_mode_texts[] = {
0465 "Bypass", "Mode 1", "Mode 7"
0466 };
0467
0468 static SOC_ENUM_SINGLE_EXT_DECL(dac33_fifo_mode_enum, dac33_fifo_mode_texts);
0469
0470
0471 static const char *lr_lineout_gain_texts[] = {
0472 "Line -12dB DAC 0dB", "Line -6dB DAC 6dB",
0473 "Line 0dB DAC 12dB", "Line 6dB DAC 18dB",
0474 };
0475
0476 static SOC_ENUM_SINGLE_DECL(l_lineout_gain_enum,
0477 DAC33_LDAC_PWR_CTRL, 0,
0478 lr_lineout_gain_texts);
0479
0480 static SOC_ENUM_SINGLE_DECL(r_lineout_gain_enum,
0481 DAC33_RDAC_PWR_CTRL, 0,
0482 lr_lineout_gain_texts);
0483
0484
0485
0486
0487
0488
0489
0490
0491 static DECLARE_TLV_DB_SCALE(dac_digivol_tlv, -6350, 50, 0);
0492
0493 static const struct snd_kcontrol_new dac33_snd_controls[] = {
0494 SOC_DOUBLE_R_TLV("DAC Digital Playback Volume",
0495 DAC33_LDAC_DIG_VOL_CTRL, DAC33_RDAC_DIG_VOL_CTRL,
0496 0, 0x7f, 1, dac_digivol_tlv),
0497 SOC_DOUBLE_R("DAC Digital Playback Switch",
0498 DAC33_LDAC_DIG_VOL_CTRL, DAC33_RDAC_DIG_VOL_CTRL, 7, 1, 1),
0499 SOC_DOUBLE_R("Line to Line Out Volume",
0500 DAC33_LINEL_TO_LLO_VOL, DAC33_LINER_TO_RLO_VOL, 0, 127, 1),
0501 SOC_ENUM("Left Line Output Gain", l_lineout_gain_enum),
0502 SOC_ENUM("Right Line Output Gain", r_lineout_gain_enum),
0503 };
0504
0505 static const struct snd_kcontrol_new dac33_mode_snd_controls[] = {
0506 SOC_ENUM_EXT("FIFO Mode", dac33_fifo_mode_enum,
0507 dac33_get_fifo_mode, dac33_set_fifo_mode),
0508 };
0509
0510
0511 static const struct snd_kcontrol_new dac33_dapm_abypassl_control =
0512 SOC_DAPM_SINGLE("Switch", DAC33_LINEL_TO_LLO_VOL, 7, 1, 1);
0513
0514 static const struct snd_kcontrol_new dac33_dapm_abypassr_control =
0515 SOC_DAPM_SINGLE("Switch", DAC33_LINER_TO_RLO_VOL, 7, 1, 1);
0516
0517
0518 static const char *dac33_lr_lom_texts[] = {"DAC", "LOP"};
0519
0520 static SOC_ENUM_SINGLE_DECL(dac33_left_lom_enum,
0521 DAC33_OUT_AMP_CTRL, 3,
0522 dac33_lr_lom_texts);
0523
0524 static const struct snd_kcontrol_new dac33_dapm_left_lom_control =
0525 SOC_DAPM_ENUM("Route", dac33_left_lom_enum);
0526
0527 static SOC_ENUM_SINGLE_DECL(dac33_right_lom_enum,
0528 DAC33_OUT_AMP_CTRL, 2,
0529 dac33_lr_lom_texts);
0530
0531 static const struct snd_kcontrol_new dac33_dapm_right_lom_control =
0532 SOC_DAPM_ENUM("Route", dac33_right_lom_enum);
0533
0534 static const struct snd_soc_dapm_widget dac33_dapm_widgets[] = {
0535 SND_SOC_DAPM_OUTPUT("LEFT_LO"),
0536 SND_SOC_DAPM_OUTPUT("RIGHT_LO"),
0537
0538 SND_SOC_DAPM_INPUT("LINEL"),
0539 SND_SOC_DAPM_INPUT("LINER"),
0540
0541 SND_SOC_DAPM_DAC("DACL", "Left Playback", SND_SOC_NOPM, 0, 0),
0542 SND_SOC_DAPM_DAC("DACR", "Right Playback", SND_SOC_NOPM, 0, 0),
0543
0544
0545 SND_SOC_DAPM_SWITCH("Analog Left Bypass", SND_SOC_NOPM, 0, 0,
0546 &dac33_dapm_abypassl_control),
0547 SND_SOC_DAPM_SWITCH("Analog Right Bypass", SND_SOC_NOPM, 0, 0,
0548 &dac33_dapm_abypassr_control),
0549
0550 SND_SOC_DAPM_MUX("Left LOM Inverted From", SND_SOC_NOPM, 0, 0,
0551 &dac33_dapm_left_lom_control),
0552 SND_SOC_DAPM_MUX("Right LOM Inverted From", SND_SOC_NOPM, 0, 0,
0553 &dac33_dapm_right_lom_control),
0554
0555
0556
0557
0558
0559 SND_SOC_DAPM_PGA("Left Bypass PGA", SND_SOC_NOPM, 0, 0, NULL, 0),
0560 SND_SOC_DAPM_PGA("Right Bypass PGA", SND_SOC_NOPM, 0, 0, NULL, 0),
0561
0562 SND_SOC_DAPM_REG(snd_soc_dapm_mixer, "Output Left Amplifier",
0563 DAC33_OUT_AMP_PWR_CTRL, 6, 3, 3, 0),
0564 SND_SOC_DAPM_REG(snd_soc_dapm_mixer, "Output Right Amplifier",
0565 DAC33_OUT_AMP_PWR_CTRL, 4, 3, 3, 0),
0566
0567 SND_SOC_DAPM_SUPPLY("Left DAC Power",
0568 DAC33_LDAC_PWR_CTRL, 2, 0, NULL, 0),
0569 SND_SOC_DAPM_SUPPLY("Right DAC Power",
0570 DAC33_RDAC_PWR_CTRL, 2, 0, NULL, 0),
0571
0572 SND_SOC_DAPM_SUPPLY("Codec Power",
0573 DAC33_PWR_CTRL, 4, 0, NULL, 0),
0574
0575 SND_SOC_DAPM_PRE("Pre Playback", dac33_playback_event),
0576 SND_SOC_DAPM_POST("Post Playback", dac33_playback_event),
0577 };
0578
0579 static const struct snd_soc_dapm_route audio_map[] = {
0580
0581 {"Analog Left Bypass", "Switch", "LINEL"},
0582 {"Analog Right Bypass", "Switch", "LINER"},
0583
0584 {"Output Left Amplifier", NULL, "DACL"},
0585 {"Output Right Amplifier", NULL, "DACR"},
0586
0587 {"Left Bypass PGA", NULL, "Analog Left Bypass"},
0588 {"Right Bypass PGA", NULL, "Analog Right Bypass"},
0589
0590 {"Left LOM Inverted From", "DAC", "Left Bypass PGA"},
0591 {"Right LOM Inverted From", "DAC", "Right Bypass PGA"},
0592 {"Left LOM Inverted From", "LOP", "Analog Left Bypass"},
0593 {"Right LOM Inverted From", "LOP", "Analog Right Bypass"},
0594
0595 {"Output Left Amplifier", NULL, "Left LOM Inverted From"},
0596 {"Output Right Amplifier", NULL, "Right LOM Inverted From"},
0597
0598 {"DACL", NULL, "Left DAC Power"},
0599 {"DACR", NULL, "Right DAC Power"},
0600
0601 {"Left Bypass PGA", NULL, "Left DAC Power"},
0602 {"Right Bypass PGA", NULL, "Right DAC Power"},
0603
0604
0605 {"LEFT_LO", NULL, "Output Left Amplifier"},
0606 {"RIGHT_LO", NULL, "Output Right Amplifier"},
0607
0608 {"LEFT_LO", NULL, "Codec Power"},
0609 {"RIGHT_LO", NULL, "Codec Power"},
0610 };
0611
0612 static int dac33_set_bias_level(struct snd_soc_component *component,
0613 enum snd_soc_bias_level level)
0614 {
0615 int ret;
0616
0617 switch (level) {
0618 case SND_SOC_BIAS_ON:
0619 break;
0620 case SND_SOC_BIAS_PREPARE:
0621 break;
0622 case SND_SOC_BIAS_STANDBY:
0623 if (snd_soc_component_get_bias_level(component) == SND_SOC_BIAS_OFF) {
0624
0625 ret = dac33_hard_power(component, 1);
0626 if (ret != 0)
0627 return ret;
0628
0629 dac33_init_chip(component);
0630 }
0631 break;
0632 case SND_SOC_BIAS_OFF:
0633
0634 if (snd_soc_component_get_bias_level(component) == SND_SOC_BIAS_OFF)
0635 return 0;
0636 ret = dac33_hard_power(component, 0);
0637 if (ret != 0)
0638 return ret;
0639 break;
0640 }
0641
0642 return 0;
0643 }
0644
0645 static inline void dac33_prefill_handler(struct tlv320dac33_priv *dac33)
0646 {
0647 struct snd_soc_component *component = dac33->component;
0648 unsigned int delay;
0649 unsigned long flags;
0650
0651 switch (dac33->fifo_mode) {
0652 case DAC33_FIFO_MODE1:
0653 dac33_write16(component, DAC33_NSAMPLE_MSB,
0654 DAC33_THRREG(dac33->nsample));
0655
0656
0657 spin_lock_irqsave(&dac33->lock, flags);
0658 dac33->t_stamp2 = ktime_to_us(ktime_get());
0659 dac33->t_stamp1 = dac33->t_stamp2;
0660 spin_unlock_irqrestore(&dac33->lock, flags);
0661
0662 dac33_write16(component, DAC33_PREFILL_MSB,
0663 DAC33_THRREG(dac33->alarm_threshold));
0664
0665 delay = SAMPLES_TO_US(dac33->burst_rate,
0666 dac33->alarm_threshold) + 1000;
0667 usleep_range(delay, delay + 500);
0668 dac33_write(component, DAC33_FIFO_IRQ_MASK, DAC33_MAT);
0669 break;
0670 case DAC33_FIFO_MODE7:
0671
0672 spin_lock_irqsave(&dac33->lock, flags);
0673 dac33->t_stamp1 = ktime_to_us(ktime_get());
0674
0675 dac33->t_stamp1 -= dac33->mode7_us_to_lthr;
0676 spin_unlock_irqrestore(&dac33->lock, flags);
0677
0678 dac33_write16(component, DAC33_PREFILL_MSB,
0679 DAC33_THRREG(DAC33_MODE7_MARGIN));
0680
0681
0682 dac33_write(component, DAC33_FIFO_IRQ_MASK, DAC33_MUT);
0683 break;
0684 default:
0685 dev_warn(component->dev, "Unhandled FIFO mode: %d\n",
0686 dac33->fifo_mode);
0687 break;
0688 }
0689 }
0690
0691 static inline void dac33_playback_handler(struct tlv320dac33_priv *dac33)
0692 {
0693 struct snd_soc_component *component = dac33->component;
0694 unsigned long flags;
0695
0696 switch (dac33->fifo_mode) {
0697 case DAC33_FIFO_MODE1:
0698
0699 spin_lock_irqsave(&dac33->lock, flags);
0700 dac33->t_stamp2 = ktime_to_us(ktime_get());
0701 spin_unlock_irqrestore(&dac33->lock, flags);
0702
0703 dac33_write16(component, DAC33_NSAMPLE_MSB,
0704 DAC33_THRREG(dac33->nsample));
0705 break;
0706 case DAC33_FIFO_MODE7:
0707
0708 break;
0709 default:
0710 dev_warn(component->dev, "Unhandled FIFO mode: %d\n",
0711 dac33->fifo_mode);
0712 break;
0713 }
0714 }
0715
0716 static void dac33_work(struct work_struct *work)
0717 {
0718 struct snd_soc_component *component;
0719 struct tlv320dac33_priv *dac33;
0720 u8 reg;
0721
0722 dac33 = container_of(work, struct tlv320dac33_priv, work);
0723 component = dac33->component;
0724
0725 mutex_lock(&dac33->mutex);
0726 switch (dac33->state) {
0727 case DAC33_PREFILL:
0728 dac33->state = DAC33_PLAYBACK;
0729 dac33_prefill_handler(dac33);
0730 break;
0731 case DAC33_PLAYBACK:
0732 dac33_playback_handler(dac33);
0733 break;
0734 case DAC33_IDLE:
0735 break;
0736 case DAC33_FLUSH:
0737 dac33->state = DAC33_IDLE;
0738
0739 dac33_write(component, DAC33_FIFO_IRQ_MASK, 0);
0740
0741
0742 reg = dac33_read_reg_cache(component, DAC33_FIFO_CTRL_A);
0743 reg |= DAC33_FIFOFLUSH;
0744 dac33_write(component, DAC33_FIFO_CTRL_A, reg);
0745 break;
0746 }
0747 mutex_unlock(&dac33->mutex);
0748 }
0749
0750 static irqreturn_t dac33_interrupt_handler(int irq, void *dev)
0751 {
0752 struct snd_soc_component *component = dev;
0753 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component);
0754 unsigned long flags;
0755
0756 spin_lock_irqsave(&dac33->lock, flags);
0757 dac33->t_stamp1 = ktime_to_us(ktime_get());
0758 spin_unlock_irqrestore(&dac33->lock, flags);
0759
0760
0761 if (dac33->fifo_mode != DAC33_FIFO_MODE7)
0762 schedule_work(&dac33->work);
0763
0764 return IRQ_HANDLED;
0765 }
0766
0767 static void dac33_oscwait(struct snd_soc_component *component)
0768 {
0769 int timeout = 60;
0770 u8 reg;
0771
0772 do {
0773 usleep_range(1000, 2000);
0774 dac33_read(component, DAC33_INT_OSC_STATUS, ®);
0775 } while (((reg & 0x03) != DAC33_OSCSTATUS_NORMAL) && timeout--);
0776 if ((reg & 0x03) != DAC33_OSCSTATUS_NORMAL)
0777 dev_err(component->dev,
0778 "internal oscillator calibration failed\n");
0779 }
0780
0781 static int dac33_startup(struct snd_pcm_substream *substream,
0782 struct snd_soc_dai *dai)
0783 {
0784 struct snd_soc_component *component = dai->component;
0785 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component);
0786
0787
0788 dac33->substream = substream;
0789
0790 return 0;
0791 }
0792
0793 static void dac33_shutdown(struct snd_pcm_substream *substream,
0794 struct snd_soc_dai *dai)
0795 {
0796 struct snd_soc_component *component = dai->component;
0797 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component);
0798
0799 dac33->substream = NULL;
0800 }
0801
0802 #define CALC_BURST_RATE(bclkdiv, bclk_per_sample) \
0803 (BURST_BASEFREQ_HZ / bclkdiv / bclk_per_sample)
0804 static int dac33_hw_params(struct snd_pcm_substream *substream,
0805 struct snd_pcm_hw_params *params,
0806 struct snd_soc_dai *dai)
0807 {
0808 struct snd_soc_component *component = dai->component;
0809 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component);
0810
0811
0812 switch (params_rate(params)) {
0813 case 44100:
0814 case 48000:
0815 break;
0816 default:
0817 dev_err(component->dev, "unsupported rate %d\n",
0818 params_rate(params));
0819 return -EINVAL;
0820 }
0821
0822 switch (params_width(params)) {
0823 case 16:
0824 dac33->fifo_size = DAC33_FIFO_SIZE_16BIT;
0825 dac33->burst_rate = CALC_BURST_RATE(dac33->burst_bclkdiv, 32);
0826 break;
0827 case 32:
0828 dac33->fifo_size = DAC33_FIFO_SIZE_24BIT;
0829 dac33->burst_rate = CALC_BURST_RATE(dac33->burst_bclkdiv, 64);
0830 break;
0831 default:
0832 dev_err(component->dev, "unsupported width %d\n",
0833 params_width(params));
0834 return -EINVAL;
0835 }
0836
0837 return 0;
0838 }
0839
0840 #define CALC_OSCSET(rate, refclk) ( \
0841 ((((rate * 10000) / refclk) * 4096) + 7000) / 10000)
0842 #define CALC_RATIOSET(rate, refclk) ( \
0843 ((((refclk * 100000) / rate) * 16384) + 50000) / 100000)
0844
0845
0846
0847
0848
0849
0850 static int dac33_prepare_chip(struct snd_pcm_substream *substream,
0851 struct snd_soc_component *component)
0852 {
0853 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component);
0854 unsigned int oscset, ratioset, pwr_ctrl, reg_tmp;
0855 u8 aictrl_a, aictrl_b, fifoctrl_a;
0856
0857 switch (substream->runtime->rate) {
0858 case 44100:
0859 case 48000:
0860 oscset = CALC_OSCSET(substream->runtime->rate, dac33->refclk);
0861 ratioset = CALC_RATIOSET(substream->runtime->rate,
0862 dac33->refclk);
0863 break;
0864 default:
0865 dev_err(component->dev, "unsupported rate %d\n",
0866 substream->runtime->rate);
0867 return -EINVAL;
0868 }
0869
0870
0871 aictrl_a = dac33_read_reg_cache(component, DAC33_SER_AUDIOIF_CTRL_A);
0872 aictrl_a &= ~(DAC33_NCYCL_MASK | DAC33_WLEN_MASK);
0873
0874 fifoctrl_a = dac33_read_reg_cache(component, DAC33_FIFO_CTRL_A);
0875 fifoctrl_a &= ~DAC33_FIFOFLUSH;
0876
0877 fifoctrl_a &= ~DAC33_WIDTH;
0878 switch (substream->runtime->format) {
0879 case SNDRV_PCM_FORMAT_S16_LE:
0880 aictrl_a |= (DAC33_NCYCL_16 | DAC33_WLEN_16);
0881 fifoctrl_a |= DAC33_WIDTH;
0882 break;
0883 case SNDRV_PCM_FORMAT_S32_LE:
0884 aictrl_a |= (DAC33_NCYCL_32 | DAC33_WLEN_24);
0885 break;
0886 default:
0887 dev_err(component->dev, "unsupported format %d\n",
0888 substream->runtime->format);
0889 return -EINVAL;
0890 }
0891
0892 mutex_lock(&dac33->mutex);
0893
0894 if (!dac33->chip_power) {
0895
0896
0897
0898
0899 mutex_unlock(&dac33->mutex);
0900 return 0;
0901 }
0902
0903 dac33_soft_power(component, 0);
0904 dac33_soft_power(component, 1);
0905
0906 reg_tmp = dac33_read_reg_cache(component, DAC33_INT_OSC_CTRL);
0907 dac33_write(component, DAC33_INT_OSC_CTRL, reg_tmp);
0908
0909
0910 dac33_write16(component, DAC33_INT_OSC_FREQ_RAT_A, oscset);
0911
0912
0913 dac33_write(component, DAC33_CALIB_TIME, 96);
0914
0915
0916 dac33_write(component, DAC33_INT_OSC_CTRL_B, DAC33_ADJTHRSHLD(2) |
0917 DAC33_ADJSTEP(1));
0918
0919
0920 dac33_write(component, DAC33_INT_OSC_CTRL_C, DAC33_REFDIV(4));
0921
0922 pwr_ctrl = dac33_read_reg_cache(component, DAC33_PWR_CTRL);
0923 pwr_ctrl |= DAC33_OSCPDNB | DAC33_DACRPDNB | DAC33_DACLPDNB;
0924 dac33_write(component, DAC33_PWR_CTRL, pwr_ctrl);
0925
0926 dac33_oscwait(component);
0927
0928 if (dac33->fifo_mode) {
0929
0930
0931 dac33_write(component, DAC33_ASRC_CTRL_A, DAC33_SRCLKDIV(1));
0932 dac33_write(component, DAC33_ASRC_CTRL_B, 1);
0933
0934
0935 dac33_write16(component, DAC33_SRC_REF_CLK_RATIO_A, ratioset);
0936
0937
0938 dac33_write(component, DAC33_INTP_CTRL_A, DAC33_INTPM_AHIGH);
0939 } else {
0940
0941
0942 dac33_write(component, DAC33_ASRC_CTRL_A, DAC33_SRCBYP);
0943 dac33_write(component, DAC33_ASRC_CTRL_B, 0);
0944 }
0945
0946
0947 switch (dac33->fifo_mode) {
0948 case DAC33_FIFO_MODE1:
0949 dac33_write(component, DAC33_FIFO_IRQ_MODE_B,
0950 DAC33_ATM(DAC33_FIFO_IRQ_MODE_LEVEL));
0951 break;
0952 case DAC33_FIFO_MODE7:
0953 dac33_write(component, DAC33_FIFO_IRQ_MODE_A,
0954 DAC33_UTM(DAC33_FIFO_IRQ_MODE_LEVEL));
0955 break;
0956 default:
0957
0958 break;
0959 }
0960
0961 aictrl_b = dac33_read_reg_cache(component, DAC33_SER_AUDIOIF_CTRL_B);
0962
0963 switch (dac33->fifo_mode) {
0964 case DAC33_FIFO_MODE1:
0965
0966
0967
0968
0969
0970
0971 fifoctrl_a &= ~DAC33_FBYPAS;
0972 fifoctrl_a &= ~DAC33_FAUTO;
0973 if (dac33->keep_bclk)
0974 aictrl_b |= DAC33_BCLKON;
0975 else
0976 aictrl_b &= ~DAC33_BCLKON;
0977 break;
0978 case DAC33_FIFO_MODE7:
0979
0980
0981
0982
0983
0984
0985 fifoctrl_a &= ~DAC33_FBYPAS;
0986 fifoctrl_a |= DAC33_FAUTO;
0987 if (dac33->keep_bclk)
0988 aictrl_b |= DAC33_BCLKON;
0989 else
0990 aictrl_b &= ~DAC33_BCLKON;
0991 break;
0992 default:
0993
0994
0995
0996
0997
0998 fifoctrl_a |= DAC33_FBYPAS;
0999 aictrl_b |= DAC33_BCLKON;
1000 break;
1001 }
1002
1003 dac33_write(component, DAC33_FIFO_CTRL_A, fifoctrl_a);
1004 dac33_write(component, DAC33_SER_AUDIOIF_CTRL_A, aictrl_a);
1005 dac33_write(component, DAC33_SER_AUDIOIF_CTRL_B, aictrl_b);
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016 if (dac33->fifo_mode)
1017 dac33_write(component, DAC33_SER_AUDIOIF_CTRL_C,
1018 dac33->burst_bclkdiv);
1019 else
1020 if (substream->runtime->format == SNDRV_PCM_FORMAT_S16_LE)
1021 dac33_write(component, DAC33_SER_AUDIOIF_CTRL_C, 32);
1022 else
1023 dac33_write(component, DAC33_SER_AUDIOIF_CTRL_C, 16);
1024
1025 switch (dac33->fifo_mode) {
1026 case DAC33_FIFO_MODE1:
1027 dac33_write16(component, DAC33_ATHR_MSB,
1028 DAC33_THRREG(dac33->alarm_threshold));
1029 break;
1030 case DAC33_FIFO_MODE7:
1031
1032
1033
1034
1035 dac33_write16(component, DAC33_UTHR_MSB, DAC33_THRREG(dac33->uthr));
1036 dac33_write16(component, DAC33_LTHR_MSB,
1037 DAC33_THRREG(DAC33_MODE7_MARGIN));
1038 break;
1039 default:
1040 break;
1041 }
1042
1043 mutex_unlock(&dac33->mutex);
1044
1045 return 0;
1046 }
1047
1048 static void dac33_calculate_times(struct snd_pcm_substream *substream,
1049 struct snd_soc_component *component)
1050 {
1051 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component);
1052 unsigned int period_size = substream->runtime->period_size;
1053 unsigned int rate = substream->runtime->rate;
1054 unsigned int nsample_limit;
1055
1056
1057 if (!dac33->fifo_mode)
1058 return;
1059
1060 switch (dac33->fifo_mode) {
1061 case DAC33_FIFO_MODE1:
1062
1063 dac33->alarm_threshold = US_TO_SAMPLES(rate,
1064 dac33->mode1_latency);
1065 nsample_limit = dac33->fifo_size - dac33->alarm_threshold;
1066
1067 if (period_size <= dac33->alarm_threshold)
1068
1069
1070
1071
1072 dac33->nsample = period_size *
1073 ((dac33->alarm_threshold / period_size) +
1074 ((dac33->alarm_threshold % period_size) ?
1075 1 : 0));
1076 else if (period_size > nsample_limit)
1077 dac33->nsample = nsample_limit;
1078 else
1079 dac33->nsample = period_size;
1080
1081 dac33->mode1_us_burst = SAMPLES_TO_US(dac33->burst_rate,
1082 dac33->nsample);
1083 dac33->t_stamp1 = 0;
1084 dac33->t_stamp2 = 0;
1085 break;
1086 case DAC33_FIFO_MODE7:
1087 dac33->uthr = UTHR_FROM_PERIOD_SIZE(period_size, rate,
1088 dac33->burst_rate) + 9;
1089 if (dac33->uthr > (dac33->fifo_size - DAC33_MODE7_MARGIN))
1090 dac33->uthr = dac33->fifo_size - DAC33_MODE7_MARGIN;
1091 if (dac33->uthr < (DAC33_MODE7_MARGIN + 10))
1092 dac33->uthr = (DAC33_MODE7_MARGIN + 10);
1093
1094 dac33->mode7_us_to_lthr =
1095 SAMPLES_TO_US(substream->runtime->rate,
1096 dac33->uthr - DAC33_MODE7_MARGIN + 1);
1097 dac33->t_stamp1 = 0;
1098 break;
1099 default:
1100 break;
1101 }
1102
1103 }
1104
1105 static int dac33_pcm_trigger(struct snd_pcm_substream *substream, int cmd,
1106 struct snd_soc_dai *dai)
1107 {
1108 struct snd_soc_component *component = dai->component;
1109 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component);
1110 int ret = 0;
1111
1112 switch (cmd) {
1113 case SNDRV_PCM_TRIGGER_START:
1114 case SNDRV_PCM_TRIGGER_RESUME:
1115 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
1116 if (dac33->fifo_mode) {
1117 dac33->state = DAC33_PREFILL;
1118 schedule_work(&dac33->work);
1119 }
1120 break;
1121 case SNDRV_PCM_TRIGGER_STOP:
1122 case SNDRV_PCM_TRIGGER_SUSPEND:
1123 case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
1124 if (dac33->fifo_mode) {
1125 dac33->state = DAC33_FLUSH;
1126 schedule_work(&dac33->work);
1127 }
1128 break;
1129 default:
1130 ret = -EINVAL;
1131 }
1132
1133 return ret;
1134 }
1135
1136 static snd_pcm_sframes_t dac33_dai_delay(
1137 struct snd_pcm_substream *substream,
1138 struct snd_soc_dai *dai)
1139 {
1140 struct snd_soc_component *component = dai->component;
1141 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component);
1142 unsigned long long t0, t1, t_now;
1143 unsigned int time_delta, uthr;
1144 int samples_out, samples_in, samples;
1145 snd_pcm_sframes_t delay = 0;
1146 unsigned long flags;
1147
1148 switch (dac33->fifo_mode) {
1149 case DAC33_FIFO_BYPASS:
1150 break;
1151 case DAC33_FIFO_MODE1:
1152 spin_lock_irqsave(&dac33->lock, flags);
1153 t0 = dac33->t_stamp1;
1154 t1 = dac33->t_stamp2;
1155 spin_unlock_irqrestore(&dac33->lock, flags);
1156 t_now = ktime_to_us(ktime_get());
1157
1158
1159 if (!t1)
1160 goto out;
1161
1162 if (t0 > t1) {
1163
1164
1165
1166
1167 time_delta = t_now - t0;
1168 samples_out = time_delta ? US_TO_SAMPLES(
1169 substream->runtime->rate,
1170 time_delta) : 0;
1171
1172 if (likely(dac33->alarm_threshold > samples_out))
1173 delay = dac33->alarm_threshold - samples_out;
1174 else
1175 delay = 0;
1176 } else if ((t_now - t1) <= dac33->mode1_us_burst) {
1177
1178
1179
1180
1181 time_delta = t_now - t0;
1182 samples_out = time_delta ? US_TO_SAMPLES(
1183 substream->runtime->rate,
1184 time_delta) : 0;
1185
1186 time_delta = t_now - t1;
1187 samples_in = time_delta ? US_TO_SAMPLES(
1188 dac33->burst_rate,
1189 time_delta) : 0;
1190
1191 samples = dac33->alarm_threshold;
1192 samples += (samples_in - samples_out);
1193
1194 if (likely(samples > 0))
1195 delay = samples;
1196 else
1197 delay = 0;
1198 } else {
1199
1200
1201
1202
1203 time_delta = t_now - t0;
1204 samples_out = time_delta ? US_TO_SAMPLES(
1205 substream->runtime->rate,
1206 time_delta) : 0;
1207
1208 samples_in = dac33->nsample;
1209 samples = dac33->alarm_threshold;
1210 samples += (samples_in - samples_out);
1211
1212 if (likely(samples > 0))
1213 delay = samples > dac33->fifo_size ?
1214 dac33->fifo_size : samples;
1215 else
1216 delay = 0;
1217 }
1218 break;
1219 case DAC33_FIFO_MODE7:
1220 spin_lock_irqsave(&dac33->lock, flags);
1221 t0 = dac33->t_stamp1;
1222 uthr = dac33->uthr;
1223 spin_unlock_irqrestore(&dac33->lock, flags);
1224 t_now = ktime_to_us(ktime_get());
1225
1226
1227 if (!t0)
1228 goto out;
1229
1230 if (t_now <= t0) {
1231
1232
1233
1234
1235 delay = uthr;
1236 goto out;
1237 }
1238
1239 time_delta = t_now - t0;
1240 if (time_delta <= dac33->mode7_us_to_lthr) {
1241
1242
1243
1244
1245 samples_out = US_TO_SAMPLES(
1246 substream->runtime->rate,
1247 time_delta);
1248
1249 if (likely(uthr > samples_out))
1250 delay = uthr - samples_out;
1251 else
1252 delay = 0;
1253 } else {
1254
1255
1256
1257
1258 time_delta = time_delta - dac33->mode7_us_to_lthr;
1259
1260 samples_out = US_TO_SAMPLES(
1261 substream->runtime->rate,
1262 time_delta);
1263 samples_in = US_TO_SAMPLES(
1264 dac33->burst_rate,
1265 time_delta);
1266 delay = DAC33_MODE7_MARGIN + samples_in - samples_out;
1267
1268 if (unlikely(delay > uthr))
1269 delay = uthr;
1270 }
1271 break;
1272 default:
1273 dev_warn(component->dev, "Unhandled FIFO mode: %d\n",
1274 dac33->fifo_mode);
1275 break;
1276 }
1277 out:
1278 return delay;
1279 }
1280
1281 static int dac33_set_dai_sysclk(struct snd_soc_dai *codec_dai,
1282 int clk_id, unsigned int freq, int dir)
1283 {
1284 struct snd_soc_component *component = codec_dai->component;
1285 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component);
1286 u8 ioc_reg, asrcb_reg;
1287
1288 ioc_reg = dac33_read_reg_cache(component, DAC33_INT_OSC_CTRL);
1289 asrcb_reg = dac33_read_reg_cache(component, DAC33_ASRC_CTRL_B);
1290 switch (clk_id) {
1291 case TLV320DAC33_MCLK:
1292 ioc_reg |= DAC33_REFSEL;
1293 asrcb_reg |= DAC33_SRCREFSEL;
1294 break;
1295 case TLV320DAC33_SLEEPCLK:
1296 ioc_reg &= ~DAC33_REFSEL;
1297 asrcb_reg &= ~DAC33_SRCREFSEL;
1298 break;
1299 default:
1300 dev_err(component->dev, "Invalid clock ID (%d)\n", clk_id);
1301 break;
1302 }
1303 dac33->refclk = freq;
1304
1305 dac33_write_reg_cache(component, DAC33_INT_OSC_CTRL, ioc_reg);
1306 dac33_write_reg_cache(component, DAC33_ASRC_CTRL_B, asrcb_reg);
1307
1308 return 0;
1309 }
1310
1311 static int dac33_set_dai_fmt(struct snd_soc_dai *codec_dai,
1312 unsigned int fmt)
1313 {
1314 struct snd_soc_component *component = codec_dai->component;
1315 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component);
1316 u8 aictrl_a, aictrl_b;
1317
1318 aictrl_a = dac33_read_reg_cache(component, DAC33_SER_AUDIOIF_CTRL_A);
1319 aictrl_b = dac33_read_reg_cache(component, DAC33_SER_AUDIOIF_CTRL_B);
1320
1321 switch (fmt & SND_SOC_DAIFMT_CLOCK_PROVIDER_MASK) {
1322 case SND_SOC_DAIFMT_CBP_CFP:
1323 aictrl_a |= (DAC33_MSBCLK | DAC33_MSWCLK);
1324 break;
1325 case SND_SOC_DAIFMT_CBC_CFC:
1326 if (dac33->fifo_mode) {
1327 dev_err(component->dev, "FIFO mode requires provider mode\n");
1328 return -EINVAL;
1329 } else
1330 aictrl_a &= ~(DAC33_MSBCLK | DAC33_MSWCLK);
1331 break;
1332 default:
1333 return -EINVAL;
1334 }
1335
1336 aictrl_a &= ~DAC33_AFMT_MASK;
1337 switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
1338 case SND_SOC_DAIFMT_I2S:
1339 aictrl_a |= DAC33_AFMT_I2S;
1340 break;
1341 case SND_SOC_DAIFMT_DSP_A:
1342 aictrl_a |= DAC33_AFMT_DSP;
1343 aictrl_b &= ~DAC33_DATA_DELAY_MASK;
1344 aictrl_b |= DAC33_DATA_DELAY(0);
1345 break;
1346 case SND_SOC_DAIFMT_RIGHT_J:
1347 aictrl_a |= DAC33_AFMT_RIGHT_J;
1348 break;
1349 case SND_SOC_DAIFMT_LEFT_J:
1350 aictrl_a |= DAC33_AFMT_LEFT_J;
1351 break;
1352 default:
1353 dev_err(component->dev, "Unsupported format (%u)\n",
1354 fmt & SND_SOC_DAIFMT_FORMAT_MASK);
1355 return -EINVAL;
1356 }
1357
1358 dac33_write_reg_cache(component, DAC33_SER_AUDIOIF_CTRL_A, aictrl_a);
1359 dac33_write_reg_cache(component, DAC33_SER_AUDIOIF_CTRL_B, aictrl_b);
1360
1361 return 0;
1362 }
1363
1364 static int dac33_soc_probe(struct snd_soc_component *component)
1365 {
1366 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component);
1367 int ret = 0;
1368
1369 dac33->component = component;
1370
1371
1372 ret = dac33_hard_power(component, 1);
1373 if (ret != 0) {
1374 dev_err(component->dev, "Failed to power up component: %d\n", ret);
1375 goto err_power;
1376 }
1377 ret = dac33_read_id(component);
1378 dac33_hard_power(component, 0);
1379
1380 if (ret < 0) {
1381 dev_err(component->dev, "Failed to read chip ID: %d\n", ret);
1382 ret = -ENODEV;
1383 goto err_power;
1384 }
1385
1386
1387 if (dac33->irq >= 0) {
1388 ret = request_irq(dac33->irq, dac33_interrupt_handler,
1389 IRQF_TRIGGER_RISING,
1390 component->name, component);
1391 if (ret < 0) {
1392 dev_err(component->dev, "Could not request IRQ%d (%d)\n",
1393 dac33->irq, ret);
1394 dac33->irq = -1;
1395 }
1396 if (dac33->irq != -1) {
1397 INIT_WORK(&dac33->work, dac33_work);
1398 }
1399 }
1400
1401
1402 if (dac33->irq >= 0)
1403 snd_soc_add_component_controls(component, dac33_mode_snd_controls,
1404 ARRAY_SIZE(dac33_mode_snd_controls));
1405
1406 err_power:
1407 return ret;
1408 }
1409
1410 static void dac33_soc_remove(struct snd_soc_component *component)
1411 {
1412 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component);
1413
1414 if (dac33->irq >= 0) {
1415 free_irq(dac33->irq, dac33->component);
1416 flush_work(&dac33->work);
1417 }
1418 }
1419
1420 static const struct snd_soc_component_driver soc_component_dev_tlv320dac33 = {
1421 .read = dac33_read_reg_cache,
1422 .write = dac33_write_locked,
1423 .set_bias_level = dac33_set_bias_level,
1424 .probe = dac33_soc_probe,
1425 .remove = dac33_soc_remove,
1426 .controls = dac33_snd_controls,
1427 .num_controls = ARRAY_SIZE(dac33_snd_controls),
1428 .dapm_widgets = dac33_dapm_widgets,
1429 .num_dapm_widgets = ARRAY_SIZE(dac33_dapm_widgets),
1430 .dapm_routes = audio_map,
1431 .num_dapm_routes = ARRAY_SIZE(audio_map),
1432 .use_pmdown_time = 1,
1433 .endianness = 1,
1434 };
1435
1436 #define DAC33_RATES (SNDRV_PCM_RATE_44100 | \
1437 SNDRV_PCM_RATE_48000)
1438 #define DAC33_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S32_LE)
1439
1440 static const struct snd_soc_dai_ops dac33_dai_ops = {
1441 .startup = dac33_startup,
1442 .shutdown = dac33_shutdown,
1443 .hw_params = dac33_hw_params,
1444 .trigger = dac33_pcm_trigger,
1445 .delay = dac33_dai_delay,
1446 .set_sysclk = dac33_set_dai_sysclk,
1447 .set_fmt = dac33_set_dai_fmt,
1448 };
1449
1450 static struct snd_soc_dai_driver dac33_dai = {
1451 .name = "tlv320dac33-hifi",
1452 .playback = {
1453 .stream_name = "Playback",
1454 .channels_min = 2,
1455 .channels_max = 2,
1456 .rates = DAC33_RATES,
1457 .formats = DAC33_FORMATS,
1458 .sig_bits = 24,
1459 },
1460 .ops = &dac33_dai_ops,
1461 };
1462
1463 static int dac33_i2c_probe(struct i2c_client *client)
1464 {
1465 struct tlv320dac33_platform_data *pdata;
1466 struct tlv320dac33_priv *dac33;
1467 int ret, i;
1468
1469 if (client->dev.platform_data == NULL) {
1470 dev_err(&client->dev, "Platform data not set\n");
1471 return -ENODEV;
1472 }
1473 pdata = client->dev.platform_data;
1474
1475 dac33 = devm_kzalloc(&client->dev, sizeof(struct tlv320dac33_priv),
1476 GFP_KERNEL);
1477 if (dac33 == NULL)
1478 return -ENOMEM;
1479
1480 dac33->reg_cache = devm_kmemdup(&client->dev,
1481 dac33_reg,
1482 ARRAY_SIZE(dac33_reg) * sizeof(u8),
1483 GFP_KERNEL);
1484 if (!dac33->reg_cache)
1485 return -ENOMEM;
1486
1487 dac33->i2c = client;
1488 mutex_init(&dac33->mutex);
1489 spin_lock_init(&dac33->lock);
1490
1491 i2c_set_clientdata(client, dac33);
1492
1493 dac33->power_gpio = pdata->power_gpio;
1494 dac33->burst_bclkdiv = pdata->burst_bclkdiv;
1495 dac33->keep_bclk = pdata->keep_bclk;
1496 dac33->mode1_latency = pdata->mode1_latency;
1497 if (!dac33->mode1_latency)
1498 dac33->mode1_latency = 10000;
1499 dac33->irq = client->irq;
1500
1501 dac33->fifo_mode = DAC33_FIFO_BYPASS;
1502
1503
1504 if (dac33->power_gpio >= 0) {
1505 ret = gpio_request(dac33->power_gpio, "tlv320dac33 reset");
1506 if (ret < 0) {
1507 dev_err(&client->dev,
1508 "Failed to request reset GPIO (%d)\n",
1509 dac33->power_gpio);
1510 goto err_gpio;
1511 }
1512 gpio_direction_output(dac33->power_gpio, 0);
1513 }
1514
1515 for (i = 0; i < ARRAY_SIZE(dac33->supplies); i++)
1516 dac33->supplies[i].supply = dac33_supply_names[i];
1517
1518 ret = devm_regulator_bulk_get(&client->dev, ARRAY_SIZE(dac33->supplies),
1519 dac33->supplies);
1520
1521 if (ret != 0) {
1522 dev_err(&client->dev, "Failed to request supplies: %d\n", ret);
1523 goto err_get;
1524 }
1525
1526 ret = devm_snd_soc_register_component(&client->dev,
1527 &soc_component_dev_tlv320dac33, &dac33_dai, 1);
1528 if (ret < 0)
1529 goto err_get;
1530
1531 return ret;
1532 err_get:
1533 if (dac33->power_gpio >= 0)
1534 gpio_free(dac33->power_gpio);
1535 err_gpio:
1536 return ret;
1537 }
1538
1539 static int dac33_i2c_remove(struct i2c_client *client)
1540 {
1541 struct tlv320dac33_priv *dac33 = i2c_get_clientdata(client);
1542
1543 if (unlikely(dac33->chip_power))
1544 dac33_hard_power(dac33->component, 0);
1545
1546 if (dac33->power_gpio >= 0)
1547 gpio_free(dac33->power_gpio);
1548
1549 return 0;
1550 }
1551
1552 static const struct i2c_device_id tlv320dac33_i2c_id[] = {
1553 {
1554 .name = "tlv320dac33",
1555 .driver_data = 0,
1556 },
1557 { },
1558 };
1559 MODULE_DEVICE_TABLE(i2c, tlv320dac33_i2c_id);
1560
1561 static struct i2c_driver tlv320dac33_i2c_driver = {
1562 .driver = {
1563 .name = "tlv320dac33-codec",
1564 },
1565 .probe_new = dac33_i2c_probe,
1566 .remove = dac33_i2c_remove,
1567 .id_table = tlv320dac33_i2c_id,
1568 };
1569
1570 module_i2c_driver(tlv320dac33_i2c_driver);
1571
1572 MODULE_DESCRIPTION("ASoC TLV320DAC33 codec driver");
1573 MODULE_AUTHOR("Peter Ujfalusi <peter.ujfalusi@ti.com>");
1574 MODULE_LICENSE("GPL");