The classD driver DOES register itself as /dev/audio/pcm0, and works correctly 
as such with nx_player.

The conversions are wav (or mp3 etc) to pcm.

Don’t if we’re talking cross purposes or the classd driver works in a way it 
shouldn’t!!!

> On 27 Aug 2023, at 23:00, Gregory Nutt <spudan...@gmail.com> wrote:
> 
> Also, I don't think the /dev/audio/pcm0 device you are talking about is what 
> you think it is.  It is a character driver but not the Class D lower half.  
> So, yes it can be opened.
> 
> /Caveat:  It has been ages since I worked with the audio subsystem so I might 
> be completely wrong./
> 
> /dev/audio/pcm0  is the audio subsystem interface device.  The "pcm" 
> indicates that it used the PCM software decoder (that will convert PCM file 
> data to WAV).  It gets set up like:
> 
>   boards/arm/sama5/sama5d4-ek/src/sam_wm8904.c:
> 
>          pcm = pcm_decode_initialize(wm8904);
>          snprintf(devname, 12, "pcm%d",  minor);
>          ret = audio_register(devname, pcm);
> 
> And a character driver is registered by the audio subsystem in audio/audio.c:
> 
>   int audio_register(FAR const char *name, FAR struct
>   audio_lowerhalf_s *dev)
>   {
>   ...
> 
>      audinfo("Registering %s\n", path);
>      return register_driver(path, &g_audioops, 0666, upper);
>   }
> 
> Where g_audioops is the character driver operations structure:
> 
>   static const struct file_operations g_audioops =
>   {
>      audio_open,  /* open */
>      audio_close, /* close */
>      audio_read,  /* read */
>      audio_write, /* write */
>      NULL,        /* seek */
>      audio_ioctl, /* ioctl */
>   };
> 
> So the registered pcm0 is the standard audio buffer chain configured for PCM 
> file to WAV conversion and terminating with a wm8904 DAC.
> 
> I don't believe that there is any way to get the Class D audio_ops_s as a 
> driver under /dev.  Nothing like that is supported.
> 

Reply via email to