Skip to content

Commit

Permalink
Added support for BeagleBoard-X15
Browse files Browse the repository at this point in the history
  • Loading branch information
henrix committed Oct 3, 2016
1 parent bb1136e commit b9d7dd7
Show file tree
Hide file tree
Showing 4 changed files with 126 additions and 19 deletions.
1 change: 1 addition & 0 deletions arch/arm/boot/dts/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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 \
Expand Down
85 changes: 85 additions & 0 deletions arch/arm/boot/dts/am57xx-beagle-x15-ctag.dts
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
/*
* Device tree for BeagleBoard-X15 with CTAG face2|4 Audio Card
*
* Author: Henrik Langer <[email protected]>
*
* 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>;
};
7 changes: 6 additions & 1 deletion sound/soc/codecs/ad193x.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down Expand Up @@ -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;
}

Expand Down
52 changes: 34 additions & 18 deletions sound/soc/davinci/davinci-ctag-face-2-4.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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)
*/
}

/*
Expand All @@ -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,
};

Expand Down

0 comments on commit b9d7dd7

Please sign in to comment.