kernel_samsung_a34x-permissive/sound/soc/mediatek/common_int/mtk-soc-pcm-common.c
2024-04-28 15:51:13 +02:00

78 lines
1.6 KiB
C

// SPDX-License-Identifier: GPL-2.0
/*
* Copyright (c) 2019 MediaTek Inc.
* Author: Michael Hsiao <michael.hsiao@mediatek.com>
*/
/******************************************************************************
*
*
* Filename:
* ---------
* mtk-soc-pcm-common
*
* Project:
* --------
* mtk-soc-pcm-common function
*
*
* Description:
* ------------
* common function
*
* Author:
* -------
* Chipeng Chang (MTK02308)
*
*---------------------------------------------------------------------------
---
*
****************************************************************************/
#include "mtk-soc-pcm-common.h"
unsigned long audio_frame_to_bytes(struct snd_pcm_substream *substream,
unsigned long count)
{
unsigned long bytes = count;
struct snd_pcm_runtime *runtime = substream->runtime;
if (runtime->format == SNDRV_PCM_FORMAT_S32_LE ||
runtime->format == SNDRV_PCM_FORMAT_U32_LE)
bytes = bytes << 2;
else
bytes = bytes << 1;
if (runtime->channels == 2)
bytes = bytes << 1;
else if (runtime->channels == 4)
bytes = bytes << 2;
else if (runtime->channels != 1)
bytes = bytes << 3;
return bytes;
}
unsigned long audio_bytes_to_frame(struct snd_pcm_substream *substream,
unsigned long bytes)
{
unsigned long count = bytes;
struct snd_pcm_runtime *runtime = substream->runtime;
if (runtime->format == SNDRV_PCM_FORMAT_S32_LE ||
runtime->format == SNDRV_PCM_FORMAT_U32_LE)
count = count >> 2;
else
count = count >> 1;
if (runtime->channels == 2)
count = count >> 1;
else if (runtime->channels == 4)
count = count >> 2;
else if (runtime->channels != 1)
count = count >> 3;
return count;
}