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()
659 static inline void dac33_prefill_handler(struct tlv320dac33_priv *dac33) in dac33_prefill_handler() argument
661 struct snd_soc_codec *codec = dac33->codec; in dac33_prefill_handler()
665 switch (dac33->fifo_mode) { in dac33_prefill_handler()
668 DAC33_THRREG(dac33->nsample)); in dac33_prefill_handler()
671 spin_lock_irqsave(&dac33->lock, flags); in dac33_prefill_handler()
672 dac33->t_stamp2 = ktime_to_us(ktime_get()); in dac33_prefill_handler()
673 dac33->t_stamp1 = dac33->t_stamp2; in dac33_prefill_handler()
674 spin_unlock_irqrestore(&dac33->lock, flags); in dac33_prefill_handler()
677 DAC33_THRREG(dac33->alarm_threshold)); in dac33_prefill_handler()
679 delay = SAMPLES_TO_US(dac33->burst_rate, in dac33_prefill_handler()
680 dac33->alarm_threshold) + 1000; in dac33_prefill_handler()
686 spin_lock_irqsave(&dac33->lock, flags); in dac33_prefill_handler()
687 dac33->t_stamp1 = ktime_to_us(ktime_get()); in dac33_prefill_handler()
689 dac33->t_stamp1 -= dac33->mode7_us_to_lthr; in dac33_prefill_handler()
690 spin_unlock_irqrestore(&dac33->lock, flags); in dac33_prefill_handler()
700 dac33->fifo_mode); in dac33_prefill_handler()
705 static inline void dac33_playback_handler(struct tlv320dac33_priv *dac33) in dac33_playback_handler() argument
707 struct snd_soc_codec *codec = dac33->codec; in dac33_playback_handler()
710 switch (dac33->fifo_mode) { in dac33_playback_handler()
713 spin_lock_irqsave(&dac33->lock, flags); in dac33_playback_handler()
714 dac33->t_stamp2 = ktime_to_us(ktime_get()); in dac33_playback_handler()
715 spin_unlock_irqrestore(&dac33->lock, flags); in dac33_playback_handler()
718 DAC33_THRREG(dac33->nsample)); in dac33_playback_handler()
725 dac33->fifo_mode); in dac33_playback_handler()
733 struct tlv320dac33_priv *dac33; in dac33_work() local
736 dac33 = container_of(work, struct tlv320dac33_priv, work); in dac33_work()
737 codec = dac33->codec; in dac33_work()
739 mutex_lock(&dac33->mutex); in dac33_work()
740 switch (dac33->state) { in dac33_work()
742 dac33->state = DAC33_PLAYBACK; in dac33_work()
743 dac33_prefill_handler(dac33); in dac33_work()
746 dac33_playback_handler(dac33); in dac33_work()
751 dac33->state = DAC33_IDLE; in dac33_work()
761 mutex_unlock(&dac33->mutex); in dac33_work()
767 struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec); in dac33_interrupt_handler() local
770 spin_lock_irqsave(&dac33->lock, flags); in dac33_interrupt_handler()
771 dac33->t_stamp1 = ktime_to_us(ktime_get()); in dac33_interrupt_handler()
772 spin_unlock_irqrestore(&dac33->lock, flags); in dac33_interrupt_handler()
775 if (dac33->fifo_mode != DAC33_FIFO_MODE7) in dac33_interrupt_handler()
776 queue_work(dac33->dac33_wq, &dac33->work); in dac33_interrupt_handler()
799 struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec); in dac33_startup() local
802 dac33->substream = substream; in dac33_startup()
811 struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec); in dac33_shutdown() local
813 dac33->substream = NULL; in dac33_shutdown()
823 struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec); in dac33_hw_params() local
838 dac33->fifo_size = DAC33_FIFO_SIZE_16BIT; in dac33_hw_params()
839 dac33->burst_rate = CALC_BURST_RATE(dac33->burst_bclkdiv, 32); in dac33_hw_params()
842 dac33->fifo_size = DAC33_FIFO_SIZE_24BIT; in dac33_hw_params()
843 dac33->burst_rate = CALC_BURST_RATE(dac33->burst_bclkdiv, 64); in dac33_hw_params()
867 struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec); in dac33_prepare_chip() local
874 oscset = CALC_OSCSET(substream->runtime->rate, dac33->refclk); in dac33_prepare_chip()
876 dac33->refclk); in dac33_prepare_chip()
906 mutex_lock(&dac33->mutex); in dac33_prepare_chip()
908 if (!dac33->chip_power) { in dac33_prepare_chip()
913 mutex_unlock(&dac33->mutex); in dac33_prepare_chip()
942 if (dac33->fifo_mode) { in dac33_prepare_chip()
961 switch (dac33->fifo_mode) { in dac33_prepare_chip()
977 switch (dac33->fifo_mode) { in dac33_prepare_chip()
987 if (dac33->keep_bclk) in dac33_prepare_chip()
1001 if (dac33->keep_bclk) in dac33_prepare_chip()
1030 if (dac33->fifo_mode) in dac33_prepare_chip()
1032 dac33->burst_bclkdiv); in dac33_prepare_chip()
1039 switch (dac33->fifo_mode) { in dac33_prepare_chip()
1042 DAC33_THRREG(dac33->alarm_threshold)); in dac33_prepare_chip()
1049 dac33_write16(codec, DAC33_UTHR_MSB, DAC33_THRREG(dac33->uthr)); in dac33_prepare_chip()
1057 mutex_unlock(&dac33->mutex); in dac33_prepare_chip()
1065 struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec); in dac33_calculate_times() local
1071 if (!dac33->fifo_mode) in dac33_calculate_times()
1074 switch (dac33->fifo_mode) { in dac33_calculate_times()
1077 dac33->alarm_threshold = US_TO_SAMPLES(rate, in dac33_calculate_times()
1078 dac33->mode1_latency); in dac33_calculate_times()
1079 nsample_limit = dac33->fifo_size - dac33->alarm_threshold; in dac33_calculate_times()
1081 if (period_size <= dac33->alarm_threshold) in dac33_calculate_times()
1086 dac33->nsample = period_size * in dac33_calculate_times()
1087 ((dac33->alarm_threshold / period_size) + in dac33_calculate_times()
1088 (dac33->alarm_threshold % period_size ? in dac33_calculate_times()
1091 dac33->nsample = nsample_limit; in dac33_calculate_times()
1093 dac33->nsample = period_size; in dac33_calculate_times()
1095 dac33->mode1_us_burst = SAMPLES_TO_US(dac33->burst_rate, in dac33_calculate_times()
1096 dac33->nsample); in dac33_calculate_times()
1097 dac33->t_stamp1 = 0; in dac33_calculate_times()
1098 dac33->t_stamp2 = 0; in dac33_calculate_times()
1101 dac33->uthr = UTHR_FROM_PERIOD_SIZE(period_size, rate, in dac33_calculate_times()
1102 dac33->burst_rate) + 9; in dac33_calculate_times()
1103 if (dac33->uthr > (dac33->fifo_size - DAC33_MODE7_MARGIN)) in dac33_calculate_times()
1104 dac33->uthr = dac33->fifo_size - DAC33_MODE7_MARGIN; in dac33_calculate_times()
1105 if (dac33->uthr < (DAC33_MODE7_MARGIN + 10)) in dac33_calculate_times()
1106 dac33->uthr = (DAC33_MODE7_MARGIN + 10); in dac33_calculate_times()
1108 dac33->mode7_us_to_lthr = in dac33_calculate_times()
1110 dac33->uthr - DAC33_MODE7_MARGIN + 1); in dac33_calculate_times()
1111 dac33->t_stamp1 = 0; in dac33_calculate_times()
1123 struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec); in dac33_pcm_trigger() local
1130 if (dac33->fifo_mode) { in dac33_pcm_trigger()
1131 dac33->state = DAC33_PREFILL; in dac33_pcm_trigger()
1132 queue_work(dac33->dac33_wq, &dac33->work); in dac33_pcm_trigger()
1138 if (dac33->fifo_mode) { in dac33_pcm_trigger()
1139 dac33->state = DAC33_FLUSH; in dac33_pcm_trigger()
1140 queue_work(dac33->dac33_wq, &dac33->work); in dac33_pcm_trigger()
1155 struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec); in dac33_dai_delay() local
1162 switch (dac33->fifo_mode) { in dac33_dai_delay()
1166 spin_lock_irqsave(&dac33->lock, flags); in dac33_dai_delay()
1167 t0 = dac33->t_stamp1; in dac33_dai_delay()
1168 t1 = dac33->t_stamp2; in dac33_dai_delay()
1169 spin_unlock_irqrestore(&dac33->lock, flags); in dac33_dai_delay()
1186 if (likely(dac33->alarm_threshold > samples_out)) in dac33_dai_delay()
1187 delay = dac33->alarm_threshold - samples_out; in dac33_dai_delay()
1190 } else if ((t_now - t1) <= dac33->mode1_us_burst) { in dac33_dai_delay()
1202 dac33->burst_rate, in dac33_dai_delay()
1205 samples = dac33->alarm_threshold; in dac33_dai_delay()
1222 samples_in = dac33->nsample; in dac33_dai_delay()
1223 samples = dac33->alarm_threshold; in dac33_dai_delay()
1227 delay = samples > dac33->fifo_size ? in dac33_dai_delay()
1228 dac33->fifo_size : samples; in dac33_dai_delay()
1234 spin_lock_irqsave(&dac33->lock, flags); in dac33_dai_delay()
1235 t0 = dac33->t_stamp1; in dac33_dai_delay()
1236 uthr = dac33->uthr; in dac33_dai_delay()
1237 spin_unlock_irqrestore(&dac33->lock, flags); in dac33_dai_delay()
1254 if (time_delta <= dac33->mode7_us_to_lthr) { in dac33_dai_delay()
1272 time_delta = time_delta - dac33->mode7_us_to_lthr; in dac33_dai_delay()
1278 dac33->burst_rate, in dac33_dai_delay()
1288 dac33->fifo_mode); in dac33_dai_delay()
1299 struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec); in dac33_set_dai_sysclk() local
1317 dac33->refclk = freq; in dac33_set_dai_sysclk()
1329 struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec); in dac33_set_dai_fmt() local
1342 if (dac33->fifo_mode) { in dac33_set_dai_fmt()
1382 struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec); in dac33_soc_probe() local
1385 codec->control_data = dac33->control_data; in dac33_soc_probe()
1387 dac33->codec = codec; in dac33_soc_probe()
1405 if (dac33->irq >= 0) { in dac33_soc_probe()
1406 ret = request_irq(dac33->irq, dac33_interrupt_handler, in dac33_soc_probe()
1411 dac33->irq, ret); in dac33_soc_probe()
1412 dac33->irq = -1; in dac33_soc_probe()
1414 if (dac33->irq != -1) { in dac33_soc_probe()
1416 dac33->dac33_wq = in dac33_soc_probe()
1418 if (dac33->dac33_wq == NULL) { in dac33_soc_probe()
1419 free_irq(dac33->irq, codec); in dac33_soc_probe()
1423 INIT_WORK(&dac33->work, dac33_work); in dac33_soc_probe()
1428 if (dac33->irq >= 0) in dac33_soc_probe()
1438 struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec); in dac33_soc_remove() local
1440 if (dac33->irq >= 0) { in dac33_soc_remove()
1441 free_irq(dac33->irq, dac33->codec); in dac33_soc_remove()
1442 destroy_workqueue(dac33->dac33_wq); in dac33_soc_remove()
1497 struct tlv320dac33_priv *dac33; in dac33_i2c_probe() local
1506 dac33 = devm_kzalloc(&client->dev, sizeof(struct tlv320dac33_priv), in dac33_i2c_probe()
1508 if (dac33 == NULL) in dac33_i2c_probe()
1511 dac33->control_data = client; in dac33_i2c_probe()
1512 mutex_init(&dac33->mutex); in dac33_i2c_probe()
1513 spin_lock_init(&dac33->lock); in dac33_i2c_probe()
1515 i2c_set_clientdata(client, dac33); in dac33_i2c_probe()
1517 dac33->power_gpio = pdata->power_gpio; in dac33_i2c_probe()
1518 dac33->burst_bclkdiv = pdata->burst_bclkdiv; in dac33_i2c_probe()
1519 dac33->keep_bclk = pdata->keep_bclk; in dac33_i2c_probe()
1520 dac33->mode1_latency = pdata->mode1_latency; in dac33_i2c_probe()
1521 if (!dac33->mode1_latency) in dac33_i2c_probe()
1522 dac33->mode1_latency = 10000; /* 10ms */ in dac33_i2c_probe()
1523 dac33->irq = client->irq; in dac33_i2c_probe()
1525 dac33->fifo_mode = DAC33_FIFO_BYPASS; in dac33_i2c_probe()
1528 if (dac33->power_gpio >= 0) { in dac33_i2c_probe()
1529 ret = gpio_request(dac33->power_gpio, "tlv320dac33 reset"); in dac33_i2c_probe()
1533 dac33->power_gpio); in dac33_i2c_probe()
1536 gpio_direction_output(dac33->power_gpio, 0); in dac33_i2c_probe()
1539 for (i = 0; i < ARRAY_SIZE(dac33->supplies); i++) in dac33_i2c_probe()
1540 dac33->supplies[i].supply = dac33_supply_names[i]; in dac33_i2c_probe()
1542 ret = devm_regulator_bulk_get(&client->dev, ARRAY_SIZE(dac33->supplies), in dac33_i2c_probe()
1543 dac33->supplies); in dac33_i2c_probe()
1557 if (dac33->power_gpio >= 0) in dac33_i2c_probe()
1558 gpio_free(dac33->power_gpio); in dac33_i2c_probe()
1565 struct tlv320dac33_priv *dac33 = i2c_get_clientdata(client); in dac33_i2c_remove() local
1567 if (unlikely(dac33->chip_power)) in dac33_i2c_remove()
1568 dac33_hard_power(dac33->codec, 0); in dac33_i2c_remove()
1570 if (dac33->power_gpio >= 0) in dac33_i2c_remove()
1571 gpio_free(dac33->power_gpio); in dac33_i2c_remove()