diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile index 62bc040416fe4..82e250957881b 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile @@ -473,6 +473,7 @@ dtb-$(CONFIG_SOC_DRA7XX) += \ dra72-evm-lcd-lg.dtb \ dra72-evm-lcd-osd.dtb \ am57xx-beagle-x15.dtb \ + am57xx-beagle-x15-ctag.dtb \ am57xx-beagle-x15-es2plus.dtb \ dra72-evm.dtb \ am57xx-evm.dtb \ diff --git a/arch/arm/boot/dts/am57xx-beagle-x15-ctag.dts b/arch/arm/boot/dts/am57xx-beagle-x15-ctag.dts new file mode 100644 index 0000000000000..b2b4bf4f72517 --- /dev/null +++ b/arch/arm/boot/dts/am57xx-beagle-x15-ctag.dts @@ -0,0 +1,85 @@ +/* + * Device tree for BeagleBoard-X15 with CTAG face2|4 Audio Card + * + * Author: Henrik Langer + * + * 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. + */ + +#include "am57xx-beagle-x15.dts" + +/ { + sound2: sound@2 { + compatible = "ctag,face-2-4"; + model = "CTAG face-2-4 8CH"; + audio-codec = <&ad193x>; + mcasp-controller = <&mcasp2>; + audiocard-tdm-slots = <8>; + codec-clock-rate = <24576000>; + bb-device = <1>; //0 = BBB/BBG, 1 = BB-X15 + cpu-clock-rate = <22579200>; + audio-routing = + "Line Out", "DAC1OUT", + "Line Out", "DAC2OUT", + "Line Out", "DAC3OUT", + "Line Out", "DAC4OUT", + "ADC1IN", "Line In", + "ADC2IN", "Line In"; + }; +}; + +&dra7_pmx_core { + mcasp2_pins_default: mcasp2_pins_default { + pinctrl-single,pins = < + 0x2F8 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* mcasp2_fsx | P17.52 */ + 0x2F4 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* mcasp2_aclkx | P17.21 */ + 0x300 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* mcasp2_fsr | P17.57 */ + 0x2FC (PIN_INPUT_PULLDOWN | MUX_MODE0) /* mcasp2_aclkr | P17.44 */ + 0x30C (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* mcasp2_axr2 | P17.18 */ + 0x304 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* mcasp2_axr0 | P17.54 */ + >; + }; + + mcspi3_pins_default: mcspi3_pins_default { + pinctrl-single,pins = < + 0x2E0 (PIN_OUTPUT_PULLUP | MUX_MODE3) /* spi3_cs0 | P16.3 */ + 0x2D4 (PIN_INPUT_PULLUP | MUX_MODE3) /* spi3_sclk | P16.34 */ + 0x2DC (PIN_INPUT_PULLUP | MUX_MODE3) /* spi3_d0 | P16.33 */ + 0x2D8 (PIN_OUTPUT_PULLDOWN | MUX_MODE3) /* spi3_d1 | P16.4 */ + >; + }; +}; + +&mcspi3 { + pinctrl-names = "default"; + pinctrl-0 = <&mcspi3_pins_default>; + status = "okay"; + + ad193x: ad193x@0{ + compatible = "analog,ad1938"; + reg = <0>; + status = "okay"; + spi-max-frequency = <100000>; + }; +}; + +&mcasp2 { + #sound-dai-cells = <0>; + //assigned-clocks = <&mcasp2_ahclkx_mux>, <&mcasp2_ahclkr_mux>; + assigned-clocks = <&mcasp2_ahclkx_mux>; + assigned-clock-parents = <&sys_clkin2>; /* 22579200 Hz (see dra7xx-clocks.dtsi) */ + pinctrl-names = "default"; + pinctrl-0 = <&mcasp2_pins_default>; + status = "okay"; + + op-mode = <0>; /* MCASP_IIS_MODE */ + tdm-slots = <8>; + /* 4 serializers */ + serial-dir = < /* 0: INACTIVE, 1: TX, 2: RX */ + 2 0 1 0 + >; + tx-num-evt = <8>; + rx-num-evt = <8>; +}; diff --git a/sound/soc/codecs/ad193x.c b/sound/soc/codecs/ad193x.c index 7fbadc42697ef..71fab688967d3 100644 --- a/sound/soc/codecs/ad193x.c +++ b/sound/soc/codecs/ad193x.c @@ -247,7 +247,7 @@ static int ad193x_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) { - int word_len = 0, master_rate = 0, sample_rate = 0; + int word_len = 0, master_rate = 0, sample_rate = 0, i, ret; struct snd_soc_codec *codec = dai->codec; struct ad193x_priv *ad193x = snd_soc_codec_get_drvdata(codec); @@ -312,6 +312,11 @@ static int ad193x_hw_params(struct snd_pcm_substream *substream, regmap_update_bits(ad193x->regmap, AD193X_ADC_CTRL1, AD193X_ADC_WORD_LEN_MASK, word_len); + for(i=0; i<=16; i++){ + regmap_read(ad193x->regmap , i, &ret) ; + dev_dbg(codec->dev, "AD193X register %d:\t0x%x", i, ret); + } + return 0; } diff --git a/sound/soc/davinci/davinci-ctag-face-2-4.c b/sound/soc/davinci/davinci-ctag-face-2-4.c index b55977c47d9c6..091afb3372e20 100644 --- a/sound/soc/davinci/davinci-ctag-face-2-4.c +++ b/sound/soc/davinci/davinci-ctag-face-2-4.c @@ -237,7 +237,8 @@ static int snd_davinci_audiocard_probe(struct platform_device *pdev) struct snd_soc_dai_link *dai = (struct snd_soc_dai_link *) match->data; struct snd_soc_card_drvdata_davinci *drvdata = NULL; struct clk *mclk; - int ret = 0; + int ret = 0, bb_device = 0; + snd_davinci_audiocard.dai_link = dai; @@ -279,25 +280,40 @@ static int snd_davinci_audiocard_probe(struct platform_device *pdev) return -EINVAL; } + ret = of_property_read_u32(np, "bb-device", &bb_device); + if (ret < 0){ + dev_warn(&pdev->dev, "No BeagleBoard device specified (0=BBB/BBG, 1=BB-X15).\n\ + Using BeagleBone Black/Green as default device.\n"); + bb_device = 0; + } + /* - Configure internal 24,576 MHz oscillator as master clock for McASP + Configure CPU DAI clock of specific BeagleBoard SBC */ - ret = of_property_read_u32(np, "cpu-clock-rate", &drvdata->sysclk); - if (ret < 0) { - if (!drvdata->mclk) { - dev_err(&pdev->dev, - "No clock or clock rate defined.\n"); - return -EINVAL; + if (bb_device == 0){ //BeagleBone Black/Green + /* + Configure internal 24,576 MHz oscillator as master clock for McASP + */ + ret = of_property_read_u32(np, "cpu-clock-rate", &drvdata->sysclk); + if (ret < 0) { + if (!drvdata->mclk) { + dev_err(&pdev->dev, "No clock or clock rate defined.\n"); + return -EINVAL; + } + drvdata->sysclk = clk_get_rate(drvdata->mclk); + } else if (drvdata->mclk) { + unsigned int requestd_rate = drvdata->sysclk; + clk_set_rate(drvdata->mclk, drvdata->sysclk); + drvdata->sysclk = clk_get_rate(drvdata->mclk); + if (drvdata->sysclk != requestd_rate) + dev_warn(&pdev->dev, "Could not get requested rate %u using %u.\n", + requestd_rate, drvdata->sysclk); } - drvdata->sysclk = clk_get_rate(drvdata->mclk); - } else if (drvdata->mclk) { - unsigned int requestd_rate = drvdata->sysclk; - clk_set_rate(drvdata->mclk, drvdata->sysclk); - drvdata->sysclk = clk_get_rate(drvdata->mclk); - if (drvdata->sysclk != requestd_rate) - dev_warn(&pdev->dev, - "Could not get requested rate %u using %u.\n", - requestd_rate, drvdata->sysclk); + } + else if (bb_device == 1){ //BeagleBoard-X15 + /* + Nothing to do (CPU DAI clock is configured in dra7.dtsi) + */ } /* @@ -319,12 +335,12 @@ static int snd_davinci_audiocard_remove(struct platform_device *pdev) /* Sound card platform driver */ static struct platform_driver snd_davinci_audiocard_driver = { - .probe = snd_davinci_audiocard_probe, .driver = { .name = "snd_ctag_face_2_4", .pm = &snd_soc_pm_ops, .of_match_table = of_match_ptr(snd_davinci_audiocard_dt_ids), }, + .probe = snd_davinci_audiocard_probe, .remove = snd_davinci_audiocard_remove, };