mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00

By default the SGTL5000 derives bit and frame clock from MCLK, which does not produce particularly accurate results. The SGTL5000 PLL does improve the accuracy, but also increases power consumption. Using the SoC SAI interface as bit and frame clock source results in the best accuracy without the power consumption increase downside. Switch the bit and frame clock direction from SAI to SGTL5000, reduce mclk-fs to match. Signed-off-by: Marek Vasut <marex@denx.de> Signed-off-by: Alexandre Torgue <alexandre.torgue@foss.st.com>
331 lines
6.5 KiB
Text
331 lines
6.5 KiB
Text
// SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
|
|
/*
|
|
* Copyright (C) 2019-2020 Marek Vasut <marex@denx.de>
|
|
*/
|
|
|
|
#include <dt-bindings/input/input.h>
|
|
#include <dt-bindings/pwm/pwm.h>
|
|
|
|
/ {
|
|
aliases {
|
|
serial0 = &uart4;
|
|
serial1 = &usart3;
|
|
serial2 = &uart8;
|
|
};
|
|
|
|
chosen {
|
|
stdout-path = "serial0:115200n8";
|
|
};
|
|
|
|
clk_ext_audio_codec: clock-codec {
|
|
compatible = "fixed-clock";
|
|
#clock-cells = <0>;
|
|
clock-frequency = <24000000>;
|
|
};
|
|
|
|
display_bl: display-bl {
|
|
compatible = "pwm-backlight";
|
|
pwms = <&pwm2 3 500000 PWM_POLARITY_INVERTED>;
|
|
brightness-levels = <0 16 22 30 40 55 75 102 138 188 255>;
|
|
default-brightness-level = <8>;
|
|
enable-gpios = <&gpioi 0 GPIO_ACTIVE_HIGH>;
|
|
power-supply = <®_panel_bl>;
|
|
status = "okay";
|
|
};
|
|
|
|
gpio-keys-polled {
|
|
compatible = "gpio-keys-polled";
|
|
poll-interval = <20>;
|
|
|
|
/*
|
|
* The EXTi IRQ line 3 is shared with ethernet,
|
|
* so mark this as polled GPIO key.
|
|
*/
|
|
button-0 {
|
|
label = "TA1-GPIO-A";
|
|
linux,code = <KEY_A>;
|
|
gpios = <&gpiof 3 GPIO_ACTIVE_LOW>;
|
|
};
|
|
|
|
/*
|
|
* The EXTi IRQ line 6 is shared with touchscreen,
|
|
* so mark this as polled GPIO key.
|
|
*/
|
|
button-1 {
|
|
label = "TA2-GPIO-B";
|
|
linux,code = <KEY_B>;
|
|
gpios = <&gpiod 6 GPIO_ACTIVE_LOW>;
|
|
};
|
|
|
|
/*
|
|
* The EXTi IRQ line 0 is shared with PMIC,
|
|
* so mark this as polled GPIO key.
|
|
*/
|
|
button-2 {
|
|
label = "TA3-GPIO-C";
|
|
linux,code = <KEY_C>;
|
|
gpios = <&gpiog 0 GPIO_ACTIVE_LOW>;
|
|
};
|
|
};
|
|
|
|
gpio-keys {
|
|
compatible = "gpio-keys";
|
|
|
|
button-3 {
|
|
label = "TA4-GPIO-D";
|
|
linux,code = <KEY_D>;
|
|
gpios = <&gpiod 12 GPIO_ACTIVE_LOW>;
|
|
wakeup-source;
|
|
};
|
|
};
|
|
|
|
led {
|
|
compatible = "gpio-leds";
|
|
|
|
led-0 {
|
|
label = "green:led5";
|
|
gpios = <&gpioc 6 GPIO_ACTIVE_HIGH>;
|
|
default-state = "off";
|
|
status = "disabled";
|
|
};
|
|
|
|
led-1 {
|
|
label = "green:led6";
|
|
gpios = <&gpiod 11 GPIO_ACTIVE_HIGH>;
|
|
default-state = "off";
|
|
};
|
|
|
|
led-2 {
|
|
label = "green:led7";
|
|
gpios = <&gpioi 2 GPIO_ACTIVE_HIGH>;
|
|
default-state = "off";
|
|
};
|
|
|
|
led-3 {
|
|
label = "green:led8";
|
|
gpios = <&gpioi 3 GPIO_ACTIVE_HIGH>;
|
|
default-state = "off";
|
|
};
|
|
};
|
|
|
|
panel {
|
|
compatible = "edt,etm0700g0edh6";
|
|
backlight = <&display_bl>;
|
|
power-supply = <®_panel_bl>;
|
|
|
|
port {
|
|
lcd_panel_in: endpoint {
|
|
remote-endpoint = <&lcd_display_out>;
|
|
};
|
|
};
|
|
};
|
|
|
|
reg_panel_bl: regulator-panel-bl {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "panel_backlight";
|
|
regulator-min-microvolt = <3300000>;
|
|
regulator-max-microvolt = <3300000>;
|
|
vin-supply = <®_panel_supply>;
|
|
};
|
|
|
|
reg_panel_supply: regulator-panel-supply {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "panel_supply";
|
|
regulator-min-microvolt = <24000000>;
|
|
regulator-max-microvolt = <24000000>;
|
|
};
|
|
|
|
sound {
|
|
compatible = "audio-graph-card";
|
|
widgets = "Headphone", "Headphone Jack",
|
|
"Line", "Line In Jack",
|
|
"Microphone", "Microphone Jack";
|
|
routing = "Headphone Jack", "HP_OUT",
|
|
"LINE_IN", "Line In Jack",
|
|
"MIC_IN", "Microphone Jack",
|
|
"Microphone Jack", "Mic Bias";
|
|
dais = <&sai2a_port &sai2b_port>;
|
|
status = "okay";
|
|
};
|
|
};
|
|
|
|
&cec {
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&cec_pins_a>;
|
|
status = "okay";
|
|
};
|
|
|
|
&i2c2 { /* Header X22 */
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&i2c2_pins_a>;
|
|
i2c-scl-rising-time-ns = <185>;
|
|
i2c-scl-falling-time-ns = <20>;
|
|
status = "okay";
|
|
/* spare dmas for other usage */
|
|
/delete-property/dmas;
|
|
/delete-property/dma-names;
|
|
status = "okay";
|
|
};
|
|
|
|
&i2c5 { /* Header X21 */
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&i2c5_pins_a>;
|
|
i2c-scl-rising-time-ns = <185>;
|
|
i2c-scl-falling-time-ns = <20>;
|
|
status = "okay";
|
|
/* spare dmas for other usage */
|
|
/delete-property/dmas;
|
|
/delete-property/dma-names;
|
|
|
|
sgtl5000: codec@a {
|
|
compatible = "fsl,sgtl5000";
|
|
reg = <0x0a>;
|
|
#sound-dai-cells = <0>;
|
|
clocks = <&clk_ext_audio_codec>;
|
|
VDDA-supply = <&v3v3>;
|
|
VDDIO-supply = <&vdd>;
|
|
|
|
sgtl5000_port: port {
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
|
|
sgtl5000_tx_endpoint: endpoint@0 {
|
|
reg = <0>;
|
|
remote-endpoint = <&sai2a_endpoint>;
|
|
};
|
|
|
|
sgtl5000_rx_endpoint: endpoint@1 {
|
|
reg = <1>;
|
|
remote-endpoint = <&sai2b_endpoint>;
|
|
};
|
|
};
|
|
|
|
};
|
|
|
|
touchscreen@38 {
|
|
compatible = "edt,edt-ft5406";
|
|
reg = <0x38>;
|
|
interrupt-parent = <&gpioc>;
|
|
interrupts = <6 IRQ_TYPE_EDGE_FALLING>; /* GPIO E */
|
|
};
|
|
};
|
|
|
|
<dc {
|
|
pinctrl-names = "default", "sleep";
|
|
pinctrl-0 = <<dc_pins_b>;
|
|
pinctrl-1 = <<dc_sleep_pins_b>;
|
|
status = "okay";
|
|
|
|
port {
|
|
lcd_display_out: endpoint {
|
|
remote-endpoint = <&lcd_panel_in>;
|
|
};
|
|
};
|
|
};
|
|
|
|
&sai2 {
|
|
clocks = <&rcc SAI2>, <&rcc PLL3_Q>, <&rcc PLL3_R>;
|
|
clock-names = "pclk", "x8k", "x11k";
|
|
pinctrl-names = "default", "sleep";
|
|
pinctrl-0 = <&sai2a_pins_b &sai2b_pins_b>;
|
|
pinctrl-1 = <&sai2a_sleep_pins_b &sai2b_sleep_pins_b>;
|
|
status = "okay";
|
|
|
|
sai2a: audio-controller@4400b004 {
|
|
#clock-cells = <0>;
|
|
dma-names = "tx";
|
|
clocks = <&rcc SAI2_K>;
|
|
clock-names = "sai_ck";
|
|
status = "okay";
|
|
|
|
sai2a_port: port {
|
|
sai2a_endpoint: endpoint {
|
|
remote-endpoint = <&sgtl5000_tx_endpoint>;
|
|
bitclock-master;
|
|
dai-format = "i2s";
|
|
dai-tdm-slot-num = <2>;
|
|
dai-tdm-slot-width = <16>;
|
|
frame-master;
|
|
mclk-fs = <256>;
|
|
};
|
|
};
|
|
};
|
|
|
|
sai2b: audio-controller@4400b024 {
|
|
dma-names = "rx";
|
|
st,sync = <&sai2a 2>;
|
|
clocks = <&rcc SAI2_K>, <&sai2a>;
|
|
clock-names = "sai_ck", "MCLK";
|
|
status = "okay";
|
|
|
|
sai2b_port: port {
|
|
sai2b_endpoint: endpoint {
|
|
remote-endpoint = <&sgtl5000_rx_endpoint>;
|
|
bitclock-master;
|
|
dai-format = "i2s";
|
|
dai-tdm-slot-num = <2>;
|
|
dai-tdm-slot-width = <16>;
|
|
frame-master;
|
|
mclk-fs = <256>;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
&timers2 {
|
|
/* spare dmas for other usage (un-delete to enable pwm capture) */
|
|
/delete-property/dmas;
|
|
/delete-property/dma-names;
|
|
status = "okay";
|
|
pwm2: pwm {
|
|
pinctrl-0 = <&pwm2_pins_a>;
|
|
pinctrl-names = "default";
|
|
status = "okay";
|
|
};
|
|
timer@1 {
|
|
status = "okay";
|
|
};
|
|
};
|
|
|
|
&usart3 {
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&usart3_pins_a>;
|
|
/delete-property/dmas;
|
|
/delete-property/dma-names;
|
|
status = "okay";
|
|
};
|
|
|
|
&uart8 {
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&uart8_pins_a &uart8_rtscts_pins_a>;
|
|
uart-has-rtscts;
|
|
/delete-property/dmas;
|
|
/delete-property/dma-names;
|
|
status = "okay";
|
|
};
|
|
|
|
&usbh_ehci {
|
|
status = "okay";
|
|
};
|
|
|
|
&usbotg_hs {
|
|
dr_mode = "otg";
|
|
pinctrl-0 = <&usbotg_hs_pins_a>;
|
|
pinctrl-names = "default";
|
|
phy-names = "usb2-phy";
|
|
phys = <&usbphyc_port1 0>;
|
|
vbus-supply = <&vbus_otg>;
|
|
status = "okay";
|
|
};
|
|
|
|
&usbphyc {
|
|
status = "okay";
|
|
};
|
|
|
|
&usbphyc_port0 {
|
|
phy-supply = <&vdd_usb>;
|
|
};
|
|
|
|
&usbphyc_port1 {
|
|
phy-supply = <&vdd_usb>;
|
|
};
|