Skip to content

Commit 590bbb6

Browse files
henrixRobertCNelson
authored andcommitted
Added support for CTAG face2|4 Audio Card
1 parent 8dafc68 commit 590bbb6

File tree

7 files changed

+528
-7
lines changed

7 files changed

+528
-7
lines changed
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
/*
2+
* Base device tree for BeagleBone Green with CTAG face2|4 Audio Card
3+
*
4+
* Author: Henrik Langer <henni19790@googlemail.com>
5+
* based on
6+
BeagleBone Black and BeagleBone Green device tree
7+
*
8+
* This program is free software; you can redistribute it and/or modify
9+
* it under the terms of the GNU General Public License version 2 as
10+
* published by the Free Software Foundation.
11+
*/
12+
/dts-v1/;
13+
14+
#include "am33xx.dtsi"
15+
#include "am335x-bone-common.dtsi"
16+
//#include "am33xx-overlay-edma-fix.dtsi" // leads to problems with SPI
17+
18+
/ {
19+
model = "TI AM335x BeagleBone Green AudioCard";
20+
compatible = "ti,am335x-bone-green", "ti,am335x-bone-black", "ti,am335x-bone", "ti,am33xx";
21+
22+
/*
23+
Optional SW SPI interface
24+
(see BB-CTAG-SW-8CH-00A0.dts for more details)
25+
*/
26+
spi_gpio: spi_gpio {
27+
compatible = "spi-gpio";
28+
#address-cells = <1>;
29+
#size-cells = <0>;
30+
31+
gpio-sck = <&gpio2 24 0>;
32+
gpio-mosi = <&gpio2 25 0>;
33+
gpio-miso = <&gpio2 23 0>;
34+
cs-gpios = <&gpio2 22 0 &gpio1 29 0>;
35+
num-chipselects = <2>;
36+
37+
status = "disabled";
38+
};
39+
};
40+
41+
&ldo3_reg {
42+
regulator-min-microvolt = <1800000>;
43+
regulator-max-microvolt = <1800000>;
44+
regulator-always-on;
45+
};
46+
47+
&mmc1 {
48+
vmmc-supply = <&vmmcsd_fixed>;
49+
};
50+
51+
&mmc2 {
52+
vmmc-supply = <&vmmcsd_fixed>;
53+
pinctrl-names = "default";
54+
pinctrl-0 = <&emmc_pins>;
55+
bus-width = <8>;
56+
status = "okay";
57+
};
58+
59+
&cpu0_opp_table {
60+
/*
61+
* All PG 2.0 silicon may not support 1GHz but some of the early
62+
* BeagleBone Blacks have PG 2.0 silicon which is guaranteed
63+
* to support 1GHz OPP so enable it for PG 2.0 on this board.
64+
*/
65+
oppnitro@1000000000 {
66+
opp-supported-hw = <0x06 0x0100>;
67+
};
68+
};
69+
70+
&am33xx_pinmux {
71+
mcasp0_pins: mcasp0_pins {
72+
pinctrl-single,pins = <
73+
0x1ac (PIN_INPUT_PULLDOWN | MUX_MODE0) /* mcasp0_ahclkx */
74+
0x19c (PIN_OUTPUT_PULLDOWN | MUX_MODE2) /* mcasp0_axr2 */
75+
0x194 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* mcasp0_fsx */
76+
0x190 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* mcasp0_aclkx */
77+
0x1a4 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* mcasp0_fsr */
78+
0x078 (PIN_INPUT_PULLDOWN | MUX_MODE6) /* mcasp0_aclkr */
79+
0x198 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* mcasp0_axr0 */
80+
0x06c (PIN_OUTPUT_PULLDOWN | MUX_MODE7) /* gpio1[27] (enable oscillator) */
81+
>;
82+
};
83+
84+
mcasp0_pins_sleep: mcasp0_pins_sleep {
85+
pinctrl-single,pins = <
86+
0x1ac (PIN_INPUT_PULLDOWN | MUX_MODE7) /* mcasp0_ahclkx */
87+
0x19c (PIN_INPUT_PULLDOWN | MUX_MODE7) /* mcasp0_axr2 */
88+
0x194 (PIN_INPUT_PULLDOWN | MUX_MODE7) /* mcasp0_fsx */
89+
0x190 (PIN_INPUT_PULLDOWN | MUX_MODE7) /* mcasp0_aclkx */
90+
0x1a4 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* mcasp0_fsr */
91+
0x078 (PIN_INPUT_PULLDOWN | MUX_MODE6) /* mcasp0_aclkr */
92+
0x198 (PIN_INPUT_PULLDOWN | MUX_MODE7) /* mcasp0_axr0 */
93+
0x06c (PIN_INPUT_PULLDOWN | MUX_MODE7) /* gpio1[27] */
94+
>;
95+
};
96+
};
97+
98+
&mcasp0 {
99+
pinctrl-names = "default", "sleep";
100+
pinctrl-0 = <&mcasp0_pins>;
101+
pinctrl-1 = <&mcasp0_pins_sleep>;
102+
status = "okay";
103+
op-mode = <0>; /* MCASP_IIS_MODE */
104+
tdm-slots = <2>;
105+
serial-dir = < /* 0: INACTIVE, 1: TX, 2: RX */
106+
2 0 1 0
107+
>;
108+
tx-num-evt = <1>;
109+
rx-num-evt = <1>;
110+
};
111+
112+
/ {
113+
clk_mcasp0_fixed: clk_mcasp0_fixed {
114+
#clock-cells = <0>;
115+
compatible = "fixed-clock";
116+
clock-frequency = <24576000>;
117+
};
118+
119+
clk_mcasp0: clk_mcasp0 {
120+
#clock-cells = <0>;
121+
compatible = "gpio-gate-clock";
122+
clocks = <&clk_mcasp0_fixed>;
123+
enable-gpios = <&gpio1 27 0>; /* BeagleBone Black Clk enable on GPIO1_27 */
124+
};
125+
};

sound/soc/codecs/Kconfig

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -234,12 +234,16 @@ config SND_SOC_AD193X
234234
tristate
235235

236236
config SND_SOC_AD193X_SPI
237-
tristate
237+
tristate "Analog Devices AD193x CODEC (SPI)"
238+
depends on SPI_MASTER
238239
select SND_SOC_AD193X
240+
select REGMAP_SPI
239241

240242
config SND_SOC_AD193X_I2C
241-
tristate
243+
tristate "Analog Devices AD193x CODEC (I2C)"
244+
depends on I2C
242245
select SND_SOC_AD193X
246+
select REGMAP_I2C
243247

244248
config SND_SOC_AD1980
245249
select REGMAP_AC97

sound/soc/codecs/ad193x.c

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
* Licensed under the GPL-2 or later.
77
*/
88

9+
#define DEBUG 1
10+
911
#include <linux/module.h>
1012
#include <linux/kernel.h>
1113
#include <linux/device.h>
@@ -274,7 +276,7 @@ static int ad193x_hw_params(struct snd_pcm_substream *substream,
274276
struct snd_pcm_hw_params *params,
275277
struct snd_soc_dai *dai)
276278
{
277-
int word_len = 0, master_rate = 0;
279+
int word_len = 0, master_rate = 0, sample_rate = 0, i, ret;
278280
struct snd_soc_codec *codec = dai->codec;
279281
struct ad193x_priv *ad193x = snd_soc_codec_get_drvdata(codec);
280282

@@ -292,6 +294,22 @@ static int ad193x_hw_params(struct snd_pcm_substream *substream,
292294
break;
293295
}
294296

297+
/* sample rate */
298+
switch(params_rate(params)){
299+
case 48000:
300+
sample_rate = 0;
301+
break;
302+
case 96000:
303+
sample_rate = 1;
304+
break;
305+
case 192000:
306+
sample_rate = 2;
307+
break;
308+
default:
309+
sample_rate = 0; //48 kHz
310+
break;
311+
}
312+
295313
switch (ad193x->sysclk) {
296314
case 12288000:
297315
master_rate = AD193X_PLL_INPUT_256;
@@ -307,6 +325,12 @@ static int ad193x_hw_params(struct snd_pcm_substream *substream,
307325
break;
308326
}
309327

328+
regmap_update_bits(ad193x->regmap, AD193X_DAC_CTRL0,
329+
0x06, sample_rate << 1);
330+
331+
regmap_update_bits(ad193x->regmap, AD193X_ADC_CTRL0,
332+
0xC0, sample_rate << 6);
333+
310334
regmap_update_bits(ad193x->regmap, AD193X_PLL_CLK_CTRL0,
311335
AD193X_PLL_INPUT_MASK, master_rate);
312336

@@ -318,6 +342,11 @@ static int ad193x_hw_params(struct snd_pcm_substream *substream,
318342
regmap_update_bits(ad193x->regmap, AD193X_ADC_CTRL1,
319343
AD193X_ADC_WORD_LEN_MASK, word_len);
320344

345+
for(i=0; i<=16; i++){
346+
regmap_read(ad193x->regmap , i, &ret) ;
347+
dev_dbg(codec->dev, "AD193X register %d:\t0x%x", i, ret);
348+
}
349+
321350
return 0;
322351
}
323352

@@ -372,11 +401,14 @@ static int ad193x_codec_probe(struct snd_soc_codec *codec)
372401
regmap_write(ad193x->regmap, AD193X_ADC_CTRL0, 0x3);
373402
/* sata delay=1, adc aux mode */
374403
regmap_write(ad193x->regmap, AD193X_ADC_CTRL1, 0x43);
404+
/* 256 bclks per frame */
405+
regmap_write(ad193x->regmap, AD193X_ADC_CTRL2, 0x20);
375406
}
376407

377-
/* pll input: mclki/xi */
378-
regmap_write(ad193x->regmap, AD193X_PLL_CLK_CTRL0, 0x99); /* mclk=24.576Mhz: 0x9D; mclk=12.288Mhz: 0x99 */
379-
regmap_write(ad193x->regmap, AD193X_PLL_CLK_CTRL1, 0x04);
408+
/* pll input: mclki/xi, xtal oscillator enabled */
409+
regmap_write(ad193x->regmap, AD193X_PLL_CLK_CTRL0, 0x80); /* mclk=24.576Mhz: 0x9D; mclk=12.288Mhz: 0x99 */
410+
/* adc / dac clock source: mclk */
411+
regmap_write(ad193x->regmap, AD193X_PLL_CLK_CTRL1, 0x00);
380412

381413
/* adc only */
382414
if (ad193x_has_adc(ad193x)) {

sound/soc/davinci/Kconfig

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,3 +100,9 @@ config SND_DA850_SOC_EVM
100100
Say Y if you want to add support for SoC audio on TI
101101
DA850/OMAP-L138 EVM
102102

103+
config SND_DAVINCI_SOC_CTAG_FACE_2_4
104+
tristate "SoC Audio Support for CTAG face-2-4 Audio Card (AD1938)"
105+
depends on SND_DAVINCI_SOC_MCASP
106+
select SND_SOC_AD193X_SPI
107+
help
108+
Say Y if you want to add support for CTAG face-2-4 Audio Card

sound/soc/davinci/Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@ snd-soc-edma-objs := edma-pcm.o
33
snd-soc-davinci-i2s-objs := davinci-i2s.o
44
snd-soc-davinci-mcasp-objs:= davinci-mcasp.o
55
snd-soc-davinci-vcif-objs:= davinci-vcif.o
6+
snd-soc-davinci-ctag-face-2-4-objs := davinci-ctag-face-2-4.o
67

78
obj-$(CONFIG_SND_EDMA_SOC) += snd-soc-edma.o
89
obj-$(CONFIG_SND_DAVINCI_SOC_I2S) += snd-soc-davinci-i2s.o
910
obj-$(CONFIG_SND_DAVINCI_SOC_MCASP) += snd-soc-davinci-mcasp.o
1011
obj-$(CONFIG_SND_DAVINCI_SOC_VCIF) += snd-soc-davinci-vcif.o
12+
obj-$(CONFIG_SND_DAVINCI_SOC_CTAG_FACE_2_4) += snd-soc-davinci-ctag-face-2-4.o
1113

1214
# Generic DAVINCI/AM33xx Machine Support
1315
snd-soc-evm-objs := davinci-evm.o

0 commit comments

Comments
 (0)