diff options
author | Álvaro Fernández Rojas <noltari@gmail.com> | 2016-12-02 11:50:26 +0100 |
---|---|---|
committer | Álvaro Fernández Rojas <noltari@gmail.com> | 2016-12-04 12:32:04 +0100 |
commit | 011f2c26f1b62e309f2eac6a3101bfe0a3c76c7e (patch) | |
tree | be53d4f11f7625508ee3aea9889e854ab5b5f263 /target/linux/brcm2708/patches-4.4/0431-Added-HiFiBerry-Digi-Pro-driver.patch | |
parent | 4257f6548b9480cdb436115b63d5c134c5e91303 (diff) | |
download | upstream-011f2c26f1b62e309f2eac6a3101bfe0a3c76c7e.tar.gz upstream-011f2c26f1b62e309f2eac6a3101bfe0a3c76c7e.tar.bz2 upstream-011f2c26f1b62e309f2eac6a3101bfe0a3c76c7e.zip |
brcm2708: update linux 4.4 patches to latest version
As usual these patches were extracted and rebased from the raspberry pi repo:
https://github.com/raspberrypi/linux/tree/rpi-4.4.y
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
Diffstat (limited to 'target/linux/brcm2708/patches-4.4/0431-Added-HiFiBerry-Digi-Pro-driver.patch')
-rw-r--r-- | target/linux/brcm2708/patches-4.4/0431-Added-HiFiBerry-Digi-Pro-driver.patch | 187 |
1 files changed, 0 insertions, 187 deletions
diff --git a/target/linux/brcm2708/patches-4.4/0431-Added-HiFiBerry-Digi-Pro-driver.patch b/target/linux/brcm2708/patches-4.4/0431-Added-HiFiBerry-Digi-Pro-driver.patch deleted file mode 100644 index c718209422..0000000000 --- a/target/linux/brcm2708/patches-4.4/0431-Added-HiFiBerry-Digi-Pro-driver.patch +++ /dev/null @@ -1,187 +0,0 @@ -From e528c5d3f8cffca37abf9c69f7178f0221974225 Mon Sep 17 00:00:00 2001 -From: "Daniel Matuschek (HiFiBerry)" <daniel@hifiberry.com> -Date: Tue, 26 Jul 2016 19:16:25 +0200 -Subject: [PATCH] Added HiFiBerry Digi+ Pro driver - -Signed-off-by: Daniel Matuschek <daniel@hifiberry.com> ---- - arch/arm/boot/dts/overlays/Makefile | 1 + - arch/arm/boot/dts/overlays/README | 8 +++- - .../dts/overlays/hifiberry-digi-pro-overlay.dts | 41 +++++++++++++++++ - sound/soc/bcm/hifiberry_digi.c | 51 ++++++++++++++++++++++ - 4 files changed, 100 insertions(+), 1 deletion(-) - create mode 100644 arch/arm/boot/dts/overlays/hifiberry-digi-pro-overlay.dts - ---- a/arch/arm/boot/dts/overlays/Makefile -+++ b/arch/arm/boot/dts/overlays/Makefile -@@ -31,6 +31,7 @@ dtbo-$(RPI_DT_OVERLAYS) += hifiberry-amp - dtbo-$(RPI_DT_OVERLAYS) += hifiberry-dac.dtbo - dtbo-$(RPI_DT_OVERLAYS) += hifiberry-dacplus.dtbo - dtbo-$(RPI_DT_OVERLAYS) += hifiberry-digi.dtbo -+dtbo-$(RPI_DT_OVERLAYS) += hifiberry-digi-pro.dtbo - dtbo-$(RPI_DT_OVERLAYS) += hy28a.dtbo - dtbo-$(RPI_DT_OVERLAYS) += hy28b.dtbo - dtbo-$(RPI_DT_OVERLAYS) += i2c-gpio.dtbo ---- a/arch/arm/boot/dts/overlays/README -+++ b/arch/arm/boot/dts/overlays/README -@@ -377,11 +377,17 @@ Params: 24db_digital_gain Allow ga - - - Name: hifiberry-digi --Info: Configures the HifiBerry Digi audio card -+Info: Configures the HifiBerry Digi and Digi+ audio card - Load: dtoverlay=hifiberry-digi - Params: <None> - - -+Name: hifiberry-digi-pro -+Info: Configures the HifiBerry Digi+ Pro audio card -+Load: dtoverlay=hifiberry-digi-pro -+Params: <None> -+ -+ - Name: hy28a - Info: HY28A - 2.8" TFT LCD Display Module by HAOYU Electronics - Default values match Texy's display shield ---- /dev/null -+++ b/arch/arm/boot/dts/overlays/hifiberry-digi-pro-overlay.dts -@@ -0,0 +1,41 @@ -+// Definitions for HiFiBerry Digi Pro -+/dts-v1/; -+/plugin/; -+ -+/ { -+ compatible = "brcm,bcm2708"; -+ -+ fragment@0 { -+ target = <&i2s>; -+ __overlay__ { -+ status = "okay"; -+ }; -+ }; -+ -+ fragment@1 { -+ target = <&i2c1>; -+ __overlay__ { -+ #address-cells = <1>; -+ #size-cells = <0>; -+ status = "okay"; -+ -+ wm8804@3b { -+ #sound-dai-cells = <0>; -+ compatible = "wlf,wm8804"; -+ reg = <0x3b>; -+ status = "okay"; -+ }; -+ }; -+ }; -+ -+ fragment@2 { -+ target = <&sound>; -+ __overlay__ { -+ compatible = "hifiberry,hifiberry-digi"; -+ i2s-controller = <&i2s>; -+ status = "okay"; -+ clock44-gpio = <&gpio 5 0>; -+ clock48-gpio = <&gpio 6 0>; -+ }; -+ }; -+}; ---- a/sound/soc/bcm/hifiberry_digi.c -+++ b/sound/soc/bcm/hifiberry_digi.c -@@ -23,6 +23,7 @@ - #include <sound/pcm_params.h> - #include <sound/soc.h> - #include <sound/jack.h> -+#include <linux/gpio/consumer.h> - - #include "../codecs/wm8804.h" - -@@ -30,9 +31,34 @@ static short int auto_shutdown_output = - module_param(auto_shutdown_output, short, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); - MODULE_PARM_DESC(auto_shutdown_output, "Shutdown SP/DIF output if playback is stopped"); - -+#define CLK_44EN_RATE 22579200UL -+#define CLK_48EN_RATE 24576000UL -+ -+static bool snd_rpi_hifiberry_is_digipro; -+static struct gpio_desc *snd_rpi_hifiberry_clk44gpio; -+static struct gpio_desc *snd_rpi_hifiberry_clk48gpio; - - static int samplerate=44100; - -+static uint32_t snd_rpi_hifiberry_digi_enable_clock(int sample_rate) -+{ -+ switch (sample_rate) { -+ case 11025: -+ case 22050: -+ case 44100: -+ case 88200: -+ case 176400: -+ gpiod_set_value_cansleep(snd_rpi_hifiberry_clk44gpio, 1); -+ gpiod_set_value_cansleep(snd_rpi_hifiberry_clk48gpio, 0); -+ return CLK_44EN_RATE; -+ default: -+ gpiod_set_value_cansleep(snd_rpi_hifiberry_clk48gpio, 1); -+ gpiod_set_value_cansleep(snd_rpi_hifiberry_clk44gpio, 0); -+ return CLK_48EN_RATE; -+ } -+} -+ -+ - static int snd_rpi_hifiberry_digi_init(struct snd_soc_pcm_runtime *rtd) - { - struct snd_soc_codec *codec = rtd->codec; -@@ -40,6 +66,14 @@ static int snd_rpi_hifiberry_digi_init(s - /* enable TX output */ - snd_soc_update_bits(codec, WM8804_PWRDN, 0x4, 0x0); - -+ /* Initialize Digi+ Pro hardware */ -+ if (snd_rpi_hifiberry_is_digipro) { -+ struct snd_soc_dai_link *dai = rtd->dai_link; -+ -+ dai->name = "HiFiBerry Digi+ Pro"; -+ dai->stream_name = "HiFiBerry Digi+ Pro HiFi"; -+ } -+ - return 0; - } - -@@ -87,6 +121,9 @@ static int snd_rpi_hifiberry_digi_hw_par - mclk_freq=samplerate*128; - mclk_div=WM8804_MCLKDIV_128FS; - } -+ -+ if (snd_rpi_hifiberry_is_digipro) -+ sysclk = snd_rpi_hifiberry_digi_enable_clock(samplerate); - - switch (samplerate) { - case 32000: -@@ -121,6 +158,7 @@ static int snd_rpi_hifiberry_digi_hw_par - - ret = snd_soc_dai_set_sysclk(codec_dai, WM8804_TX_CLKSRC_PLL, - sysclk, SND_SOC_CLOCK_OUT); -+ - if (ret < 0) { - dev_err(codec->dev, - "Failed to set WM8804 SYSCLK: %d\n", ret); -@@ -187,6 +225,19 @@ static int snd_rpi_hifiberry_digi_probe( - dai->platform_name = NULL; - dai->platform_of_node = i2s_node; - } -+ -+ snd_rpi_hifiberry_is_digipro = 1; -+ -+ snd_rpi_hifiberry_clk44gpio = -+ devm_gpiod_get(&pdev->dev, "clock44", GPIOD_OUT_LOW); -+ if (IS_ERR(snd_rpi_hifiberry_clk44gpio)) -+ snd_rpi_hifiberry_is_digipro = 0; -+ -+ snd_rpi_hifiberry_clk48gpio = -+ devm_gpiod_get(&pdev->dev, "clock48", GPIOD_OUT_LOW); -+ if (IS_ERR(snd_rpi_hifiberry_clk48gpio)) -+ snd_rpi_hifiberry_is_digipro = 0; -+ - } - - ret = snd_soc_register_card(&snd_rpi_hifiberry_digi); |