mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-31 14:04:27 -04:00
ASoC: ti: omap-twl4030: drop support for platform data
Dmitry Torokhov <dmitry.torokhov@gmail.com> says: (nothing) Link: https://patch.msgid.link/20260724233432.31325-1-dmitry.torokhov@gmail.com
This commit is contained in:
@@ -1,42 +0,0 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/**
|
||||
* omap-twl4030.h - ASoC machine driver for TI SoC based boards with twl4030
|
||||
* codec, header.
|
||||
*
|
||||
* Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Peter Ujfalusi <peter.ujfalusi@ti.com>
|
||||
*/
|
||||
|
||||
#ifndef _OMAP_TWL4030_H_
|
||||
#define _OMAP_TWL4030_H_
|
||||
|
||||
/* To select if only one channel is connected in a stereo port */
|
||||
#define OMAP_TWL4030_LEFT (1 << 0)
|
||||
#define OMAP_TWL4030_RIGHT (1 << 1)
|
||||
|
||||
struct omap_tw4030_pdata {
|
||||
const char *card_name;
|
||||
/* Voice port is connected to McBSP3 */
|
||||
bool voice_connected;
|
||||
|
||||
/* The driver will parse the connection flags if this flag is set */
|
||||
bool custom_routing;
|
||||
/* Flags to indicate connected audio ports. */
|
||||
u8 has_hs;
|
||||
u8 has_hf;
|
||||
u8 has_predriv;
|
||||
u8 has_carkit;
|
||||
bool has_ear;
|
||||
|
||||
bool has_mainmic;
|
||||
bool has_submic;
|
||||
bool has_hsmic;
|
||||
bool has_carkitmic;
|
||||
bool has_digimic0;
|
||||
bool has_digimic1;
|
||||
u8 has_linein;
|
||||
};
|
||||
|
||||
#endif /* _OMAP_TWL4030_H_ */
|
||||
@@ -17,7 +17,6 @@
|
||||
*/
|
||||
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/platform_data/omap-twl4030.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of.h>
|
||||
|
||||
@@ -29,6 +28,7 @@
|
||||
#include "omap-mcbsp.h"
|
||||
|
||||
struct omap_twl4030 {
|
||||
struct snd_soc_jack_gpio hs_jack_gpio;
|
||||
struct snd_soc_jack hs_jack;
|
||||
};
|
||||
|
||||
@@ -124,38 +124,18 @@ static struct snd_soc_jack_pin hs_jack_pins[] = {
|
||||
},
|
||||
};
|
||||
|
||||
/* Headset jack detection gpios */
|
||||
static struct snd_soc_jack_gpio hs_jack_gpios[] = {
|
||||
{
|
||||
.name = "ti,jack-det",
|
||||
.report = SND_JACK_HEADSET,
|
||||
.debounce_time = 200,
|
||||
},
|
||||
};
|
||||
|
||||
static inline void twl4030_disconnect_pin(struct snd_soc_dapm_context *dapm,
|
||||
int connected, char *pin)
|
||||
{
|
||||
if (!connected)
|
||||
snd_soc_dapm_disable_pin(dapm, pin);
|
||||
}
|
||||
|
||||
static int omap_twl4030_init(struct snd_soc_pcm_runtime *rtd)
|
||||
{
|
||||
struct snd_soc_card *card = rtd->card;
|
||||
struct snd_soc_dapm_context *dapm = snd_soc_card_to_dapm(card);
|
||||
struct omap_tw4030_pdata *pdata = dev_get_platdata(card->dev);
|
||||
|
||||
struct omap_twl4030 *priv = snd_soc_card_get_drvdata(card);
|
||||
int ret = 0;
|
||||
int ret;
|
||||
|
||||
/*
|
||||
* This is a bit of a hack, but the GPIO is optional so we
|
||||
* only want to add the jack detection if the GPIO is there.
|
||||
*/
|
||||
if (of_property_present(card->dev->of_node, "ti,jack-det-gpio")) {
|
||||
hs_jack_gpios[0].gpiod_dev = card->dev;
|
||||
hs_jack_gpios[0].idx = 0;
|
||||
|
||||
ret = snd_soc_card_jack_new_pins(rtd->card, "Headset Jack",
|
||||
SND_JACK_HEADSET,
|
||||
&priv->hs_jack, hs_jack_pins,
|
||||
@@ -163,36 +143,19 @@ static int omap_twl4030_init(struct snd_soc_pcm_runtime *rtd)
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = snd_soc_jack_add_gpios(&priv->hs_jack,
|
||||
ARRAY_SIZE(hs_jack_gpios),
|
||||
hs_jack_gpios);
|
||||
priv->hs_jack_gpio.name = "ti,jack-det";
|
||||
priv->hs_jack_gpio.report = SND_JACK_HEADSET;
|
||||
priv->hs_jack_gpio.debounce_time = 200;
|
||||
priv->hs_jack_gpio.gpiod_dev = card->dev;
|
||||
priv->hs_jack_gpio.idx = 0;
|
||||
|
||||
ret = snd_soc_jack_add_gpios(&priv->hs_jack, 1,
|
||||
&priv->hs_jack_gpio);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* NULL pdata means we booted with DT. In this case the routing is
|
||||
* provided and the card is fully routed, no need to mark pins.
|
||||
*/
|
||||
if (!pdata || !pdata->custom_routing)
|
||||
return ret;
|
||||
|
||||
/* Disable not connected paths if not used */
|
||||
twl4030_disconnect_pin(dapm, pdata->has_ear, "Earpiece Spk");
|
||||
twl4030_disconnect_pin(dapm, pdata->has_hf, "Handsfree Spk");
|
||||
twl4030_disconnect_pin(dapm, pdata->has_hs, "Headset Stereophone");
|
||||
twl4030_disconnect_pin(dapm, pdata->has_predriv, "Ext Spk");
|
||||
twl4030_disconnect_pin(dapm, pdata->has_carkit, "Carkit Spk");
|
||||
|
||||
twl4030_disconnect_pin(dapm, pdata->has_mainmic, "Main Mic");
|
||||
twl4030_disconnect_pin(dapm, pdata->has_submic, "Sub Mic");
|
||||
twl4030_disconnect_pin(dapm, pdata->has_hsmic, "Headset Mic");
|
||||
twl4030_disconnect_pin(dapm, pdata->has_carkitmic, "Carkit Mic");
|
||||
twl4030_disconnect_pin(dapm, pdata->has_digimic0, "Digital0 Mic");
|
||||
twl4030_disconnect_pin(dapm, pdata->has_digimic1, "Digital1 Mic");
|
||||
twl4030_disconnect_pin(dapm, pdata->has_linein, "Line In");
|
||||
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Digital audio interface glue - connects codec <--> CPU */
|
||||
@@ -237,11 +200,15 @@ static struct snd_soc_card omap_twl4030_card = {
|
||||
|
||||
static int omap_twl4030_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct omap_tw4030_pdata *pdata = dev_get_platdata(&pdev->dev);
|
||||
struct device_node *node = pdev->dev.of_node;
|
||||
struct snd_soc_card *card = &omap_twl4030_card;
|
||||
struct device_node *node, *dai_node;
|
||||
struct omap_twl4030 *priv;
|
||||
int ret = 0;
|
||||
struct property *prop;
|
||||
int ret;
|
||||
|
||||
node = pdev->dev.of_node;
|
||||
if (!node)
|
||||
return -ENODEV;
|
||||
|
||||
card->dev = &pdev->dev;
|
||||
|
||||
@@ -249,62 +216,43 @@ static int omap_twl4030_probe(struct platform_device *pdev)
|
||||
if (priv == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
if (node) {
|
||||
struct device_node *dai_node;
|
||||
struct property *prop;
|
||||
|
||||
if (snd_soc_of_parse_card_name(card, "ti,model")) {
|
||||
dev_err(&pdev->dev, "Card name is not provided\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
dai_node = of_parse_phandle(node, "ti,mcbsp", 0);
|
||||
if (!dai_node) {
|
||||
dev_err(&pdev->dev, "McBSP node is not provided\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
omap_twl4030_dai_links[0].cpus->dai_name = NULL;
|
||||
omap_twl4030_dai_links[0].cpus->of_node = dai_node;
|
||||
|
||||
omap_twl4030_dai_links[0].platforms->name = NULL;
|
||||
omap_twl4030_dai_links[0].platforms->of_node = dai_node;
|
||||
|
||||
dai_node = of_parse_phandle(node, "ti,mcbsp-voice", 0);
|
||||
if (!dai_node) {
|
||||
card->num_links = 1;
|
||||
} else {
|
||||
omap_twl4030_dai_links[1].cpus->dai_name = NULL;
|
||||
omap_twl4030_dai_links[1].cpus->of_node = dai_node;
|
||||
|
||||
omap_twl4030_dai_links[1].platforms->name = NULL;
|
||||
omap_twl4030_dai_links[1].platforms->of_node = dai_node;
|
||||
}
|
||||
|
||||
/* Optional: audio routing can be provided */
|
||||
prop = of_find_property(node, "ti,audio-routing", NULL);
|
||||
if (prop) {
|
||||
ret = snd_soc_of_parse_audio_routing(card,
|
||||
"ti,audio-routing");
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
card->fully_routed = 1;
|
||||
}
|
||||
} else if (pdata) {
|
||||
if (pdata->card_name) {
|
||||
card->name = pdata->card_name;
|
||||
} else {
|
||||
dev_err(&pdev->dev, "Card name is not provided\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (!pdata->voice_connected)
|
||||
card->num_links = 1;
|
||||
} else {
|
||||
dev_err(&pdev->dev, "Missing pdata\n");
|
||||
if (snd_soc_of_parse_card_name(card, "ti,model")) {
|
||||
dev_err(&pdev->dev, "Card name is not provided\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
dai_node = of_parse_phandle(node, "ti,mcbsp", 0);
|
||||
if (!dai_node) {
|
||||
dev_err(&pdev->dev, "McBSP node is not provided\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
omap_twl4030_dai_links[0].cpus->dai_name = NULL;
|
||||
omap_twl4030_dai_links[0].cpus->of_node = dai_node;
|
||||
|
||||
omap_twl4030_dai_links[0].platforms->name = NULL;
|
||||
omap_twl4030_dai_links[0].platforms->of_node = dai_node;
|
||||
|
||||
dai_node = of_parse_phandle(node, "ti,mcbsp-voice", 0);
|
||||
if (!dai_node) {
|
||||
card->num_links = 1;
|
||||
} else {
|
||||
omap_twl4030_dai_links[1].cpus->dai_name = NULL;
|
||||
omap_twl4030_dai_links[1].cpus->of_node = dai_node;
|
||||
|
||||
omap_twl4030_dai_links[1].platforms->name = NULL;
|
||||
omap_twl4030_dai_links[1].platforms->of_node = dai_node;
|
||||
}
|
||||
|
||||
/* Optional: audio routing can be provided */
|
||||
prop = of_find_property(node, "ti,audio-routing", NULL);
|
||||
if (prop) {
|
||||
ret = snd_soc_of_parse_audio_routing(card, "ti,audio-routing");
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
card->fully_routed = 1;
|
||||
}
|
||||
|
||||
snd_soc_card_set_drvdata(card, priv);
|
||||
ret = devm_snd_soc_register_card(&pdev->dev, card);
|
||||
if (ret) {
|
||||
|
||||
Reference in New Issue
Block a user