* [PATCH] alsa-kernel: Add big-endian DSD sample formats and fix XMOS DSD sample format
@ 2014-11-21 14:04 Jussi Laako
2014-11-21 14:04 ` [PATCH] alsa-lib: Fix DSD sample format endianess and add big-endian format Jussi Laako
2014-11-21 14:11 ` [PATCH] alsa-kernel: Add big-endian DSD sample formats and fix XMOS DSD sample format Takashi Iwai
0 siblings, 2 replies; 4+ messages in thread
From: Jussi Laako @ 2014-11-21 14:04 UTC (permalink / raw)
To: alsa-devel; +Cc: tiwai, Jussi Laako
This patch fixes XMOS DSD sample format to DSD_U32_BE and also adds
DSD_U16_BE and DSD_U32_BE sample formats.
Signed-off-by: Jussi Laako <jussi@sonarnerd.net>
---
include/sound/pcm.h | 2 ++
include/uapi/sound/asound.h | 4 +++-
sound/core/pcm.c | 2 ++
sound/core/pcm_misc.c | 8 ++++++++
sound/usb/quirks.c | 4 ++--
5 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/include/sound/pcm.h b/include/sound/pcm.h
index 40289ec..1e7f74a 100644
--- a/include/sound/pcm.h
+++ b/include/sound/pcm.h
@@ -184,6 +184,8 @@ struct snd_pcm_ops {
#define SNDRV_PCM_FMTBIT_DSD_U8 _SNDRV_PCM_FMTBIT(DSD_U8)
#define SNDRV_PCM_FMTBIT_DSD_U16_LE _SNDRV_PCM_FMTBIT(DSD_U16_LE)
#define SNDRV_PCM_FMTBIT_DSD_U32_LE _SNDRV_PCM_FMTBIT(DSD_U32_LE)
+#define SNDRV_PCM_FMTBIT_DSD_U16_BE _SNDRV_PCM_FMTBIT(DSD_U16_BE)
+#define SNDRV_PCM_FMTBIT_DSD_U32_BE _SNDRV_PCM_FMTBIT(DSD_U32_BE)
#ifdef SNDRV_LITTLE_ENDIAN
#define SNDRV_PCM_FMTBIT_S16 SNDRV_PCM_FMTBIT_S16_LE
diff --git a/include/uapi/sound/asound.h b/include/uapi/sound/asound.h
index 6ee5867..941d32f 100644
--- a/include/uapi/sound/asound.h
+++ b/include/uapi/sound/asound.h
@@ -220,7 +220,9 @@ typedef int __bitwise snd_pcm_format_t;
#define SNDRV_PCM_FORMAT_DSD_U8 ((__force snd_pcm_format_t) 48) /* DSD, 1-byte samples DSD (x8) */
#define SNDRV_PCM_FORMAT_DSD_U16_LE ((__force snd_pcm_format_t) 49) /* DSD, 2-byte samples DSD (x16), little endian */
#define SNDRV_PCM_FORMAT_DSD_U32_LE ((__force snd_pcm_format_t) 50) /* DSD, 4-byte samples DSD (x32), little endian */
-#define SNDRV_PCM_FORMAT_LAST SNDRV_PCM_FORMAT_DSD_U32_LE
+#define SNDRV_PCM_FORMAT_DSD_U16_BE ((__force snd_pcm_format_t) 51) /* DSD, 2-byte samples DSD (x16), big endian */
+#define SNDRV_PCM_FORMAT_DSD_U32_BE ((__force snd_pcm_format_t) 52) /* DSD, 4-byte samples DSD (x32), big endian */
+#define SNDRV_PCM_FORMAT_LAST SNDRV_PCM_FORMAT_DSD_U32_BE
#ifdef SNDRV_LITTLE_ENDIAN
#define SNDRV_PCM_FORMAT_S16 SNDRV_PCM_FORMAT_S16_LE
diff --git a/sound/core/pcm.c b/sound/core/pcm.c
index 8f624b7..cfc56c8 100644
--- a/sound/core/pcm.c
+++ b/sound/core/pcm.c
@@ -216,6 +216,8 @@ static char *snd_pcm_format_names[] = {
FORMAT(DSD_U8),
FORMAT(DSD_U16_LE),
FORMAT(DSD_U32_LE),
+ FORMAT(DSD_U16_BE),
+ FORMAT(DSD_U32_BE),
};
/**
diff --git a/sound/core/pcm_misc.c b/sound/core/pcm_misc.c
index ae7a0fe..ebe8444 100644
--- a/sound/core/pcm_misc.c
+++ b/sound/core/pcm_misc.c
@@ -152,6 +152,14 @@ static struct pcm_format_data pcm_formats[(INT)SNDRV_PCM_FORMAT_LAST+1] = {
.width = 32, .phys = 32, .le = 1, .signd = 0,
.silence = { 0x69, 0x69, 0x69, 0x69 },
},
+ [SNDRV_PCM_FORMAT_DSD_U16_BE] = {
+ .width = 16, .phys = 16, .le = 0, .signd = 0,
+ .silence = { 0x69, 0x69 },
+ },
+ [SNDRV_PCM_FORMAT_DSD_U32_BE] = {
+ .width = 32, .phys = 32, .le = 0, .signd = 0,
+ .silence = { 0x69, 0x69, 0x69, 0x69 },
+ },
/* FIXME: the following three formats are not defined properly yet */
[SNDRV_PCM_FORMAT_MPEG] = {
.le = -1, .signd = -1,
diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
index 2c1018e..bc9ebb6 100644
--- a/sound/usb/quirks.c
+++ b/sound/usb/quirks.c
@@ -1202,12 +1202,12 @@ u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip,
/* iFi Audio micro/nano iDSD */
case USB_ID(0x20b1, 0x3008):
if (fp->altsetting == 2)
- return SNDRV_PCM_FMTBIT_DSD_U32_LE;
+ return SNDRV_PCM_FMTBIT_DSD_U32_BE;
break;
/* DIYINHK DSD DXD 384kHz USB to I2S/DSD */
case USB_ID(0x20b1, 0x2009):
if (fp->altsetting == 3)
- return SNDRV_PCM_FMTBIT_DSD_U32_LE;
+ return SNDRV_PCM_FMTBIT_DSD_U32_BE;
break;
default:
break;
--
1.9.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH] alsa-lib: Fix DSD sample format endianess and add big-endian format
2014-11-21 14:04 [PATCH] alsa-kernel: Add big-endian DSD sample formats and fix XMOS DSD sample format Jussi Laako
@ 2014-11-21 14:04 ` Jussi Laako
2014-11-21 14:12 ` Takashi Iwai
2014-11-21 14:11 ` [PATCH] alsa-kernel: Add big-endian DSD sample formats and fix XMOS DSD sample format Takashi Iwai
1 sibling, 1 reply; 4+ messages in thread
From: Jussi Laako @ 2014-11-21 14:04 UTC (permalink / raw)
To: alsa-devel; +Cc: tiwai, Jussi Laako
This patch adds big-endian DSD sample format and fixes return value of DSD
formats for snd_pcm_format_little_endian().
Signed-off-by: Jussi Laako <jussi@sonarnerd.net>
---
include/pcm.h | 6 +++++-
include/sound/asound.h | 4 +++-
src/pcm/pcm.c | 4 ++++
src/pcm/pcm_misc.c | 17 ++++++++++++++---
4 files changed, 26 insertions(+), 5 deletions(-)
diff --git a/include/pcm.h b/include/pcm.h
index db88ad5..0655e7f 100644
--- a/include/pcm.h
+++ b/include/pcm.h
@@ -213,7 +213,11 @@ typedef enum _snd_pcm_format {
SND_PCM_FORMAT_DSD_U16_LE,
/* Direct Stream Digital (DSD) in 4-byte samples (x32) */
SND_PCM_FORMAT_DSD_U32_LE,
- SND_PCM_FORMAT_LAST = SND_PCM_FORMAT_DSD_U32_LE,
+ /* Direct Stream Digital (DSD) in 2-byte samples (x16) */
+ SND_PCM_FORMAT_DSD_U16_BE,
+ /* Direct Stream Digital (DSD) in 4-byte samples (x32) */
+ SND_PCM_FORMAT_DSD_U32_BE,
+ SND_PCM_FORMAT_LAST = SND_PCM_FORMAT_DSD_U32_BE,
#if __BYTE_ORDER == __LITTLE_ENDIAN
/** Signed 16 bit CPU endian */
diff --git a/include/sound/asound.h b/include/sound/asound.h
index 6ee5867..941d32f 100644
--- a/include/sound/asound.h
+++ b/include/sound/asound.h
@@ -220,7 +220,9 @@ typedef int __bitwise snd_pcm_format_t;
#define SNDRV_PCM_FORMAT_DSD_U8 ((__force snd_pcm_format_t) 48) /* DSD, 1-byte samples DSD (x8) */
#define SNDRV_PCM_FORMAT_DSD_U16_LE ((__force snd_pcm_format_t) 49) /* DSD, 2-byte samples DSD (x16), little endian */
#define SNDRV_PCM_FORMAT_DSD_U32_LE ((__force snd_pcm_format_t) 50) /* DSD, 4-byte samples DSD (x32), little endian */
-#define SNDRV_PCM_FORMAT_LAST SNDRV_PCM_FORMAT_DSD_U32_LE
+#define SNDRV_PCM_FORMAT_DSD_U16_BE ((__force snd_pcm_format_t) 51) /* DSD, 2-byte samples DSD (x16), big endian */
+#define SNDRV_PCM_FORMAT_DSD_U32_BE ((__force snd_pcm_format_t) 52) /* DSD, 4-byte samples DSD (x32), big endian */
+#define SNDRV_PCM_FORMAT_LAST SNDRV_PCM_FORMAT_DSD_U32_BE
#ifdef SNDRV_LITTLE_ENDIAN
#define SNDRV_PCM_FORMAT_S16 SNDRV_PCM_FORMAT_S16_LE
diff --git a/src/pcm/pcm.c b/src/pcm/pcm.c
index 4a7be6c..3904256 100644
--- a/src/pcm/pcm.c
+++ b/src/pcm/pcm.c
@@ -1566,6 +1566,8 @@ static const char *const snd_pcm_format_names[] = {
FORMAT(DSD_U8),
FORMAT(DSD_U16_LE),
FORMAT(DSD_U32_LE),
+ FORMAT(DSD_U16_BE),
+ FORMAT(DSD_U32_BE),
};
static const char *const snd_pcm_format_aliases[SND_PCM_FORMAT_LAST+1] = {
@@ -1626,6 +1628,8 @@ static const char *const snd_pcm_format_descriptions[] = {
FORMATD(DSD_U8, "Direct Stream Digital, 1-byte (x8), oldest bit in MSB"),
FORMATD(DSD_U16_LE, "Direct Stream Digital, 2-byte (x16), little endian, oldest bits in MSB"),
FORMATD(DSD_U32_LE, "Direct Stream Digital, 4-byte (x32), little endian, oldest bits in MSB"),
+ FORMATD(DSD_U16_BE, "Direct Stream Digital, 2-byte (x16), big endian, oldest bits in MSB"),
+ FORMATD(DSD_U32_BE, "Direct Stream Digital, 4-byte (x32), big endian, oldest bits in MSB"),
};
static const char *const snd_pcm_type_names[] = {
diff --git a/src/pcm/pcm_misc.c b/src/pcm/pcm_misc.c
index 9272179..5870f82 100644
--- a/src/pcm/pcm_misc.c
+++ b/src/pcm/pcm_misc.c
@@ -65,6 +65,8 @@ int snd_pcm_format_signed(snd_pcm_format_t format)
case SNDRV_PCM_FORMAT_DSD_U8:
case SNDRV_PCM_FORMAT_DSD_U16_LE:
case SNDRV_PCM_FORMAT_DSD_U32_LE:
+ case SNDRV_PCM_FORMAT_DSD_U16_BE:
+ case SNDRV_PCM_FORMAT_DSD_U32_BE:
return 0;
default:
return -EINVAL;
@@ -137,6 +139,8 @@ int snd_pcm_format_little_endian(snd_pcm_format_t format)
case SNDRV_PCM_FORMAT_U24_3LE:
case SNDRV_PCM_FORMAT_U20_3LE:
case SNDRV_PCM_FORMAT_U18_3LE:
+ case SNDRV_PCM_FORMAT_DSD_U16_LE:
+ case SNDRV_PCM_FORMAT_DSD_U32_LE:
return 1;
case SNDRV_PCM_FORMAT_S16_BE:
case SNDRV_PCM_FORMAT_U16_BE:
@@ -153,9 +157,8 @@ int snd_pcm_format_little_endian(snd_pcm_format_t format)
case SNDRV_PCM_FORMAT_U24_3BE:
case SNDRV_PCM_FORMAT_U20_3BE:
case SNDRV_PCM_FORMAT_U18_3BE:
- case SNDRV_PCM_FORMAT_DSD_U8:
- case SNDRV_PCM_FORMAT_DSD_U16_LE:
- case SNDRV_PCM_FORMAT_DSD_U32_LE:
+ case SNDRV_PCM_FORMAT_DSD_U16_BE:
+ case SNDRV_PCM_FORMAT_DSD_U32_BE:
return 0;
default:
return -EINVAL;
@@ -208,6 +211,7 @@ int snd_pcm_format_width(snd_pcm_format_t format)
case SNDRV_PCM_FORMAT_U16_LE:
case SNDRV_PCM_FORMAT_U16_BE:
case SNDRV_PCM_FORMAT_DSD_U16_LE:
+ case SNDRV_PCM_FORMAT_DSD_U16_BE:
return 16;
case SNDRV_PCM_FORMAT_S18_3LE:
case SNDRV_PCM_FORMAT_S18_3BE:
@@ -235,6 +239,7 @@ int snd_pcm_format_width(snd_pcm_format_t format)
case SNDRV_PCM_FORMAT_FLOAT_LE:
case SNDRV_PCM_FORMAT_FLOAT_BE:
case SNDRV_PCM_FORMAT_DSD_U32_LE:
+ case SNDRV_PCM_FORMAT_DSD_U32_BE:
return 32;
case SNDRV_PCM_FORMAT_FLOAT64_LE:
case SNDRV_PCM_FORMAT_FLOAT64_BE:
@@ -269,6 +274,7 @@ int snd_pcm_format_physical_width(snd_pcm_format_t format)
case SNDRV_PCM_FORMAT_U16_LE:
case SNDRV_PCM_FORMAT_U16_BE:
case SNDRV_PCM_FORMAT_DSD_U16_LE:
+ case SNDRV_PCM_FORMAT_DSD_U16_BE:
return 16;
case SNDRV_PCM_FORMAT_S18_3LE:
case SNDRV_PCM_FORMAT_S18_3BE:
@@ -296,6 +302,7 @@ int snd_pcm_format_physical_width(snd_pcm_format_t format)
case SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE:
case SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE:
case SNDRV_PCM_FORMAT_DSD_U32_LE:
+ case SNDRV_PCM_FORMAT_DSD_U32_BE:
return 32;
case SNDRV_PCM_FORMAT_FLOAT64_LE:
case SNDRV_PCM_FORMAT_FLOAT64_BE:
@@ -328,6 +335,7 @@ ssize_t snd_pcm_format_size(snd_pcm_format_t format, size_t samples)
case SNDRV_PCM_FORMAT_U16_LE:
case SNDRV_PCM_FORMAT_U16_BE:
case SNDRV_PCM_FORMAT_DSD_U16_LE:
+ case SNDRV_PCM_FORMAT_DSD_U16_BE:
return samples * 2;
case SNDRV_PCM_FORMAT_S18_3LE:
case SNDRV_PCM_FORMAT_S18_3BE:
@@ -353,6 +361,7 @@ ssize_t snd_pcm_format_size(snd_pcm_format_t format, size_t samples)
case SNDRV_PCM_FORMAT_FLOAT_LE:
case SNDRV_PCM_FORMAT_FLOAT_BE:
case SNDRV_PCM_FORMAT_DSD_U32_LE:
+ case SNDRV_PCM_FORMAT_DSD_U32_BE:
return samples * 4;
case SNDRV_PCM_FORMAT_FLOAT64_LE:
case SNDRV_PCM_FORMAT_FLOAT64_BE:
@@ -400,6 +409,8 @@ u_int64_t snd_pcm_format_silence_64(snd_pcm_format_t format)
case SNDRV_PCM_FORMAT_DSD_U8:
case SNDRV_PCM_FORMAT_DSD_U16_LE:
case SNDRV_PCM_FORMAT_DSD_U32_LE:
+ case SNDRV_PCM_FORMAT_DSD_U16_BE:
+ case SNDRV_PCM_FORMAT_DSD_U32_BE:
return 0x6969696969696969ULL;
#ifdef SNDRV_LITTLE_ENDIAN
case SNDRV_PCM_FORMAT_U16_LE:
--
1.9.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] alsa-kernel: Add big-endian DSD sample formats and fix XMOS DSD sample format
2014-11-21 14:04 [PATCH] alsa-kernel: Add big-endian DSD sample formats and fix XMOS DSD sample format Jussi Laako
2014-11-21 14:04 ` [PATCH] alsa-lib: Fix DSD sample format endianess and add big-endian format Jussi Laako
@ 2014-11-21 14:11 ` Takashi Iwai
1 sibling, 0 replies; 4+ messages in thread
From: Takashi Iwai @ 2014-11-21 14:11 UTC (permalink / raw)
To: Jussi Laako; +Cc: alsa-devel
At Fri, 21 Nov 2014 16:04:46 +0200,
Jussi Laako wrote:
>
> This patch fixes XMOS DSD sample format to DSD_U32_BE and also adds
> DSD_U16_BE and DSD_U32_BE sample formats.
>
> Signed-off-by: Jussi Laako <jussi@sonarnerd.net>
Applied, thanks.
Takashi
> ---
> include/sound/pcm.h | 2 ++
> include/uapi/sound/asound.h | 4 +++-
> sound/core/pcm.c | 2 ++
> sound/core/pcm_misc.c | 8 ++++++++
> sound/usb/quirks.c | 4 ++--
> 5 files changed, 17 insertions(+), 3 deletions(-)
>
> diff --git a/include/sound/pcm.h b/include/sound/pcm.h
> index 40289ec..1e7f74a 100644
> --- a/include/sound/pcm.h
> +++ b/include/sound/pcm.h
> @@ -184,6 +184,8 @@ struct snd_pcm_ops {
> #define SNDRV_PCM_FMTBIT_DSD_U8 _SNDRV_PCM_FMTBIT(DSD_U8)
> #define SNDRV_PCM_FMTBIT_DSD_U16_LE _SNDRV_PCM_FMTBIT(DSD_U16_LE)
> #define SNDRV_PCM_FMTBIT_DSD_U32_LE _SNDRV_PCM_FMTBIT(DSD_U32_LE)
> +#define SNDRV_PCM_FMTBIT_DSD_U16_BE _SNDRV_PCM_FMTBIT(DSD_U16_BE)
> +#define SNDRV_PCM_FMTBIT_DSD_U32_BE _SNDRV_PCM_FMTBIT(DSD_U32_BE)
>
> #ifdef SNDRV_LITTLE_ENDIAN
> #define SNDRV_PCM_FMTBIT_S16 SNDRV_PCM_FMTBIT_S16_LE
> diff --git a/include/uapi/sound/asound.h b/include/uapi/sound/asound.h
> index 6ee5867..941d32f 100644
> --- a/include/uapi/sound/asound.h
> +++ b/include/uapi/sound/asound.h
> @@ -220,7 +220,9 @@ typedef int __bitwise snd_pcm_format_t;
> #define SNDRV_PCM_FORMAT_DSD_U8 ((__force snd_pcm_format_t) 48) /* DSD, 1-byte samples DSD (x8) */
> #define SNDRV_PCM_FORMAT_DSD_U16_LE ((__force snd_pcm_format_t) 49) /* DSD, 2-byte samples DSD (x16), little endian */
> #define SNDRV_PCM_FORMAT_DSD_U32_LE ((__force snd_pcm_format_t) 50) /* DSD, 4-byte samples DSD (x32), little endian */
> -#define SNDRV_PCM_FORMAT_LAST SNDRV_PCM_FORMAT_DSD_U32_LE
> +#define SNDRV_PCM_FORMAT_DSD_U16_BE ((__force snd_pcm_format_t) 51) /* DSD, 2-byte samples DSD (x16), big endian */
> +#define SNDRV_PCM_FORMAT_DSD_U32_BE ((__force snd_pcm_format_t) 52) /* DSD, 4-byte samples DSD (x32), big endian */
> +#define SNDRV_PCM_FORMAT_LAST SNDRV_PCM_FORMAT_DSD_U32_BE
>
> #ifdef SNDRV_LITTLE_ENDIAN
> #define SNDRV_PCM_FORMAT_S16 SNDRV_PCM_FORMAT_S16_LE
> diff --git a/sound/core/pcm.c b/sound/core/pcm.c
> index 8f624b7..cfc56c8 100644
> --- a/sound/core/pcm.c
> +++ b/sound/core/pcm.c
> @@ -216,6 +216,8 @@ static char *snd_pcm_format_names[] = {
> FORMAT(DSD_U8),
> FORMAT(DSD_U16_LE),
> FORMAT(DSD_U32_LE),
> + FORMAT(DSD_U16_BE),
> + FORMAT(DSD_U32_BE),
> };
>
> /**
> diff --git a/sound/core/pcm_misc.c b/sound/core/pcm_misc.c
> index ae7a0fe..ebe8444 100644
> --- a/sound/core/pcm_misc.c
> +++ b/sound/core/pcm_misc.c
> @@ -152,6 +152,14 @@ static struct pcm_format_data pcm_formats[(INT)SNDRV_PCM_FORMAT_LAST+1] = {
> .width = 32, .phys = 32, .le = 1, .signd = 0,
> .silence = { 0x69, 0x69, 0x69, 0x69 },
> },
> + [SNDRV_PCM_FORMAT_DSD_U16_BE] = {
> + .width = 16, .phys = 16, .le = 0, .signd = 0,
> + .silence = { 0x69, 0x69 },
> + },
> + [SNDRV_PCM_FORMAT_DSD_U32_BE] = {
> + .width = 32, .phys = 32, .le = 0, .signd = 0,
> + .silence = { 0x69, 0x69, 0x69, 0x69 },
> + },
> /* FIXME: the following three formats are not defined properly yet */
> [SNDRV_PCM_FORMAT_MPEG] = {
> .le = -1, .signd = -1,
> diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
> index 2c1018e..bc9ebb6 100644
> --- a/sound/usb/quirks.c
> +++ b/sound/usb/quirks.c
> @@ -1202,12 +1202,12 @@ u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip,
> /* iFi Audio micro/nano iDSD */
> case USB_ID(0x20b1, 0x3008):
> if (fp->altsetting == 2)
> - return SNDRV_PCM_FMTBIT_DSD_U32_LE;
> + return SNDRV_PCM_FMTBIT_DSD_U32_BE;
> break;
> /* DIYINHK DSD DXD 384kHz USB to I2S/DSD */
> case USB_ID(0x20b1, 0x2009):
> if (fp->altsetting == 3)
> - return SNDRV_PCM_FMTBIT_DSD_U32_LE;
> + return SNDRV_PCM_FMTBIT_DSD_U32_BE;
> break;
> default:
> break;
> --
> 1.9.1
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] alsa-lib: Fix DSD sample format endianess and add big-endian format
2014-11-21 14:04 ` [PATCH] alsa-lib: Fix DSD sample format endianess and add big-endian format Jussi Laako
@ 2014-11-21 14:12 ` Takashi Iwai
0 siblings, 0 replies; 4+ messages in thread
From: Takashi Iwai @ 2014-11-21 14:12 UTC (permalink / raw)
To: Jussi Laako; +Cc: alsa-devel
At Fri, 21 Nov 2014 16:04:47 +0200,
Jussi Laako wrote:
>
> This patch adds big-endian DSD sample format and fixes return value of DSD
> formats for snd_pcm_format_little_endian().
>
> Signed-off-by: Jussi Laako <jussi@sonarnerd.net>
Applied, thanks.
Takashi
> ---
> include/pcm.h | 6 +++++-
> include/sound/asound.h | 4 +++-
> src/pcm/pcm.c | 4 ++++
> src/pcm/pcm_misc.c | 17 ++++++++++++++---
> 4 files changed, 26 insertions(+), 5 deletions(-)
>
> diff --git a/include/pcm.h b/include/pcm.h
> index db88ad5..0655e7f 100644
> --- a/include/pcm.h
> +++ b/include/pcm.h
> @@ -213,7 +213,11 @@ typedef enum _snd_pcm_format {
> SND_PCM_FORMAT_DSD_U16_LE,
> /* Direct Stream Digital (DSD) in 4-byte samples (x32) */
> SND_PCM_FORMAT_DSD_U32_LE,
> - SND_PCM_FORMAT_LAST = SND_PCM_FORMAT_DSD_U32_LE,
> + /* Direct Stream Digital (DSD) in 2-byte samples (x16) */
> + SND_PCM_FORMAT_DSD_U16_BE,
> + /* Direct Stream Digital (DSD) in 4-byte samples (x32) */
> + SND_PCM_FORMAT_DSD_U32_BE,
> + SND_PCM_FORMAT_LAST = SND_PCM_FORMAT_DSD_U32_BE,
>
> #if __BYTE_ORDER == __LITTLE_ENDIAN
> /** Signed 16 bit CPU endian */
> diff --git a/include/sound/asound.h b/include/sound/asound.h
> index 6ee5867..941d32f 100644
> --- a/include/sound/asound.h
> +++ b/include/sound/asound.h
> @@ -220,7 +220,9 @@ typedef int __bitwise snd_pcm_format_t;
> #define SNDRV_PCM_FORMAT_DSD_U8 ((__force snd_pcm_format_t) 48) /* DSD, 1-byte samples DSD (x8) */
> #define SNDRV_PCM_FORMAT_DSD_U16_LE ((__force snd_pcm_format_t) 49) /* DSD, 2-byte samples DSD (x16), little endian */
> #define SNDRV_PCM_FORMAT_DSD_U32_LE ((__force snd_pcm_format_t) 50) /* DSD, 4-byte samples DSD (x32), little endian */
> -#define SNDRV_PCM_FORMAT_LAST SNDRV_PCM_FORMAT_DSD_U32_LE
> +#define SNDRV_PCM_FORMAT_DSD_U16_BE ((__force snd_pcm_format_t) 51) /* DSD, 2-byte samples DSD (x16), big endian */
> +#define SNDRV_PCM_FORMAT_DSD_U32_BE ((__force snd_pcm_format_t) 52) /* DSD, 4-byte samples DSD (x32), big endian */
> +#define SNDRV_PCM_FORMAT_LAST SNDRV_PCM_FORMAT_DSD_U32_BE
>
> #ifdef SNDRV_LITTLE_ENDIAN
> #define SNDRV_PCM_FORMAT_S16 SNDRV_PCM_FORMAT_S16_LE
> diff --git a/src/pcm/pcm.c b/src/pcm/pcm.c
> index 4a7be6c..3904256 100644
> --- a/src/pcm/pcm.c
> +++ b/src/pcm/pcm.c
> @@ -1566,6 +1566,8 @@ static const char *const snd_pcm_format_names[] = {
> FORMAT(DSD_U8),
> FORMAT(DSD_U16_LE),
> FORMAT(DSD_U32_LE),
> + FORMAT(DSD_U16_BE),
> + FORMAT(DSD_U32_BE),
> };
>
> static const char *const snd_pcm_format_aliases[SND_PCM_FORMAT_LAST+1] = {
> @@ -1626,6 +1628,8 @@ static const char *const snd_pcm_format_descriptions[] = {
> FORMATD(DSD_U8, "Direct Stream Digital, 1-byte (x8), oldest bit in MSB"),
> FORMATD(DSD_U16_LE, "Direct Stream Digital, 2-byte (x16), little endian, oldest bits in MSB"),
> FORMATD(DSD_U32_LE, "Direct Stream Digital, 4-byte (x32), little endian, oldest bits in MSB"),
> + FORMATD(DSD_U16_BE, "Direct Stream Digital, 2-byte (x16), big endian, oldest bits in MSB"),
> + FORMATD(DSD_U32_BE, "Direct Stream Digital, 4-byte (x32), big endian, oldest bits in MSB"),
> };
>
> static const char *const snd_pcm_type_names[] = {
> diff --git a/src/pcm/pcm_misc.c b/src/pcm/pcm_misc.c
> index 9272179..5870f82 100644
> --- a/src/pcm/pcm_misc.c
> +++ b/src/pcm/pcm_misc.c
> @@ -65,6 +65,8 @@ int snd_pcm_format_signed(snd_pcm_format_t format)
> case SNDRV_PCM_FORMAT_DSD_U8:
> case SNDRV_PCM_FORMAT_DSD_U16_LE:
> case SNDRV_PCM_FORMAT_DSD_U32_LE:
> + case SNDRV_PCM_FORMAT_DSD_U16_BE:
> + case SNDRV_PCM_FORMAT_DSD_U32_BE:
> return 0;
> default:
> return -EINVAL;
> @@ -137,6 +139,8 @@ int snd_pcm_format_little_endian(snd_pcm_format_t format)
> case SNDRV_PCM_FORMAT_U24_3LE:
> case SNDRV_PCM_FORMAT_U20_3LE:
> case SNDRV_PCM_FORMAT_U18_3LE:
> + case SNDRV_PCM_FORMAT_DSD_U16_LE:
> + case SNDRV_PCM_FORMAT_DSD_U32_LE:
> return 1;
> case SNDRV_PCM_FORMAT_S16_BE:
> case SNDRV_PCM_FORMAT_U16_BE:
> @@ -153,9 +157,8 @@ int snd_pcm_format_little_endian(snd_pcm_format_t format)
> case SNDRV_PCM_FORMAT_U24_3BE:
> case SNDRV_PCM_FORMAT_U20_3BE:
> case SNDRV_PCM_FORMAT_U18_3BE:
> - case SNDRV_PCM_FORMAT_DSD_U8:
> - case SNDRV_PCM_FORMAT_DSD_U16_LE:
> - case SNDRV_PCM_FORMAT_DSD_U32_LE:
> + case SNDRV_PCM_FORMAT_DSD_U16_BE:
> + case SNDRV_PCM_FORMAT_DSD_U32_BE:
> return 0;
> default:
> return -EINVAL;
> @@ -208,6 +211,7 @@ int snd_pcm_format_width(snd_pcm_format_t format)
> case SNDRV_PCM_FORMAT_U16_LE:
> case SNDRV_PCM_FORMAT_U16_BE:
> case SNDRV_PCM_FORMAT_DSD_U16_LE:
> + case SNDRV_PCM_FORMAT_DSD_U16_BE:
> return 16;
> case SNDRV_PCM_FORMAT_S18_3LE:
> case SNDRV_PCM_FORMAT_S18_3BE:
> @@ -235,6 +239,7 @@ int snd_pcm_format_width(snd_pcm_format_t format)
> case SNDRV_PCM_FORMAT_FLOAT_LE:
> case SNDRV_PCM_FORMAT_FLOAT_BE:
> case SNDRV_PCM_FORMAT_DSD_U32_LE:
> + case SNDRV_PCM_FORMAT_DSD_U32_BE:
> return 32;
> case SNDRV_PCM_FORMAT_FLOAT64_LE:
> case SNDRV_PCM_FORMAT_FLOAT64_BE:
> @@ -269,6 +274,7 @@ int snd_pcm_format_physical_width(snd_pcm_format_t format)
> case SNDRV_PCM_FORMAT_U16_LE:
> case SNDRV_PCM_FORMAT_U16_BE:
> case SNDRV_PCM_FORMAT_DSD_U16_LE:
> + case SNDRV_PCM_FORMAT_DSD_U16_BE:
> return 16;
> case SNDRV_PCM_FORMAT_S18_3LE:
> case SNDRV_PCM_FORMAT_S18_3BE:
> @@ -296,6 +302,7 @@ int snd_pcm_format_physical_width(snd_pcm_format_t format)
> case SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE:
> case SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE:
> case SNDRV_PCM_FORMAT_DSD_U32_LE:
> + case SNDRV_PCM_FORMAT_DSD_U32_BE:
> return 32;
> case SNDRV_PCM_FORMAT_FLOAT64_LE:
> case SNDRV_PCM_FORMAT_FLOAT64_BE:
> @@ -328,6 +335,7 @@ ssize_t snd_pcm_format_size(snd_pcm_format_t format, size_t samples)
> case SNDRV_PCM_FORMAT_U16_LE:
> case SNDRV_PCM_FORMAT_U16_BE:
> case SNDRV_PCM_FORMAT_DSD_U16_LE:
> + case SNDRV_PCM_FORMAT_DSD_U16_BE:
> return samples * 2;
> case SNDRV_PCM_FORMAT_S18_3LE:
> case SNDRV_PCM_FORMAT_S18_3BE:
> @@ -353,6 +361,7 @@ ssize_t snd_pcm_format_size(snd_pcm_format_t format, size_t samples)
> case SNDRV_PCM_FORMAT_FLOAT_LE:
> case SNDRV_PCM_FORMAT_FLOAT_BE:
> case SNDRV_PCM_FORMAT_DSD_U32_LE:
> + case SNDRV_PCM_FORMAT_DSD_U32_BE:
> return samples * 4;
> case SNDRV_PCM_FORMAT_FLOAT64_LE:
> case SNDRV_PCM_FORMAT_FLOAT64_BE:
> @@ -400,6 +409,8 @@ u_int64_t snd_pcm_format_silence_64(snd_pcm_format_t format)
> case SNDRV_PCM_FORMAT_DSD_U8:
> case SNDRV_PCM_FORMAT_DSD_U16_LE:
> case SNDRV_PCM_FORMAT_DSD_U32_LE:
> + case SNDRV_PCM_FORMAT_DSD_U16_BE:
> + case SNDRV_PCM_FORMAT_DSD_U32_BE:
> return 0x6969696969696969ULL;
> #ifdef SNDRV_LITTLE_ENDIAN
> case SNDRV_PCM_FORMAT_U16_LE:
> --
> 1.9.1
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2014-11-21 14:12 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-11-21 14:04 [PATCH] alsa-kernel: Add big-endian DSD sample formats and fix XMOS DSD sample format Jussi Laako
2014-11-21 14:04 ` [PATCH] alsa-lib: Fix DSD sample format endianess and add big-endian format Jussi Laako
2014-11-21 14:12 ` Takashi Iwai
2014-11-21 14:11 ` [PATCH] alsa-kernel: Add big-endian DSD sample formats and fix XMOS DSD sample format Takashi Iwai
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox