mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-27 11:06:41 -05:00
ASoC: pcm3008: Convert to GPIO descriptors
This converts the PCM3008 driver to look up the GPIO lines using descriptors. Apparently there are no in-tree users of the platform data struct, so users need to adopt. New users can associate the GPIO lines with the platform device "pcm3008-codec". Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Link: https://patch.msgid.link/20250312-pcm-codecs-v1-2-41ffc4f8fc5c@linaro.org Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
committed by
Mark Brown
parent
98dba9dab5
commit
ef5aa8bd22
@@ -14,7 +14,7 @@
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/module.h>
|
||||
#include <sound/core.h>
|
||||
@@ -22,17 +22,22 @@
|
||||
#include <sound/initval.h>
|
||||
#include <sound/soc.h>
|
||||
|
||||
#include "pcm3008.h"
|
||||
struct pcm3008 {
|
||||
struct gpio_desc *dem0_pin;
|
||||
struct gpio_desc *dem1_pin;
|
||||
struct gpio_desc *pdad_pin;
|
||||
struct gpio_desc *pdda_pin;
|
||||
};
|
||||
|
||||
static int pcm3008_dac_ev(struct snd_soc_dapm_widget *w,
|
||||
struct snd_kcontrol *kcontrol,
|
||||
int event)
|
||||
{
|
||||
struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
|
||||
struct pcm3008_setup_data *setup = component->dev->platform_data;
|
||||
struct pcm3008 *pcm = component->dev->platform_data;
|
||||
|
||||
gpio_set_value_cansleep(setup->pdda_pin,
|
||||
SND_SOC_DAPM_EVENT_ON(event));
|
||||
gpiod_set_value_cansleep(pcm->pdda_pin,
|
||||
SND_SOC_DAPM_EVENT_ON(event));
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -42,10 +47,10 @@ static int pcm3008_adc_ev(struct snd_soc_dapm_widget *w,
|
||||
int event)
|
||||
{
|
||||
struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
|
||||
struct pcm3008_setup_data *setup = component->dev->platform_data;
|
||||
struct pcm3008 *pcm = component->dev->platform_data;
|
||||
|
||||
gpio_set_value_cansleep(setup->pdad_pin,
|
||||
SND_SOC_DAPM_EVENT_ON(event));
|
||||
gpiod_set_value_cansleep(pcm->pdad_pin,
|
||||
SND_SOC_DAPM_EVENT_ON(event));
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -106,11 +111,13 @@ static const struct snd_soc_component_driver soc_component_dev_pcm3008 = {
|
||||
|
||||
static int pcm3008_codec_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct pcm3008_setup_data *setup = pdev->dev.platform_data;
|
||||
int ret;
|
||||
struct device *dev = &pdev->dev;
|
||||
struct pcm3008 *pcm;
|
||||
|
||||
if (!setup)
|
||||
return -EINVAL;
|
||||
pcm = devm_kzalloc(dev, sizeof(*pcm), GFP_KERNEL);
|
||||
if (!pcm)
|
||||
return -ENOMEM;
|
||||
platform_set_drvdata(pdev, pcm);
|
||||
|
||||
/* DEM1 DEM0 DE-EMPHASIS_MODE
|
||||
* Low Low De-emphasis 44.1 kHz ON
|
||||
@@ -120,30 +127,26 @@ static int pcm3008_codec_probe(struct platform_device *pdev)
|
||||
*/
|
||||
|
||||
/* Configure DEM0 GPIO (turning OFF DAC De-emphasis). */
|
||||
ret = devm_gpio_request_one(&pdev->dev, setup->dem0_pin,
|
||||
GPIOF_OUT_INIT_HIGH, "codec_dem0");
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
pcm->dem0_pin = devm_gpiod_get(dev, "dem0", GPIOD_OUT_HIGH);
|
||||
if (IS_ERR(pcm->dem0_pin))
|
||||
return PTR_ERR(pcm->dem0_pin);
|
||||
|
||||
/* Configure DEM1 GPIO (turning OFF DAC De-emphasis). */
|
||||
ret = devm_gpio_request_one(&pdev->dev, setup->dem1_pin,
|
||||
GPIOF_OUT_INIT_LOW, "codec_dem1");
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
pcm->dem1_pin = devm_gpiod_get(dev, "dem1", GPIOD_OUT_LOW);
|
||||
if (IS_ERR(pcm->dem1_pin))
|
||||
return PTR_ERR(pcm->dem1_pin);
|
||||
|
||||
/* Configure PDAD GPIO. */
|
||||
ret = devm_gpio_request_one(&pdev->dev, setup->pdad_pin,
|
||||
GPIOF_OUT_INIT_LOW, "codec_pdad");
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
pcm->pdad_pin = devm_gpiod_get(dev, "pdad", GPIOD_OUT_LOW);
|
||||
if (IS_ERR(pcm->pdad_pin))
|
||||
return PTR_ERR(pcm->pdad_pin);
|
||||
|
||||
/* Configure PDDA GPIO. */
|
||||
ret = devm_gpio_request_one(&pdev->dev, setup->pdda_pin,
|
||||
GPIOF_OUT_INIT_LOW, "codec_pdda");
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
pcm->pdda_pin = devm_gpiod_get(dev, "pdda", GPIOD_OUT_LOW);
|
||||
if (IS_ERR(pcm->pdda_pin))
|
||||
return PTR_ERR(pcm->pdda_pin);
|
||||
|
||||
return devm_snd_soc_register_component(&pdev->dev,
|
||||
return devm_snd_soc_register_component(dev,
|
||||
&soc_component_dev_pcm3008, &pcm3008_dai, 1);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* PCM3008 ALSA SoC Layer
|
||||
*
|
||||
* Author: Hugo Villeneuve
|
||||
* Copyright (C) 2008 Lyrtech inc
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_SND_SOC_PCM3008_H
|
||||
#define __LINUX_SND_SOC_PCM3008_H
|
||||
|
||||
struct pcm3008_setup_data {
|
||||
unsigned dem0_pin;
|
||||
unsigned dem1_pin;
|
||||
unsigned pdad_pin;
|
||||
unsigned pdda_pin;
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user