All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anatol Pomozov <anatol.pomozov@gmail.com>
To: Yang Fang <yang.a.fang@intel.com>
Cc: "alsa-devel@alsa-project.org" <alsa-devel@alsa-project.org>,
	rohit.m.ainapure@intel.com, james.ausmus@intel.com,
	Vinod Koul <vinod.koul@intel.com>,
	joe.konno@intel.com, Liam Girdwood <lgirdwood@gmail.com>,
	Mark Brown <broonie@kernel.org>,
	Sathyanarayana Nujella <sathyanarayana.nujella@intel.com>,
	jeeja.kp@intel.com, vedang.patel@intel.com,
	Yong Zhi <yong.zhi@intel.com>
Subject: Re: [PATCH 3/8] ASoC: Intel: Skylake: Add Nuvoton Maxim machine driver
Date: Sun, 20 Dec 2015 17:36:57 -0800	[thread overview]
Message-ID: <CAOMFOmVPvSw5QDuPTQF9tawiV6nCu6zKU5UbrfP-p+QXREJFqA@mail.gmail.com> (raw)
In-Reply-To: <1449862153-68738-3-git-send-email-yang.a.fang@intel.com>

Hi Yang

On Fri, Dec 11, 2015 at 11:29 AM,  <yang.a.fang@intel.com> wrote:
> From: Rohit Ainapure <rohit.m.ainapure@intel.com>
>
> This adds Skylake I2S machine driver which uses NAU88L25 as anlog codec and
> MAX98357A as speakers
>
> Signed-off-by: Rohit Ainapure <rohit.m.ainapure@intel.com>
> Signed-off-by: Fang, Yang A <yang.a.fang@intel.com>
> Signed-off-by: Vinod Koul <vinod.koul@intel.com>
> ---
>  sound/soc/intel/Kconfig                         |   14 +
>  sound/soc/intel/boards/Makefile                 |    2 +
>  sound/soc/intel/boards/skl_nau88l25_max98357a.c |  485 +++++++++++++++++++++++
>  3 files changed, 501 insertions(+)
>  create mode 100644 sound/soc/intel/boards/skl_nau88l25_max98357a.c
>
> diff --git a/sound/soc/intel/Kconfig b/sound/soc/intel/Kconfig
> index 2d3b124..9b1c0aa 100644
> --- a/sound/soc/intel/Kconfig
> +++ b/sound/soc/intel/Kconfig
> @@ -169,3 +169,17 @@ config SND_SOC_INTEL_SKL_NAU88L25_SSM4567_MACH
>           create an alsa sound card for NAU88L25 + SSM4567.
>           Say Y if you have such a device
>           If unsure select "N".
> +
> +config SND_SOC_INTEL_SKL_NAU88L25_MAX98357A_MACH
> +       tristate "ASoC Audio driver for SKL with NAU88L25 and MAX98357A in I2S Mode"

I there any reason you keep using inconsistent name for this IC. The
original driver uses "NAU8825" name and the one above is "NAU88L25".

Please keep naming consistent. The driver chip should be names either
NAU8825 or NAU88L25 but it has to be done everywhere.

I had this question to Vinod earlier as well sent NAU88L25 -> NAU8825
rename patch but got no reply.

> +       depends on X86_INTEL_LPSS && I2C
> +       select SND_SOC_INTEL_SST
> +       select SND_SOC_INTEL_SKYLAKE
> +       select SND_SOC_NAU8825
> +       select SND_SOC_MAX98357A
> +       select SND_SOC_DMIC
> +       help
> +         This adds support for ASoC Onboard Codec I2S machine driver. This will
> +         create an alsa sound card for NAU88L25 + MAX98357A.
> +         Say Y if you have such a device
> +         If unsure select "N".
> diff --git a/sound/soc/intel/boards/Makefile b/sound/soc/intel/boards/Makefile
> index a59f762..2485ea9 100644
> --- a/sound/soc/intel/boards/Makefile
> +++ b/sound/soc/intel/boards/Makefile
> @@ -7,6 +7,7 @@ snd-soc-sst-cht-bsw-rt5672-objs := cht_bsw_rt5672.o
>  snd-soc-sst-cht-bsw-rt5645-objs := cht_bsw_rt5645.o
>  snd-soc-sst-cht-bsw-max98090_ti-objs := cht_bsw_max98090_ti.o
>  snd-soc-skl_rt286-objs := skl_rt286.o
> +snd-skl_nau88l25_max98357a-objs := skl_nau88l25_max98357a.o
>  snd-soc-skl_nau88l25_ssm4567-objs := skl_nau88l25_ssm4567.o
>
>  obj-$(CONFIG_SND_SOC_INTEL_HASWELL_MACH) += snd-soc-sst-haswell.o
> @@ -18,4 +19,5 @@ obj-$(CONFIG_SND_SOC_INTEL_CHT_BSW_RT5672_MACH) += snd-soc-sst-cht-bsw-rt5672.o
>  obj-$(CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH) += snd-soc-sst-cht-bsw-rt5645.o
>  obj-$(CONFIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH) += snd-soc-sst-cht-bsw-max98090_ti.o
>  obj-$(CONFIG_SND_SOC_INTEL_SKL_RT286_MACH) += snd-soc-skl_rt286.o
> +obj-$(CONFIG_SND_SOC_INTEL_SKL_NAU88L25_MAX98357A_MACH) += snd-skl_nau88l25_max98357a.o
>  obj-$(CONFIG_SND_SOC_INTEL_SKL_NAU88L25_SSM4567_MACH) += snd-soc-skl_nau88l25_ssm4567.o
> diff --git a/sound/soc/intel/boards/skl_nau88l25_max98357a.c b/sound/soc/intel/boards/skl_nau88l25_max98357a.c
> new file mode 100644
> index 0000000..ab7da9c
> --- /dev/null
> +++ b/sound/soc/intel/boards/skl_nau88l25_max98357a.c
> @@ -0,0 +1,485 @@
> +/*
> + * Intel Skylake I2S Machine Driver with MAXIM98357A
> + * and NAU88L25
> + *
> + * Copyright (C) 2015, Intel Corporation. All rights reserved.
> + *
> + * 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 <sound/core.h>
> +#include <sound/jack.h>
> +#include <sound/pcm.h>
> +#include <sound/pcm_params.h>
> +#include <sound/soc.h>
> +#include "../../codecs/nau8825.h"
> +
> +#define SKL_NUVOTON_CODEC_DAI  "nau8825-hifi"
> +#define SKL_MAXIM_CODEC_DAI "HiFi"
> +
> +static struct snd_soc_jack skylake_headset;
> +static struct snd_soc_card skylake_audio_card;
> +
> +static inline struct snd_soc_dai *skl_get_codec_dai(struct snd_soc_card *card)
> +{
> +       struct snd_soc_pcm_runtime *rtd;
> +
> +       list_for_each_entry(rtd, &card->rtd_list, list) {
> +
> +               if (!strncmp(rtd->codec_dai->name, SKL_NUVOTON_CODEC_DAI,
> +                            strlen(SKL_NUVOTON_CODEC_DAI)))
> +                       return rtd->codec_dai;
> +       }
> +
> +       return NULL;
> +}
> +
> +static int platform_clock_control(struct snd_soc_dapm_widget *w,
> +       struct snd_kcontrol *k, int  event)
> +{
> +       struct snd_soc_dapm_context *dapm = w->dapm;
> +       struct snd_soc_card *card = dapm->card;
> +       struct snd_soc_dai *codec_dai;
> +       int ret;
> +
> +       codec_dai = skl_get_codec_dai(card);
> +       if (!codec_dai) {
> +               dev_err(card->dev, "Codec dai not found; Unable to set platform clock\n");
> +               return -EIO;
> +       }
> +
> +       if (SND_SOC_DAPM_EVENT_ON(event)) {
> +               ret = snd_soc_dai_set_sysclk(codec_dai,
> +                               NAU8825_CLK_MCLK, 24000000, SND_SOC_CLOCK_IN);
> +               if (ret < 0) {
> +                       dev_err(card->dev, "set sysclk err = %d\n", ret);
> +                       return -EIO;
> +               }
> +       } else {
> +               ret = snd_soc_dai_set_sysclk(codec_dai,
> +                               NAU8825_CLK_INTERNAL, 0, SND_SOC_CLOCK_IN);
> +               if (ret < 0) {
> +                       dev_err(card->dev, "set sysclk err = %d\n", ret);
> +                       return -EIO;
> +               }
> +       }
> +
> +       return ret;
> +}
> +
> +static const struct snd_kcontrol_new skylake_controls[] = {
> +       SOC_DAPM_PIN_SWITCH("Headphone Jack"),
> +       SOC_DAPM_PIN_SWITCH("Headset Mic"),
> +       SOC_DAPM_PIN_SWITCH("Spk"),
> +};
> +
> +static const struct snd_soc_dapm_widget skylake_widgets[] = {
> +       SND_SOC_DAPM_HP("Headphone Jack", NULL),
> +       SND_SOC_DAPM_MIC("Headset Mic", NULL),
> +       SND_SOC_DAPM_SPK("Spk", NULL),
> +       SND_SOC_DAPM_MIC("SoC DMIC", NULL),
> +       SND_SOC_DAPM_SINK("WoV Sink"),
> +       SND_SOC_DAPM_SPK("DP", NULL),
> +       SND_SOC_DAPM_SPK("HDMI", NULL),
> +       SND_SOC_DAPM_SUPPLY("Platform Clock", SND_SOC_NOPM, 0, 0,
> +                       platform_clock_control, SND_SOC_DAPM_PRE_PMU |
> +                       SND_SOC_DAPM_POST_PMD),
> +};
> +
> +static const struct snd_soc_dapm_route skylake_map[] = {
> +       /* HP jack connectors - unknown if we have jack detection */
> +       { "Headphone Jack", NULL, "HPOL" },
> +       { "Headphone Jack", NULL, "HPOR" },
> +
> +       /* speaker */
> +       { "Spk", NULL, "Speaker" },
> +
> +       /* other jacks */
> +       { "MIC", NULL, "Headset Mic" },
> +       { "DMic", NULL, "SoC DMIC" },
> +
> +       {"WoV Sink", NULL, "hwd_in sink"},
> +       {"HDMI", NULL, "hif5 Output"},
> +       {"DP", NULL, "hif6 Output"},
> +
> +       /* CODEC BE connections */
> +       { "HiFi Playback", NULL, "ssp0 Tx" },
> +       { "ssp0 Tx", NULL, "codec0_out" },
> +
> +       { "Playback", NULL, "ssp1 Tx" },
> +       { "ssp1 Tx", NULL, "codec1_out" },
> +
> +       { "codec0_in", NULL, "ssp1 Rx" },
> +       { "ssp1 Rx", NULL, "Capture" },
> +
> +       /* DMIC */
> +       { "dmic01_hifi", NULL, "DMIC01 Rx" },
> +       { "DMIC01 Rx", NULL, "DMIC AIF" },
> +       { "hifi1", NULL, "iDisp Tx"},
> +       { "iDisp Tx", NULL, "iDisp_out"},
> +       { "Headphone Jack", NULL, "Platform Clock" },
> +       { "Headset Mic", NULL, "Platform Clock" },
> +};
> +
> +static int skylake_ssp_fixup(struct snd_soc_pcm_runtime *rtd,
> +       struct snd_pcm_hw_params *params)
> +{
> +       struct snd_interval *rate = hw_param_interval(params,
> +                       SNDRV_PCM_HW_PARAM_RATE);
> +       struct snd_interval *channels = hw_param_interval(params,
> +                       SNDRV_PCM_HW_PARAM_CHANNELS);
> +       struct snd_mask *fmt = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
> +
> +       /* The ADSP will covert the FE rate to 48k, stereo */
> +       rate->min = rate->max = 48000;
> +       channels->min = channels->max = 2;
> +
> +       /* set SSP0 to 24 bit */
> +       snd_mask_none(fmt);
> +       snd_mask_set(fmt, SNDRV_PCM_FORMAT_S24_LE);
> +
> +       return 0;
> +}
> +
> +static int skylake_nau8825_codec_init(struct snd_soc_pcm_runtime *rtd)
> +{
> +       int ret;
> +       struct snd_soc_codec *codec = rtd->codec;
> +
> +       /*
> +        * Headset buttons map to the google Reference headset.
> +        * These can be configured by userspace.
> +        */
> +       ret = snd_soc_card_jack_new(&skylake_audio_card, "Headset Jack",
> +                       SND_JACK_HEADSET | SND_JACK_BTN_0 | SND_JACK_BTN_1 |
> +                       SND_JACK_BTN_2 | SND_JACK_BTN_3, &skylake_headset,
> +                       NULL, 0);
> +       if (ret) {
> +               dev_err(rtd->dev, "Headset Jack creation failed %d\n", ret);
> +               return ret;
> +       }
> +
> +       nau8825_enable_jack_detect(codec, &skylake_headset);
> +
> +       snd_soc_dapm_ignore_suspend(&rtd->card->dapm, "SoC DMIC");
> +       snd_soc_dapm_ignore_suspend(&rtd->card->dapm, "WoV Sink");
> +
> +       return ret;
> +}
> +
> +static int skylake_nau8825_fe_init(struct snd_soc_pcm_runtime *rtd)
> +{
> +       struct snd_soc_dapm_context *dapm;
> +       struct snd_soc_component *component = rtd->cpu_dai->component;
> +
> +       dapm = snd_soc_component_get_dapm(component);
> +       snd_soc_dapm_ignore_suspend(dapm, "Reference Capture");
> +
> +       return 0;
> +}
> +
> +static unsigned int rates[] = {
> +       48000,
> +};
> +
> +static struct snd_pcm_hw_constraint_list constraints_rates = {
> +       .count = ARRAY_SIZE(rates),
> +       .list  = rates,
> +       .mask = 0,
> +};
> +
> +static unsigned int channels[] = {
> +       2,
> +};
> +
> +static struct snd_pcm_hw_constraint_list constraints_channels = {
> +       .count = ARRAY_SIZE(channels),
> +       .list = channels,
> +       .mask = 0,
> +};
> +
> +static int skl_fe_startup(struct snd_pcm_substream *substream)
> +{
> +       struct snd_pcm_runtime *runtime = substream->runtime;
> +
> +       /*
> +        * On this platform for PCM device we support,
> +        * 48Khz
> +        * stereo
> +        * 16 bit audio
> +        */
> +
> +       runtime->hw.channels_max = 2;
> +       snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
> +                                          &constraints_channels);
> +
> +       runtime->hw.formats = SNDRV_PCM_FMTBIT_S16_LE;
> +       snd_pcm_hw_constraint_msbits(runtime, 0, 16, 16);
> +
> +       snd_pcm_hw_constraint_list(runtime, 0,
> +                               SNDRV_PCM_HW_PARAM_RATE, &constraints_rates);
> +
> +       return 0;
> +}
> +
> +static const struct snd_soc_ops skylake_nau8825_fe_ops = {
> +       .startup = skl_fe_startup,
> +};
> +
> +static int skylake_nau8825_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 ret;
> +
> +       ret = snd_soc_dai_set_sysclk(codec_dai,
> +                       NAU8825_CLK_MCLK, 24000000, SND_SOC_CLOCK_IN);
> +
> +       if (ret < 0)
> +               dev_err(rtd->dev, "snd_soc_dai_set_sysclk err = %d\n", ret);
> +
> +       return ret;
> +}
> +
> +static struct snd_soc_ops skylake_nau8825_ops = {
> +       .hw_params = skylake_nau8825_hw_params,
> +};
> +
> +static int skylake_dmic_fixup(struct snd_soc_pcm_runtime *rtd,
> +               struct snd_pcm_hw_params *params)
> +{
> +       struct snd_interval *channels = hw_param_interval(params,
> +                               SNDRV_PCM_HW_PARAM_CHANNELS);
> +
> +       if (params_channels(params) == 2)
> +               channels->min = channels->max = 2;
> +       else
> +               channels->min = channels->max = 4;
> +
> +       return 0;
> +}
> +
> +static unsigned int channels_dmic[] = {
> +       2, 4,
> +};
> +
> +static struct snd_pcm_hw_constraint_list constraints_dmic_channels = {
> +       .count = ARRAY_SIZE(channels_dmic),
> +       .list = channels_dmic,
> +       .mask = 0,
> +};
> +
> +static int skylake_dmic_startup(struct snd_pcm_substream *substream)
> +{
> +       struct snd_pcm_runtime *runtime = substream->runtime;
> +
> +       runtime->hw.channels_max = 4;
> +       snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
> +                       &constraints_dmic_channels);
> +
> +       return snd_pcm_hw_constraint_list(substream->runtime, 0,
> +                       SNDRV_PCM_HW_PARAM_RATE, &constraints_rates);
> +}
> +
> +static struct snd_soc_ops skylake_dmic_ops = {
> +       .startup = skylake_dmic_startup,
> +};
> +
> +static unsigned int rates_16000[] = {
> +       16000,
> +};
> +
> +static struct snd_pcm_hw_constraint_list constraints_16000 = {
> +       .count = ARRAY_SIZE(rates_16000),
> +       .list  = rates_16000,
> +};
> +
> +static int skylake_refcap_startup(struct snd_pcm_substream *substream)
> +{
> +       return snd_pcm_hw_constraint_list(substream->runtime, 0,
> +                               SNDRV_PCM_HW_PARAM_RATE,
> +                               &constraints_16000);
> +}
> +
> +static struct snd_soc_ops skylaye_refcap_ops = {
> +       .startup = skylake_refcap_startup,
> +};
> +
> +/* skylake digital audio interface glue - connects codec <--> CPU */
> +static struct snd_soc_dai_link skylake_dais[] = {
> +       /* Front End DAI links */
> +       {
> +               .name = "Skl Audio Port",
> +               .stream_name = "Audio",
> +               .cpu_dai_name = "System Pin",
> +               .platform_name = "0000:00:1f.3",
> +               .dynamic = 1,
> +               .codec_name = "snd-soc-dummy",
> +               .codec_dai_name = "snd-soc-dummy-dai",
> +               .nonatomic = 1,
> +               .init = skylake_nau8825_fe_init,
> +               .trigger = {
> +                       SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
> +               .dpcm_playback = 1,
> +               .ops = &skylake_nau8825_fe_ops,
> +       },
> +       {
> +               .name = "Skl Audio Capture Port",
> +               .stream_name = "Audio Record",
> +               .cpu_dai_name = "System Pin",
> +               .platform_name = "0000:00:1f.3",
> +               .dynamic = 1,
> +               .codec_name = "snd-soc-dummy",
> +               .codec_dai_name = "snd-soc-dummy-dai",
> +               .nonatomic = 1,
> +               .trigger = {
> +                       SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
> +               .dpcm_capture = 1,
> +               .ops = &skylake_nau8825_fe_ops,
> +       },
> +       {
> +               .name = "Skl Audio Reference cap",
> +               .stream_name = "Wake on Voice",
> +               .cpu_dai_name = "Reference Pin",
> +               .codec_name = "snd-soc-dummy",
> +               .codec_dai_name = "snd-soc-dummy-dai",
> +               .platform_name = "0000:00:1f.3",
> +               .init = NULL,
> +               .dpcm_capture = 1,
> +               .ignore_suspend = 1,
> +               .nonatomic = 1,
> +               .dynamic = 1,
> +               .ops = &skylaye_refcap_ops,
> +       },
> +       {
> +               .name = "Skl Audio DMIC cap",
> +               .stream_name = "dmiccap",
> +               .cpu_dai_name = "DMIC Pin",
> +               .codec_name = "snd-soc-dummy",
> +               .codec_dai_name = "snd-soc-dummy-dai",
> +               .platform_name = "0000:00:1f.3",
> +               .init = NULL,
> +               .dpcm_capture = 1,
> +               .nonatomic = 1,
> +               .dynamic = 1,
> +               .ops = &skylake_dmic_ops,
> +       },
> +       {
> +               .name = "Skl HDMI Port",
> +               .stream_name = "Hdmi",
> +               .cpu_dai_name = "HDMI Pin",
> +               .codec_name = "snd-soc-dummy",
> +               .codec_dai_name = "snd-soc-dummy-dai",
> +               .platform_name = "0000:00:1f.3",
> +               .dpcm_playback = 1,
> +               .init = NULL,
> +               .nonatomic = 1,
> +               .dynamic = 1,
> +       },
> +
> +       /* Back End DAI links */
> +       {
> +               /* SSP0 - Codec */
> +               .name = "SSP0-Codec",
> +               .be_id = 0,
> +               .cpu_dai_name = "SSP0 Pin",
> +               .platform_name = "0000:00:1f.3",
> +               .no_pcm = 1,
> +               .codec_name = "MX98357A:00",
> +               .codec_dai_name = SKL_MAXIM_CODEC_DAI,
> +               .dai_fmt = SND_SOC_DAIFMT_I2S |
> +                       SND_SOC_DAIFMT_NB_NF |
> +                       SND_SOC_DAIFMT_CBS_CFS,
> +               .ignore_pmdown_time = 1,
> +               .be_hw_params_fixup = skylake_ssp_fixup,
> +               .dpcm_playback = 1,
> +       },
> +       {
> +               /* SSP1 - Codec */
> +               .name = "SSP1-Codec",
> +               .be_id = 0,
> +               .cpu_dai_name = "SSP1 Pin",
> +               .platform_name = "0000:00:1f.3",
> +               .no_pcm = 1,
> +               .codec_name = "i2c-10508825:00",
> +               .codec_dai_name = SKL_NUVOTON_CODEC_DAI,
> +               .init = skylake_nau8825_codec_init,
> +               .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
> +                       SND_SOC_DAIFMT_CBS_CFS,
> +               .ignore_pmdown_time = 1,
> +               .be_hw_params_fixup = skylake_ssp_fixup,
> +               .ops = &skylake_nau8825_ops,
> +               .dpcm_playback = 1,
> +               .dpcm_capture = 1,
> +       },
> +       {
> +               .name = "dmic01",
> +               .be_id = 1,
> +               .cpu_dai_name = "DMIC01 Pin",
> +               .codec_name = "dmic-codec",
> +               .codec_dai_name = "dmic-hifi",
> +               .platform_name = "0000:00:1f.3",
> +               .be_hw_params_fixup = skylake_dmic_fixup,
> +               .ignore_suspend = 1,
> +               .dpcm_capture = 1,
> +               .no_pcm = 1,
> +       },
> +       {
> +               .name = "iDisp",
> +               .be_id = 3,
> +               .cpu_dai_name = "iDisp Pin",
> +               .codec_name = "ehdaudio0D2",
> +               .codec_dai_name = "intel-hdmi-hifi1",
> +               .platform_name = "0000:00:1f.3",
> +               .dpcm_playback = 1,
> +               .no_pcm = 1,
> +       },
> +};
> +
> +/* skylake audio machine driver for SPT + NAU88L25 */
> +static struct snd_soc_card skylake_audio_card = {
> +       .name = "sklnau8825max",
> +       .owner = THIS_MODULE,
> +       .dai_link = skylake_dais,
> +       .num_links = ARRAY_SIZE(skylake_dais),
> +       .controls = skylake_controls,
> +       .num_controls = ARRAY_SIZE(skylake_controls),
> +       .dapm_widgets = skylake_widgets,
> +       .num_dapm_widgets = ARRAY_SIZE(skylake_widgets),
> +       .dapm_routes = skylake_map,
> +       .num_dapm_routes = ARRAY_SIZE(skylake_map),
> +       .fully_routed = true,
> +};
> +
> +static int skylake_audio_probe(struct platform_device *pdev)
> +{
> +       skylake_audio_card.dev = &pdev->dev;
> +
> +       return devm_snd_soc_register_card(&pdev->dev, &skylake_audio_card);
> +}
> +
> +static struct platform_driver skylake_audio = {
> +       .probe = skylake_audio_probe,
> +       .driver = {
> +               .name = "skl_nau88l25_max98357a_i2s",
> +               .pm = &snd_soc_pm_ops,
> +       },
> +};
> +
> +module_platform_driver(skylake_audio)
> +
> +/* Module information */
> +MODULE_DESCRIPTION("Audio Machine driver-NAU88L25 & MAX98357A in I2S mode");
> +MODULE_AUTHOR("Rohit Ainapure <rohit.m.ainapure@intel.com");
> +MODULE_LICENSE("GPL v2");
> +MODULE_ALIAS("platform:skl_nau88l25_max98357a_i2s");
> --
> 1.7.9.5
>
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

  parent reply	other threads:[~2015-12-21  1:36 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-11 19:29 [PATCH 1/8] ASoC: max98357a: Add ACPI ID for Maxim yang.a.fang
2015-12-11 19:29 ` [PATCH 2/8] ASoC: Intel: Add Nuvoton+Maxim machine driver entry yang.a.fang
2015-12-18 12:15   ` Applied "ASoC: Intel: Add Nuvoton+Maxim machine driver entry" to the asoc tree Mark Brown
2015-12-11 19:29 ` [PATCH 3/8] ASoC: Intel: Skylake: Add Nuvoton Maxim machine driver yang.a.fang
2015-12-18 12:15   ` Applied "ASoC: Intel: Skylake: Add Nuvoton Maxim machine driver" to the asoc tree Mark Brown
2015-12-21  1:36   ` Anatol Pomozov [this message]
2015-12-21 18:18     ` [PATCH 3/8] ASoC: Intel: Skylake: Add Nuvoton Maxim machine driver Fang, Yang A
2015-12-11 19:29 ` [PATCH 4/8] ASoc: Intel: boards: fix dapm map of nau88l25_ssm4567 machine yang.a.fang
2015-12-18 12:15   ` Applied "ASoc: Intel: boards: fix dapm map of nau88l25_ssm4567 machine" to the asoc tree Mark Brown
2015-12-11 19:29 ` [PATCH 5/8] ASoc: Intel: boards: update ignore suspend for nau88l25_ssm4567 machine yang.a.fang
2015-12-18 12:15   ` Applied "ASoc: Intel: boards: update ignore suspend for nau88l25_ssm4567 machine" to the asoc tree Mark Brown
2015-12-11 19:29 ` [PATCH 6/8] ASoc: Intel: boards: update constraints for nau88l25_ssm4567 machine yang.a.fang
2015-12-18 12:15   ` Applied "ASoc: Intel: boards: update constraints for nau88l25_ssm4567 machine" to the asoc tree Mark Brown
2015-12-11 19:29 ` [PATCH 7/8] ASoc: Intel: boards: Add WOV as sink for nau88l25_ssm4567 machine yang.a.fang
2015-12-18 12:15   ` Applied "ASoc: Intel: boards: Add WOV as sink for nau88l25_ssm4567 machine" to the asoc tree Mark Brown
2015-12-11 19:29 ` [PATCH 8/8] ASoc: Intel: boards: Add HDMI/DP links for nau88l25_ssm4567 machine yang.a.fang
2015-12-18 12:15   ` Applied "ASoc: Intel: boards: Add HDMI/DP links for nau88l25_ssm4567 machine" to the asoc tree Mark Brown
2015-12-18 12:15 ` Applied "ASoC: max98357a: Add ACPI ID for Maxim" " Mark Brown

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAOMFOmVPvSw5QDuPTQF9tawiV6nCu6zKU5UbrfP-p+QXREJFqA@mail.gmail.com \
    --to=anatol.pomozov@gmail.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=broonie@kernel.org \
    --cc=james.ausmus@intel.com \
    --cc=jeeja.kp@intel.com \
    --cc=joe.konno@intel.com \
    --cc=lgirdwood@gmail.com \
    --cc=rohit.m.ainapure@intel.com \
    --cc=sathyanarayana.nujella@intel.com \
    --cc=vedang.patel@intel.com \
    --cc=vinod.koul@intel.com \
    --cc=yang.a.fang@intel.com \
    --cc=yong.zhi@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.