Loading sound/soc/codecs/tlv320aic3x.c +21 −13 Original line number Original line Diff line number Diff line Loading @@ -226,11 +226,13 @@ static const char *aic3x_adc_hpf[] = #define RDAC_ENUM 1 #define RDAC_ENUM 1 #define LHPCOM_ENUM 2 #define LHPCOM_ENUM 2 #define RHPCOM_ENUM 3 #define RHPCOM_ENUM 3 #define LINE1L_ENUM 4 #define LINE1L_2_L_ENUM 4 #define LINE1R_ENUM 5 #define LINE1L_2_R_ENUM 5 #define LINE2L_ENUM 6 #define LINE1R_2_L_ENUM 6 #define LINE2R_ENUM 7 #define LINE1R_2_R_ENUM 7 #define ADC_HPF_ENUM 8 #define LINE2L_ENUM 8 #define LINE2R_ENUM 9 #define ADC_HPF_ENUM 10 static const struct soc_enum aic3x_enum[] = { static const struct soc_enum aic3x_enum[] = { SOC_ENUM_SINGLE(DAC_LINE_MUX, 6, 3, aic3x_left_dac_mux), SOC_ENUM_SINGLE(DAC_LINE_MUX, 6, 3, aic3x_left_dac_mux), Loading @@ -238,6 +240,8 @@ static const struct soc_enum aic3x_enum[] = { SOC_ENUM_SINGLE(HPLCOM_CFG, 4, 3, aic3x_left_hpcom_mux), SOC_ENUM_SINGLE(HPLCOM_CFG, 4, 3, aic3x_left_hpcom_mux), SOC_ENUM_SINGLE(HPRCOM_CFG, 3, 5, aic3x_right_hpcom_mux), SOC_ENUM_SINGLE(HPRCOM_CFG, 3, 5, aic3x_right_hpcom_mux), SOC_ENUM_SINGLE(LINE1L_2_LADC_CTRL, 7, 2, aic3x_linein_mode_mux), SOC_ENUM_SINGLE(LINE1L_2_LADC_CTRL, 7, 2, aic3x_linein_mode_mux), SOC_ENUM_SINGLE(LINE1L_2_RADC_CTRL, 7, 2, aic3x_linein_mode_mux), SOC_ENUM_SINGLE(LINE1R_2_LADC_CTRL, 7, 2, aic3x_linein_mode_mux), SOC_ENUM_SINGLE(LINE1R_2_RADC_CTRL, 7, 2, aic3x_linein_mode_mux), SOC_ENUM_SINGLE(LINE1R_2_RADC_CTRL, 7, 2, aic3x_linein_mode_mux), SOC_ENUM_SINGLE(LINE2L_2_LADC_CTRL, 7, 2, aic3x_linein_mode_mux), SOC_ENUM_SINGLE(LINE2L_2_LADC_CTRL, 7, 2, aic3x_linein_mode_mux), SOC_ENUM_SINGLE(LINE2R_2_RADC_CTRL, 7, 2, aic3x_linein_mode_mux), SOC_ENUM_SINGLE(LINE2R_2_RADC_CTRL, 7, 2, aic3x_linein_mode_mux), Loading Loading @@ -490,12 +494,16 @@ static const struct snd_kcontrol_new aic3x_right_pga_mixer_controls[] = { }; }; /* Left Line1 Mux */ /* Left Line1 Mux */ static const struct snd_kcontrol_new aic3x_left_line1_mux_controls = static const struct snd_kcontrol_new aic3x_left_line1l_mux_controls = SOC_DAPM_ENUM("Route", aic3x_enum[LINE1L_ENUM]); SOC_DAPM_ENUM("Route", aic3x_enum[LINE1L_2_L_ENUM]); static const struct snd_kcontrol_new aic3x_right_line1l_mux_controls = SOC_DAPM_ENUM("Route", aic3x_enum[LINE1L_2_R_ENUM]); /* Right Line1 Mux */ /* Right Line1 Mux */ static const struct snd_kcontrol_new aic3x_right_line1_mux_controls = static const struct snd_kcontrol_new aic3x_right_line1r_mux_controls = SOC_DAPM_ENUM("Route", aic3x_enum[LINE1R_ENUM]); SOC_DAPM_ENUM("Route", aic3x_enum[LINE1R_2_R_ENUM]); static const struct snd_kcontrol_new aic3x_left_line1r_mux_controls = SOC_DAPM_ENUM("Route", aic3x_enum[LINE1R_2_L_ENUM]); /* Left Line2 Mux */ /* Left Line2 Mux */ static const struct snd_kcontrol_new aic3x_left_line2_mux_controls = static const struct snd_kcontrol_new aic3x_left_line2_mux_controls = Loading Loading @@ -535,9 +543,9 @@ static const struct snd_soc_dapm_widget aic3x_dapm_widgets[] = { &aic3x_left_pga_mixer_controls[0], &aic3x_left_pga_mixer_controls[0], ARRAY_SIZE(aic3x_left_pga_mixer_controls)), ARRAY_SIZE(aic3x_left_pga_mixer_controls)), SND_SOC_DAPM_MUX("Left Line1L Mux", SND_SOC_NOPM, 0, 0, SND_SOC_DAPM_MUX("Left Line1L Mux", SND_SOC_NOPM, 0, 0, &aic3x_left_line1_mux_controls), &aic3x_left_line1l_mux_controls), SND_SOC_DAPM_MUX("Left Line1R Mux", SND_SOC_NOPM, 0, 0, SND_SOC_DAPM_MUX("Left Line1R Mux", SND_SOC_NOPM, 0, 0, &aic3x_left_line1_mux_controls), &aic3x_left_line1r_mux_controls), SND_SOC_DAPM_MUX("Left Line2L Mux", SND_SOC_NOPM, 0, 0, SND_SOC_DAPM_MUX("Left Line2L Mux", SND_SOC_NOPM, 0, 0, &aic3x_left_line2_mux_controls), &aic3x_left_line2_mux_controls), Loading @@ -548,9 +556,9 @@ static const struct snd_soc_dapm_widget aic3x_dapm_widgets[] = { &aic3x_right_pga_mixer_controls[0], &aic3x_right_pga_mixer_controls[0], ARRAY_SIZE(aic3x_right_pga_mixer_controls)), ARRAY_SIZE(aic3x_right_pga_mixer_controls)), SND_SOC_DAPM_MUX("Right Line1L Mux", SND_SOC_NOPM, 0, 0, SND_SOC_DAPM_MUX("Right Line1L Mux", SND_SOC_NOPM, 0, 0, &aic3x_right_line1_mux_controls), &aic3x_right_line1l_mux_controls), SND_SOC_DAPM_MUX("Right Line1R Mux", SND_SOC_NOPM, 0, 0, SND_SOC_DAPM_MUX("Right Line1R Mux", SND_SOC_NOPM, 0, 0, &aic3x_right_line1_mux_controls), &aic3x_right_line1r_mux_controls), SND_SOC_DAPM_MUX("Right Line2R Mux", SND_SOC_NOPM, 0, 0, SND_SOC_DAPM_MUX("Right Line2R Mux", SND_SOC_NOPM, 0, 0, &aic3x_right_line2_mux_controls), &aic3x_right_line2_mux_controls), Loading sound/soc/codecs/twl6040.c +2 −2 Original line number Original line Diff line number Diff line Loading @@ -954,9 +954,9 @@ static DECLARE_TLV_DB_SCALE(mic_preamp_tlv, -600, 600, 0); /* /* * MICGAIN volume control: * MICGAIN volume control: * from -6 to 30 dB in 6 dB steps * from 6 to 30 dB in 6 dB steps */ */ static DECLARE_TLV_DB_SCALE(mic_amp_tlv, -600, 600, 0); static DECLARE_TLV_DB_SCALE(mic_amp_tlv, 600, 600, 0); /* /* * AFMGAIN volume control: * AFMGAIN volume control: Loading sound/soc/omap/Kconfig +11 −0 Original line number Original line Diff line number Diff line Loading @@ -9,6 +9,9 @@ config SND_OMAP_SOC_MCBSP config SND_OMAP_SOC_MCPDM config SND_OMAP_SOC_MCPDM tristate tristate config SND_OMAP_SOC_HDMI tristate config SND_OMAP_SOC_N810 config SND_OMAP_SOC_N810 tristate "SoC Audio support for Nokia N810" tristate "SoC Audio support for Nokia N810" depends on SND_OMAP_SOC && MACH_NOKIA_N810 && I2C depends on SND_OMAP_SOC && MACH_NOKIA_N810 && I2C Loading Loading @@ -100,6 +103,14 @@ config SND_OMAP_SOC_SDP4430 Say Y if you want to add support for SoC audio on Texas Instruments Say Y if you want to add support for SoC audio on Texas Instruments SDP4430. SDP4430. config SND_OMAP_SOC_OMAP4_HDMI tristate "SoC Audio support for Texas Instruments OMAP4 HDMI" depends on SND_OMAP_SOC && OMAP4_DSS_HDMI && OMAP2_DSS && ARCH_OMAP4 select SND_OMAP_SOC_HDMI help Say Y if you want to add support for SoC HDMI audio on Texas Instruments OMAP4 chips config SND_OMAP_SOC_OMAP3_PANDORA config SND_OMAP_SOC_OMAP3_PANDORA tristate "SoC Audio support for OMAP3 Pandora" tristate "SoC Audio support for OMAP3 Pandora" depends on TWL4030_CORE && SND_OMAP_SOC && MACH_OMAP3_PANDORA depends on TWL4030_CORE && SND_OMAP_SOC && MACH_OMAP3_PANDORA Loading sound/soc/omap/Makefile +4 −0 Original line number Original line Diff line number Diff line Loading @@ -2,10 +2,12 @@ snd-soc-omap-objs := omap-pcm.o snd-soc-omap-objs := omap-pcm.o snd-soc-omap-mcbsp-objs := omap-mcbsp.o snd-soc-omap-mcbsp-objs := omap-mcbsp.o snd-soc-omap-mcpdm-objs := omap-mcpdm.o mcpdm.o snd-soc-omap-mcpdm-objs := omap-mcpdm.o mcpdm.o snd-soc-omap-hdmi-objs := omap-hdmi.o obj-$(CONFIG_SND_OMAP_SOC) += snd-soc-omap.o obj-$(CONFIG_SND_OMAP_SOC) += snd-soc-omap.o obj-$(CONFIG_SND_OMAP_SOC_MCBSP) += snd-soc-omap-mcbsp.o obj-$(CONFIG_SND_OMAP_SOC_MCBSP) += snd-soc-omap-mcbsp.o obj-$(CONFIG_SND_OMAP_SOC_MCPDM) += snd-soc-omap-mcpdm.o obj-$(CONFIG_SND_OMAP_SOC_MCPDM) += snd-soc-omap-mcpdm.o obj-$(CONFIG_SND_OMAP_SOC_HDMI) += snd-soc-omap-hdmi.o # OMAP Machine Support # OMAP Machine Support snd-soc-n810-objs := n810.o snd-soc-n810-objs := n810.o Loading @@ -21,6 +23,7 @@ snd-soc-omap3pandora-objs := omap3pandora.o snd-soc-omap3beagle-objs := omap3beagle.o snd-soc-omap3beagle-objs := omap3beagle.o snd-soc-zoom2-objs := zoom2.o snd-soc-zoom2-objs := zoom2.o snd-soc-igep0020-objs := igep0020.o snd-soc-igep0020-objs := igep0020.o snd-soc-omap4-hdmi-objs := omap4-hdmi-card.o obj-$(CONFIG_SND_OMAP_SOC_N810) += snd-soc-n810.o obj-$(CONFIG_SND_OMAP_SOC_N810) += snd-soc-n810.o obj-$(CONFIG_SND_OMAP_SOC_RX51) += snd-soc-rx51.o obj-$(CONFIG_SND_OMAP_SOC_RX51) += snd-soc-rx51.o Loading @@ -36,3 +39,4 @@ obj-$(CONFIG_SND_OMAP_SOC_OMAP3_PANDORA) += snd-soc-omap3pandora.o obj-$(CONFIG_SND_OMAP_SOC_OMAP3_BEAGLE) += snd-soc-omap3beagle.o obj-$(CONFIG_SND_OMAP_SOC_OMAP3_BEAGLE) += snd-soc-omap3beagle.o obj-$(CONFIG_SND_OMAP_SOC_ZOOM2) += snd-soc-zoom2.o obj-$(CONFIG_SND_OMAP_SOC_ZOOM2) += snd-soc-zoom2.o obj-$(CONFIG_SND_OMAP_SOC_IGEP0020) += snd-soc-igep0020.o obj-$(CONFIG_SND_OMAP_SOC_IGEP0020) += snd-soc-igep0020.o obj-$(CONFIG_SND_OMAP_SOC_OMAP4_HDMI) += snd-soc-omap4-hdmi.o sound/soc/omap/omap-hdmi.c 0 → 100644 +158 −0 Original line number Original line Diff line number Diff line /* * omap-hdmi.c * * OMAP ALSA SoC DAI driver for HDMI audio on OMAP4 processors. * Copyright (C) 2010-2011 Texas Instruments Incorporated - http://www.ti.com/ * Authors: Jorge Candelaria <jorge.candelaria@ti.com> * Ricardo Neri <ricardo.neri@ti.com> * * 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. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA * */ #include <linux/init.h> #include <linux/module.h> #include <linux/device.h> #include <sound/core.h> #include <sound/pcm.h> #include <sound/pcm_params.h> #include <sound/initval.h> #include <sound/soc.h> #include <plat/dma.h> #include "omap-pcm.h" #include "omap-hdmi.h" #define DRV_NAME "hdmi-audio-dai" static struct omap_pcm_dma_data omap_hdmi_dai_dma_params = { .name = "HDMI playback", .sync_mode = OMAP_DMA_SYNC_PACKET, }; static int omap_hdmi_dai_startup(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) { int err; /* * Make sure that the period bytes are multiple of the DMA packet size. * Largest packet size we use is 32 32-bit words = 128 bytes */ err = snd_pcm_hw_constraint_step(substream->runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES, 128); if (err < 0) return err; return 0; } static int omap_hdmi_dai_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) { int err = 0; switch (params_format(params)) { case SNDRV_PCM_FORMAT_S16_LE: omap_hdmi_dai_dma_params.packet_size = 16; break; case SNDRV_PCM_FORMAT_S24_LE: omap_hdmi_dai_dma_params.packet_size = 32; break; default: err = -EINVAL; } omap_hdmi_dai_dma_params.data_type = OMAP_DMA_DATA_TYPE_S32; snd_soc_dai_set_dma_data(dai, substream, &omap_hdmi_dai_dma_params); return err; } static struct snd_soc_dai_ops omap_hdmi_dai_ops = { .startup = omap_hdmi_dai_startup, .hw_params = omap_hdmi_dai_hw_params, }; static struct snd_soc_dai_driver omap_hdmi_dai = { .playback = { .channels_min = 2, .channels_max = 2, .rates = OMAP_HDMI_RATES, .formats = OMAP_HDMI_FORMATS, }, .ops = &omap_hdmi_dai_ops, }; static __devinit int omap_hdmi_probe(struct platform_device *pdev) { int ret; struct resource *hdmi_rsrc; hdmi_rsrc = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!hdmi_rsrc) { dev_err(&pdev->dev, "Cannot obtain IORESOURCE_MEM HDMI\n"); return -EINVAL; } omap_hdmi_dai_dma_params.port_addr = hdmi_rsrc->start + OMAP_HDMI_AUDIO_DMA_PORT; hdmi_rsrc = platform_get_resource(pdev, IORESOURCE_DMA, 0); if (!hdmi_rsrc) { dev_err(&pdev->dev, "Cannot obtain IORESOURCE_DMA HDMI\n"); return -EINVAL; } omap_hdmi_dai_dma_params.dma_req = hdmi_rsrc->start; ret = snd_soc_register_dai(&pdev->dev, &omap_hdmi_dai); return ret; } static int __devexit omap_hdmi_remove(struct platform_device *pdev) { snd_soc_unregister_dai(&pdev->dev); return 0; } static struct platform_driver hdmi_dai_driver = { .driver = { .name = DRV_NAME, .owner = THIS_MODULE, }, .probe = omap_hdmi_probe, .remove = __devexit_p(omap_hdmi_remove), }; static int __init hdmi_dai_init(void) { return platform_driver_register(&hdmi_dai_driver); } module_init(hdmi_dai_init); static void __exit hdmi_dai_exit(void) { platform_driver_unregister(&hdmi_dai_driver); } module_exit(hdmi_dai_exit); MODULE_AUTHOR("Jorge Candelaria <jorge.candelaria@ti.com>"); MODULE_AUTHOR("Ricardo Neri <ricardo.neri@ti.com>"); MODULE_DESCRIPTION("OMAP HDMI SoC Interface"); MODULE_LICENSE("GPL"); MODULE_ALIAS("platform:" DRV_NAME); Loading
sound/soc/codecs/tlv320aic3x.c +21 −13 Original line number Original line Diff line number Diff line Loading @@ -226,11 +226,13 @@ static const char *aic3x_adc_hpf[] = #define RDAC_ENUM 1 #define RDAC_ENUM 1 #define LHPCOM_ENUM 2 #define LHPCOM_ENUM 2 #define RHPCOM_ENUM 3 #define RHPCOM_ENUM 3 #define LINE1L_ENUM 4 #define LINE1L_2_L_ENUM 4 #define LINE1R_ENUM 5 #define LINE1L_2_R_ENUM 5 #define LINE2L_ENUM 6 #define LINE1R_2_L_ENUM 6 #define LINE2R_ENUM 7 #define LINE1R_2_R_ENUM 7 #define ADC_HPF_ENUM 8 #define LINE2L_ENUM 8 #define LINE2R_ENUM 9 #define ADC_HPF_ENUM 10 static const struct soc_enum aic3x_enum[] = { static const struct soc_enum aic3x_enum[] = { SOC_ENUM_SINGLE(DAC_LINE_MUX, 6, 3, aic3x_left_dac_mux), SOC_ENUM_SINGLE(DAC_LINE_MUX, 6, 3, aic3x_left_dac_mux), Loading @@ -238,6 +240,8 @@ static const struct soc_enum aic3x_enum[] = { SOC_ENUM_SINGLE(HPLCOM_CFG, 4, 3, aic3x_left_hpcom_mux), SOC_ENUM_SINGLE(HPLCOM_CFG, 4, 3, aic3x_left_hpcom_mux), SOC_ENUM_SINGLE(HPRCOM_CFG, 3, 5, aic3x_right_hpcom_mux), SOC_ENUM_SINGLE(HPRCOM_CFG, 3, 5, aic3x_right_hpcom_mux), SOC_ENUM_SINGLE(LINE1L_2_LADC_CTRL, 7, 2, aic3x_linein_mode_mux), SOC_ENUM_SINGLE(LINE1L_2_LADC_CTRL, 7, 2, aic3x_linein_mode_mux), SOC_ENUM_SINGLE(LINE1L_2_RADC_CTRL, 7, 2, aic3x_linein_mode_mux), SOC_ENUM_SINGLE(LINE1R_2_LADC_CTRL, 7, 2, aic3x_linein_mode_mux), SOC_ENUM_SINGLE(LINE1R_2_RADC_CTRL, 7, 2, aic3x_linein_mode_mux), SOC_ENUM_SINGLE(LINE1R_2_RADC_CTRL, 7, 2, aic3x_linein_mode_mux), SOC_ENUM_SINGLE(LINE2L_2_LADC_CTRL, 7, 2, aic3x_linein_mode_mux), SOC_ENUM_SINGLE(LINE2L_2_LADC_CTRL, 7, 2, aic3x_linein_mode_mux), SOC_ENUM_SINGLE(LINE2R_2_RADC_CTRL, 7, 2, aic3x_linein_mode_mux), SOC_ENUM_SINGLE(LINE2R_2_RADC_CTRL, 7, 2, aic3x_linein_mode_mux), Loading Loading @@ -490,12 +494,16 @@ static const struct snd_kcontrol_new aic3x_right_pga_mixer_controls[] = { }; }; /* Left Line1 Mux */ /* Left Line1 Mux */ static const struct snd_kcontrol_new aic3x_left_line1_mux_controls = static const struct snd_kcontrol_new aic3x_left_line1l_mux_controls = SOC_DAPM_ENUM("Route", aic3x_enum[LINE1L_ENUM]); SOC_DAPM_ENUM("Route", aic3x_enum[LINE1L_2_L_ENUM]); static const struct snd_kcontrol_new aic3x_right_line1l_mux_controls = SOC_DAPM_ENUM("Route", aic3x_enum[LINE1L_2_R_ENUM]); /* Right Line1 Mux */ /* Right Line1 Mux */ static const struct snd_kcontrol_new aic3x_right_line1_mux_controls = static const struct snd_kcontrol_new aic3x_right_line1r_mux_controls = SOC_DAPM_ENUM("Route", aic3x_enum[LINE1R_ENUM]); SOC_DAPM_ENUM("Route", aic3x_enum[LINE1R_2_R_ENUM]); static const struct snd_kcontrol_new aic3x_left_line1r_mux_controls = SOC_DAPM_ENUM("Route", aic3x_enum[LINE1R_2_L_ENUM]); /* Left Line2 Mux */ /* Left Line2 Mux */ static const struct snd_kcontrol_new aic3x_left_line2_mux_controls = static const struct snd_kcontrol_new aic3x_left_line2_mux_controls = Loading Loading @@ -535,9 +543,9 @@ static const struct snd_soc_dapm_widget aic3x_dapm_widgets[] = { &aic3x_left_pga_mixer_controls[0], &aic3x_left_pga_mixer_controls[0], ARRAY_SIZE(aic3x_left_pga_mixer_controls)), ARRAY_SIZE(aic3x_left_pga_mixer_controls)), SND_SOC_DAPM_MUX("Left Line1L Mux", SND_SOC_NOPM, 0, 0, SND_SOC_DAPM_MUX("Left Line1L Mux", SND_SOC_NOPM, 0, 0, &aic3x_left_line1_mux_controls), &aic3x_left_line1l_mux_controls), SND_SOC_DAPM_MUX("Left Line1R Mux", SND_SOC_NOPM, 0, 0, SND_SOC_DAPM_MUX("Left Line1R Mux", SND_SOC_NOPM, 0, 0, &aic3x_left_line1_mux_controls), &aic3x_left_line1r_mux_controls), SND_SOC_DAPM_MUX("Left Line2L Mux", SND_SOC_NOPM, 0, 0, SND_SOC_DAPM_MUX("Left Line2L Mux", SND_SOC_NOPM, 0, 0, &aic3x_left_line2_mux_controls), &aic3x_left_line2_mux_controls), Loading @@ -548,9 +556,9 @@ static const struct snd_soc_dapm_widget aic3x_dapm_widgets[] = { &aic3x_right_pga_mixer_controls[0], &aic3x_right_pga_mixer_controls[0], ARRAY_SIZE(aic3x_right_pga_mixer_controls)), ARRAY_SIZE(aic3x_right_pga_mixer_controls)), SND_SOC_DAPM_MUX("Right Line1L Mux", SND_SOC_NOPM, 0, 0, SND_SOC_DAPM_MUX("Right Line1L Mux", SND_SOC_NOPM, 0, 0, &aic3x_right_line1_mux_controls), &aic3x_right_line1l_mux_controls), SND_SOC_DAPM_MUX("Right Line1R Mux", SND_SOC_NOPM, 0, 0, SND_SOC_DAPM_MUX("Right Line1R Mux", SND_SOC_NOPM, 0, 0, &aic3x_right_line1_mux_controls), &aic3x_right_line1r_mux_controls), SND_SOC_DAPM_MUX("Right Line2R Mux", SND_SOC_NOPM, 0, 0, SND_SOC_DAPM_MUX("Right Line2R Mux", SND_SOC_NOPM, 0, 0, &aic3x_right_line2_mux_controls), &aic3x_right_line2_mux_controls), Loading
sound/soc/codecs/twl6040.c +2 −2 Original line number Original line Diff line number Diff line Loading @@ -954,9 +954,9 @@ static DECLARE_TLV_DB_SCALE(mic_preamp_tlv, -600, 600, 0); /* /* * MICGAIN volume control: * MICGAIN volume control: * from -6 to 30 dB in 6 dB steps * from 6 to 30 dB in 6 dB steps */ */ static DECLARE_TLV_DB_SCALE(mic_amp_tlv, -600, 600, 0); static DECLARE_TLV_DB_SCALE(mic_amp_tlv, 600, 600, 0); /* /* * AFMGAIN volume control: * AFMGAIN volume control: Loading
sound/soc/omap/Kconfig +11 −0 Original line number Original line Diff line number Diff line Loading @@ -9,6 +9,9 @@ config SND_OMAP_SOC_MCBSP config SND_OMAP_SOC_MCPDM config SND_OMAP_SOC_MCPDM tristate tristate config SND_OMAP_SOC_HDMI tristate config SND_OMAP_SOC_N810 config SND_OMAP_SOC_N810 tristate "SoC Audio support for Nokia N810" tristate "SoC Audio support for Nokia N810" depends on SND_OMAP_SOC && MACH_NOKIA_N810 && I2C depends on SND_OMAP_SOC && MACH_NOKIA_N810 && I2C Loading Loading @@ -100,6 +103,14 @@ config SND_OMAP_SOC_SDP4430 Say Y if you want to add support for SoC audio on Texas Instruments Say Y if you want to add support for SoC audio on Texas Instruments SDP4430. SDP4430. config SND_OMAP_SOC_OMAP4_HDMI tristate "SoC Audio support for Texas Instruments OMAP4 HDMI" depends on SND_OMAP_SOC && OMAP4_DSS_HDMI && OMAP2_DSS && ARCH_OMAP4 select SND_OMAP_SOC_HDMI help Say Y if you want to add support for SoC HDMI audio on Texas Instruments OMAP4 chips config SND_OMAP_SOC_OMAP3_PANDORA config SND_OMAP_SOC_OMAP3_PANDORA tristate "SoC Audio support for OMAP3 Pandora" tristate "SoC Audio support for OMAP3 Pandora" depends on TWL4030_CORE && SND_OMAP_SOC && MACH_OMAP3_PANDORA depends on TWL4030_CORE && SND_OMAP_SOC && MACH_OMAP3_PANDORA Loading
sound/soc/omap/Makefile +4 −0 Original line number Original line Diff line number Diff line Loading @@ -2,10 +2,12 @@ snd-soc-omap-objs := omap-pcm.o snd-soc-omap-objs := omap-pcm.o snd-soc-omap-mcbsp-objs := omap-mcbsp.o snd-soc-omap-mcbsp-objs := omap-mcbsp.o snd-soc-omap-mcpdm-objs := omap-mcpdm.o mcpdm.o snd-soc-omap-mcpdm-objs := omap-mcpdm.o mcpdm.o snd-soc-omap-hdmi-objs := omap-hdmi.o obj-$(CONFIG_SND_OMAP_SOC) += snd-soc-omap.o obj-$(CONFIG_SND_OMAP_SOC) += snd-soc-omap.o obj-$(CONFIG_SND_OMAP_SOC_MCBSP) += snd-soc-omap-mcbsp.o obj-$(CONFIG_SND_OMAP_SOC_MCBSP) += snd-soc-omap-mcbsp.o obj-$(CONFIG_SND_OMAP_SOC_MCPDM) += snd-soc-omap-mcpdm.o obj-$(CONFIG_SND_OMAP_SOC_MCPDM) += snd-soc-omap-mcpdm.o obj-$(CONFIG_SND_OMAP_SOC_HDMI) += snd-soc-omap-hdmi.o # OMAP Machine Support # OMAP Machine Support snd-soc-n810-objs := n810.o snd-soc-n810-objs := n810.o Loading @@ -21,6 +23,7 @@ snd-soc-omap3pandora-objs := omap3pandora.o snd-soc-omap3beagle-objs := omap3beagle.o snd-soc-omap3beagle-objs := omap3beagle.o snd-soc-zoom2-objs := zoom2.o snd-soc-zoom2-objs := zoom2.o snd-soc-igep0020-objs := igep0020.o snd-soc-igep0020-objs := igep0020.o snd-soc-omap4-hdmi-objs := omap4-hdmi-card.o obj-$(CONFIG_SND_OMAP_SOC_N810) += snd-soc-n810.o obj-$(CONFIG_SND_OMAP_SOC_N810) += snd-soc-n810.o obj-$(CONFIG_SND_OMAP_SOC_RX51) += snd-soc-rx51.o obj-$(CONFIG_SND_OMAP_SOC_RX51) += snd-soc-rx51.o Loading @@ -36,3 +39,4 @@ obj-$(CONFIG_SND_OMAP_SOC_OMAP3_PANDORA) += snd-soc-omap3pandora.o obj-$(CONFIG_SND_OMAP_SOC_OMAP3_BEAGLE) += snd-soc-omap3beagle.o obj-$(CONFIG_SND_OMAP_SOC_OMAP3_BEAGLE) += snd-soc-omap3beagle.o obj-$(CONFIG_SND_OMAP_SOC_ZOOM2) += snd-soc-zoom2.o obj-$(CONFIG_SND_OMAP_SOC_ZOOM2) += snd-soc-zoom2.o obj-$(CONFIG_SND_OMAP_SOC_IGEP0020) += snd-soc-igep0020.o obj-$(CONFIG_SND_OMAP_SOC_IGEP0020) += snd-soc-igep0020.o obj-$(CONFIG_SND_OMAP_SOC_OMAP4_HDMI) += snd-soc-omap4-hdmi.o
sound/soc/omap/omap-hdmi.c 0 → 100644 +158 −0 Original line number Original line Diff line number Diff line /* * omap-hdmi.c * * OMAP ALSA SoC DAI driver for HDMI audio on OMAP4 processors. * Copyright (C) 2010-2011 Texas Instruments Incorporated - http://www.ti.com/ * Authors: Jorge Candelaria <jorge.candelaria@ti.com> * Ricardo Neri <ricardo.neri@ti.com> * * 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. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA * */ #include <linux/init.h> #include <linux/module.h> #include <linux/device.h> #include <sound/core.h> #include <sound/pcm.h> #include <sound/pcm_params.h> #include <sound/initval.h> #include <sound/soc.h> #include <plat/dma.h> #include "omap-pcm.h" #include "omap-hdmi.h" #define DRV_NAME "hdmi-audio-dai" static struct omap_pcm_dma_data omap_hdmi_dai_dma_params = { .name = "HDMI playback", .sync_mode = OMAP_DMA_SYNC_PACKET, }; static int omap_hdmi_dai_startup(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) { int err; /* * Make sure that the period bytes are multiple of the DMA packet size. * Largest packet size we use is 32 32-bit words = 128 bytes */ err = snd_pcm_hw_constraint_step(substream->runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES, 128); if (err < 0) return err; return 0; } static int omap_hdmi_dai_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) { int err = 0; switch (params_format(params)) { case SNDRV_PCM_FORMAT_S16_LE: omap_hdmi_dai_dma_params.packet_size = 16; break; case SNDRV_PCM_FORMAT_S24_LE: omap_hdmi_dai_dma_params.packet_size = 32; break; default: err = -EINVAL; } omap_hdmi_dai_dma_params.data_type = OMAP_DMA_DATA_TYPE_S32; snd_soc_dai_set_dma_data(dai, substream, &omap_hdmi_dai_dma_params); return err; } static struct snd_soc_dai_ops omap_hdmi_dai_ops = { .startup = omap_hdmi_dai_startup, .hw_params = omap_hdmi_dai_hw_params, }; static struct snd_soc_dai_driver omap_hdmi_dai = { .playback = { .channels_min = 2, .channels_max = 2, .rates = OMAP_HDMI_RATES, .formats = OMAP_HDMI_FORMATS, }, .ops = &omap_hdmi_dai_ops, }; static __devinit int omap_hdmi_probe(struct platform_device *pdev) { int ret; struct resource *hdmi_rsrc; hdmi_rsrc = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!hdmi_rsrc) { dev_err(&pdev->dev, "Cannot obtain IORESOURCE_MEM HDMI\n"); return -EINVAL; } omap_hdmi_dai_dma_params.port_addr = hdmi_rsrc->start + OMAP_HDMI_AUDIO_DMA_PORT; hdmi_rsrc = platform_get_resource(pdev, IORESOURCE_DMA, 0); if (!hdmi_rsrc) { dev_err(&pdev->dev, "Cannot obtain IORESOURCE_DMA HDMI\n"); return -EINVAL; } omap_hdmi_dai_dma_params.dma_req = hdmi_rsrc->start; ret = snd_soc_register_dai(&pdev->dev, &omap_hdmi_dai); return ret; } static int __devexit omap_hdmi_remove(struct platform_device *pdev) { snd_soc_unregister_dai(&pdev->dev); return 0; } static struct platform_driver hdmi_dai_driver = { .driver = { .name = DRV_NAME, .owner = THIS_MODULE, }, .probe = omap_hdmi_probe, .remove = __devexit_p(omap_hdmi_remove), }; static int __init hdmi_dai_init(void) { return platform_driver_register(&hdmi_dai_driver); } module_init(hdmi_dai_init); static void __exit hdmi_dai_exit(void) { platform_driver_unregister(&hdmi_dai_driver); } module_exit(hdmi_dai_exit); MODULE_AUTHOR("Jorge Candelaria <jorge.candelaria@ti.com>"); MODULE_AUTHOR("Ricardo Neri <ricardo.neri@ti.com>"); MODULE_DESCRIPTION("OMAP HDMI SoC Interface"); MODULE_LICENSE("GPL"); MODULE_ALIAS("platform:" DRV_NAME);