Commit | Line | Data |
---|---|---|
89933dee NJ |
1 | /* |
2 | * wm8727.c | |
3 | * | |
4 | * Created on: 15-Oct-2009 | |
5 | * Author: neil.jones@imgtec.com | |
6 | * | |
7 | * Copyright (C) 2009 Imagination Technologies Ltd. | |
8 | * | |
9 | * This program is free software; you can redistribute it and/or modify it | |
10 | * under the terms of the GNU General Public License as published by the | |
11 | * Free Software Foundation; either version 2 of the License, or (at your | |
12 | * option) any later version. | |
13 | */ | |
14 | ||
15 | #include <linux/init.h> | |
5a0e3ad6 | 16 | #include <linux/slab.h> |
89933dee NJ |
17 | #include <linux/module.h> |
18 | #include <linux/kernel.h> | |
19 | #include <linux/device.h> | |
20 | #include <sound/core.h> | |
21 | #include <sound/pcm.h> | |
22 | #include <sound/ac97_codec.h> | |
23 | #include <sound/initval.h> | |
24 | #include <sound/soc.h> | |
25 | ||
72a061f7 MB |
26 | static const struct snd_soc_dapm_widget wm8727_dapm_widgets[] = { |
27 | SND_SOC_DAPM_OUTPUT("VOUTL"), | |
28 | SND_SOC_DAPM_OUTPUT("VOUTR"), | |
29 | }; | |
30 | ||
31 | static const struct snd_soc_dapm_route wm8727_dapm_routes[] = { | |
32 | { "VOUTL", NULL, "Playback" }, | |
33 | { "VOUTR", NULL, "Playback" }, | |
34 | }; | |
35 | ||
89933dee NJ |
36 | /* |
37 | * Note this is a simple chip with no configuration interface, sample rate is | |
38 | * determined automatically by examining the Master clock and Bit clock ratios | |
39 | */ | |
40 | #define WM8727_RATES (SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 |\ | |
41 | SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000 |\ | |
42 | SNDRV_PCM_RATE_192000) | |
43 | ||
44 | ||
f0fba2ad LG |
45 | static struct snd_soc_dai_driver wm8727_dai = { |
46 | .name = "wm8727-hifi", | |
89933dee NJ |
47 | .playback = { |
48 | .stream_name = "Playback", | |
49 | .channels_min = 2, | |
50 | .channels_max = 2, | |
51 | .rates = WM8727_RATES, | |
52 | .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE, | |
53 | }, | |
54 | }; | |
89933dee | 55 | |
f802d6c0 | 56 | static const struct snd_soc_codec_driver soc_codec_dev_wm8727 = { |
59b06efb KM |
57 | .component_driver = { |
58 | .dapm_widgets = wm8727_dapm_widgets, | |
59 | .num_dapm_widgets = ARRAY_SIZE(wm8727_dapm_widgets), | |
60 | .dapm_routes = wm8727_dapm_routes, | |
61 | .num_dapm_routes = ARRAY_SIZE(wm8727_dapm_routes), | |
62 | }, | |
72a061f7 | 63 | }; |
cce2e9db | 64 | |
7a79e94e | 65 | static int wm8727_probe(struct platform_device *pdev) |
89933dee | 66 | { |
f0fba2ad LG |
67 | return snd_soc_register_codec(&pdev->dev, |
68 | &soc_codec_dev_wm8727, &wm8727_dai, 1); | |
89933dee NJ |
69 | } |
70 | ||
7a79e94e | 71 | static int wm8727_remove(struct platform_device *pdev) |
89933dee | 72 | { |
f0fba2ad | 73 | snd_soc_unregister_codec(&pdev->dev); |
89933dee NJ |
74 | return 0; |
75 | } | |
76 | ||
529697c5 | 77 | static struct platform_driver wm8727_codec_driver = { |
89933dee | 78 | .driver = { |
091edccf | 79 | .name = "wm8727", |
89933dee NJ |
80 | }, |
81 | ||
f0fba2ad | 82 | .probe = wm8727_probe, |
7a79e94e | 83 | .remove = wm8727_remove, |
89933dee NJ |
84 | }; |
85 | ||
5bbcc3c0 | 86 | module_platform_driver(wm8727_codec_driver); |
89933dee NJ |
87 | |
88 | MODULE_DESCRIPTION("ASoC wm8727 driver"); | |
89 | MODULE_AUTHOR("Neil Jones"); | |
90 | MODULE_LICENSE("GPL"); |