diff mbox

SOLO6x10: Fix G.723 minimum audio period count.

Message ID m33822xr06.fsf@t19.piap.pl (mailing list archive)
State New, archived
Headers show

Commit Message

Krzysztof HaƂasa June 8, 2015, 1:35 p.m. UTC
The period count is fixed, don't confuse ALSA.

Signed-off-by: Krzysztof Ha?asa <khalasa@piap.pl>

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Ismael Luceno June 14, 2015, 9:51 p.m. UTC | #1
On Mon, 08 Jun 2015 15:35:05 +0200
khalasa@piap.pl (Krzysztof Ha?asa) wrote:
> The period count is fixed, don't confuse ALSA.
> 
> Signed-off-by: Krzysztof Ha?asa <khalasa@piap.pl>
> 
> --- a/drivers/media/pci/solo6x10/solo6x10-g723.c
> +++ b/drivers/media/pci/solo6x10/solo6x10-g723.c
> @@ -48,10 +48,8 @@
>  /* The solo writes to 1k byte pages, 32 pages, in the dma. Each 1k
> page
>   * is broken down to 20 * 48 byte regions (one for each channel
> possible)
>   * with the rest of the page being dummy data. */
> -#define G723_MAX_BUFFER		(G723_PERIOD_BYTES *
> PERIODS_MAX) +#define PERIODS			G723_FDMA_PAGES
>  #define G723_INTR_ORDER		4 /* 0 - 4 */
> -#define PERIODS_MIN		(1 << G723_INTR_ORDER)
> -#define PERIODS_MAX		G723_FDMA_PAGES
>  
>  struct solo_snd_pcm {
>  	int				on;
> @@ -130,11 +128,11 @@ static const struct snd_pcm_hardware
> snd_solo_pcm_hw = { .rate_max		= SAMPLERATE,
>  	.channels_min		= 1,
>  	.channels_max		= 1,
> -	.buffer_bytes_max	= G723_MAX_BUFFER,
> +	.buffer_bytes_max	= G723_PERIOD_BYTES * PERIODS,
>  	.period_bytes_min	= G723_PERIOD_BYTES,
>  	.period_bytes_max	= G723_PERIOD_BYTES,
> -	.periods_min		= PERIODS_MIN,
> -	.periods_max		= PERIODS_MAX,
> +	.periods_min		= PERIODS,
> +	.periods_max		= PERIODS,
>  };
>  
>  static int snd_solo_pcm_open(struct snd_pcm_substream *ss)
> @@ -340,7 +338,8 @@ static int solo_snd_pcm_init(struct solo_dev
> *solo_dev) ret = snd_pcm_lib_preallocate_pages_for_all(pcm,
>  					SNDRV_DMA_TYPE_CONTINUOUS,
>  					snd_dma_continuous_data(GFP_KERNEL),
> -					G723_MAX_BUFFER,
> G723_MAX_BUFFER);
> +					G723_PERIOD_BYTES * PERIODS,
> +					G723_PERIOD_BYTES * PERIODS);
>  	if (ret < 0)
>  		return ret;
>  
> --
> To unsubscribe from this list: send the line "unsubscribe
> linux-media" in the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

Signed-off-by: Ismael Luceno <ismael@iodev.co.uk>
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

--- a/drivers/media/pci/solo6x10/solo6x10-g723.c
+++ b/drivers/media/pci/solo6x10/solo6x10-g723.c
@@ -48,10 +48,8 @@ 
 /* The solo writes to 1k byte pages, 32 pages, in the dma. Each 1k page
  * is broken down to 20 * 48 byte regions (one for each channel possible)
  * with the rest of the page being dummy data. */
-#define G723_MAX_BUFFER		(G723_PERIOD_BYTES * PERIODS_MAX)
+#define PERIODS			G723_FDMA_PAGES
 #define G723_INTR_ORDER		4 /* 0 - 4 */
-#define PERIODS_MIN		(1 << G723_INTR_ORDER)
-#define PERIODS_MAX		G723_FDMA_PAGES
 
 struct solo_snd_pcm {
 	int				on;
@@ -130,11 +128,11 @@  static const struct snd_pcm_hardware snd_solo_pcm_hw = {
 	.rate_max		= SAMPLERATE,
 	.channels_min		= 1,
 	.channels_max		= 1,
-	.buffer_bytes_max	= G723_MAX_BUFFER,
+	.buffer_bytes_max	= G723_PERIOD_BYTES * PERIODS,
 	.period_bytes_min	= G723_PERIOD_BYTES,
 	.period_bytes_max	= G723_PERIOD_BYTES,
-	.periods_min		= PERIODS_MIN,
-	.periods_max		= PERIODS_MAX,
+	.periods_min		= PERIODS,
+	.periods_max		= PERIODS,
 };
 
 static int snd_solo_pcm_open(struct snd_pcm_substream *ss)
@@ -340,7 +338,8 @@  static int solo_snd_pcm_init(struct solo_dev *solo_dev)
 	ret = snd_pcm_lib_preallocate_pages_for_all(pcm,
 					SNDRV_DMA_TYPE_CONTINUOUS,
 					snd_dma_continuous_data(GFP_KERNEL),
-					G723_MAX_BUFFER, G723_MAX_BUFFER);
+					G723_PERIOD_BYTES * PERIODS,
+					G723_PERIOD_BYTES * PERIODS);
 	if (ret < 0)
 		return ret;