2bc030666f31a0b105bb977853b2012cc652b497
[oweals/openwrt.git] /
1 From ee513338448ddbb72ac8f76e7053865fe926a18c Mon Sep 17 00:00:00 2001
2 From: j-schambacher <joerg@i2audio.com>
3 Date: Mon, 27 Jan 2020 20:37:34 +0100
4 Subject: [PATCH] adds LED OFF feature to HiFiBerry DAC+ADC sound card
5
6 This adds a DT overlay parameter 'leds_off' which allows
7 to switch off the onboard activity LEDs at all times
8 which has been requested by some users.
9
10 Signed-off-by: Joerg Schambacher <joerg@i2audio.com>
11 ---
12  arch/arm/boot/dts/overlays/README                      |  2 ++
13  .../boot/dts/overlays/hifiberry-dacplusadc-overlay.dts |  1 +
14  sound/soc/bcm/hifiberry_dacplusadc.c                   | 10 +++++++++-
15  3 files changed, 12 insertions(+), 1 deletion(-)
16
17 --- a/arch/arm/boot/dts/overlays/README
18 +++ b/arch/arm/boot/dts/overlays/README
19 @@ -927,6 +927,8 @@ Params: 24db_digital_gain       Allow ga
20                                  that does not result in clipping/distortion!)
21          slave                   Force DAC+ Pro into slave mode, using Pi as
22                                  master for bit clock and frame clock.
23 +        leds_off                If set to 'true' the onboard indicator LEDs
24 +                                are switched off at all times.
25  
26  
27  Name:   hifiberry-dacplusadcpro
28 --- a/arch/arm/boot/dts/overlays/hifiberry-dacplusadc-overlay.dts
29 +++ b/arch/arm/boot/dts/overlays/hifiberry-dacplusadc-overlay.dts
30 @@ -67,5 +67,6 @@
31                 24db_digital_gain =
32                         <&hifiberry_dacplusadc>,"hifiberry,24db_digital_gain?";
33                 slave = <&hifiberry_dacplusadc>,"hifiberry-dacplusadc,slave?";
34 +               leds_off = <&hifiberry_dacplusadc>,"hifiberry-dacplusadc,leds_off?";
35         };
36  };
37 --- a/sound/soc/bcm/hifiberry_dacplusadc.c
38 +++ b/sound/soc/bcm/hifiberry_dacplusadc.c
39 @@ -54,6 +54,7 @@ struct pcm512x_priv {
40  static bool slave;
41  static bool snd_rpi_hifiberry_is_dacpro;
42  static bool digital_gain_0db_limit = true;
43 +static bool leds_off;
44  
45  static void snd_rpi_hifiberry_dacplusadc_select_clk(struct snd_soc_component *component,
46         int clk_id)
47 @@ -175,7 +176,10 @@ static int snd_rpi_hifiberry_dacplusadc_
48  
49         snd_soc_component_update_bits(component, PCM512x_GPIO_EN, 0x08, 0x08);
50         snd_soc_component_update_bits(component, PCM512x_GPIO_OUTPUT_4, 0x0f, 0x02);
51 -       snd_soc_component_update_bits(component, PCM512x_GPIO_CONTROL_1, 0x08, 0x08);
52 +       if (leds_off)
53 +               snd_soc_component_update_bits(component, PCM512x_GPIO_CONTROL_1, 0x08, 0x00);
54 +       else
55 +               snd_soc_component_update_bits(component, PCM512x_GPIO_CONTROL_1, 0x08, 0x08);
56  
57         if (digital_gain_0db_limit) {
58                 int ret;
59 @@ -256,6 +260,8 @@ static int snd_rpi_hifiberry_dacplusadc_
60         struct snd_soc_pcm_runtime *rtd = substream->private_data;
61         struct snd_soc_component *component = rtd->codec_dai->component;
62  
63 +       if (leds_off)
64 +               return 0;
65         snd_soc_component_update_bits(component, PCM512x_GPIO_CONTROL_1,
66                                          0x08, 0x08);
67         hifiberry_dacplusadc_LED_cnt++;
68 @@ -347,6 +353,8 @@ static int snd_rpi_hifiberry_dacplusadc_
69                 pdev->dev.of_node, "hifiberry,24db_digital_gain");
70         slave = of_property_read_bool(pdev->dev.of_node,
71                                         "hifiberry-dacplusadc,slave");
72 +       leds_off = of_property_read_bool(pdev->dev.of_node,
73 +                                       "hifiberry-dacplusadc,leds_off");
74  
75         ret = devm_snd_soc_register_card(&pdev->dev,
76                                                  &snd_rpi_hifiberry_dacplusadc);