1 | /* |
2 | * Efika driver for the PSC of the Freescale MPC52xx |
3 | * configured as AC97 interface |
4 | * |
5 | * Copyright 2008 Jon Smirl, Digispeaker |
6 | * Author: Jon Smirl <jonsmirl@gmail.com> |
7 | * |
8 | * This file is licensed under the terms of the GNU General Public License |
9 | * version 2. This program is licensed "as is" without any warranty of any |
10 | * kind, whether express or implied. |
11 | */ |
12 | |
13 | #include <linux/init.h> |
14 | #include <linux/module.h> |
15 | #include <linux/interrupt.h> |
16 | #include <linux/device.h> |
17 | #include <linux/delay.h> |
18 | #include <linux/of.h> |
19 | #include <linux/platform_device.h> |
20 | #include <linux/dma-mapping.h> |
21 | |
22 | #include <sound/core.h> |
23 | #include <sound/pcm.h> |
24 | #include <sound/pcm_params.h> |
25 | #include <sound/initval.h> |
26 | #include <sound/soc.h> |
27 | |
28 | #include "mpc5200_dma.h" |
29 | |
30 | #define DRV_NAME "efika-audio-fabric" |
31 | |
32 | SND_SOC_DAILINK_DEFS(analog, |
33 | DAILINK_COMP_ARRAY(COMP_CPU("mpc5200-psc-ac97.0" )), |
34 | DAILINK_COMP_ARRAY(COMP_CODEC("stac9766-codec" , |
35 | "stac9766-hifi-analog" )), |
36 | DAILINK_COMP_ARRAY(COMP_PLATFORM("mpc5200-pcm-audio" ))); |
37 | |
38 | SND_SOC_DAILINK_DEFS(iec958, |
39 | DAILINK_COMP_ARRAY(COMP_CPU("mpc5200-psc-ac97.1" )), |
40 | DAILINK_COMP_ARRAY(COMP_CODEC("stac9766-codec" , |
41 | "stac9766-hifi-IEC958" )), |
42 | DAILINK_COMP_ARRAY(COMP_PLATFORM("mpc5200-pcm-audio" ))); |
43 | |
44 | static struct snd_soc_dai_link efika_fabric_dai[] = { |
45 | { |
46 | .name = "AC97" , |
47 | .stream_name = "AC97 Analog" , |
48 | SND_SOC_DAILINK_REG(analog), |
49 | }, |
50 | { |
51 | .name = "AC97" , |
52 | .stream_name = "AC97 IEC958" , |
53 | SND_SOC_DAILINK_REG(iec958), |
54 | }, |
55 | }; |
56 | |
57 | static struct snd_soc_card card = { |
58 | .name = "Efika" , |
59 | .owner = THIS_MODULE, |
60 | .dai_link = efika_fabric_dai, |
61 | .num_links = ARRAY_SIZE(efika_fabric_dai), |
62 | }; |
63 | |
64 | static __init int efika_fabric_init(void) |
65 | { |
66 | struct platform_device *pdev; |
67 | int rc; |
68 | |
69 | if (!of_machine_is_compatible(compat: "bplan,efika" )) |
70 | return -ENODEV; |
71 | |
72 | pdev = platform_device_alloc(name: "soc-audio" , id: 1); |
73 | if (!pdev) { |
74 | pr_err("efika_fabric_init: platform_device_alloc() failed\n" ); |
75 | return -ENODEV; |
76 | } |
77 | |
78 | platform_set_drvdata(pdev, data: &card); |
79 | |
80 | rc = platform_device_add(pdev); |
81 | if (rc) { |
82 | pr_err("efika_fabric_init: platform_device_add() failed\n" ); |
83 | platform_device_put(pdev); |
84 | return -ENODEV; |
85 | } |
86 | return 0; |
87 | } |
88 | |
89 | module_init(efika_fabric_init); |
90 | |
91 | |
92 | MODULE_AUTHOR("Jon Smirl <jonsmirl@gmail.com>" ); |
93 | MODULE_DESCRIPTION(DRV_NAME ": mpc5200 Efika fabric driver" ); |
94 | MODULE_LICENSE("GPL" ); |
95 | |
96 | |