Module Name:    src
Committed By:   jmcneill
Date:           Sat Nov 16 12:47:47 UTC 2019

Modified Files:
        src/sys/dev/fdt: ausoc.c

Log Message:
Set sysclk rate at set_format time, so the link set_format callback can read 
the new sysclk


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/dev/fdt/ausoc.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/dev/fdt/ausoc.c
diff -u src/sys/dev/fdt/ausoc.c:1.4 src/sys/dev/fdt/ausoc.c:1.5
--- src/sys/dev/fdt/ausoc.c:1.4	Wed May  8 13:40:18 2019
+++ src/sys/dev/fdt/ausoc.c	Sat Nov 16 12:47:47 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: ausoc.c,v 1.4 2019/05/08 13:40:18 isaki Exp $ */
+/* $NetBSD: ausoc.c,v 1.5 2019/11/16 12:47:47 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill <jmcne...@invisible.ca>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ausoc.c,v 1.4 2019/05/08 13:40:18 isaki Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ausoc.c,v 1.5 2019/11/16 12:47:47 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -121,8 +121,22 @@ ausoc_set_format(void *priv, int setmode
     audio_filter_reg_t *pfil, audio_filter_reg_t *rfil)
 {
 	struct ausoc_link * const link = priv;
+	const audio_params_t *params = (setmode & AUMODE_PLAY) != 0 ?
+	    play : rec;
 	int error;
 
+	if (link->link_mclk_fs) {
+		const u_int rate = params->sample_rate * link->link_mclk_fs;
+		error = audio_dai_set_sysclk(link->link_codec, rate,
+		    AUDIO_DAI_CLOCK_IN);
+		if (error)
+			return error;
+		error = audio_dai_set_sysclk(link->link_cpu, rate,
+		    AUDIO_DAI_CLOCK_OUT);
+		if (error)
+			return error;
+	}
+
 	error = audio_dai_mi_set_format(link->link_cpu, setmode,
 	    play, rec, pfil, rfil);
 	if (error)
@@ -246,20 +260,8 @@ ausoc_trigger_output(void *priv, void *s
     void (*intr)(void *), void *intrarg, const audio_params_t *params)
 {
 	struct ausoc_link * const link = priv;
-	u_int n, rate;
 	int error;
-
-	if (link->link_mclk_fs) {
-		rate = params->sample_rate * link->link_mclk_fs;
-		error = audio_dai_set_sysclk(link->link_codec, rate,
-		    AUDIO_DAI_CLOCK_IN);
-		if (error)
-			goto failed;
-		error = audio_dai_set_sysclk(link->link_cpu, rate,
-		    AUDIO_DAI_CLOCK_OUT);
-		if (error)
-			goto failed;
-	}
+	u_int n;
 
 	for (n = 0; n < link->link_naux; n++) {
 		error = audio_dai_trigger(link->link_aux[n], start, end,
@@ -285,20 +287,8 @@ ausoc_trigger_input(void *priv, void *st
     void (*intr)(void *), void *intrarg, const audio_params_t *params)
 {
 	struct ausoc_link * const link = priv;
-	u_int n, rate;
 	int error;
-
-	if (link->link_mclk_fs) {
-		rate = params->sample_rate * link->link_mclk_fs;
-		error = audio_dai_set_sysclk(link->link_codec, rate,
-		    AUDIO_DAI_CLOCK_IN);
-		if (error)
-			goto failed;
-		error = audio_dai_set_sysclk(link->link_cpu, rate,
-		    AUDIO_DAI_CLOCK_OUT);
-		if (error)
-			goto failed;
-	}
+	u_int n;
 
 	for (n = 0; n < link->link_naux; n++) {
 		error = audio_dai_trigger(link->link_aux[n], start, end,

Reply via email to