Root/
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 <linux/platform_device.h> |
17 | #include <sound/core.h> |
18 | #include <sound/pcm.h> |
19 | #include <sound/pcm_params.h> |
20 | #include <sound/soc.h> |
21 | |
22 | int snd_soc_calc_frame_size(int sample_size, int channels, int tdm_slots) |
23 | { |
24 | return sample_size * channels * tdm_slots; |
25 | } |
26 | EXPORT_SYMBOL_GPL(snd_soc_calc_frame_size); |
27 | |
28 | int snd_soc_params_to_frame_size(struct snd_pcm_hw_params *params) |
29 | { |
30 | int sample_size; |
31 | |
32 | sample_size = snd_pcm_format_width(params_format(params)); |
33 | if (sample_size < 0) |
34 | return sample_size; |
35 | |
36 | return snd_soc_calc_frame_size(sample_size, params_channels(params), |
37 | 1); |
38 | } |
39 | EXPORT_SYMBOL_GPL(snd_soc_params_to_frame_size); |
40 | |
41 | int snd_soc_calc_bclk(int fs, int sample_size, int channels, int tdm_slots) |
42 | { |
43 | return fs * snd_soc_calc_frame_size(sample_size, channels, tdm_slots); |
44 | } |
45 | EXPORT_SYMBOL_GPL(snd_soc_calc_bclk); |
46 | |
47 | int snd_soc_params_to_bclk(struct snd_pcm_hw_params *params) |
48 | { |
49 | int ret; |
50 | |
51 | ret = snd_soc_params_to_frame_size(params); |
52 | |
53 | if (ret > 0) |
54 | return ret * params_rate(params); |
55 | else |
56 | return ret; |
57 | } |
58 | EXPORT_SYMBOL_GPL(snd_soc_params_to_bclk); |
59 | |
60 | static struct snd_soc_platform_driver dummy_platform; |
61 | |
62 | static __devinit int snd_soc_dummy_probe(struct platform_device *pdev) |
63 | { |
64 | return snd_soc_register_platform(&pdev->dev, &dummy_platform); |
65 | } |
66 | |
67 | static __devexit int snd_soc_dummy_remove(struct platform_device *pdev) |
68 | { |
69 | snd_soc_unregister_platform(&pdev->dev); |
70 | |
71 | return 0; |
72 | } |
73 | |
74 | static struct platform_driver soc_dummy_driver = { |
75 | .driver = { |
76 | .name = "snd-soc-dummy", |
77 | .owner = THIS_MODULE, |
78 | }, |
79 | .probe = snd_soc_dummy_probe, |
80 | .remove = __devexit_p(snd_soc_dummy_remove), |
81 | }; |
82 | |
83 | static struct platform_device *soc_dummy_dev; |
84 | |
85 | int __init snd_soc_util_init(void) |
86 | { |
87 | int ret; |
88 | |
89 | soc_dummy_dev = platform_device_alloc("snd-soc-dummy", -1); |
90 | if (!soc_dummy_dev) |
91 | return -ENOMEM; |
92 | |
93 | ret = platform_device_add(soc_dummy_dev); |
94 | if (ret != 0) { |
95 | platform_device_put(soc_dummy_dev); |
96 | return ret; |
97 | } |
98 | |
99 | ret = platform_driver_register(&soc_dummy_driver); |
100 | if (ret != 0) |
101 | platform_device_unregister(soc_dummy_dev); |
102 | |
103 | return ret; |
104 | } |
105 | |
106 | void __exit snd_soc_util_exit(void) |
107 | { |
108 | platform_device_unregister(soc_dummy_dev); |
109 | platform_driver_unregister(&soc_dummy_driver); |
110 | } |
111 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9