Lines Matching refs:dac33

197 	struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec);  in dac33_read()  local
203 if (dac33->chip_power) { in dac33_read()
223 struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec); in dac33_write() local
236 if (dac33->chip_power) { in dac33_write()
250 struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec); in dac33_write_locked() local
253 mutex_lock(&dac33->mutex); in dac33_write_locked()
255 mutex_unlock(&dac33->mutex); in dac33_write_locked()
264 struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec); in dac33_write16() local
281 if (dac33->chip_power) { in dac33_write16()
296 struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec); in dac33_init_chip() local
298 if (unlikely(!dac33->chip_power)) in dac33_init_chip()
377 struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec); in dac33_hard_power() local
380 mutex_lock(&dac33->mutex); in dac33_hard_power()
383 if (unlikely(power == dac33->chip_power)) { in dac33_hard_power()
390 ret = regulator_bulk_enable(ARRAY_SIZE(dac33->supplies), in dac33_hard_power()
391 dac33->supplies); in dac33_hard_power()
398 if (dac33->power_gpio >= 0) in dac33_hard_power()
399 gpio_set_value(dac33->power_gpio, 1); in dac33_hard_power()
401 dac33->chip_power = 1; in dac33_hard_power()
404 if (dac33->power_gpio >= 0) in dac33_hard_power()
405 gpio_set_value(dac33->power_gpio, 0); in dac33_hard_power()
407 ret = regulator_bulk_disable(ARRAY_SIZE(dac33->supplies), in dac33_hard_power()
408 dac33->supplies); in dac33_hard_power()
415 dac33->chip_power = 0; in dac33_hard_power()
419 mutex_unlock(&dac33->mutex); in dac33_hard_power()
427 struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec); in dac33_playback_event() local
431 if (likely(dac33->substream)) { in dac33_playback_event()
432 dac33_calculate_times(dac33->substream, codec); in dac33_playback_event()
433 dac33_prepare_chip(dac33->substream, codec); in dac33_playback_event()
447 struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec); in dac33_get_fifo_mode() local
449 ucontrol->value.integer.value[0] = dac33->fifo_mode; in dac33_get_fifo_mode()
458 struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec); in dac33_set_fifo_mode() local
461 if (dac33->fifo_mode == ucontrol->value.integer.value[0]) in dac33_set_fifo_mode()
471 dac33->fifo_mode = ucontrol->value.integer.value[0]; in dac33_set_fifo_mode()
658 static inline void dac33_prefill_handler(struct tlv320dac33_priv *dac33) in dac33_prefill_handler() argument
660 struct snd_soc_codec *codec = dac33->codec; in dac33_prefill_handler()
664 switch (dac33->fifo_mode) { in dac33_prefill_handler()
667 DAC33_THRREG(dac33->nsample)); in dac33_prefill_handler()
670 spin_lock_irqsave(&dac33->lock, flags); in dac33_prefill_handler()
671 dac33->t_stamp2 = ktime_to_us(ktime_get()); in dac33_prefill_handler()
672 dac33->t_stamp1 = dac33->t_stamp2; in dac33_prefill_handler()
673 spin_unlock_irqrestore(&dac33->lock, flags); in dac33_prefill_handler()
676 DAC33_THRREG(dac33->alarm_threshold)); in dac33_prefill_handler()
678 delay = SAMPLES_TO_US(dac33->burst_rate, in dac33_prefill_handler()
679 dac33->alarm_threshold) + 1000; in dac33_prefill_handler()
685 spin_lock_irqsave(&dac33->lock, flags); in dac33_prefill_handler()
686 dac33->t_stamp1 = ktime_to_us(ktime_get()); in dac33_prefill_handler()
688 dac33->t_stamp1 -= dac33->mode7_us_to_lthr; in dac33_prefill_handler()
689 spin_unlock_irqrestore(&dac33->lock, flags); in dac33_prefill_handler()
699 dac33->fifo_mode); in dac33_prefill_handler()
704 static inline void dac33_playback_handler(struct tlv320dac33_priv *dac33) in dac33_playback_handler() argument
706 struct snd_soc_codec *codec = dac33->codec; in dac33_playback_handler()
709 switch (dac33->fifo_mode) { in dac33_playback_handler()
712 spin_lock_irqsave(&dac33->lock, flags); in dac33_playback_handler()
713 dac33->t_stamp2 = ktime_to_us(ktime_get()); in dac33_playback_handler()
714 spin_unlock_irqrestore(&dac33->lock, flags); in dac33_playback_handler()
717 DAC33_THRREG(dac33->nsample)); in dac33_playback_handler()
724 dac33->fifo_mode); in dac33_playback_handler()
732 struct tlv320dac33_priv *dac33; in dac33_work() local
735 dac33 = container_of(work, struct tlv320dac33_priv, work); in dac33_work()
736 codec = dac33->codec; in dac33_work()
738 mutex_lock(&dac33->mutex); in dac33_work()
739 switch (dac33->state) { in dac33_work()
741 dac33->state = DAC33_PLAYBACK; in dac33_work()
742 dac33_prefill_handler(dac33); in dac33_work()
745 dac33_playback_handler(dac33); in dac33_work()
750 dac33->state = DAC33_IDLE; in dac33_work()
760 mutex_unlock(&dac33->mutex); in dac33_work()
766 struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec); in dac33_interrupt_handler() local
769 spin_lock_irqsave(&dac33->lock, flags); in dac33_interrupt_handler()
770 dac33->t_stamp1 = ktime_to_us(ktime_get()); in dac33_interrupt_handler()
771 spin_unlock_irqrestore(&dac33->lock, flags); in dac33_interrupt_handler()
774 if (dac33->fifo_mode != DAC33_FIFO_MODE7) in dac33_interrupt_handler()
775 queue_work(dac33->dac33_wq, &dac33->work); in dac33_interrupt_handler()
798 struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec); in dac33_startup() local
801 dac33->substream = substream; in dac33_startup()
810 struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec); in dac33_shutdown() local
812 dac33->substream = NULL; in dac33_shutdown()
822 struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec); in dac33_hw_params() local
837 dac33->fifo_size = DAC33_FIFO_SIZE_16BIT; in dac33_hw_params()
838 dac33->burst_rate = CALC_BURST_RATE(dac33->burst_bclkdiv, 32); in dac33_hw_params()
841 dac33->fifo_size = DAC33_FIFO_SIZE_24BIT; in dac33_hw_params()
842 dac33->burst_rate = CALC_BURST_RATE(dac33->burst_bclkdiv, 64); in dac33_hw_params()
866 struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec); in dac33_prepare_chip() local
873 oscset = CALC_OSCSET(substream->runtime->rate, dac33->refclk); in dac33_prepare_chip()
875 dac33->refclk); in dac33_prepare_chip()
905 mutex_lock(&dac33->mutex); in dac33_prepare_chip()
907 if (!dac33->chip_power) { in dac33_prepare_chip()
912 mutex_unlock(&dac33->mutex); in dac33_prepare_chip()
941 if (dac33->fifo_mode) { in dac33_prepare_chip()
960 switch (dac33->fifo_mode) { in dac33_prepare_chip()
976 switch (dac33->fifo_mode) { in dac33_prepare_chip()
986 if (dac33->keep_bclk) in dac33_prepare_chip()
1000 if (dac33->keep_bclk) in dac33_prepare_chip()
1029 if (dac33->fifo_mode) in dac33_prepare_chip()
1031 dac33->burst_bclkdiv); in dac33_prepare_chip()
1038 switch (dac33->fifo_mode) { in dac33_prepare_chip()
1041 DAC33_THRREG(dac33->alarm_threshold)); in dac33_prepare_chip()
1048 dac33_write16(codec, DAC33_UTHR_MSB, DAC33_THRREG(dac33->uthr)); in dac33_prepare_chip()
1056 mutex_unlock(&dac33->mutex); in dac33_prepare_chip()
1064 struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec); in dac33_calculate_times() local
1070 if (!dac33->fifo_mode) in dac33_calculate_times()
1073 switch (dac33->fifo_mode) { in dac33_calculate_times()
1076 dac33->alarm_threshold = US_TO_SAMPLES(rate, in dac33_calculate_times()
1077 dac33->mode1_latency); in dac33_calculate_times()
1078 nsample_limit = dac33->fifo_size - dac33->alarm_threshold; in dac33_calculate_times()
1080 if (period_size <= dac33->alarm_threshold) in dac33_calculate_times()
1085 dac33->nsample = period_size * in dac33_calculate_times()
1086 ((dac33->alarm_threshold / period_size) + in dac33_calculate_times()
1087 (dac33->alarm_threshold % period_size ? in dac33_calculate_times()
1090 dac33->nsample = nsample_limit; in dac33_calculate_times()
1092 dac33->nsample = period_size; in dac33_calculate_times()
1094 dac33->mode1_us_burst = SAMPLES_TO_US(dac33->burst_rate, in dac33_calculate_times()
1095 dac33->nsample); in dac33_calculate_times()
1096 dac33->t_stamp1 = 0; in dac33_calculate_times()
1097 dac33->t_stamp2 = 0; in dac33_calculate_times()
1100 dac33->uthr = UTHR_FROM_PERIOD_SIZE(period_size, rate, in dac33_calculate_times()
1101 dac33->burst_rate) + 9; in dac33_calculate_times()
1102 if (dac33->uthr > (dac33->fifo_size - DAC33_MODE7_MARGIN)) in dac33_calculate_times()
1103 dac33->uthr = dac33->fifo_size - DAC33_MODE7_MARGIN; in dac33_calculate_times()
1104 if (dac33->uthr < (DAC33_MODE7_MARGIN + 10)) in dac33_calculate_times()
1105 dac33->uthr = (DAC33_MODE7_MARGIN + 10); in dac33_calculate_times()
1107 dac33->mode7_us_to_lthr = in dac33_calculate_times()
1109 dac33->uthr - DAC33_MODE7_MARGIN + 1); in dac33_calculate_times()
1110 dac33->t_stamp1 = 0; in dac33_calculate_times()
1122 struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec); in dac33_pcm_trigger() local
1129 if (dac33->fifo_mode) { in dac33_pcm_trigger()
1130 dac33->state = DAC33_PREFILL; in dac33_pcm_trigger()
1131 queue_work(dac33->dac33_wq, &dac33->work); in dac33_pcm_trigger()
1137 if (dac33->fifo_mode) { in dac33_pcm_trigger()
1138 dac33->state = DAC33_FLUSH; in dac33_pcm_trigger()
1139 queue_work(dac33->dac33_wq, &dac33->work); in dac33_pcm_trigger()
1154 struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec); in dac33_dai_delay() local
1161 switch (dac33->fifo_mode) { in dac33_dai_delay()
1165 spin_lock_irqsave(&dac33->lock, flags); in dac33_dai_delay()
1166 t0 = dac33->t_stamp1; in dac33_dai_delay()
1167 t1 = dac33->t_stamp2; in dac33_dai_delay()
1168 spin_unlock_irqrestore(&dac33->lock, flags); in dac33_dai_delay()
1185 if (likely(dac33->alarm_threshold > samples_out)) in dac33_dai_delay()
1186 delay = dac33->alarm_threshold - samples_out; in dac33_dai_delay()
1189 } else if ((t_now - t1) <= dac33->mode1_us_burst) { in dac33_dai_delay()
1201 dac33->burst_rate, in dac33_dai_delay()
1204 samples = dac33->alarm_threshold; in dac33_dai_delay()
1221 samples_in = dac33->nsample; in dac33_dai_delay()
1222 samples = dac33->alarm_threshold; in dac33_dai_delay()
1226 delay = samples > dac33->fifo_size ? in dac33_dai_delay()
1227 dac33->fifo_size : samples; in dac33_dai_delay()
1233 spin_lock_irqsave(&dac33->lock, flags); in dac33_dai_delay()
1234 t0 = dac33->t_stamp1; in dac33_dai_delay()
1235 uthr = dac33->uthr; in dac33_dai_delay()
1236 spin_unlock_irqrestore(&dac33->lock, flags); in dac33_dai_delay()
1253 if (time_delta <= dac33->mode7_us_to_lthr) { in dac33_dai_delay()
1271 time_delta = time_delta - dac33->mode7_us_to_lthr; in dac33_dai_delay()
1277 dac33->burst_rate, in dac33_dai_delay()
1287 dac33->fifo_mode); in dac33_dai_delay()
1298 struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec); in dac33_set_dai_sysclk() local
1316 dac33->refclk = freq; in dac33_set_dai_sysclk()
1328 struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec); in dac33_set_dai_fmt() local
1341 if (dac33->fifo_mode) { in dac33_set_dai_fmt()
1381 struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec); in dac33_soc_probe() local
1384 codec->control_data = dac33->control_data; in dac33_soc_probe()
1386 dac33->codec = codec; in dac33_soc_probe()
1404 if (dac33->irq >= 0) { in dac33_soc_probe()
1405 ret = request_irq(dac33->irq, dac33_interrupt_handler, in dac33_soc_probe()
1410 dac33->irq, ret); in dac33_soc_probe()
1411 dac33->irq = -1; in dac33_soc_probe()
1413 if (dac33->irq != -1) { in dac33_soc_probe()
1415 dac33->dac33_wq = in dac33_soc_probe()
1417 if (dac33->dac33_wq == NULL) { in dac33_soc_probe()
1418 free_irq(dac33->irq, codec); in dac33_soc_probe()
1422 INIT_WORK(&dac33->work, dac33_work); in dac33_soc_probe()
1427 if (dac33->irq >= 0) in dac33_soc_probe()
1437 struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec); in dac33_soc_remove() local
1439 if (dac33->irq >= 0) { in dac33_soc_remove()
1440 free_irq(dac33->irq, dac33->codec); in dac33_soc_remove()
1441 destroy_workqueue(dac33->dac33_wq); in dac33_soc_remove()
1496 struct tlv320dac33_priv *dac33; in dac33_i2c_probe() local
1505 dac33 = devm_kzalloc(&client->dev, sizeof(struct tlv320dac33_priv), in dac33_i2c_probe()
1507 if (dac33 == NULL) in dac33_i2c_probe()
1510 dac33->control_data = client; in dac33_i2c_probe()
1511 mutex_init(&dac33->mutex); in dac33_i2c_probe()
1512 spin_lock_init(&dac33->lock); in dac33_i2c_probe()
1514 i2c_set_clientdata(client, dac33); in dac33_i2c_probe()
1516 dac33->power_gpio = pdata->power_gpio; in dac33_i2c_probe()
1517 dac33->burst_bclkdiv = pdata->burst_bclkdiv; in dac33_i2c_probe()
1518 dac33->keep_bclk = pdata->keep_bclk; in dac33_i2c_probe()
1519 dac33->mode1_latency = pdata->mode1_latency; in dac33_i2c_probe()
1520 if (!dac33->mode1_latency) in dac33_i2c_probe()
1521 dac33->mode1_latency = 10000; /* 10ms */ in dac33_i2c_probe()
1522 dac33->irq = client->irq; in dac33_i2c_probe()
1524 dac33->fifo_mode = DAC33_FIFO_BYPASS; in dac33_i2c_probe()
1527 if (dac33->power_gpio >= 0) { in dac33_i2c_probe()
1528 ret = gpio_request(dac33->power_gpio, "tlv320dac33 reset"); in dac33_i2c_probe()
1532 dac33->power_gpio); in dac33_i2c_probe()
1535 gpio_direction_output(dac33->power_gpio, 0); in dac33_i2c_probe()
1538 for (i = 0; i < ARRAY_SIZE(dac33->supplies); i++) in dac33_i2c_probe()
1539 dac33->supplies[i].supply = dac33_supply_names[i]; in dac33_i2c_probe()
1541 ret = devm_regulator_bulk_get(&client->dev, ARRAY_SIZE(dac33->supplies), in dac33_i2c_probe()
1542 dac33->supplies); in dac33_i2c_probe()
1556 if (dac33->power_gpio >= 0) in dac33_i2c_probe()
1557 gpio_free(dac33->power_gpio); in dac33_i2c_probe()
1564 struct tlv320dac33_priv *dac33 = i2c_get_clientdata(client); in dac33_i2c_remove() local
1566 if (unlikely(dac33->chip_power)) in dac33_i2c_remove()
1567 dac33_hard_power(dac33->codec, 0); in dac33_i2c_remove()
1569 if (dac33->power_gpio >= 0) in dac33_i2c_remove()
1570 gpio_free(dac33->power_gpio); in dac33_i2c_remove()