brintos

brintos / linux-shallow public Read only

0
0
Text · 2.2 KiB · de17b10 Raw
96 lines · c
1/*2 * Efika driver for the PSC of the Freescale MPC52xx3 * configured as AC97 interface4 *5 * Copyright 2008 Jon Smirl, Digispeaker6 * Author: Jon Smirl <jonsmirl@gmail.com>7 *8 * This file is licensed under the terms of the GNU General Public License9 * version 2. This program is licensed "as is" without any warranty of any10 * 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 32SND_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 38SND_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 44static 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 57static 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 64static __init int efika_fabric_init(void)65{66	struct platform_device *pdev;67	int rc;68 69	if (!of_machine_is_compatible("bplan,efika"))70		return -ENODEV;71 72	pdev = platform_device_alloc("soc-audio", 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, &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 89module_init(efika_fabric_init);90 91 92MODULE_AUTHOR("Jon Smirl <jonsmirl@gmail.com>");93MODULE_DESCRIPTION(DRV_NAME ": mpc5200 Efika fabric driver");94MODULE_LICENSE("GPL");95 96