forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge remote-tracking branches 'asoc/topic/adau' and 'asoc/topic/adsp…
…' into asoc-next
- Loading branch information
Showing
18 changed files
with
3,101 additions
and
23 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,109 @@ | ||
/* | ||
* Driver for ADAU1761/ADAU1461/ADAU1761/ADAU1961/ADAU1781/ADAU1781 codecs | ||
* | ||
* Copyright 2011-2014 Analog Devices Inc. | ||
* Author: Lars-Peter Clausen <[email protected]> | ||
* | ||
* Licensed under the GPL-2 or later. | ||
*/ | ||
|
||
#ifndef __LINUX_PLATFORM_DATA_ADAU17X1_H__ | ||
#define __LINUX_PLATFORM_DATA_ADAU17X1_H__ | ||
|
||
/** | ||
* enum adau17x1_micbias_voltage - Microphone bias voltage | ||
* @ADAU17X1_MICBIAS_0_90_AVDD: 0.9 * AVDD | ||
* @ADAU17X1_MICBIAS_0_65_AVDD: 0.65 * AVDD | ||
*/ | ||
enum adau17x1_micbias_voltage { | ||
ADAU17X1_MICBIAS_0_90_AVDD = 0, | ||
ADAU17X1_MICBIAS_0_65_AVDD = 1, | ||
}; | ||
|
||
/** | ||
* enum adau1761_digmic_jackdet_pin_mode - Configuration of the JACKDET/MICIN pin | ||
* @ADAU1761_DIGMIC_JACKDET_PIN_MODE_NONE: Disable the pin | ||
* @ADAU1761_DIGMIC_JACKDET_PIN_MODE_DIGMIC: Configure the pin for usage as | ||
* digital microphone input. | ||
* @ADAU1761_DIGMIC_JACKDET_PIN_MODE_JACKDETECT: Configure the pin for jack | ||
* insertion detection. | ||
*/ | ||
enum adau1761_digmic_jackdet_pin_mode { | ||
ADAU1761_DIGMIC_JACKDET_PIN_MODE_NONE, | ||
ADAU1761_DIGMIC_JACKDET_PIN_MODE_DIGMIC, | ||
ADAU1761_DIGMIC_JACKDET_PIN_MODE_JACKDETECT, | ||
}; | ||
|
||
/** | ||
* adau1761_jackdetect_debounce_time - Jack insertion detection debounce time | ||
* @ADAU1761_JACKDETECT_DEBOUNCE_5MS: 5 milliseconds | ||
* @ADAU1761_JACKDETECT_DEBOUNCE_10MS: 10 milliseconds | ||
* @ADAU1761_JACKDETECT_DEBOUNCE_20MS: 20 milliseconds | ||
* @ADAU1761_JACKDETECT_DEBOUNCE_40MS: 40 milliseconds | ||
*/ | ||
enum adau1761_jackdetect_debounce_time { | ||
ADAU1761_JACKDETECT_DEBOUNCE_5MS = 0, | ||
ADAU1761_JACKDETECT_DEBOUNCE_10MS = 1, | ||
ADAU1761_JACKDETECT_DEBOUNCE_20MS = 2, | ||
ADAU1761_JACKDETECT_DEBOUNCE_40MS = 3, | ||
}; | ||
|
||
/** | ||
* enum adau1761_output_mode - Output mode configuration | ||
* @ADAU1761_OUTPUT_MODE_HEADPHONE: Headphone output | ||
* @ADAU1761_OUTPUT_MODE_HEADPHONE_CAPLESS: Capless headphone output | ||
* @ADAU1761_OUTPUT_MODE_LINE: Line output | ||
*/ | ||
enum adau1761_output_mode { | ||
ADAU1761_OUTPUT_MODE_HEADPHONE, | ||
ADAU1761_OUTPUT_MODE_HEADPHONE_CAPLESS, | ||
ADAU1761_OUTPUT_MODE_LINE, | ||
}; | ||
|
||
/** | ||
* struct adau1761_platform_data - ADAU1761 Codec driver platform data | ||
* @input_differential: If true the input pins will be configured in | ||
* differential mode. | ||
* @lineout_mode: Output mode for the LOUT/ROUT pins | ||
* @headphone_mode: Output mode for the LHP/RHP pins | ||
* @digmic_jackdetect_pin_mode: JACKDET/MICIN pin configuration | ||
* @jackdetect_debounce_time: Jack insertion detection debounce time. | ||
* Note: This value will only be used, if the JACKDET/MICIN pin is configured | ||
* for jack insertion detection. | ||
* @jackdetect_active_low: If true the jack insertion detection is active low. | ||
* Othwise it will be active high. | ||
* @micbias_voltage: Microphone voltage bias | ||
*/ | ||
struct adau1761_platform_data { | ||
bool input_differential; | ||
enum adau1761_output_mode lineout_mode; | ||
enum adau1761_output_mode headphone_mode; | ||
|
||
enum adau1761_digmic_jackdet_pin_mode digmic_jackdetect_pin_mode; | ||
|
||
enum adau1761_jackdetect_debounce_time jackdetect_debounce_time; | ||
bool jackdetect_active_low; | ||
|
||
enum adau17x1_micbias_voltage micbias_voltage; | ||
}; | ||
|
||
/** | ||
* struct adau1781_platform_data - ADAU1781 Codec driver platform data | ||
* @left_input_differential: If true configure the left input as | ||
* differential input. | ||
* @right_input_differential: If true configure the right input as differntial | ||
* input. | ||
* @use_dmic: If true configure the MIC pins as digital microphone pins instead | ||
* of analog microphone pins. | ||
* @micbias_voltage: Microphone voltage bias | ||
*/ | ||
struct adau1781_platform_data { | ||
bool left_input_differential; | ||
bool right_input_differential; | ||
|
||
bool use_dmic; | ||
|
||
enum adau17x1_micbias_voltage micbias_voltage; | ||
}; | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,142 @@ | ||
/* | ||
* Machine driver for EVAL-ADAU1x61MINIZ on Analog Devices bfin | ||
* evaluation boards. | ||
* | ||
* Copyright 2011-2014 Analog Devices Inc. | ||
* Author: Lars-Peter Clausen <[email protected]> | ||
* | ||
* Licensed under the GPL-2 or later. | ||
*/ | ||
|
||
#include <linux/module.h> | ||
#include <linux/device.h> | ||
#include <linux/slab.h> | ||
#include <sound/core.h> | ||
#include <sound/pcm.h> | ||
#include <sound/soc.h> | ||
#include <sound/pcm_params.h> | ||
|
||
#include "../codecs/adau17x1.h" | ||
|
||
static const struct snd_soc_dapm_widget bfin_eval_adau1x61_dapm_widgets[] = { | ||
SND_SOC_DAPM_LINE("In 1", NULL), | ||
SND_SOC_DAPM_LINE("In 2", NULL), | ||
SND_SOC_DAPM_LINE("In 3-4", NULL), | ||
|
||
SND_SOC_DAPM_LINE("Diff Out L", NULL), | ||
SND_SOC_DAPM_LINE("Diff Out R", NULL), | ||
SND_SOC_DAPM_LINE("Stereo Out", NULL), | ||
SND_SOC_DAPM_HP("Capless HP Out", NULL), | ||
}; | ||
|
||
static const struct snd_soc_dapm_route bfin_eval_adau1x61_dapm_routes[] = { | ||
{ "LAUX", NULL, "In 3-4" }, | ||
{ "RAUX", NULL, "In 3-4" }, | ||
{ "LINP", NULL, "In 1" }, | ||
{ "LINN", NULL, "In 1"}, | ||
{ "RINP", NULL, "In 2" }, | ||
{ "RINN", NULL, "In 2" }, | ||
|
||
{ "In 1", NULL, "MICBIAS" }, | ||
{ "In 2", NULL, "MICBIAS" }, | ||
|
||
{ "Capless HP Out", NULL, "LHP" }, | ||
{ "Capless HP Out", NULL, "RHP" }, | ||
{ "Diff Out L", NULL, "LOUT" }, | ||
{ "Diff Out R", NULL, "ROUT" }, | ||
{ "Stereo Out", NULL, "LOUT" }, | ||
{ "Stereo Out", NULL, "ROUT" }, | ||
}; | ||
|
||
static int bfin_eval_adau1x61_hw_params(struct snd_pcm_substream *substream, | ||
struct snd_pcm_hw_params *params) | ||
{ | ||
struct snd_soc_pcm_runtime *rtd = substream->private_data; | ||
struct snd_soc_dai *codec_dai = rtd->codec_dai; | ||
int pll_rate; | ||
int ret; | ||
|
||
switch (params_rate(params)) { | ||
case 48000: | ||
case 8000: | ||
case 12000: | ||
case 16000: | ||
case 24000: | ||
case 32000: | ||
case 96000: | ||
pll_rate = 48000 * 1024; | ||
break; | ||
case 44100: | ||
case 7350: | ||
case 11025: | ||
case 14700: | ||
case 22050: | ||
case 29400: | ||
case 88200: | ||
pll_rate = 44100 * 1024; | ||
break; | ||
default: | ||
return -EINVAL; | ||
} | ||
|
||
ret = snd_soc_dai_set_pll(codec_dai, ADAU17X1_PLL, | ||
ADAU17X1_PLL_SRC_MCLK, 12288000, pll_rate); | ||
if (ret) | ||
return ret; | ||
|
||
ret = snd_soc_dai_set_sysclk(codec_dai, ADAU17X1_CLK_SRC_PLL, pll_rate, | ||
SND_SOC_CLOCK_IN); | ||
|
||
return ret; | ||
} | ||
|
||
static const struct snd_soc_ops bfin_eval_adau1x61_ops = { | ||
.hw_params = bfin_eval_adau1x61_hw_params, | ||
}; | ||
|
||
static struct snd_soc_dai_link bfin_eval_adau1x61_dai = { | ||
.name = "adau1x61", | ||
.stream_name = "adau1x61", | ||
.cpu_dai_name = "bfin-i2s.0", | ||
.codec_dai_name = "adau-hifi", | ||
.platform_name = "bfin-i2s-pcm-audio", | ||
.codec_name = "adau1761.0-0038", | ||
.ops = &bfin_eval_adau1x61_ops, | ||
.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | | ||
SND_SOC_DAIFMT_CBM_CFM, | ||
}; | ||
|
||
static struct snd_soc_card bfin_eval_adau1x61 = { | ||
.name = "bfin-eval-adau1x61", | ||
.driver_name = "eval-adau1x61", | ||
.dai_link = &bfin_eval_adau1x61_dai, | ||
.num_links = 1, | ||
|
||
.dapm_widgets = bfin_eval_adau1x61_dapm_widgets, | ||
.num_dapm_widgets = ARRAY_SIZE(bfin_eval_adau1x61_dapm_widgets), | ||
.dapm_routes = bfin_eval_adau1x61_dapm_routes, | ||
.num_dapm_routes = ARRAY_SIZE(bfin_eval_adau1x61_dapm_routes), | ||
.fully_routed = true, | ||
}; | ||
|
||
static int bfin_eval_adau1x61_probe(struct platform_device *pdev) | ||
{ | ||
bfin_eval_adau1x61.dev = &pdev->dev; | ||
|
||
return devm_snd_soc_register_card(&pdev->dev, &bfin_eval_adau1x61); | ||
} | ||
|
||
static struct platform_driver bfin_eval_adau1x61_driver = { | ||
.driver = { | ||
.name = "bfin-eval-adau1x61", | ||
.owner = THIS_MODULE, | ||
.pm = &snd_soc_pm_ops, | ||
}, | ||
.probe = bfin_eval_adau1x61_probe, | ||
}; | ||
module_platform_driver(bfin_eval_adau1x61_driver); | ||
|
||
MODULE_AUTHOR("Lars-Peter Clausen <[email protected]>"); | ||
MODULE_DESCRIPTION("ALSA SoC bfin adau1x61 driver"); | ||
MODULE_LICENSE("GPL"); | ||
MODULE_ALIAS("platform:bfin-eval-adau1x61"); |
Oops, something went wrong.