Module Name:    src
Committed By:   isaki
Date:           Thu Apr 25 13:49:39 UTC 2019

Modified Files:
        src/sys/arch/evbarm/mini2440 [isaki-audio2]: audio_mini2440.c
        src/sys/dev/ic [isaki-audio2]: uda1341.c uda1341var.h

Log Message:
Adapt to audio2.
- The sample rate seems to be determined by peripherals so
  move uda1341_formats[] structure from ic/uda1341.c to audio_mini2440.c.
- XXX Resetting the device in open() (and close()) might be harmful
  but I don't know details about what does this reset do.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.2.2.1 src/sys/arch/evbarm/mini2440/audio_mini2440.c
cvs rdiff -u -r1.1.56.1 -r1.1.56.2 src/sys/dev/ic/uda1341.c
cvs rdiff -u -r1.1 -r1.1.56.1 src/sys/dev/ic/uda1341var.h

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/evbarm/mini2440/audio_mini2440.c
diff -u src/sys/arch/evbarm/mini2440/audio_mini2440.c:1.2 src/sys/arch/evbarm/mini2440/audio_mini2440.c:1.2.2.1
--- src/sys/arch/evbarm/mini2440/audio_mini2440.c:1.2	Sat Mar 16 12:09:56 2019
+++ src/sys/arch/evbarm/mini2440/audio_mini2440.c	Thu Apr 25 13:49:39 2019
@@ -72,8 +72,10 @@ struct uda_softc {
 
 int	uda_ssio_open(void *, int);
 void	uda_ssio_close(void *);
-int	uda_ssio_set_params(void *, int, int, audio_params_t *, audio_params_t *,
-		       stream_filter_list_t *, stream_filter_list_t *);
+int	uda_ssio_query_format(void *, audio_format_query_t *);
+int	uda_ssio_set_format(void *, int,
+		       const audio_params_t *, const audio_params_t *,
+		       audio_filter_reg_t *, audio_filter_reg_t *);
 int	uda_ssio_round_blocksize(void *, int, int, const audio_params_t *);
 int	uda_ssio_start_output(void *, void *, int, void (*)(void *),
 			      void *);
@@ -91,8 +93,8 @@ void	uda_ssio_get_locks(void *, kmutex_t
 struct audio_hw_if uda1341_hw_if = {
 	.open			= uda_ssio_open,
 	.close			= uda_ssio_close,
-	.query_encoding		= uda1341_query_encodings,
-	.set_params		= uda_ssio_set_params,
+	.query_format		= uda_ssio_query_format,
+	.set_format		= uda_ssio_set_format,
 	.round_blocksize	= uda_ssio_round_blocksize,
 	.start_output		= uda_ssio_start_output,
 	.start_input		= uda_ssio_start_input,
@@ -115,6 +117,21 @@ static struct audio_device uda1341_devic
 	"uda_ssio"
 };
 
+static const struct audio_format uda_ssio_formats[] =
+{
+	{
+		.mode		= AUMODE_PLAY | AUMODE_RECORD,
+		.encoding	= AUDIO_ENCODING_SLINEAR_LE,
+		.validbits	= 16,
+		.precision	= 16,
+		.channels	= 2,
+		.channel_mask	= AUFMT_STEREO,
+		.frequency_type	= 6,
+		.frequency	= { 8000, 11025, 22050, 32000, 44100, 48000 },
+	}
+};
+#define UDA_SSIO_NFORMATS __arraycount(uda_ssio_formats)
+
 void uda_ssio_l3_write(void *,int mode, int value);
 
 int uda_ssio_match(device_t, cfdata_t, void*);
@@ -233,54 +250,28 @@ uda_ssio_close(void *handle)
 }
 
 int
-uda_ssio_set_params(void *handle, int setmode, int usemode,
-		    audio_params_t *play, audio_params_t *rec,
-		    stream_filter_list_t *pfil, stream_filter_list_t *rfil)
+uda_ssio_query_format(void *handle, audio_format_query_t *afp)
+{
+
+	return audio_query_format(uda_ssio_formats, UDA_SSIO_NFORMATS, afp);
+}
+
+int
+uda_ssio_set_format(void *handle, int setmode,
+		    const audio_params_t *play, const audio_params_t *rec,
+		    audio_filter_reg_t *pfil, audio_filter_reg_t *rfil)
 {
 	struct uda1341_softc *uc = handle;
 	struct uda_softc *sc = uc->parent;
-	const struct audio_format *selected_format;
-	audio_params_t *params;
-	stream_filter_list_t *fil;
 	int retval;
 
 	DPRINTF(("%s: setmode: %d\n", __func__, setmode));
-	DPRINTF(("%s: usemode: %d\n", __func__, usemode));
-
-	if (setmode == 0)
-		setmode = usemode;
 
-	if (setmode & AUMODE_PLAY) {
-		params = play;
-		fil = pfil;
-	} else if (setmode == AUMODE_RECORD) {
-		params = rec;
-		fil = rfil;
-	} else {
-		return EINVAL;
-	}
+	/* *play and *rec are the identical because !AUDIO_PROP_INDEPENDENT. */
 
 	DPRINTF(("%s: %dHz, encoding: %d, precision: %d, channels: %d\n",
-		 __func__, params->sample_rate, params->encoding, play->precision,
-		 params->channels));
-
-	if (params->sample_rate != 8000 &&
-	    params->sample_rate != 11025 &&
-	    params->sample_rate != 22050 &&
-	    params->sample_rate != 32000 &&
-	    params->sample_rate != 44100 &&
-	    params->sample_rate != 48000) {
-		return EINVAL;
-	}
-
-	retval = auconv_set_converter(uda1341_formats, UDA1341_NFORMATS,
-				    setmode, params, true, fil);
-	if (retval < 0) {
-		printf("Could not find valid format\n");
-		return EINVAL;
-	}
-
-	selected_format = &uda1341_formats[retval];
+		 __func__, play->sample_rate, play->encoding, play->precision,
+		 play->channels));
 
 	if (setmode == AUMODE_PLAY) {
 		s3c2440_i2s_set_direction(sc->sc_i2s_handle,
@@ -290,9 +281,8 @@ uda_ssio_set_params(void *handle, int se
 					  S3C2440_I2S_RECEIVE);
 	}
 
-	s3c2440_i2s_set_sample_rate(sc->sc_i2s_handle, params->sample_rate);
-	s3c2440_i2s_set_sample_width(sc->sc_i2s_handle,
-				     selected_format->precision);
+	s3c2440_i2s_set_sample_rate(sc->sc_i2s_handle, play->sample_rate);
+	s3c2440_i2s_set_sample_width(sc->sc_i2s_handle, 16);
 
 	/* It is vital that sc_system_clock is set PRIOR to calling
 	   uda1341_set_params. */
@@ -307,8 +297,7 @@ uda_ssio_set_params(void *handle, int se
 		return EINVAL;
 	}
 
-	retval = uda1341_set_params(handle, setmode, usemode,
-				    play, rec, pfil, rfil);
+	retval = uda1341_set_format(handle, setmode, play, rec, pfil, rfil);
 	if (retval != 0) {
 		return retval;
 	}

Index: src/sys/dev/ic/uda1341.c
diff -u src/sys/dev/ic/uda1341.c:1.1.56.1 src/sys/dev/ic/uda1341.c:1.1.56.2
--- src/sys/dev/ic/uda1341.c:1.1.56.1	Sun Apr 21 05:11:22 2019
+++ src/sys/dev/ic/uda1341.c	Thu Apr 25 13:49:39 2019
@@ -47,25 +47,6 @@
 #define DPRINTF(s) do {} while (/*CONSTCOND*/0)
 #endif
 
-#define UDA1341_FORMAT(enc, prec) \
-	{ \
-		.mode		= AUMODE_PLAY | AUMODE_RECORD, \
-		.encoding	= (enc), \
-		.validbits	= (prec), \
-		.precision	= (prec), \
-		.channels	= 2, \
-		.channel_mask	= AUFMT_STEREO, \
-		.frequency_type	= 0, \
-		.frequency	= { 8000, 48000 }, \
-	}
-const struct audio_format uda1341_formats[UDA1341_NFORMATS] =
-{
-	UDA1341_FORMAT(AUDIO_ENCODING_SLINEAR_LE,  8),
-	UDA1341_FORMAT(AUDIO_ENCODING_SLINEAR_LE, 16),
-	UDA1341_FORMAT(AUDIO_ENCODING_ULINEAR_LE,  8),
-	UDA1341_FORMAT(AUDIO_ENCODING_ULINEAR_LE, 16),
-};
-
 static void uda1341_update_sound_settings(struct uda1341_softc *sc);
 
 
@@ -95,48 +76,6 @@ uda1341_attach(struct uda1341_softc *sc)
 }
 
 int
-uda1341_query_encodings(void *handle, audio_encoding_t *ae)
-{
-	switch(ae->index) {
-	case 0:
-		strlcpy(ae->name, AudioEmulaw, sizeof(ae->name));
-		ae->encoding = AUDIO_ENCODING_ULAW;
-		ae->precision = 8;
-		ae->flags = AUDIO_ENCODINGFLAG_EMULATED;
-		break;
-	case 1:
-		strlcpy(ae->name, AudioEslinear_le, sizeof(ae->name));
-		ae->encoding = AUDIO_ENCODING_SLINEAR_LE;
-		ae->precision = 8;
-		ae->flags = 0;
-		break;
-	case 2:
-		strlcpy(ae->name, AudioEslinear_le, sizeof(ae->name));
-		ae->encoding = AUDIO_ENCODING_SLINEAR_LE;
-		ae->precision = 16;
-		ae->flags = 0;
-		break;
-	case 3:
-		strlcpy(ae->name, AudioEulinear_le, sizeof(ae->name));
-		ae->encoding = AUDIO_ENCODING_ULINEAR_LE;
-		ae->precision = 8;
-		ae->flags = 0;
-		break;
-	case 4:
-		strlcpy(ae->name, AudioEulinear_le, sizeof(ae->name));
-		ae->encoding = AUDIO_ENCODING_ULINEAR_LE;
-		ae->precision = 16;
-		ae->flags = 0;
-		break;
-
-	default:
-		return EINVAL;
-	}
-
-	return 0;
-}
-
-int
 uda1341_open(void *handle, int flags)
 {
 	struct uda1341_softc *sc = handle;
@@ -188,13 +127,13 @@ uda1341_close(void *handle)
 }
 
 int
-uda1341_set_params(void *handle, int setmode, int usemode,
-		   audio_params_t *play, audio_params_t *rec,
-		   stream_filter_list_t *pfil, stream_filter_list_t *rfil)
+uda1341_set_format(void *handle, int setmode,
+		   const audio_params_t *play, const audio_params_t *rec,
+		   audio_filter_reg_t *pfil, audio_filter_reg_t *rfil)
 {
 	struct uda1341_softc *sc = handle;
 	if (sc->sc_system_clock == UDA1341_CLOCK_NA)
-		panic("uda1341_set_params was called without sc_system_clock set!\n");
+		panic("%s was called without sc_system_clock set!\n", __func__);
 
 	/* Select status register */
 	sc->sc_l3_write(sc, 0, UDA1341_L3_ADDR_DEVICE |

Index: src/sys/dev/ic/uda1341var.h
diff -u src/sys/dev/ic/uda1341var.h:1.1 src/sys/dev/ic/uda1341var.h:1.1.56.1
--- src/sys/dev/ic/uda1341var.h:1.1	Sat Jan 28 08:37:22 2012
+++ src/sys/dev/ic/uda1341var.h	Thu Apr 25 13:49:39 2019
@@ -32,11 +32,6 @@
 #include <sys/device.h>
 #include <sys/audioio.h>
 
-#include <dev/auconv.h>
-
-#define UDA1341_NFORMATS 4
-extern const struct audio_format uda1341_formats[UDA1341_NFORMATS];
-
 struct uda1341_softc {
 	/* Pointer to the driver that holds this sc */
 	void		*parent;
@@ -85,10 +80,11 @@ struct uda1341_softc {
 };
 
 int uda1341_attach(struct uda1341_softc *);
-int uda1341_query_encodings(void *, audio_encoding_t *);
 int uda1341_open(void *, int );
 void uda1341_close(void *);
-int uda1341_set_params(void *, int, int, audio_params_t*, audio_params_t*, stream_filter_list_t *, stream_filter_list_t*);
+int uda1341_set_format(void *, int,
+    const audio_params_t *, const audio_params_t *,
+    audio_filter_reg_t *, audio_filter_reg_t *);
 int uda1341_query_devinfo(void *, mixer_devinfo_t *);
 int uda1341_get_port(void *, mixer_ctrl_t *);
 int uda1341_set_port(void *, mixer_ctrl_t *);

Reply via email to