[PATCH v1 14/14] ARM: dts: imx6ull-uti260b: Add board

Stefan Wahren wahrenst at gmx.net
Mon Feb 12 10:28:36 PST 2024


Hi Sebastian,

Am 10.02.24 um 02:18 schrieb Sebastian Reichel:
> Add UNI-T UTi260b thermal camera board.
>
> Signed-off-by: Sebastian Reichel <sre at kernel.org>
> ---
>   arch/arm/boot/dts/nxp/imx/Makefile            |   1 +
>   arch/arm/boot/dts/nxp/imx/imx6ull-uti260b.dts | 564 ++++++++++++++++++
>   2 files changed, 565 insertions(+)
>   create mode 100644 arch/arm/boot/dts/nxp/imx/imx6ull-uti260b.dts
>
> diff --git a/arch/arm/boot/dts/nxp/imx/Makefile b/arch/arm/boot/dts/nxp/imx/Makefile
> index a724d1a7a9a0..47350cf3ddeb 100644
> --- a/arch/arm/boot/dts/nxp/imx/Makefile
> +++ b/arch/arm/boot/dts/nxp/imx/Makefile
> @@ -349,6 +349,7 @@ dtb-$(CONFIG_SOC_IMX6UL) += \
>   	imx6ull-tarragon-slavext.dtb \
>   	imx6ull-tqma6ull2-mba6ulx.dtb \
>   	imx6ull-tqma6ull2l-mba6ulx.dtb \
> +	imx6ull-uti260b.dtb \
>   	imx6ulz-14x14-evk.dtb \
>   	imx6ulz-bsh-smm-m2.dtb
>   dtb-$(CONFIG_SOC_IMX7D) += \
> diff --git a/arch/arm/boot/dts/nxp/imx/imx6ull-uti260b.dts b/arch/arm/boot/dts/nxp/imx/imx6ull-uti260b.dts
> new file mode 100644
> index 000000000000..336727895fa4
> --- /dev/null
> +++ b/arch/arm/boot/dts/nxp/imx/imx6ull-uti260b.dts
> @@ -0,0 +1,564 @@
> +// SPDX-License-Identifier: (GPL-2.0 OR MIT)
> +// Copyright (C) 2022 Sebastian Reichel <sre at kernel.org>
2024 ?
> +
> +/dts-v1/;
> +#include "imx6ull.dtsi"
> +#include <dt-bindings/gpio/gpio.h>
> +#include <dt-bindings/input/input.h>
> +#include <dt-bindings/clock/imx6ul-clock.h>
> +
> +/ {
> +	model = "UNI-T UTi260B Thermal Camera";
> +	compatible = "uni-t,imx6ull-uti260b", "fsl,imx6ull";
> +
> +	chosen {
> +		stdout-path = "serial0:115200n8";
> +	};
> +
> +	memory at 80000000 {
> +		device_type = "memory";
> +		reg = <0x80000000 0x20000000>;
> +	};
> +
> +	leds {
> +		compatible = "gpio-leds";
> +		pinctrl-names = "default";
> +		pinctrl-0 = <&mux_led_ctrl>;
> +
> +		led {
> +			label = "led";
The label property is deprecated, please use color and function instead.
> +			gpios = <&gpio2 2 GPIO_ACTIVE_HIGH>;
> +			default-state = "off";
> +		};
> +	};
> +
> +	gpio-keys {
> +		compatible = "gpio-keys";
> +		pinctrl-names = "default";
> +		pinctrl-0 = <&mux_gpio_keys>;
> +		autorepeat;
> +
> +		up-key {
> +			label = "Up";
> +			gpios = <&gpio2 11 GPIO_ACTIVE_LOW>;
> +			linux,code = <KEY_UP>;
> +		};
> +
> +		down-key {
> +			label = "Down";
> +			gpios = <&gpio2 12 GPIO_ACTIVE_LOW>;
> +			linux,code = <KEY_DOWN>;
> +		};
> +
> +		left-key {
> +			label = "Left";
> +			gpios = <&gpio2 13 GPIO_ACTIVE_LOW>;
> +			linux,code = <KEY_LEFT>;
> +		};
> +
> +		right-key {
> +			label = "Right";
> +			gpios = <&gpio2 10 GPIO_ACTIVE_LOW>;
> +			linux,code = <KEY_RIGHT>;
> +		};
> +
> +		ok-key {
> +			label = "Ok";
> +			gpios = <&gpio2 9 GPIO_ACTIVE_LOW>;
> +			linux,code = <KEY_ENTER>;
> +		};
> +
> +		return-key {
> +			label = "Return";
> +			gpios = <&gpio2 15 GPIO_ACTIVE_LOW>;
> +			linux,code = <KEY_ESC>;
> +		};
> +
> +		play-key {
> +			label = "Media";
> +			gpios = <&gpio2 8 GPIO_ACTIVE_LOW>;
> +			linux,code = <KEY_MEDIA>;
> +		};
> +
> +		trigger-key {
> +			label = "Trigger";
> +			gpios = <&gpio2 14 GPIO_ACTIVE_LOW>;
> +			linux,code = <BTN_TRIGGER>;
> +		};
> +
> +		power-key {
> +			label = "Power";
> +			gpios = <&gpio2 3 GPIO_ACTIVE_LOW>;
> +			linux,code = <KEY_POWER>;
> +		};
> +
> +		light-key {
> +			label = "Light";
> +			gpios = <&gpio2 1 GPIO_ACTIVE_LOW>;
> +			linux,code = <KEY_LIGHTS_TOGGLE>;
> +		};
> +	};
> +
> +	panel_backlight: backlight {
> +		compatible = "pwm-backlight";
> +		brightness-levels = <0 4 8 16 32 64 128 255>;
> +		default-brightness-level = <6>;
> +		enable-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;
> +		pinctrl-names = "default";
> +		pinctrl-0 = <&mux_backlight_enable>;
> +		power-supply = <&reg_vsd>;
> +		pwms = <&pwm1 0 50000 0>;
> +	};
> +
> +	reg_vsd: regulator-vsd {
i think the node name should be just "regulator"
> +		compatible = "regulator-fixed";
> +		regulator-name = "VSD_3V3";
> +		regulator-min-microvolt = <3300000>;
> +		regulator-max-microvolt = <3300000>;
> +	};
> +
> +	reg_vref: regulator-vref-4v2 {
dito
> +		compatible = "regulator-fixed";
> +		regulator-name = "VREF_4V2";
> +		regulator-min-microvolt = <4200000>;
> +		regulator-max-microvolt = <4200000>;
> +	};
> +
> +	tp5000: charger {
> +		compatible = "gpio-charger";
> +		charger-type = "usb-sdp";
> +		gpios = <&gpio1 1 GPIO_ACTIVE_LOW>;
> +		pinctrl-names = "default";
> +		pinctrl-0 = <&mux_charger_stat1>;
> +	};
> +
> +	battery: battery {
> +		compatible = "simple-battery";
> +		/* generic 26650 battery */
> +		device-chemistry = "lithium-ion";
> +		charge-full-design-microamp-hours = <5000000>;
> +		voltage-max-design-microvolt = <4200000>;
> +		voltage-min-design-microvolt = <3300000>;
> +	};
> +
> +	fuel-gauge {
> +		compatible = "adc-battery";
> +		charged-gpios = <&gpio1 2 GPIO_ACTIVE_LOW>;
> +		io-channel-names = "voltage";
> +		io-channels = <&adc1 7>;
> +		monitored-battery = <&battery>;
> +		pinctrl-names = "default";
> +		pinctrl-0 = <&mux_charger_stat2>;
> +		power-supplies = <&tp5000>;
> +	};
> +
> +	poweroff {
> +		compatible = "gpio-poweroff";
> +		gpios = <&gpio2 4 GPIO_ACTIVE_LOW>;
> +		pinctrl-names = "default";
> +		pinctrl-0 = <&mux_poweroff>;
> +	};
> +};
> +
> +&gpio1 {
> +	ir-reset-hog {
> +		gpio-hog;
> +		gpios = <3 GPIO_ACTIVE_LOW>;
> +		line-name = "ir-reset-gpio";
> +		output-low;
> +		pinctrl-0 = <&mux_ir_reset>;
Doesn't this miss pinctrl-names = "default" ?
> +	};
> +};
> +
> +&gpio2 {
> +	/* configuring this to output-high results in poweroff */
> +	power-en-hog {
> +		gpio-hog;
> +		gpios = <6 GPIO_ACTIVE_HIGH>;
> +		line-name = "power-en-gpio";
> +		output-low;
> +		pinctrl-0 = <&mux_poweroff2>;
> +	};
> +};
> +
> +&ecspi3 {
> +	cs-gpios = <&gpio1 20 GPIO_ACTIVE_LOW>;
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&mux_spi3>, <&mux_spi3_cs>;
> +	status = "okay";
> +
> +	panel at 0 {
> +		compatible = "inanbo,t28cp45tn89-v17";
> +		reg = <0>;
> +		backlight = <&panel_backlight>;
> +		power-supply = <&reg_vsd>;
> +		spi-cpha;
> +		spi-cpol;
> +		spi-max-frequency = <100000>;
This seems slow to me. Is this a limitation of the display?
> +		spi-rx-bus-width = <0>;
> +
> +		port {
> +			panel_in: endpoint {
> +				remote-endpoint = <&display_out>;
> +			};
> +		};
> +	};
> +};
> +
> +&uart1 {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&mux_uart>;
> +	status = "okay";
> +};
> +
> +&pwm1 {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&mux_pwm>;
> +	status = "okay";
> +};
> +
> +&i2c1 {
> +	clock-frequency = <100000>;
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&mux_i2c1>;
> +	status = "okay";
> +
> +	camera at 21 {
> +		compatible = "galaxycore,gc0308";
> +		reg = <0x21>;
> +		clocks = <&clks IMX6UL_CLK_CSI>;
> +		pinctrl-names = "default";
> +		pinctrl-0 = <&mux_gc0308>;
> +		powerdown-gpios = <&gpio1 5 GPIO_ACTIVE_HIGH>;
> +		reset-gpios = <&gpio1 6 GPIO_ACTIVE_LOW>;
> +		vdd28-supply = <&reg_vsd>;
> +
> +		port {
> +			gc0308_to_parallel: endpoint {
> +				remote-endpoint = <&parallel_from_gc0308>;
> +				bus-width = <8>;
> +				data-shift = <2>; /* lines 9:2 are used */
> +				hsync-active = <1>; /* active high */
> +				vsync-active = <1>; /* active high */
> +				data-active = <1>; /* active high */
> +				pclk-sample = <1>; /* sample on rising edge */
> +			};
> +		};
> +	};
> +};
> +
> +&csi {
> +	status = "okay";
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&mux_csi>;
> +
> +	port {
> +		parallel_from_gc0308: endpoint {
> +			remote-endpoint = <&gc0308_to_parallel>;
> +		};
> +	};
> +};
> +
> +&i2c2 {
> +	clock-frequency = <100000>;
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&mux_i2c2>;
> +	status = "okay";
> +
> +	rtc at 51 {
> +		compatible = "nxp,pcf8563";
> +		reg = <0x51>;
> +	};
> +};
> +
> +&lcdif {
> +	assigned-clocks = <&clks IMX6UL_CLK_LCDIF_PRE_SEL>;
> +	assigned-clock-parents = <&clks IMX6UL_CLK_PLL5_VIDEO_DIV>;
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&mux_lcd_data>, <&mux_lcd_ctrl>;
> +	status = "okay";
> +
> +	port {
> +		display_out: endpoint {
> +			remote-endpoint = <&panel_in>;
> +		};
> +	};
> +};
> +
> +&usdhc1 {
Would be nice to place a comment above this, which mentions the intended
use case: eMMC, SD card, ...
> +	cd-gpios = <&gpio1 19 GPIO_ACTIVE_LOW>;
> +	keep-power-in-suspend;
> +	no-1-8-v;
> +	pinctrl-names = "default", "state_100mhz", "state_200mhz";
> +	pinctrl-0 = <&mux_sdhc1>, <&mux_sdhc1_cd>;
> +	pinctrl-1 = <&mux_sdhc1_100mhz>, <&mux_sdhc1_cd>;
> +	pinctrl-2 = <&mux_sdhc1_200mhz>, <&mux_sdhc1_cd>;
> +	wakeup-source;
> +	vmmc-supply = <&reg_vsd>;
> +	status = "okay";
> +};
> +
> +&usdhc2 {
dito

Best regards
> +	keep-power-in-suspend;
> +	no-1-8-v;
> +	non-removable;
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&mux_sdhc2>;
> +	wakeup-source;
> +	status = "okay";
> +};
> +
> +&wdog1 {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&mux_wdog>;
> +};
> +
> +&adc1 {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&mux_adc>;
> +	vref-supply = <&reg_vref>;
> +	#io-channel-cells = <1>;
> +	status = "okay";
> +};
> +
>



More information about the linux-arm-kernel mailing list