Lines Matching refs:dac33
163 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component); in dac33_read_reg_cache() local
164 u8 *cache = dac33->reg_cache; in dac33_read_reg_cache()
174 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component); in dac33_write_reg_cache() local
175 u8 *cache = dac33->reg_cache; in dac33_write_reg_cache()
185 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component); in dac33_read() local
191 if (dac33->chip_power) { in dac33_read()
192 val = i2c_smbus_read_byte_data(dac33->i2c, value[0]); in dac33_read()
211 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component); in dac33_write() local
224 if (dac33->chip_power) { in dac33_write()
225 ret = i2c_master_send(dac33->i2c, data, 2); in dac33_write()
238 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component); in dac33_write_locked() local
241 mutex_lock(&dac33->mutex); in dac33_write_locked()
243 mutex_unlock(&dac33->mutex); in dac33_write_locked()
252 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component); in dac33_write16() local
269 if (dac33->chip_power) { in dac33_write16()
272 ret = i2c_master_send(dac33->i2c, data, 3); in dac33_write16()
284 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component); in dac33_init_chip() local
286 if (unlikely(!dac33->chip_power)) in dac33_init_chip()
365 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component); in dac33_hard_power() local
368 mutex_lock(&dac33->mutex); in dac33_hard_power()
371 if (unlikely(power == dac33->chip_power)) { in dac33_hard_power()
378 ret = regulator_bulk_enable(ARRAY_SIZE(dac33->supplies), in dac33_hard_power()
379 dac33->supplies); in dac33_hard_power()
386 if (dac33->power_gpio >= 0) in dac33_hard_power()
387 gpio_set_value(dac33->power_gpio, 1); in dac33_hard_power()
389 dac33->chip_power = 1; in dac33_hard_power()
392 if (dac33->power_gpio >= 0) in dac33_hard_power()
393 gpio_set_value(dac33->power_gpio, 0); in dac33_hard_power()
395 ret = regulator_bulk_disable(ARRAY_SIZE(dac33->supplies), in dac33_hard_power()
396 dac33->supplies); in dac33_hard_power()
403 dac33->chip_power = 0; in dac33_hard_power()
407 mutex_unlock(&dac33->mutex); in dac33_hard_power()
415 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component); in dac33_playback_event() local
419 if (likely(dac33->substream)) { in dac33_playback_event()
420 dac33_calculate_times(dac33->substream, component); in dac33_playback_event()
421 dac33_prepare_chip(dac33->substream, component); in dac33_playback_event()
435 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component); in dac33_get_fifo_mode() local
437 ucontrol->value.enumerated.item[0] = dac33->fifo_mode; in dac33_get_fifo_mode()
446 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component); in dac33_set_fifo_mode() local
449 if (dac33->fifo_mode == ucontrol->value.enumerated.item[0]) in dac33_set_fifo_mode()
458 dac33->fifo_mode = ucontrol->value.enumerated.item[0]; in dac33_set_fifo_mode()
645 static inline void dac33_prefill_handler(struct tlv320dac33_priv *dac33) in dac33_prefill_handler() argument
647 struct snd_soc_component *component = dac33->component; in dac33_prefill_handler()
651 switch (dac33->fifo_mode) { in dac33_prefill_handler()
654 DAC33_THRREG(dac33->nsample)); in dac33_prefill_handler()
657 spin_lock_irqsave(&dac33->lock, flags); in dac33_prefill_handler()
658 dac33->t_stamp2 = ktime_to_us(ktime_get()); in dac33_prefill_handler()
659 dac33->t_stamp1 = dac33->t_stamp2; in dac33_prefill_handler()
660 spin_unlock_irqrestore(&dac33->lock, flags); in dac33_prefill_handler()
663 DAC33_THRREG(dac33->alarm_threshold)); in dac33_prefill_handler()
665 delay = SAMPLES_TO_US(dac33->burst_rate, in dac33_prefill_handler()
666 dac33->alarm_threshold) + 1000; in dac33_prefill_handler()
672 spin_lock_irqsave(&dac33->lock, flags); in dac33_prefill_handler()
673 dac33->t_stamp1 = ktime_to_us(ktime_get()); in dac33_prefill_handler()
675 dac33->t_stamp1 -= dac33->mode7_us_to_lthr; in dac33_prefill_handler()
676 spin_unlock_irqrestore(&dac33->lock, flags); in dac33_prefill_handler()
686 dac33->fifo_mode); in dac33_prefill_handler()
691 static inline void dac33_playback_handler(struct tlv320dac33_priv *dac33) in dac33_playback_handler() argument
693 struct snd_soc_component *component = dac33->component; in dac33_playback_handler()
696 switch (dac33->fifo_mode) { in dac33_playback_handler()
699 spin_lock_irqsave(&dac33->lock, flags); in dac33_playback_handler()
700 dac33->t_stamp2 = ktime_to_us(ktime_get()); in dac33_playback_handler()
701 spin_unlock_irqrestore(&dac33->lock, flags); in dac33_playback_handler()
704 DAC33_THRREG(dac33->nsample)); in dac33_playback_handler()
711 dac33->fifo_mode); in dac33_playback_handler()
719 struct tlv320dac33_priv *dac33; in dac33_work() local
722 dac33 = container_of(work, struct tlv320dac33_priv, work); in dac33_work()
723 component = dac33->component; in dac33_work()
725 mutex_lock(&dac33->mutex); in dac33_work()
726 switch (dac33->state) { in dac33_work()
728 dac33->state = DAC33_PLAYBACK; in dac33_work()
729 dac33_prefill_handler(dac33); in dac33_work()
732 dac33_playback_handler(dac33); in dac33_work()
737 dac33->state = DAC33_IDLE; in dac33_work()
747 mutex_unlock(&dac33->mutex); in dac33_work()
753 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component); in dac33_interrupt_handler() local
756 spin_lock_irqsave(&dac33->lock, flags); in dac33_interrupt_handler()
757 dac33->t_stamp1 = ktime_to_us(ktime_get()); in dac33_interrupt_handler()
758 spin_unlock_irqrestore(&dac33->lock, flags); in dac33_interrupt_handler()
761 if (dac33->fifo_mode != DAC33_FIFO_MODE7) in dac33_interrupt_handler()
762 schedule_work(&dac33->work); in dac33_interrupt_handler()
785 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component); in dac33_startup() local
788 dac33->substream = substream; in dac33_startup()
797 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component); in dac33_shutdown() local
799 dac33->substream = NULL; in dac33_shutdown()
809 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component); in dac33_hw_params() local
824 dac33->fifo_size = DAC33_FIFO_SIZE_16BIT; in dac33_hw_params()
825 dac33->burst_rate = CALC_BURST_RATE(dac33->burst_bclkdiv, 32); in dac33_hw_params()
828 dac33->fifo_size = DAC33_FIFO_SIZE_24BIT; in dac33_hw_params()
829 dac33->burst_rate = CALC_BURST_RATE(dac33->burst_bclkdiv, 64); in dac33_hw_params()
853 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component); in dac33_prepare_chip() local
860 oscset = CALC_OSCSET(substream->runtime->rate, dac33->refclk); in dac33_prepare_chip()
862 dac33->refclk); in dac33_prepare_chip()
892 mutex_lock(&dac33->mutex); in dac33_prepare_chip()
894 if (!dac33->chip_power) { in dac33_prepare_chip()
899 mutex_unlock(&dac33->mutex); in dac33_prepare_chip()
928 if (dac33->fifo_mode) { in dac33_prepare_chip()
947 switch (dac33->fifo_mode) { in dac33_prepare_chip()
963 switch (dac33->fifo_mode) { in dac33_prepare_chip()
973 if (dac33->keep_bclk) in dac33_prepare_chip()
987 if (dac33->keep_bclk) in dac33_prepare_chip()
1016 if (dac33->fifo_mode) in dac33_prepare_chip()
1018 dac33->burst_bclkdiv); in dac33_prepare_chip()
1025 switch (dac33->fifo_mode) { in dac33_prepare_chip()
1028 DAC33_THRREG(dac33->alarm_threshold)); in dac33_prepare_chip()
1035 dac33_write16(component, DAC33_UTHR_MSB, DAC33_THRREG(dac33->uthr)); in dac33_prepare_chip()
1043 mutex_unlock(&dac33->mutex); in dac33_prepare_chip()
1051 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component); in dac33_calculate_times() local
1057 if (!dac33->fifo_mode) in dac33_calculate_times()
1060 switch (dac33->fifo_mode) { in dac33_calculate_times()
1063 dac33->alarm_threshold = US_TO_SAMPLES(rate, in dac33_calculate_times()
1064 dac33->mode1_latency); in dac33_calculate_times()
1065 nsample_limit = dac33->fifo_size - dac33->alarm_threshold; in dac33_calculate_times()
1067 if (period_size <= dac33->alarm_threshold) in dac33_calculate_times()
1072 dac33->nsample = period_size * in dac33_calculate_times()
1073 ((dac33->alarm_threshold / period_size) + in dac33_calculate_times()
1074 ((dac33->alarm_threshold % period_size) ? in dac33_calculate_times()
1077 dac33->nsample = nsample_limit; in dac33_calculate_times()
1079 dac33->nsample = period_size; in dac33_calculate_times()
1081 dac33->mode1_us_burst = SAMPLES_TO_US(dac33->burst_rate, in dac33_calculate_times()
1082 dac33->nsample); in dac33_calculate_times()
1083 dac33->t_stamp1 = 0; in dac33_calculate_times()
1084 dac33->t_stamp2 = 0; in dac33_calculate_times()
1087 dac33->uthr = UTHR_FROM_PERIOD_SIZE(period_size, rate, in dac33_calculate_times()
1088 dac33->burst_rate) + 9; in dac33_calculate_times()
1089 if (dac33->uthr > (dac33->fifo_size - DAC33_MODE7_MARGIN)) in dac33_calculate_times()
1090 dac33->uthr = dac33->fifo_size - DAC33_MODE7_MARGIN; in dac33_calculate_times()
1091 if (dac33->uthr < (DAC33_MODE7_MARGIN + 10)) in dac33_calculate_times()
1092 dac33->uthr = (DAC33_MODE7_MARGIN + 10); in dac33_calculate_times()
1094 dac33->mode7_us_to_lthr = in dac33_calculate_times()
1096 dac33->uthr - DAC33_MODE7_MARGIN + 1); in dac33_calculate_times()
1097 dac33->t_stamp1 = 0; in dac33_calculate_times()
1109 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component); in dac33_pcm_trigger() local
1116 if (dac33->fifo_mode) { in dac33_pcm_trigger()
1117 dac33->state = DAC33_PREFILL; in dac33_pcm_trigger()
1118 schedule_work(&dac33->work); in dac33_pcm_trigger()
1124 if (dac33->fifo_mode) { in dac33_pcm_trigger()
1125 dac33->state = DAC33_FLUSH; in dac33_pcm_trigger()
1126 schedule_work(&dac33->work); in dac33_pcm_trigger()
1141 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component); in dac33_dai_delay() local
1148 switch (dac33->fifo_mode) { in dac33_dai_delay()
1152 spin_lock_irqsave(&dac33->lock, flags); in dac33_dai_delay()
1153 t0 = dac33->t_stamp1; in dac33_dai_delay()
1154 t1 = dac33->t_stamp2; in dac33_dai_delay()
1155 spin_unlock_irqrestore(&dac33->lock, flags); in dac33_dai_delay()
1172 if (likely(dac33->alarm_threshold > samples_out)) in dac33_dai_delay()
1173 delay = dac33->alarm_threshold - samples_out; in dac33_dai_delay()
1176 } else if ((t_now - t1) <= dac33->mode1_us_burst) { in dac33_dai_delay()
1188 dac33->burst_rate, in dac33_dai_delay()
1191 samples = dac33->alarm_threshold; in dac33_dai_delay()
1208 samples_in = dac33->nsample; in dac33_dai_delay()
1209 samples = dac33->alarm_threshold; in dac33_dai_delay()
1213 delay = samples > dac33->fifo_size ? in dac33_dai_delay()
1214 dac33->fifo_size : samples; in dac33_dai_delay()
1220 spin_lock_irqsave(&dac33->lock, flags); in dac33_dai_delay()
1221 t0 = dac33->t_stamp1; in dac33_dai_delay()
1222 uthr = dac33->uthr; in dac33_dai_delay()
1223 spin_unlock_irqrestore(&dac33->lock, flags); in dac33_dai_delay()
1240 if (time_delta <= dac33->mode7_us_to_lthr) { in dac33_dai_delay()
1258 time_delta = time_delta - dac33->mode7_us_to_lthr; in dac33_dai_delay()
1264 dac33->burst_rate, in dac33_dai_delay()
1274 dac33->fifo_mode); in dac33_dai_delay()
1285 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component); in dac33_set_dai_sysclk() local
1303 dac33->refclk = freq; in dac33_set_dai_sysclk()
1315 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component); in dac33_set_dai_fmt() local
1326 if (dac33->fifo_mode) { in dac33_set_dai_fmt()
1366 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component); in dac33_soc_probe() local
1369 dac33->component = component; in dac33_soc_probe()
1387 if (dac33->irq >= 0) { in dac33_soc_probe()
1388 ret = request_irq(dac33->irq, dac33_interrupt_handler, in dac33_soc_probe()
1393 dac33->irq, ret); in dac33_soc_probe()
1394 dac33->irq = -1; in dac33_soc_probe()
1396 if (dac33->irq != -1) { in dac33_soc_probe()
1397 INIT_WORK(&dac33->work, dac33_work); in dac33_soc_probe()
1402 if (dac33->irq >= 0) in dac33_soc_probe()
1412 struct tlv320dac33_priv *dac33 = snd_soc_component_get_drvdata(component); in dac33_soc_remove() local
1414 if (dac33->irq >= 0) { in dac33_soc_remove()
1415 free_irq(dac33->irq, dac33->component); in dac33_soc_remove()
1416 flush_work(&dac33->work); in dac33_soc_remove()
1466 struct tlv320dac33_priv *dac33; in dac33_i2c_probe() local
1475 dac33 = devm_kzalloc(&client->dev, sizeof(struct tlv320dac33_priv), in dac33_i2c_probe()
1477 if (dac33 == NULL) in dac33_i2c_probe()
1480 dac33->reg_cache = devm_kmemdup(&client->dev, in dac33_i2c_probe()
1484 if (!dac33->reg_cache) in dac33_i2c_probe()
1487 dac33->i2c = client; in dac33_i2c_probe()
1488 mutex_init(&dac33->mutex); in dac33_i2c_probe()
1489 spin_lock_init(&dac33->lock); in dac33_i2c_probe()
1491 i2c_set_clientdata(client, dac33); in dac33_i2c_probe()
1493 dac33->power_gpio = pdata->power_gpio; in dac33_i2c_probe()
1494 dac33->burst_bclkdiv = pdata->burst_bclkdiv; in dac33_i2c_probe()
1495 dac33->keep_bclk = pdata->keep_bclk; in dac33_i2c_probe()
1496 dac33->mode1_latency = pdata->mode1_latency; in dac33_i2c_probe()
1497 if (!dac33->mode1_latency) in dac33_i2c_probe()
1498 dac33->mode1_latency = 10000; /* 10ms */ in dac33_i2c_probe()
1499 dac33->irq = client->irq; in dac33_i2c_probe()
1501 dac33->fifo_mode = DAC33_FIFO_BYPASS; in dac33_i2c_probe()
1504 if (dac33->power_gpio >= 0) { in dac33_i2c_probe()
1505 ret = gpio_request(dac33->power_gpio, "tlv320dac33 reset"); in dac33_i2c_probe()
1509 dac33->power_gpio); in dac33_i2c_probe()
1512 gpio_direction_output(dac33->power_gpio, 0); in dac33_i2c_probe()
1515 for (i = 0; i < ARRAY_SIZE(dac33->supplies); i++) in dac33_i2c_probe()
1516 dac33->supplies[i].supply = dac33_supply_names[i]; in dac33_i2c_probe()
1518 ret = devm_regulator_bulk_get(&client->dev, ARRAY_SIZE(dac33->supplies), in dac33_i2c_probe()
1519 dac33->supplies); in dac33_i2c_probe()
1533 if (dac33->power_gpio >= 0) in dac33_i2c_probe()
1534 gpio_free(dac33->power_gpio); in dac33_i2c_probe()
1541 struct tlv320dac33_priv *dac33 = i2c_get_clientdata(client); in dac33_i2c_remove() local
1543 if (unlikely(dac33->chip_power)) in dac33_i2c_remove()
1544 dac33_hard_power(dac33->component, 0); in dac33_i2c_remove()
1546 if (dac33->power_gpio >= 0) in dac33_i2c_remove()
1547 gpio_free(dac33->power_gpio); in dac33_i2c_remove()