diff options
Diffstat (limited to 'yocto/meta-mikrophone/recipes-kernel')
7 files changed, 412 insertions, 0 deletions
| diff --git a/yocto/meta-mikrophone/recipes-kernel/linux/device-tree-overlays/mikroPhone-panel_overlay.dts b/yocto/meta-mikrophone/recipes-kernel/linux/device-tree-overlays/mikroPhone-panel_overlay.dts new file mode 100644 index 0000000..bee2682 --- /dev/null +++ b/yocto/meta-mikrophone/recipes-kernel/linux/device-tree-overlays/mikroPhone-panel_overlay.dts @@ -0,0 +1,110 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/* + * Copyright 2025 Uros Majstorovic + */ + +// adapted from: https://git.toradex.com/cgit/device-tree-overlays.git/tree/overlays/verdin-imx8mp_panel-cap-touch-10inch-lvds_overlay.dts?h=toradex_6.6-2.2.x-imx +// Verdin iMX8M Plus single-channel LVDS + +/dts-v1/; +/plugin/; + +#include <dt-bindings/gpio/gpio.h> +#include <dt-bindings/interrupt-controller/irq.h> +#include <dt-bindings/pwm/pwm.h> +#include "freescale/imx8mp-pinfunc.h" + +/ { +	compatible = "toradex,verdin-imx8mp"; +}; + +&{/} { +	backlight_lvds_native: backlight-lvds-native { +		compatible = "pwm-backlight"; +		pinctrl-names = "default"; +		brightness-levels = <0 45 63 88 119 158 203 255>; +		default-brightness-level = <4>; +		/* Verdin PWM_1 (SODIMM 15) */ +		pwms = <&pwm1 0 6666667>; +	}; + +	panel-lvds-native { +		compatible = "panel-lvds"; +		backlight = <&backlight_lvds_native>; +		data-mapping = "vesa-24"; +		height-mm = <110>; +		width-mm = <62>; + +		panel-timing { +			clock-frequency = <36000000>; +			hactive = <480>; +			hfront-porch = <23 60 71>; +			hsync-len = <15 40 47>; +			hback-porch = <23 60 71>; + +			vactive = <854>; +			vfront-porch = <5 7 10>; +			vsync-len = <6 9 12>; +			vback-porch = <5 7 10>; + +			hsync-active = <0>; +			vsync-active = <0>; +			de-active = <0>; +			pixelclk-active = <1>; /* positive edge */ +		}; + +		port { +			panel_lvds_native_in: endpoint { +				remote-endpoint = <&lvds_out>; +			}; +		}; +	}; +}; + +/* Verdin I2C_1 */ +&i2c4 { +	#address-cells = <1>; +	#size-cells = <0>; +	status = "okay"; + +	gt911@5d { +		compatible = "goodix,gt911"; +		reg = <0x5d>; +		pinctrl-names = "default"; +		pinctrl-0 = <&gpio1>; +		/* Verdin GPIO_3 (SODIMM 210) */ +		interrupt-parent = <&gpio1>; +		interrupts = <5 IRQ_TYPE_EDGE_FALLING>; +		/* Verdin GPIO_4 (SODIMM 212) */ +		reset-gpios = <&gpio1 6 GPIO_ACTIVE_LOW>; +		status = "okay"; +	}; +}; + +&lcdif2 { +	status = "okay"; +}; + +&ldb { +	status = "okay"; + +	lvds-channel@0 { +		#address-cells = <1>; +		#size-cells = <0>; +		fsl,data-mapping = "spwg"; +		fsl,data-width = <24>; +		status = "okay"; + +		port@1 { +			reg = <1>; + +			lvds_out: endpoint { +				remote-endpoint = <&panel_lvds_native_in>; +			}; +		}; +	}; +}; + +&ldb_phy { +	status = "okay"; +}; diff --git a/yocto/meta-mikrophone/recipes-kernel/linux/device-tree-overlays_git.bbappend b/yocto/meta-mikrophone/recipes-kernel/linux/device-tree-overlays_git.bbappend new file mode 100644 index 0000000..cae7974 --- /dev/null +++ b/yocto/meta-mikrophone/recipes-kernel/linux/device-tree-overlays_git.bbappend @@ -0,0 +1,15 @@ +FILESEXTRAPATHS:prepend := "${THISDIR}/device-tree-overlays:" + +MIKROPHONE_OVERLAYS_BINARY = "verdin-imx8mp_hdmi_overlay.dtbo mikroPhone-panel_overlay.dtbo" + +SRC_URI += " \ +    file://mikroPhone-panel_overlay.dts \ +" + +TEZI_EXTERNAL_KERNEL_DEVICETREE = "${MIKROPHONE_OVERLAYS_BINARY}" + +TEZI_EXTERNAL_KERNEL_DEVICETREE_BOOT = "${MIKROPHONE_OVERLAYS_BINARY}" + +do_collect_overlays:prepend() { +    cp ${WORKDIR}/mikroPhone-panel_overlay.dts ${S} +}
\ No newline at end of file diff --git a/yocto/meta-mikrophone/recipes-kernel/linux/linux-toradex%.bbappend b/yocto/meta-mikrophone/recipes-kernel/linux/linux-toradex%.bbappend new file mode 100644 index 0000000..a706b06 --- /dev/null +++ b/yocto/meta-mikrophone/recipes-kernel/linux/linux-toradex%.bbappend @@ -0,0 +1,20 @@ +FILESEXTRAPATHS:prepend := "${THISDIR}/linux-toradex:" + +# Prevent the use of in-tree defconfig +# unset KBUILD_DEFCONFIG + +SRC_URI += "\  +    file://imx8mp-verdin-mikrophone.dtsi \ +    file://imx8mp-verdin-wifi-mikrophone.dts \ +    file://imx8mp-verdin-nonwifi-mikrophone.dts \ +    file://kernel_lvds_freq.patch \ +    " + +# For arm64 bit freescale/NXP devices +DTS_SRCDIR = "arch/arm64/boot/dts/freescale" + +do_configure:append() { +    cp ${WORKDIR}/imx8mp-verdin-mikrophone.dtsi ${S}/${DTS_SRCDIR} +    cp ${WORKDIR}/imx8mp-verdin-wifi-mikrophone.dts ${S}/${DTS_SRCDIR} +    cp ${WORKDIR}/imx8mp-verdin-nonwifi-mikrophone.dts ${S}/${DTS_SRCDIR} +}
\ No newline at end of file diff --git a/yocto/meta-mikrophone/recipes-kernel/linux/linux-toradex/imx8mp-verdin-mikrophone.dtsi b/yocto/meta-mikrophone/recipes-kernel/linux/linux-toradex/imx8mp-verdin-mikrophone.dtsi new file mode 100644 index 0000000..7c23309 --- /dev/null +++ b/yocto/meta-mikrophone/recipes-kernel/linux/linux-toradex/imx8mp-verdin-mikrophone.dtsi @@ -0,0 +1,169 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/* + * Copyright 2025 Uros Majstorovic + */ + +/* Verdin HDMI_1 Audio */ +&aud2htx { +	status = "okay"; +}; + +/* Verdin SPI_1 */ +&ecspi1 { +	#address-cells = <1>; +	#size-cells = <0>; +	status = "okay"; + +	spidev@0 { +	    /* Use compatible "rohm,dh2228fv" to bind spidev driver */ +	    compatible = "rohm,dh2228fv"; +	    reg = <0>; +	    spi-max-frequency = <50000000>; +	}; +}; + +&eqos { +	status = "disabled"; +}; + +&fec { +	status = "disabled"; +}; + +&flexcan1 { +	status = "disabled"; +}; + +&flexcan2 { +	status = "disabled"; +}; + +/* Verdin QSPI_1 */ +&flexspi { +	status = "disabled"; +}; + +&gpio4 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_ctrl_sleep_moci>; +}; + +/* Verdin I2C_2_DSI */ +&i2c2 { +	status = "disabled"; +}; + +/* CAM I2C, disabled for now */ +&i2c3 { +	status = "disabled"; +}; + +/* Verdin I2C_1 */ +&i2c4 { +	status = "okay"; +}; + +/* Verdin PCIE_1 */ +&pcie { +	status = "okay"; +}; + +&pcie_phy { +	status = "okay"; +}; + +/* Verdin PWM_1 */ +&pwm1 { +	status = "okay"; +}; + +/* Verdin PWM_2 */ +&pwm2 { +	status = "disabled"; +}; + +/* Verdin PWM_3_DSI */ +&pwm3 { +	status = "disabled"; +}; + +®_usdhc2_vmmc { +	vin-supply = <®_3p3v>; +}; + +/* Verdin HDMI_1 Audio */ +&sound_hdmi { +	status = "okay"; +}; + +/* Verdin UART_1 */ +&uart1 { +	status = "disabled"; +}; + +/* Verdin UART_2 */ +&uart2 { +	status = "disabled"; +}; + +/* Verdin UART_3, used as the Linux Console */ +&uart3 { +	status = "okay"; +}; + +/* Verdin USB_1 */ +&usb3_0 { +	status = "okay"; +}; + +&usb3_phy0 { +	status = "okay"; +}; + +/* Verdin USB_2 */ +&usb3_1 { +	// fsl,permanently-attached; +	status = "okay"; +}; + +&usb3_phy1 { +	status = "okay"; +}; + +/* Verdin SDCard */ +&usdhc2 { +	status = "okay"; +}; + +/* Video and graphics */ +&vpu_g1 { +	status = "okay"; +}; + +&vpu_g2 { +	status = "okay"; +}; + +&vpu_vc8000e { +	status = "okay"; +}; + +&vpu_v4l2 { +	status = "okay"; +}; + +&gpu_2d { +	status = "okay"; +}; + +&gpu_3d { +	status = "okay"; +}; + +&ml_vipsi { +	status = "okay"; +}; + +&mix_gpu_ml { +	status = "okay"; +}; diff --git a/yocto/meta-mikrophone/recipes-kernel/linux/linux-toradex/imx8mp-verdin-nonwifi-mikrophone.dts b/yocto/meta-mikrophone/recipes-kernel/linux/linux-toradex/imx8mp-verdin-nonwifi-mikrophone.dts new file mode 100644 index 0000000..91c08a7 --- /dev/null +++ b/yocto/meta-mikrophone/recipes-kernel/linux/linux-toradex/imx8mp-verdin-nonwifi-mikrophone.dts @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/* + * Copyright 2025 Uros Majstorovic + */ + +/dts-v1/; + +#include "imx8mp-verdin.dtsi" +#include "imx8mp-verdin-nonwifi.dtsi" +#include "imx8mp-verdin-mikrophone.dtsi" + +/ { +	model = "Toradex Verdin iMX8M Plus on mikroPhone"; +	compatible = "toradex,verdin-imx8mp-nonwifi-mikrophone", +	         "toradex,verdin-imx8mp-wifi", +	         "toradex,verdin-imx8mp", +	         "fsl,imx8mp"; +}; diff --git a/yocto/meta-mikrophone/recipes-kernel/linux/linux-toradex/imx8mp-verdin-wifi-mikrophone.dts b/yocto/meta-mikrophone/recipes-kernel/linux/linux-toradex/imx8mp-verdin-wifi-mikrophone.dts new file mode 100644 index 0000000..35792e1 --- /dev/null +++ b/yocto/meta-mikrophone/recipes-kernel/linux/linux-toradex/imx8mp-verdin-wifi-mikrophone.dts @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/* + * Copyright 2025 Uros Majstorovic + */ + +/dts-v1/; + +#include "imx8mp-verdin.dtsi" +#include "imx8mp-verdin-wifi.dtsi" +#include "imx8mp-verdin-mikrophone.dtsi" + +/ { +	model = "Toradex Verdin iMX8M Plus WB on mikroPhone"; +	compatible = "toradex,verdin-imx8mp-wifi-mikrophone", +	         "toradex,verdin-imx8mp-wifi", +	         "toradex,verdin-imx8mp", +	         "fsl,imx8mp"; +}; diff --git a/yocto/meta-mikrophone/recipes-kernel/linux/linux-toradex/kernel_lvds_freq.patch b/yocto/meta-mikrophone/recipes-kernel/linux/linux-toradex/kernel_lvds_freq.patch new file mode 100644 index 0000000..9955bc4 --- /dev/null +++ b/yocto/meta-mikrophone/recipes-kernel/linux/linux-toradex/kernel_lvds_freq.patch @@ -0,0 +1,62 @@ +diff --git a/arch/arm64/boot/dts/freescale/imx8mp.dtsi b/arch/arm64/boot/dts/freescale/imx8mp.dtsi +index 55adf1bf45d9..c875474e6c45 100644 +--- a/arch/arm64/boot/dts/freescale/imx8mp.dtsi ++++ b/arch/arm64/boot/dts/freescale/imx8mp.dtsi +@@ -752,7 +752,7 @@ clk: clock-controller@30380000 { + 						       <800000000>, + 						       <393216000>, + 						       <361267200>, +-						       <1039500000>; ++						       <252000000>; + 			}; +  + 			src: reset-controller@30390000 { +diff --git a/drivers/clk/imx/clk-pll14xx.c b/drivers/clk/imx/clk-pll14xx.c +index 6c17786ecb9f..8c9840f08c0e 100644 +--- a/drivers/clk/imx/clk-pll14xx.c ++++ b/drivers/clk/imx/clk-pll14xx.c +@@ -75,6 +75,7 @@ static const struct imx_pll14xx_rate_table imx_pll1443x_tbl[] = { + 	PLL_1443X_RATE(49152000U, 393, 3, 6, 0x374c), + 	PLL_1443X_RATE(45158400U, 241, 2, 6, 0xd845), + 	PLL_1443X_RATE(40960000U, 109, 1, 6, 0x3a07), ++	PLL_1443X_RATE(252000000U, 84, 2, 2, 0), + }; +  + struct imx_pll14xx_clk imx_1443x_pll = { +diff --git a/drivers/gpu/drm/imx/imx8mp-ldb.c b/drivers/gpu/drm/imx/imx8mp-ldb.c +index e3f5c5e6e842..55dbafa863cf 100644 +--- a/drivers/gpu/drm/imx/imx8mp-ldb.c ++++ b/drivers/gpu/drm/imx/imx8mp-ldb.c +@@ -186,15 +186,6 @@ imx8mp_ldb_encoder_atomic_check(struct drm_encoder *encoder, + 		return -EINVAL; + 	} +  +-	/* +-	 * Due to limited video PLL frequency points on i.MX8mp, +-	 * we do mode fixup here in case any mode is unsupported. +-	 */ +-	if (ldb->dual) +-		mode->clock = mode->clock > 100000 ? 148500 : 74250; +-	else +-		mode->clock = 74250; +- + 	return 0; + } +  +@@ -212,16 +203,6 @@ imx8mp_ldb_encoder_mode_valid(struct drm_encoder *encoder, + 	if (ldb_ch->panel) + 		return MODE_OK; +  +-	/* +-	 * Due to limited video PLL frequency points on i.MX8mp, +-	 * we do mode valid check here. +-	 */ +-	if (ldb->dual && mode->clock != 74250 && mode->clock != 148500) +-		return MODE_NOCLOCK; +- +-	if (!ldb->dual && mode->clock != 74250) +-		return MODE_NOCLOCK; +- + 	return MODE_OK; + } +  | 
