brcm2708: update linux 4.4 patches to latest version
[openwrt/openwrt.git] / target / linux / brcm2708 / patches-4.4 / 0368-Add-dt-param-to-force-HiFiBerry-DAC-Pro-into-slave-m.patch
1 From 23a2a66f68d9cef1664e904b741e074dab5b82d6 Mon Sep 17 00:00:00 2001
2 From: DigitalDreamtime <clive.messer@digitaldreamtime.co.uk>
3 Date: Sun, 29 May 2016 05:22:29 +0100
4 Subject: [PATCH] Add dt param to force HiFiBerry DAC+ Pro into slave mode
5
6 "dtoverlay=hifiberry-dacplus,slave"
7
8 Add 'slave' param to use HiFiBerry DAC+ Pro in slave mode,
9 with Pi as master for bit and frame clock.
10
11 Signed-off-by: DigitalDreamtime <clive.messer@digitaldreamtime.co.uk>
12 ---
13 arch/arm/boot/dts/overlays/README | 2 ++
14 arch/arm/boot/dts/overlays/hifiberry-dacplus-overlay.dts | 6 ++++--
15 sound/soc/bcm/hifiberry_dacplus.c | 10 ++++++++--
16 3 files changed, 14 insertions(+), 4 deletions(-)
17
18 --- a/arch/arm/boot/dts/overlays/README
19 +++ b/arch/arm/boot/dts/overlays/README
20 @@ -344,6 +344,8 @@ Params: 24db_digital_gain Allow ga
21 responsibility of the user to ensure that
22 the Digital volume control is set to a value
23 that does not result in clipping/distortion!)
24 + slave Force DAC+ Pro into slave mode, using Pi as
25 + master for bit clock and frame clock.
26
27
28 Name: hifiberry-digi
29 --- a/arch/arm/boot/dts/overlays/hifiberry-dacplus-overlay.dts
30 +++ b/arch/arm/boot/dts/overlays/hifiberry-dacplus-overlay.dts
31 @@ -41,7 +41,7 @@
32
33 fragment@3 {
34 target = <&sound>;
35 - frag3: __overlay__ {
36 + hifiberry_dacplus: __overlay__ {
37 compatible = "hifiberry,hifiberry-dacplus";
38 i2s-controller = <&i2s>;
39 status = "okay";
40 @@ -49,6 +49,8 @@
41 };
42
43 __overrides__ {
44 - 24db_digital_gain = <&frag3>,"hifiberry,24db_digital_gain?";
45 + 24db_digital_gain =
46 + <&hifiberry_dacplus>,"hifiberry,24db_digital_gain?";
47 + slave = <&hifiberry_dacplus>,"hifiberry-dacplus,slave?";
48 };
49 };
50 --- a/sound/soc/bcm/hifiberry_dacplus.c
51 +++ b/sound/soc/bcm/hifiberry_dacplus.c
52 @@ -47,6 +47,7 @@ struct pcm512x_priv {
53 /* Clock rate of CLK48EN attached to GPIO3 pin */
54 #define CLK_48EN_RATE 24576000UL
55
56 +static bool slave;
57 static bool snd_rpi_hifiberry_is_dacpro;
58 static bool digital_gain_0db_limit = true;
59
60 @@ -145,8 +146,11 @@ static int snd_rpi_hifiberry_dacplus_ini
61 struct snd_soc_codec *codec = rtd->codec;
62 struct pcm512x_priv *priv;
63
64 - snd_rpi_hifiberry_is_dacpro
65 - = snd_rpi_hifiberry_dacplus_is_pro_card(codec);
66 + if (slave)
67 + snd_rpi_hifiberry_is_dacpro = false;
68 + else
69 + snd_rpi_hifiberry_is_dacpro =
70 + snd_rpi_hifiberry_dacplus_is_pro_card(codec);
71
72 if (snd_rpi_hifiberry_is_dacpro) {
73 struct snd_soc_dai_link *dai = rtd->dai_link;
74 @@ -314,6 +318,8 @@ static int snd_rpi_hifiberry_dacplus_pro
75
76 digital_gain_0db_limit = !of_property_read_bool(
77 pdev->dev.of_node, "hifiberry,24db_digital_gain");
78 + slave = of_property_read_bool(pdev->dev.of_node,
79 + "hifiberry-dacplus,slave");
80 }
81
82 ret = snd_soc_register_card(&snd_rpi_hifiberry_dacplus);