<html>
    <head>
      <base href="https://bugs.freedesktop.org/">
    </head>
    <body>
      <p>
        <div>
            <b><a class="bz_bug_link 
          bz_status_REOPENED "
   title="REOPENED - Pulseaudio doesn't work on (pro audio- non interleaved access mode) soundcards with high channel counts"
   href="https://bugs.freedesktop.org/show_bug.cgi?id=84804#c40">Comment # 40</a>
              on <a class="bz_bug_link 
          bz_status_REOPENED "
   title="REOPENED - Pulseaudio doesn't work on (pro audio- non interleaved access mode) soundcards with high channel counts"
   href="https://bugs.freedesktop.org/show_bug.cgi?id=84804">bug 84804</a>
              from <span class="vcard"><a class="email" href="mailto:superquad.vortex2@gmail.com" title="Raymond <superquad.vortex2@gmail.com>"> <span class="fn">Raymond</span></a>
</span></b>
        <pre><a href="https://git.kernel.org/cgit/linux/kernel/git/tiwai/sound.git/tree/sound/pci/rme9652/hdsp.c">https://git.kernel.org/cgit/linux/kernel/git/tiwai/sound.git/tree/sound/pci/rme9652/hdsp.c</a>

static struct snd_pcm_hardware snd_hdsp_capture_subinfo =
{
        .info =                 (SNDRV_PCM_INFO_MMAP |
                                 SNDRV_PCM_INFO_MMAP_VALID |
                                 SNDRV_PCM_INFO_NONINTERLEAVED |
                                 SNDRV_PCM_INFO_SYNC_START),
#ifdef SNDRV_BIG_ENDIAN
        .formats =              SNDRV_PCM_FMTBIT_S32_BE,
#else
        .formats =              SNDRV_PCM_FMTBIT_S32_LE,
#endif
        .rates =                (SNDRV_PCM_RATE_32000 |
                                 SNDRV_PCM_RATE_44100 |
                                 SNDRV_PCM_RATE_48000 |
                                 SNDRV_PCM_RATE_64000 |
                                 SNDRV_PCM_RATE_88200 |
                                 SNDRV_PCM_RATE_96000),
        .rate_min =             32000,
        .rate_max =             96000,
        .channels_min =         5,
        .channels_max =         HDSP_MAX_CHANNELS,
        .buffer_bytes_max =     HDSP_CHANNEL_BUFFER_BYTES * HDSP_MAX_CHANNELS,
        .period_bytes_min =     (64 * 4) * 10,
        .period_bytes_max =     (8192 * 4) * HDSP_MAX_CHANNELS,
        .periods_min =          2,
        .periods_max =          2,
        .fifo_size =            0
};


only support 2 periods and non-interleaved access mode

pulseaudio cannot use 4 fragments

this mean one period of channel 1 , follow by one period of channel 2 ,..., one
period of channel n

seem has flag to control the precision of hw pointer


static snd_pcm_uframes_t hdsp_hw_pointer(struct hdsp *hdsp)
{
        int position;

        position = hdsp_read(hdsp, HDSP_statusRegister);

        if (!hdsp->precise_ptr)
                return (position & HDSP_BufferID) ? (hdsp->period_bytes / 4) :
0;

        position &= HDSP_BufferPositionMask;
        position /= 4;
        position &= (hdsp->period_bytes/2) - 1;
        return position;
}</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are the QA Contact for the bug.</li>
          <li>You are the assignee for the bug.</li>
      </ul>
    </body>
</html>