- if (ioctl(compress->fd, SNDRV_COMPRESS_AVAIL, &kavail))
- return oops(compress, errno, "cannot get avail");
- if (0 == kavail.tstamp.sampling_rate)
+ const int version = get_compress_hw_version(compress);
+ if (version <= 0)
+ return -1;
+
+ if (version < SNDRV_PROTOCOL_VERSION(0, 4, 0)) {
+ /* SNDRV_COMPRESS_AVAIL64 not supported, fallback to SNDRV_COMPRESS_AVAIL */
+ if (ioctl(compress->fd, SNDRV_COMPRESS_AVAIL, &kavail32))
+ return oops(compress, errno, "cannot get avail");
+ compress_hw_avail64_from_32(&kavail64, &kavail32);
+ } else {
+ if (ioctl(compress->fd, SNDRV_COMPRESS_AVAIL64, &kavail64))
+ return oops(compress, errno, "cannot get avail64");
+ }
+
+ if (0 == kavail64.tstamp.sampling_rate)