Skip to content

Commit b9d7dd7

Browse files
committed
Added support for BeagleBoard-X15
1 parent bb1136e commit b9d7dd7

File tree

4 files changed

+126
-19
lines changed

4 files changed

+126
-19
lines changed

arch/arm/boot/dts/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -473,6 +473,7 @@ dtb-$(CONFIG_SOC_DRA7XX) += \
473473
dra72-evm-lcd-lg.dtb \
474474
dra72-evm-lcd-osd.dtb \
475475
am57xx-beagle-x15.dtb \
476+
am57xx-beagle-x15-ctag.dtb \
476477
am57xx-beagle-x15-es2plus.dtb \
477478
dra72-evm.dtb \
478479
am57xx-evm.dtb \
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
/*
2+
* Device tree for BeagleBoard-X15 with CTAG face2|4 Audio Card
3+
*
4+
* Author: Henrik Langer <[email protected]>
5+
*
6+
* This program is free software; you can redistribute it and/or modify
7+
* it under the terms of the GNU General Public License version 2 as
8+
* published by the Free Software Foundation.
9+
*/
10+
11+
#include "am57xx-beagle-x15.dts"
12+
13+
/ {
14+
sound2: sound@2 {
15+
compatible = "ctag,face-2-4";
16+
model = "CTAG face-2-4 8CH";
17+
audio-codec = <&ad193x>;
18+
mcasp-controller = <&mcasp2>;
19+
audiocard-tdm-slots = <8>;
20+
codec-clock-rate = <24576000>;
21+
bb-device = <1>; //0 = BBB/BBG, 1 = BB-X15
22+
cpu-clock-rate = <22579200>;
23+
audio-routing =
24+
"Line Out", "DAC1OUT",
25+
"Line Out", "DAC2OUT",
26+
"Line Out", "DAC3OUT",
27+
"Line Out", "DAC4OUT",
28+
"ADC1IN", "Line In",
29+
"ADC2IN", "Line In";
30+
};
31+
};
32+
33+
&dra7_pmx_core {
34+
mcasp2_pins_default: mcasp2_pins_default {
35+
pinctrl-single,pins = <
36+
0x2F8 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* mcasp2_fsx | P17.52 */
37+
0x2F4 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* mcasp2_aclkx | P17.21 */
38+
0x300 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* mcasp2_fsr | P17.57 */
39+
0x2FC (PIN_INPUT_PULLDOWN | MUX_MODE0) /* mcasp2_aclkr | P17.44 */
40+
0x30C (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* mcasp2_axr2 | P17.18 */
41+
0x304 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* mcasp2_axr0 | P17.54 */
42+
>;
43+
};
44+
45+
mcspi3_pins_default: mcspi3_pins_default {
46+
pinctrl-single,pins = <
47+
0x2E0 (PIN_OUTPUT_PULLUP | MUX_MODE3) /* spi3_cs0 | P16.3 */
48+
0x2D4 (PIN_INPUT_PULLUP | MUX_MODE3) /* spi3_sclk | P16.34 */
49+
0x2DC (PIN_INPUT_PULLUP | MUX_MODE3) /* spi3_d0 | P16.33 */
50+
0x2D8 (PIN_OUTPUT_PULLDOWN | MUX_MODE3) /* spi3_d1 | P16.4 */
51+
>;
52+
};
53+
};
54+
55+
&mcspi3 {
56+
pinctrl-names = "default";
57+
pinctrl-0 = <&mcspi3_pins_default>;
58+
status = "okay";
59+
60+
ad193x: ad193x@0{
61+
compatible = "analog,ad1938";
62+
reg = <0>;
63+
status = "okay";
64+
spi-max-frequency = <100000>;
65+
};
66+
};
67+
68+
&mcasp2 {
69+
#sound-dai-cells = <0>;
70+
//assigned-clocks = <&mcasp2_ahclkx_mux>, <&mcasp2_ahclkr_mux>;
71+
assigned-clocks = <&mcasp2_ahclkx_mux>;
72+
assigned-clock-parents = <&sys_clkin2>; /* 22579200 Hz (see dra7xx-clocks.dtsi) */
73+
pinctrl-names = "default";
74+
pinctrl-0 = <&mcasp2_pins_default>;
75+
status = "okay";
76+
77+
op-mode = <0>; /* MCASP_IIS_MODE */
78+
tdm-slots = <8>;
79+
/* 4 serializers */
80+
serial-dir = < /* 0: INACTIVE, 1: TX, 2: RX */
81+
2 0 1 0
82+
>;
83+
tx-num-evt = <8>;
84+
rx-num-evt = <8>;
85+
};

sound/soc/codecs/ad193x.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ static int ad193x_hw_params(struct snd_pcm_substream *substream,
247247
struct snd_pcm_hw_params *params,
248248
struct snd_soc_dai *dai)
249249
{
250-
int word_len = 0, master_rate = 0, sample_rate = 0;
250+
int word_len = 0, master_rate = 0, sample_rate = 0, i, ret;
251251
struct snd_soc_codec *codec = dai->codec;
252252
struct ad193x_priv *ad193x = snd_soc_codec_get_drvdata(codec);
253253

@@ -312,6 +312,11 @@ static int ad193x_hw_params(struct snd_pcm_substream *substream,
312312
regmap_update_bits(ad193x->regmap, AD193X_ADC_CTRL1,
313313
AD193X_ADC_WORD_LEN_MASK, word_len);
314314

315+
for(i=0; i<=16; i++){
316+
regmap_read(ad193x->regmap , i, &ret) ;
317+
dev_dbg(codec->dev, "AD193X register %d:\t0x%x", i, ret);
318+
}
319+
315320
return 0;
316321
}
317322

sound/soc/davinci/davinci-ctag-face-2-4.c

Lines changed: 34 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,8 @@ static int snd_davinci_audiocard_probe(struct platform_device *pdev)
237237
struct snd_soc_dai_link *dai = (struct snd_soc_dai_link *) match->data;
238238
struct snd_soc_card_drvdata_davinci *drvdata = NULL;
239239
struct clk *mclk;
240-
int ret = 0;
240+
int ret = 0, bb_device = 0;
241+
241242

242243
snd_davinci_audiocard.dai_link = dai;
243244

@@ -279,25 +280,40 @@ static int snd_davinci_audiocard_probe(struct platform_device *pdev)
279280
return -EINVAL;
280281
}
281282

283+
ret = of_property_read_u32(np, "bb-device", &bb_device);
284+
if (ret < 0){
285+
dev_warn(&pdev->dev, "No BeagleBoard device specified (0=BBB/BBG, 1=BB-X15).\n\
286+
Using BeagleBone Black/Green as default device.\n");
287+
bb_device = 0;
288+
}
289+
282290
/*
283-
Configure internal 24,576 MHz oscillator as master clock for McASP
291+
Configure CPU DAI clock of specific BeagleBoard SBC
284292
*/
285-
ret = of_property_read_u32(np, "cpu-clock-rate", &drvdata->sysclk);
286-
if (ret < 0) {
287-
if (!drvdata->mclk) {
288-
dev_err(&pdev->dev,
289-
"No clock or clock rate defined.\n");
290-
return -EINVAL;
293+
if (bb_device == 0){ //BeagleBone Black/Green
294+
/*
295+
Configure internal 24,576 MHz oscillator as master clock for McASP
296+
*/
297+
ret = of_property_read_u32(np, "cpu-clock-rate", &drvdata->sysclk);
298+
if (ret < 0) {
299+
if (!drvdata->mclk) {
300+
dev_err(&pdev->dev, "No clock or clock rate defined.\n");
301+
return -EINVAL;
302+
}
303+
drvdata->sysclk = clk_get_rate(drvdata->mclk);
304+
} else if (drvdata->mclk) {
305+
unsigned int requestd_rate = drvdata->sysclk;
306+
clk_set_rate(drvdata->mclk, drvdata->sysclk);
307+
drvdata->sysclk = clk_get_rate(drvdata->mclk);
308+
if (drvdata->sysclk != requestd_rate)
309+
dev_warn(&pdev->dev, "Could not get requested rate %u using %u.\n",
310+
requestd_rate, drvdata->sysclk);
291311
}
292-
drvdata->sysclk = clk_get_rate(drvdata->mclk);
293-
} else if (drvdata->mclk) {
294-
unsigned int requestd_rate = drvdata->sysclk;
295-
clk_set_rate(drvdata->mclk, drvdata->sysclk);
296-
drvdata->sysclk = clk_get_rate(drvdata->mclk);
297-
if (drvdata->sysclk != requestd_rate)
298-
dev_warn(&pdev->dev,
299-
"Could not get requested rate %u using %u.\n",
300-
requestd_rate, drvdata->sysclk);
312+
}
313+
else if (bb_device == 1){ //BeagleBoard-X15
314+
/*
315+
Nothing to do (CPU DAI clock is configured in dra7.dtsi)
316+
*/
301317
}
302318

303319
/*
@@ -319,12 +335,12 @@ static int snd_davinci_audiocard_remove(struct platform_device *pdev)
319335

320336
/* Sound card platform driver */
321337
static struct platform_driver snd_davinci_audiocard_driver = {
322-
.probe = snd_davinci_audiocard_probe,
323338
.driver = {
324339
.name = "snd_ctag_face_2_4",
325340
.pm = &snd_soc_pm_ops,
326341
.of_match_table = of_match_ptr(snd_davinci_audiocard_dt_ids),
327342
},
343+
.probe = snd_davinci_audiocard_probe,
328344
.remove = snd_davinci_audiocard_remove,
329345
};
330346

0 commit comments

Comments
 (0)