PageRenderTime 26ms CodeModel.GetById 19ms app.highlight 6ms RepoModel.GetById 0ms app.codeStats 0ms

/sound/soc/soc-utils.c

https://bitbucket.org/abioy/linux
C | 74 lines | 51 code | 9 blank | 14 comment | 2 complexity | e970c15c9a7bbb8d0696efc60b2348e3 MD5 | raw file
Possible License(s): CC-BY-SA-3.0, GPL-2.0, LGPL-2.0, AGPL-1.0
 1/*
 2 * soc-util.c  --  ALSA SoC Audio Layer utility functions
 3 *
 4 * Copyright 2009 Wolfson Microelectronics PLC.
 5 *
 6 * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
 7 *         Liam Girdwood <lrg@slimlogic.co.uk>
 8 *         
 9 *
10 *  This program is free software; you can redistribute  it and/or modify it
11 *  under  the terms of  the GNU General  Public License as published by the
12 *  Free Software Foundation;  either version 2 of the  License, or (at your
13 *  option) any later version.
14 */
15
16#include <sound/core.h>
17#include <sound/pcm.h>
18#include <sound/pcm_params.h>
19#include <sound/soc.h>
20
21int snd_soc_calc_frame_size(int sample_size, int channels, int tdm_slots)
22{
23	return sample_size * channels * tdm_slots;
24}
25EXPORT_SYMBOL_GPL(snd_soc_calc_frame_size);
26
27int snd_soc_params_to_frame_size(struct snd_pcm_hw_params *params)
28{
29	int sample_size;
30
31	switch (params_format(params)) {
32	case SNDRV_PCM_FORMAT_S16_LE:
33	case SNDRV_PCM_FORMAT_S16_BE:
34		sample_size = 16;
35		break;
36	case SNDRV_PCM_FORMAT_S20_3LE:
37	case SNDRV_PCM_FORMAT_S20_3BE:
38		sample_size = 20;
39		break;
40	case SNDRV_PCM_FORMAT_S24_LE:
41	case SNDRV_PCM_FORMAT_S24_BE:
42		sample_size = 24;
43		break;
44	case SNDRV_PCM_FORMAT_S32_LE:
45	case SNDRV_PCM_FORMAT_S32_BE:
46		sample_size = 32;
47		break;
48	default:
49		return -ENOTSUPP;
50	}
51
52	return snd_soc_calc_frame_size(sample_size, params_channels(params),
53				       1);
54}
55EXPORT_SYMBOL_GPL(snd_soc_params_to_frame_size);
56
57int snd_soc_calc_bclk(int fs, int sample_size, int channels, int tdm_slots)
58{
59	return fs * snd_soc_calc_frame_size(sample_size, channels, tdm_slots);
60}
61EXPORT_SYMBOL_GPL(snd_soc_calc_bclk);
62
63int snd_soc_params_to_bclk(struct snd_pcm_hw_params *params)
64{
65	int ret;
66
67	ret = snd_soc_params_to_frame_size(params);
68
69	if (ret > 0)
70		return ret * params_rate(params);
71	else
72		return ret;
73}
74EXPORT_SYMBOL_GPL(snd_soc_params_to_bclk);