Module Name:    src
Committed By:   jmcneill
Date:           Sat Sep  6 12:49:31 UTC 2014

Modified Files:
        src/sys/arch/arm/allwinner: awin_ac.c

Log Message:
setup DRQ_CLR_CNT reg, clear FIR_VER bit, be more relaxed about blocksize, and 
set SRC DRQ TYPE for dma channel


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/allwinner/awin_ac.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/arm/allwinner/awin_ac.c
diff -u src/sys/arch/arm/allwinner/awin_ac.c:1.3 src/sys/arch/arm/allwinner/awin_ac.c:1.4
--- src/sys/arch/arm/allwinner/awin_ac.c:1.3	Sat Sep  6 10:36:53 2014
+++ src/sys/arch/arm/allwinner/awin_ac.c	Sat Sep  6 12:49:31 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: awin_ac.c,v 1.3 2014/09/06 10:36:53 jmcneill Exp $ */
+/* $NetBSD: awin_ac.c,v 1.4 2014/09/06 12:49:31 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2014 Jared D. McNeill <[email protected]>
@@ -29,7 +29,7 @@
 #include "locators.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: awin_ac.c,v 1.3 2014/09/06 10:36:53 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: awin_ac.c,v 1.4 2014/09/06 12:49:31 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -45,8 +45,8 @@ __KERNEL_RCSID(0, "$NetBSD: awin_ac.c,v 
 #include <arm/allwinner/awin_reg.h>
 #include <arm/allwinner/awin_var.h>
 
-#define AWINAC_TX_TRIG_LEVEL	64
-#define AWINAC_TX_MAX_LEVEL	128
+#define AWINAC_TX_TRIG_LEVEL	0xf
+#define AWINAC_DRQ_CLR_CNT	0x3
 #define AWINAC_INIT_VOL		0x3b
 
 #define AC_DAC_DPC		0x00
@@ -465,12 +465,14 @@ awinac_commit_settings(void *priv)
 		return EINVAL;
 
 	val = AC_READ(sc, AC_DAC_FIFOC);
-	val |= DAC_FIFOC_FIR_VER;
+	val &= ~DAC_FIFOC_FIR_VER;
 	val &= ~DAC_FIFOC_FS;
 	val |= __SHIFTIN(DAC_FS_48KHZ, DAC_FIFOC_FS);
 	val &= ~DAC_FIFOC_SEND_LASAT;
 	val &= ~DAC_FIFOC_FIFO_MODE;
 	val |= __SHIFTIN(FIFO_MODE_16_15_0, DAC_FIFOC_FIFO_MODE);
+	val &= ~DAC_FIFOC_DRQ_CLR_CNT;
+	val |= __SHIFTIN(AWINAC_DRQ_CLR_CNT, DAC_FIFOC_DRQ_CLR_CNT);
 	val &= ~DAC_FIFOC_TX_TRIG_LEVEL;
 	val |= __SHIFTIN(AWINAC_TX_TRIG_LEVEL, DAC_FIFOC_TX_TRIG_LEVEL);
 	val &= ~DAC_FIFOC_ADDA_LOOP_EN;
@@ -615,7 +617,7 @@ static int
 awinac_round_blocksize(void *priv, int bs, int mode,
     const audio_params_t *params)
 {
-	return (bs + AWINAC_TX_MAX_LEVEL) & ~(AWINAC_TX_MAX_LEVEL-1);
+	return bs & ~3;
 }
 
 static size_t
@@ -668,6 +670,8 @@ awinac_trigger_output(void *priv, void *
 	dmacfg |= AWIN_NDMA_CTL_DST_ADDR_NOINCR;
 	dmacfg |= __SHIFTIN(AWIN_NDMA_CTL_DRQ_CODEC,
 			    AWIN_DMA_CTL_DST_DRQ_TYPE);
+	dmacfg |= __SHIFTIN(AWIN_NDMA_CTL_DRQ_SDRAM,
+			    AWIN_DMA_CTL_SRC_DRQ_TYPE);
 	awin_dma_set_config(sc->sc_pdma, dmacfg);
 
 	error = awinac_play(sc);

Reply via email to