Lines Matching +full:max +full:- +full:bitrate
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Copyright (C) 2010-2013 Bluecherry, LLC <https://www.bluecherrydvr.com>
26 #include "solo6x10-tw28.h"
33 /* Sets up channels 16-19 for decoding and 0-15 for encoding */
37 #define BITRATE 25 macro
43 #define G723_INTR_ORDER 4 /* 0 - 4 */
57 clk_div = (solo_dev->clock_mhz * 1000000) in solo_g723_config()
58 / (SAMPLERATE * (BITRATE * 2) * 2); in solo_g723_config()
61 SOLO_AUDIO_BITRATE(BITRATE) in solo_g723_config()
79 &solo_dev->snd_pcm->streams[SNDRV_PCM_STREAM_CAPTURE]; in solo_g723_isr()
83 for (ss = pstr->substream; ss != NULL; ss = ss->next) { in solo_g723_isr()
93 if (!solo_pcm->on) in solo_g723_isr()
127 solo_pcm->g723_buf = pci_alloc_consistent(solo_dev->pdev, in snd_solo_pcm_open()
129 &solo_pcm->g723_dma); in snd_solo_pcm_open()
130 if (solo_pcm->g723_buf == NULL) in snd_solo_pcm_open()
133 spin_lock_init(&solo_pcm->lock); in snd_solo_pcm_open()
134 solo_pcm->solo_dev = solo_dev; in snd_solo_pcm_open()
135 ss->runtime->hw = snd_solo_pcm_hw; in snd_solo_pcm_open()
143 return -ENOMEM; in snd_solo_pcm_open()
150 snd_pcm_substream_chip(ss) = solo_pcm->solo_dev; in snd_solo_pcm_close()
151 pci_free_consistent(solo_pcm->solo_dev->pdev, G723_PERIOD_BYTES, in snd_solo_pcm_close()
152 solo_pcm->g723_buf, solo_pcm->g723_dma); in snd_solo_pcm_close()
161 struct solo_dev *solo_dev = solo_pcm->solo_dev; in snd_solo_pcm_trigger()
164 spin_lock(&solo_pcm->lock); in snd_solo_pcm_trigger()
168 if (solo_pcm->on == 0) { in snd_solo_pcm_trigger()
170 if (atomic_inc_return(&solo_dev->snd_users) == 1) in snd_solo_pcm_trigger()
172 solo_pcm->on = 1; in snd_solo_pcm_trigger()
176 if (solo_pcm->on) { in snd_solo_pcm_trigger()
178 if (atomic_dec_return(&solo_dev->snd_users) == 0) in snd_solo_pcm_trigger()
180 solo_pcm->on = 0; in snd_solo_pcm_trigger()
184 ret = -EINVAL; in snd_solo_pcm_trigger()
187 spin_unlock(&solo_pcm->lock); in snd_solo_pcm_trigger()
200 struct solo_dev *solo_dev = solo_pcm->solo_dev; in snd_solo_pcm_pointer()
211 struct solo_dev *solo_dev = solo_pcm->solo_dev; in snd_solo_pcm_copy_user()
217 err = solo_p2m_dma_t(solo_dev, 0, solo_pcm->g723_dma, in snd_solo_pcm_copy_user()
220 (ss->number * G723_PERIOD_BYTES), in snd_solo_pcm_copy_user()
225 if (copy_to_user(dst, solo_pcm->g723_buf, G723_PERIOD_BYTES)) in snd_solo_pcm_copy_user()
226 return -EFAULT; in snd_solo_pcm_copy_user()
238 struct solo_dev *solo_dev = solo_pcm->solo_dev; in snd_solo_pcm_copy_kernel()
244 err = solo_p2m_dma_t(solo_dev, 0, solo_pcm->g723_dma, in snd_solo_pcm_copy_kernel()
247 (ss->number * G723_PERIOD_BYTES), in snd_solo_pcm_copy_kernel()
252 memcpy(dst, solo_pcm->g723_buf, G723_PERIOD_BYTES); in snd_solo_pcm_copy_kernel()
272 info->type = SNDRV_CTL_ELEM_TYPE_INTEGER; in snd_solo_capture_volume_info()
273 info->count = 1; in snd_solo_capture_volume_info()
274 info->value.integer.min = 0; in snd_solo_capture_volume_info()
275 info->value.integer.max = 15; in snd_solo_capture_volume_info()
276 info->value.integer.step = 1; in snd_solo_capture_volume_info()
285 u8 ch = value->id.numid - 1; in snd_solo_capture_volume_get()
287 value->value.integer.value[0] = tw28_get_audio_gain(solo_dev, ch); in snd_solo_capture_volume_get()
296 u8 ch = value->id.numid - 1; in snd_solo_capture_volume_put()
300 if (old_val == value->value.integer.value[0]) in snd_solo_capture_volume_put()
303 tw28_set_audio_gain(solo_dev, ch, value->value.integer.value[0]); in snd_solo_capture_volume_put()
318 struct snd_card *card = solo_dev->snd_card; in solo_snd_pcm_init()
324 ret = snd_pcm_new(card, card->driver, 0, 0, solo_dev->nr_chans, in solo_snd_pcm_init()
333 pcm->info_flags = 0; in solo_snd_pcm_init()
334 strscpy(pcm->name, card->shortname, sizeof(pcm->name)); in solo_snd_pcm_init()
336 for (i = 0, ss = pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream; in solo_snd_pcm_init()
337 ss; ss = ss->next, i++) in solo_snd_pcm_init()
338 sprintf(ss->name, "Camera #%d Audio", i); in solo_snd_pcm_init()
346 solo_dev->snd_pcm = pcm; in solo_snd_pcm_init()
359 atomic_set(&solo_dev->snd_users, 0); in solo_g723_init()
362 sprintf(name, "Softlogic%d", solo_dev->vfd->num); in solo_g723_init()
364 ret = snd_card_new(&solo_dev->pdev->dev, in solo_g723_init()
366 &solo_dev->snd_card); in solo_g723_init()
370 card = solo_dev->snd_card; in solo_g723_init()
372 strscpy(card->driver, SOLO6X10_NAME, sizeof(card->driver)); in solo_g723_init()
373 strscpy(card->shortname, "SOLO-6x10 Audio", sizeof(card->shortname)); in solo_g723_init()
374 sprintf(card->longname, "%s on %s IRQ %d", card->shortname, in solo_g723_init()
375 pci_name(solo_dev->pdev), solo_dev->pdev->irq); in solo_g723_init()
382 strscpy(card->mixername, "SOLO-6x10", sizeof(card->mixername)); in solo_g723_init()
384 kctl.count = solo_dev->nr_chans; in solo_g723_init()
400 dev_info(&solo_dev->pdev->dev, "Alsa sound card as %s\n", name); in solo_g723_init()
411 if (!solo_dev->snd_card) in solo_g723_exit()
417 snd_card_free(solo_dev->snd_card); in solo_g723_exit()
418 solo_dev->snd_card = NULL; in solo_g723_exit()