Skip to content

Commit b035af6

Browse files
author
Timo Wischer
committed
snd: virtio: Chose period size depending on device
Change-Id: Ia1db0bcc64eb64079632a29735e737794cf219c0 Signed-off-by: Timo Wischer <twischer@de.adit-jv.com>
1 parent 3a2cea8 commit b035af6

2 files changed

Lines changed: 11 additions & 15 deletions

File tree

include/uapi/linux/virtio_snd.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,8 @@ struct virtio_snd_pcm_stream_desc {
279279
__virtio32 formats;
280280
/* supported frame rate bit map (VIRTIO_SND_PCM_RATEBIT_*) */
281281
__virtio32 rates;
282+
/* min size in frames of one audio interval/period */
283+
__virtio32 period_size_min;
282284
};
283285

284286
/* PCM control request header */

sound/virtio/virtio_snd.c

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1377,8 +1377,6 @@ viosnd_pcm_stream_configure(struct viosnd_pcm *pcm,
13771377
u32 rates;
13781378
u32 sample_size_min = 0;
13791379
u32 sample_size_max = 0;
1380-
unsigned int buffer_size_min;
1381-
unsigned int buffer_size_max;
13821380
unsigned int page_order;
13831381

13841382
stream = devm_kzalloc(dev, sizeof(*stream), GFP_KERNEL);
@@ -1439,22 +1437,18 @@ viosnd_pcm_stream_configure(struct viosnd_pcm *pcm,
14391437
return ERR_PTR(-EINVAL);
14401438
}
14411439

1442-
buffer_size_min =
1443-
(sample_size_min * desc->channels_min * stream->hw.rate_min);
1444-
buffer_size_min /= 2;
1445-
buffer_size_max =
1446-
(sample_size_max * desc->channels_max * stream->hw.rate_max);
1447-
buffer_size_max /= 2;
1448-
1440+
stream->hw.period_bytes_min =
1441+
(sample_size_min * desc->channels_min * desc->period_size_min);
1442+
stream->hw.period_bytes_max =
1443+
(sample_size_max * desc->channels_max * desc->period_size_min);
14491444
stream->hw.channels_min = desc->channels_min;
14501445
stream->hw.channels_max = desc->channels_max;
1451-
stream->hw.buffer_bytes_max = buffer_size_max;
1452-
stream->hw.periods_min = 4;
1453-
stream->hw.periods_max = 4;
1454-
stream->hw.period_bytes_min = buffer_size_min / 4;
1455-
stream->hw.period_bytes_max = buffer_size_max / 4;
1446+
stream->hw.periods_min = 2;
1447+
stream->hw.periods_max = 16;
1448+
stream->hw.buffer_bytes_max =
1449+
stream->hw.periods_max * stream->hw.period_bytes_max;
14561450

1457-
page_order = get_order(buffer_size_max);
1451+
page_order = get_order(stream->hw.buffer_bytes_max);
14581452

14591453
stream->data = (void *)devm_get_free_pages(dev, GFP_KERNEL, page_order);
14601454
if (!stream->data)

0 commit comments

Comments
 (0)