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 | |
72a061f7 MB |
56 | static struct snd_soc_codec_driver soc_codec_dev_wm8727 = { |
57 | .dapm_widgets = wm8727_dapm_widgets, | |
58 | .num_dapm_widgets = ARRAY_SIZE(wm8727_dapm_widgets), | |
59 | .dapm_routes = wm8727_dapm_routes, | |
60 | .num_dapm_routes = ARRAY_SIZE(wm8727_dapm_routes), | |
61 | }; | |
cce2e9db | 62 | |
7a79e94e | 63 | static int wm8727_probe(struct platform_device *pdev) |
89933dee | 64 | { |
f0fba2ad LG |
65 | return snd_soc_register_codec(&pdev->dev, |
66 | &soc_codec_dev_wm8727, &wm8727_dai, 1); | |
89933dee NJ |
67 | } |
68 | ||
7a79e94e | 69 | static int wm8727_remove(struct platform_device *pdev) |
89933dee | 70 | { |
f0fba2ad | 71 | snd_soc_unregister_codec(&pdev->dev); |
89933dee NJ |
72 | return 0; |
73 | } | |
74 | ||
529697c5 | 75 | static struct platform_driver wm8727_codec_driver = { |
89933dee | 76 | .driver = { |
091edccf | 77 | .name = "wm8727", |
89933dee NJ |
78 | .owner = THIS_MODULE, |
79 | }, | |
80 | ||
f0fba2ad | 81 | .probe = wm8727_probe, |
7a79e94e | 82 | .remove = wm8727_remove, |
89933dee NJ |
83 | }; |
84 | ||
5bbcc3c0 | 85 | module_platform_driver(wm8727_codec_driver); |
89933dee NJ |
86 | |
87 | MODULE_DESCRIPTION("ASoC wm8727 driver"); | |
88 | MODULE_AUTHOR("Neil Jones"); | |
89 | MODULE_LICENSE("GPL"); |