mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-27 17:18:59 +00:00
7d7aa2fd92
This change makes the names of Broadcom targets consistent by using the common notation based on SoC/CPU ID (which is used internally anyway), bcmXXXX instead of brcmXXXX. This is even used for target TITLE in make menuconfig already, only the short target name used brcm so far. Despite, since subtargets range from bcm2708 to bcm2711, it seems appropriate to use bcm27xx instead of bcm2708 (again, as already done for BOARDNAME). This also renames the packages brcm2708-userland and brcm2708-gpu-fw. Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de> Acked-by: Álvaro Fernández Rojas <noltari@gmail.com>
171 lines
4.9 KiB
Diff
171 lines
4.9 KiB
Diff
From 8ed265197d7a8f9c1a328d262bfe91050716ad76 Mon Sep 17 00:00:00 2001
|
|
From: Fe-Pi <fe-pi@cox.net>
|
|
Date: Wed, 1 Mar 2017 04:42:43 -0700
|
|
Subject: [PATCH] Add support for Fe-Pi audio sound card. (#1867)
|
|
|
|
Fe-Pi Audio Sound Card is based on NXP SGTL5000 codec.
|
|
Mechanical specification of the board is the same the Raspberry Pi Zero.
|
|
3.5mm jacks for Headphone/Mic, Line In, and Line Out.
|
|
|
|
Signed-off-by: Henry Kupis <fe-pi@cox.net>
|
|
---
|
|
sound/soc/bcm/fe-pi-audio.c | 152 ++++++++++++++++++++++++++++++++++++
|
|
1 file changed, 152 insertions(+)
|
|
create mode 100644 sound/soc/bcm/fe-pi-audio.c
|
|
|
|
--- /dev/null
|
|
+++ b/sound/soc/bcm/fe-pi-audio.c
|
|
@@ -0,0 +1,152 @@
|
|
+/*
|
|
+ * ASoC Driver for Fe-Pi Audio Sound Card
|
|
+ *
|
|
+ * Author: Henry Kupis <kuupaz@gmail.com>
|
|
+ * Copyright 2016
|
|
+ * based on code by Florian Meier <florian.meier@koalo.de>
|
|
+ * based on code by Shawn Guo <shawn.guo@linaro.org>
|
|
+ *
|
|
+ * This program is free software; you can redistribute it and/or
|
|
+ * modify it under the terms of the GNU General Public License
|
|
+ * version 2 as published by the Free Software Foundation.
|
|
+ *
|
|
+ * This program is distributed in the hope that it will be useful, but
|
|
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
+ * General Public License for more details.
|
|
+ */
|
|
+
|
|
+#include <linux/module.h>
|
|
+#include <linux/platform_device.h>
|
|
+#include <linux/io.h>
|
|
+
|
|
+#include <sound/core.h>
|
|
+#include <sound/pcm.h>
|
|
+#include <sound/pcm_params.h>
|
|
+#include <sound/soc.h>
|
|
+#include <sound/jack.h>
|
|
+
|
|
+#include "../codecs/sgtl5000.h"
|
|
+
|
|
+static int snd_fe_pi_audio_init(struct snd_soc_pcm_runtime *rtd)
|
|
+{
|
|
+ struct snd_soc_card *card = rtd->card;
|
|
+ struct snd_soc_component *component = rtd->codec_dai->component;
|
|
+
|
|
+ snd_soc_dapm_force_enable_pin(&card->dapm, "LO");
|
|
+ snd_soc_dapm_force_enable_pin(&card->dapm, "ADC");
|
|
+ snd_soc_dapm_force_enable_pin(&card->dapm, "DAC");
|
|
+ snd_soc_dapm_force_enable_pin(&card->dapm, "HP");
|
|
+ snd_soc_component_update_bits(component, SGTL5000_CHIP_ANA_POWER,
|
|
+ SGTL5000_VAG_POWERUP, SGTL5000_VAG_POWERUP);
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+static int snd_fe_pi_audio_hw_params(struct snd_pcm_substream *substream,
|
|
+ struct snd_pcm_hw_params *params)
|
|
+{
|
|
+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
|
+ struct device *dev = rtd->card->dev;
|
|
+ struct snd_soc_dai *codec_dai = rtd->codec_dai;
|
|
+
|
|
+ int ret;
|
|
+
|
|
+ /* Set SGTL5000's SYSCLK */
|
|
+ ret = snd_soc_dai_set_sysclk(codec_dai, SGTL5000_SYSCLK, 12288000, SND_SOC_CLOCK_IN);
|
|
+ if (ret) {
|
|
+ dev_err(dev, "could not set codec driver clock params\n");
|
|
+ return ret;
|
|
+ }
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+
|
|
+static struct snd_soc_ops snd_fe_pi_audio_ops = {
|
|
+ .hw_params = snd_fe_pi_audio_hw_params,
|
|
+};
|
|
+
|
|
+static struct snd_soc_dai_link snd_fe_pi_audio_dai[] = {
|
|
+ {
|
|
+ .name = "FE-PI",
|
|
+ .stream_name = "Fe-Pi HiFi",
|
|
+ .cpu_dai_name = "bcm2708-i2s.0",
|
|
+ .codec_dai_name = "sgtl5000",
|
|
+ .platform_name = "bcm2708-i2s.0",
|
|
+ .codec_name = "sgtl5000.1-000a",
|
|
+ .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
|
|
+ SND_SOC_DAIFMT_CBM_CFM,
|
|
+ .ops = &snd_fe_pi_audio_ops,
|
|
+ .init = snd_fe_pi_audio_init,
|
|
+ },
|
|
+};
|
|
+
|
|
+static const struct snd_soc_dapm_route fe_pi_audio_dapm_routes[] = {
|
|
+ {"ADC", NULL, "Mic Bias"},
|
|
+};
|
|
+
|
|
+
|
|
+static struct snd_soc_card fe_pi_audio = {
|
|
+ .name = "Fe-Pi Audio",
|
|
+ .owner = THIS_MODULE,
|
|
+ .dai_link = snd_fe_pi_audio_dai,
|
|
+ .num_links = ARRAY_SIZE(snd_fe_pi_audio_dai),
|
|
+
|
|
+ .dapm_routes = fe_pi_audio_dapm_routes,
|
|
+ .num_dapm_routes = ARRAY_SIZE(fe_pi_audio_dapm_routes),
|
|
+};
|
|
+
|
|
+static int snd_fe_pi_audio_probe(struct platform_device *pdev)
|
|
+{
|
|
+ int ret = 0;
|
|
+ struct snd_soc_card *card = &fe_pi_audio;
|
|
+ struct device_node *np = pdev->dev.of_node;
|
|
+ struct device_node *i2s_node;
|
|
+ struct snd_soc_dai_link *dai = &snd_fe_pi_audio_dai[0];
|
|
+
|
|
+ fe_pi_audio.dev = &pdev->dev;
|
|
+
|
|
+ i2s_node = of_parse_phandle(np, "i2s-controller", 0);
|
|
+ if (!i2s_node) {
|
|
+ dev_err(&pdev->dev, "i2s_node phandle missing or invalid\n");
|
|
+ return -EINVAL;
|
|
+ }
|
|
+
|
|
+ dai->cpu_dai_name = NULL;
|
|
+ dai->cpu_of_node = i2s_node;
|
|
+ dai->platform_name = NULL;
|
|
+ dai->platform_of_node = i2s_node;
|
|
+
|
|
+ of_node_put(i2s_node);
|
|
+
|
|
+ card->dev = &pdev->dev;
|
|
+ platform_set_drvdata(pdev, card);
|
|
+
|
|
+ ret = devm_snd_soc_register_card(&pdev->dev, card);
|
|
+ if (ret && ret != -EPROBE_DEFER)
|
|
+ dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n", ret);
|
|
+
|
|
+ return ret;
|
|
+}
|
|
+
|
|
+static const struct of_device_id snd_fe_pi_audio_of_match[] = {
|
|
+ { .compatible = "fe-pi,fe-pi-audio", },
|
|
+ {},
|
|
+};
|
|
+MODULE_DEVICE_TABLE(of, snd_fe_pi_audio_of_match);
|
|
+
|
|
+static struct platform_driver snd_fe_pi_audio_driver = {
|
|
+ .driver = {
|
|
+ .name = "snd-fe-pi-audio",
|
|
+ .owner = THIS_MODULE,
|
|
+ .of_match_table = snd_fe_pi_audio_of_match,
|
|
+ },
|
|
+ .probe = snd_fe_pi_audio_probe,
|
|
+};
|
|
+
|
|
+module_platform_driver(snd_fe_pi_audio_driver);
|
|
+
|
|
+MODULE_AUTHOR("Henry Kupis <fe-pi@cox.net>");
|
|
+MODULE_DESCRIPTION("ASoC Driver for Fe-Pi Audio");
|
|
+MODULE_LICENSE("GPL v2");
|