guowenxue
2024-07-18 b8d02950d8c50611c2784c7a40e0b3003acf8d49
commit | author | age
7d0d56 1 diff --git a/arch/arm64/boot/dts/freescale/Makefile b/arch/arm64/boot/dts/freescale/Makefile
W 2 index 7b1a129e6..1d5c6e770 100644
3 --- a/arch/arm64/boot/dts/freescale/Makefile
4 +++ b/arch/arm64/boot/dts/freescale/Makefile
5 @@ -412,3 +412,5 @@ dtb-$(CONFIG_ARCH_S32) += s32v234-evb.dtb \
6                s32v234-sbc.dtb
7  dtb-$(CONFIG_ARCH_MXC) += imx8qm-mek-sof-cs42888.dtb imx8qm-mek-sof-wm8960.dtb \
8                imx8qm-mek-revd-sof-wm8962.dtb imx8qm-mek-sof.dtb
9 +
10 +dtb-$(CONFIG_ARCH_MXC) += igkboard-imx8mp.dtb
11 diff --git a/arch/arm64/boot/dts/freescale/igkboard-imx8mp.dts b/arch/arm64/boot/dts/freescale/igkboard-imx8mp.dts
12 new file mode 100644
b8d029 13 index 000000000..016d92023
7d0d56 14 --- /dev/null
W 15 +++ b/arch/arm64/boot/dts/freescale/igkboard-imx8mp.dts
b8d029 16 @@ -0,0 +1,829 @@
7d0d56 17 +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
6f4428 18 +/* 
G 19 + * Device Tree Source for LingYun IGKBoard(IoT Gateway Kits Board) - imx8mp
7d0d56 20 + * Copyright 2023 LingYun IoT System Studio.
W 21 + */
22 +
23 +/dts-v1/;
24 +
25 +#include <dt-bindings/usb/pd.h>
26 +#include "imx8mp.dtsi"
27 +
28 +/*+------------------------+
29 +  |       root node        |
30 +  +------------------------+*/
31 +/ {
32 +    model = "LingYun IoT Gateway Kits Board based on i.MX8MP";
33 +    compatible = "lingyun,igkboard-imx8mp", "fsl,imx8mp";
34 +
6f4428 35 +    /* console */
7d0d56 36 +    chosen {
W 37 +        stdout-path = &uart2;
38 +    };
39 +
40 +    /* MT53D512M32D2DS-053 WT:D, 2GB LPDDR4 */
41 +    memory@80000000 {
42 +        device_type = "memory";
6f4428 43 +        reg = <0x0 0x80000000 0 0x40000000>;
7d0d56 44 +    };
W 45 +
46 +    leds {
47 +        compatible = "gpio-leds";
48 +        pinctrl-names = "default";
49 +        pinctrl-0 = <&pinctrl_leds>;
50 +        status = "okay";
51 +
52 +        sysled {
53 +            label = "sysled";
54 +            gpios = <&gpio3 16 GPIO_ACTIVE_HIGH>;
7872ca 55 +            default-state = "on";
G 56 +            linux,default-trigger = "heartbeat";
57 +        };
58 +
59 +        ledred {
60 +            label = "redled";
61 +            gpios = <&gpio3 21 GPIO_ACTIVE_LOW>;
62 +            default-state = "off";
63 +        };
64 +
65 +        ledgreen {
66 +            label = "greenled";
67 +            gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;
68 +            default-state = "off";
69 +        };
70 +
71 +        ledblue {
72 +            label = "blueled";
73 +            gpios = <&gpio1 14 GPIO_ACTIVE_LOW>;
74 +            default-state = "on";
f77a70 75 +            linux,default-trigger = "timer";
7872ca 76 +        };
G 77 +    };
78 +
79 +    keys {
80 +        compatible = "gpio-keys";
81 +        pinctrl-names = "default";
82 +        pinctrl-0 = <&pinctrl_keys>;
83 +        status = "okay";
84 +
85 +        key1 {
86 +            label = "K1";
87 +            gpios = <&gpio5 8 GPIO_ACTIVE_LOW>;
88 +            linux,code = <BTN_1>;
89 +        };
90 +
91 +        key2 {
92 +            label = "K2";
93 +            gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;
94 +            linux,code = <BTN_2>;
95 +        };
96 +
97 +        key3 {
98 +            label = "K3";
99 +            gpios = <&gpio5 26 GPIO_ACTIVE_LOW>;
100 +            linux,code = <BTN_3>;
101 +        };
102 +
103 +        key4 {
104 +            label = "K4";
105 +            gpios = <&gpio5 27 GPIO_ACTIVE_LOW>;
106 +            linux,code = <BTN_4>;
7d0d56 107 +        };
35deae 108 +    };
G 109 +
110 +    sound-wm8960 {
111 +        compatible = "fsl,imx-audio-wm8960";
112 +        model = "wm8960-audio";
113 +        audio-cpu = <&sai3>;
114 +        audio-codec = <&codec>;
115 +        audio-asrc = <&easrc>;
116 +        //hp-det-gpio = <&gpio4 29 0>;
117 +        audio-routing =
118 +            "Headphone Jack", "HP_L",
119 +            "Headphone Jack", "HP_R",
120 +            "Ext Spk", "SPK_LP",
121 +            "Ext Spk", "SPK_LN",
122 +            "Ext Spk", "SPK_RP",
123 +            "Ext Spk", "SPK_RN",
124 +            "LINPUT1", "Mic Jack",
125 +            "LINPUT3", "Mic Jack",
126 +            "Mic Jack", "MICB";
7d0d56 127 +    };
W 128 +};
129 +
130 +/*+------------------------+
131 +  |   power key & reset    |
132 +  +------------------------+*/
133 +
134 +&snvs_pwrkey {
135 +    status = "okay";
136 +};
137 +
138 +&wdog1 {
139 +    pinctrl-names = "default";
140 +    pinctrl-0 = <&pinctrl_wdog>;
141 +    fsl,ext-reset-output;
142 +    status = "okay";
143 +};
144 +
145 +/*+------------------------+
146 +  |    console usart2      |
147 +  +------------------------+*/
148 +&uart2 {
149 +    pinctrl-names = "default";
150 +    pinctrl-0 = <&pinctrl_uart2>;
151 +    status = "okay";
152 +};
153 +
154 +/*+------------------------+
155 +  |    8GB eMMC on SD3     |
156 +  +------------------------+*/
157 +
158 +/* KLM8G1GETF-B041 8GB eMMC */
159 +&usdhc3 {
160 +    pinctrl-names = "default", "state_100mhz", "state_200mhz";
161 +    pinctrl-0 = <&pinctrl_usdhc3>;
162 +    pinctrl-1 = <&pinctrl_usdhc3_100mhz>;
163 +    pinctrl-2 = <&pinctrl_usdhc3_200mhz>;
164 +    bus-width = <8>;
165 +    non-removable;
166 +    status = "okay";
167 +};
168 +
169 +/*+------------------------+
170 +  |     TF Card on SD2     |
171 +  +------------------------+*/
172 +
173 +&usdhc2 {
174 +    pinctrl-names = "default", "state_100mhz", "state_200mhz";
175 +    pinctrl-0 = <&pinctrl_usdhc2>, <&pinctrl_usdhc2_gpio>;
176 +    pinctrl-1 = <&pinctrl_usdhc2_100mhz>, <&pinctrl_usdhc2_gpio>;
177 +    pinctrl-2 = <&pinctrl_usdhc2_200mhz>, <&pinctrl_usdhc2_gpio>;
178 +    cd-gpios = <&gpio2 12 GPIO_ACTIVE_LOW>;
179 +    bus-width = <4>;
180 +    no-1-8-v;
181 +    status = "okay";
182 +};
183 +
184 +/*+------------------------+
185 +  | Typec USB for download |
186 +  +------------------------+*/
187 +
188 +&usb3_phy0 {
189 +    fsl,phy-tx-vref-tune = <6>;
190 +    fsl,phy-tx-rise-tune = <0>;
191 +    fsl,phy-tx-preemp-amp-tune = <3>;
192 +    fsl,phy-comp-dis-tune = <7>;
193 +    fsl,pcs-tx-deemph-3p5db = <0x21>;
194 +    fsl,phy-pcs-tx-swing-full = <0x7f>;
195 +    status = "okay";
196 +};
197 +
198 +&usb3_0 {
199 +    status = "okay";
200 +};
201 +
202 +&usb_dwc3_0 {
203 +    dr_mode = "peripheral";
204 +    hnp-disable;
205 +    srp-disable;
206 +    adp-disable;
207 +    status = "okay";
208 +};
209 +
210 +/*+------------------------+
211 +  | 2xUSB Host on USB Hub  |
212 +  +------------------------+*/
213 +
214 +/* Renesas USB 3.0 Hub uPD720210 */
215 +&usb3_phy1 {
216 +    fsl,phy-tx-preemp-amp-tune = <2>;
217 +    status = "okay";
218 +};
219 +
220 +&usb3_1 {
221 +    status = "okay";
222 +};
223 +
224 +&usb_dwc3_1 {
225 +    dr_mode = "host";
226 +    status = "okay";
227 +};
228 +
229 +/*+------------------------+
230 +  |        Ethernet        |
231 +  +------------------------+*/
232 +
233 +/* First 1000Mbps Ethernet For TSN on ENET */
234 +&eqos {
235 +    pinctrl-names = "default";
236 +    pinctrl-0 = <&pinctrl_eqos>;
237 +    phy-mode = "rgmii-id";
238 +    phy-handle = <&ethphy0>;
239 +    status = "okay";
240 +
241 +    mdio {
242 +        compatible = "snps,dwmac-mdio";
243 +        #address-cells = <1>;
244 +        #size-cells = <0>;
6f4428 245 +        clock-frequency = <5000000>;
7d0d56 246 +
W 247 +        ethphy0: ethernet-phy@0 { /* YT8521SH-CA */
248 +            compatible = "ethernet-phy-ieee802.3-c22";
249 +            reg = <0>;
250 +            eee-broken-1000t;
251 +        };
252 +    };
253 +};
254 +
6f4428 255 +/* Second 1000Mbps Ethernet on ENET1, test okay */
7d0d56 256 +&fec {
W 257 +    pinctrl-names = "default";
258 +    pinctrl-0 = <&pinctrl_fec>;
259 +    phy-mode = "rgmii-id";
260 +    phy-handle = <&ethphy1>;
261 +    fsl,magic-packet;
262 +    status = "okay";
263 +
264 +    mdio {
265 +        #address-cells = <1>;
266 +        #size-cells = <0>;
6f4428 267 +        clock-frequency = <5000000>;
7d0d56 268 +
W 269 +        ethphy1: ethernet-phy@0 { /* YT8521SH-CA */
270 +            compatible = "ethernet-phy-ieee802.3-c22";
271 +            reg = <0>;
272 +            eee-broken-1000t;
273 +        };
274 +    };
275 +};
276 +
277 +/*+------------------------+
500850 278 +  |      Misc Devices      |
G 279 +  +------------------------+*/
280 +
281 +/* Buzzer */
282 +&pwm1 {
283 +    pinctrl-names = "default";
284 +    pinctrl-0 = <&pinctrl_pwm1>;
285 +    status = "okay";
286 +};
287 +
2b23f8 288 +&i2c2 {
G 289 +    clock-frequency = <100000>;
290 +    pinctrl-names = "default";
291 +    pinctrl-0 = <&pinctrl_i2c2>;
292 +    status = "okay";
293 +
35deae 294 +    codec: wm8960@1a {
G 295 +        compatible = "wlf,wm8960";
296 +        reg = <0x1a>;
297 +        clocks = <&audio_blk_ctrl IMX8MP_CLK_AUDIO_BLK_CTRL_SAI3_MCLK1>;
298 +        clock-names = "mclk";
299 +        wlf,shared-lrclk;
2f7a23 300 +    };
G 301 +
302 +    ms1112@4a {
303 +        compatible = "ms,ms1112";
304 +        reg = <0x4a>;
305 +        status = "okay";
306 +        #address-cells = <1>;
307 +        #size-cells = <0>;
308 +
309 +        channel@2 {
310 +                reg = <2>;
311 +                ti,gain = <0>;
312 +                ti,datarate = <3>;
313 +                ti,mode = <1>;
314 +        };
315 +
316 +        channel@3{
317 +                reg = <3>;
318 +                ti,gain = <0>;
319 +                ti,datarate = <3>;
320 +                ti,mode = <1>;
321 +        };
2b23f8 322 +    };
35deae 323 +
G 324 +    rtc1208@6f {
325 +        compatible = "isil,isl1208";
326 +        reg = <0x6f>;
327 +        status = "okay";
328 +    };
329 +};
330 +
331 +/*+------------------------+
332 +  |   WM8960 Audio Codec   |
333 +  +------------------------+*/
334 +
335 +&sai3 {
336 +    pinctrl-names = "default";
337 +    pinctrl-0 = <&pinctrl_sai3>;
338 +    assigned-clocks = <&clk IMX8MP_CLK_SAI3>;
339 +    assigned-clock-parents = <&clk IMX8MP_AUDIO_PLL1_OUT>;
340 +    assigned-clock-rates = <12288000>;
341 +    clocks = <&audio_blk_ctrl IMX8MP_CLK_AUDIO_BLK_CTRL_SAI3_IPG>, <&clk IMX8MP_CLK_DUMMY>,
342 +         <&audio_blk_ctrl IMX8MP_CLK_AUDIO_BLK_CTRL_SAI3_MCLK1>, <&clk IMX8MP_CLK_DUMMY>,
343 +         <&clk IMX8MP_CLK_DUMMY>;
344 +    clock-names = "bus", "mclk0", "mclk1", "mclk2", "mclk3";
345 +    fsl,sai-mclk-direction-output;
346 +    status = "okay";
347 +};
348 +
349 +&easrc {
350 +    fsl,asrc-rate  = <48000>;
351 +    status = "okay";
352 +};
353 +
354 +&xcvr {
355 +    #sound-dai-cells = <0>;
356 +    status = "okay";
357 +};
358 +
359 +&sdma2 {
360 +    status = "okay";
2b23f8 361 +};
G 362 +
500850 363 +/*+------------------------+
b8d029 364 +  |      HDMI Display      |
G 365 +  +------------------------+*/
366 +
367 +&irqsteer_hdmi {
368 +    status = "okay";
369 +};
370 +
371 +&hdmi_blk_ctrl {
372 +    status = "okay";
373 +};
374 +
375 +&hdmi_pavi {
376 +    status = "okay";
377 +};
378 +
379 +&hdmi {
380 +    status = "okay";
381 +};
382 +
383 +&hdmiphy {
384 +    status = "okay";
385 +};
386 +
387 +&lcdif3 {
388 +    status = "okay";
389 +
390 +    thres-low  = <1 2>;     /* (FIFO * 1 / 2) */
391 +    thres-high = <3 4>;     /* (FIFO * 3 / 4) */
392 +};
393 +
394 +/*+------------------------+
ac4b9f 395 +  |  CAN/RS485 interface   |
G 396 +  +------------------------+*/
b8d029 397 +
ac4b9f 398 +/* RS485 */
G 399 +&uart3 {
400 +    pinctrl-names = "default";
401 +    pinctrl-0 = <&pinctrl_uart3>;
402 +    status = "okay";
403 +};
404 +
405 +/* CAN */
406 +&flexcan1 {
407 +    pinctrl-names = "default";
408 +    pinctrl-0 = <&pinctrl_flexcan1>;
409 +    status = "okay";
410 +};
411 +
412 +&flexcan2 {
413 +    pinctrl-names = "default";
414 +    pinctrl-0 = <&pinctrl_flexcan2>;
415 +    status = "okay";
416 +};
417 +
418 +/*+------------------------+
500850 419 +  |   MikroBUS interface   |
G 420 +  +------------------------+*/
421 +
422 +/* Same as RPi 40Pin extend interface: #32 */
423 +&pwm3 {
424 +    pinctrl-names = "default";
425 +    pinctrl-0 = <&pinctrl_pwm3>;
426 +    status = "okay";
427 +};
428 +
429 +/* Same as RPi 40Pin extend interface: #19, #21, #23, #24 */
430 +&uart1 {
431 +    pinctrl-names = "default";
432 +    pinctrl-0 = <&pinctrl_uart1>;
433 +    assigned-clocks = <&clk IMX8MP_CLK_UART1>;
434 +    assigned-clock-parents = <&clk IMX8MP_SYS_PLL1_80M>;
435 +    status = "okay";
436 +};
437 +
438 +/* Same as RPi 40Pin extend interface */
439 +&ecspi2 {
440 +    #address-cells = <1>;
441 +    #size-cells = <0>;
442 +    fsl,spi-num-chipselects = <1>;
443 +    pinctrl-names = "default";
444 +    pinctrl-0 = <&pinctrl_ecspi2>;
445 +    cs-gpios = <&gpio5 13 GPIO_ACTIVE_LOW>;
446 +    status = "okay";
447 +
448 +    spidev@0 {
449 +        compatible = "fsl,spidev", "semtech,sx1301";
450 +        reg = <0>;
451 +        spi-max-frequency = <2000000>;
452 +    };
453 +};
454 +
455 +/* Same as RPi 40Pin extend interface: #3, #5 */
456 +&i2c5 {
457 +    clock-frequency = <100000>;
458 +    pinctrl-names = "default";
459 +    pinctrl-0 = <&pinctrl_i2c5>;
460 +    status = "okay";
2b23f8 461 +
G 462 +    hdc1080@40 {
463 +        compatible = "ti,hdc1080";
464 +        reg = <0x40>;
465 +        status = "okay";
466 +    };
467 +
468 +    eeprom@50 {
469 +        compatible = "microchip,24c32", "atmel,24c32";
470 +        reg = <0x50>;
471 +        pagesize = <32>;
472 +        num-addresses = <8>;
473 +    };
500850 474 +};
G 475 +
476 +/*+------------------------+
7d0d56 477 +  |    PCA9450CHN PMIC     |
W 478 +  +------------------------+*/
479 +
480 +&i2c1 {
481 +    clock-frequency = <400000>;
500850 482 +    pinctrl-names = "default";
7d0d56 483 +    pinctrl-0 = <&pinctrl_i2c1>;
W 484 +    status = "okay";
485 +
486 +    pmic@25 {
487 +        compatible = "nxp,pca9450c";
488 +        reg = <0x25>;
489 +        pinctrl-names = "default";
490 +        pinctrl-0 = <&pinctrl_pmic>;
491 +        interrupt-parent = <&gpio1>;
492 +        interrupts = <3 IRQ_TYPE_LEVEL_LOW>;
493 +
494 +        regulators {
495 +            buck1: BUCK1 {
496 +                regulator-name = "BUCK1";
497 +                regulator-min-microvolt = <600000>;
498 +                regulator-max-microvolt = <2187500>;
499 +                regulator-boot-on;
500 +                regulator-always-on;
501 +                regulator-ramp-delay = <3125>;
502 +            };
503 +
504 +            buck2: BUCK2 {
505 +                regulator-name = "BUCK2";
506 +                regulator-min-microvolt = <600000>;
507 +                regulator-max-microvolt = <2187500>;
508 +                regulator-boot-on;
509 +                regulator-always-on;
510 +                regulator-ramp-delay = <3125>;
511 +                nxp,dvs-run-voltage = <950000>;
512 +                nxp,dvs-standby-voltage = <850000>;
513 +            };
514 +
515 +            buck4: BUCK4{
516 +                regulator-name = "BUCK4";
517 +                regulator-min-microvolt = <600000>;
518 +                regulator-max-microvolt = <3400000>;
519 +                regulator-boot-on;
520 +                regulator-always-on;
521 +            };
522 +
523 +            buck5: BUCK5{
524 +                regulator-name = "BUCK5";
525 +                regulator-min-microvolt = <600000>;
526 +                regulator-max-microvolt = <3400000>;
527 +                regulator-boot-on;
528 +                regulator-always-on;
529 +            };
530 +
531 +            buck6: BUCK6 {
532 +                regulator-name = "BUCK6";
533 +                regulator-min-microvolt = <600000>;
534 +                regulator-max-microvolt = <3400000>;
535 +                regulator-boot-on;
536 +                regulator-always-on;
537 +            };
538 +
539 +            ldo1: LDO1 {
540 +                regulator-name = "LDO1";
541 +                regulator-min-microvolt = <1600000>;
542 +                regulator-max-microvolt = <3300000>;
543 +                regulator-boot-on;
544 +                regulator-always-on;
545 +            };
546 +
547 +            ldo2: LDO2 {
548 +                regulator-name = "LDO2";
549 +                regulator-min-microvolt = <800000>;
550 +                regulator-max-microvolt = <1150000>;
551 +                regulator-boot-on;
552 +                regulator-always-on;
553 +            };
554 +
555 +            ldo3: LDO3 {
556 +                regulator-name = "LDO3";
557 +                regulator-min-microvolt = <800000>;
558 +                regulator-max-microvolt = <3300000>;
559 +                regulator-boot-on;
560 +                regulator-always-on;
561 +            };
562 +
563 +            ldo4: LDO4 {
564 +                regulator-name = "LDO4";
565 +                regulator-min-microvolt = <800000>;
566 +                regulator-max-microvolt = <3300000>;
567 +                regulator-boot-on;
568 +                regulator-always-on;
569 +            };
570 +
571 +            ldo5: LDO5 {
572 +                regulator-name = "LDO5";
573 +                regulator-min-microvolt = <1800000>;
574 +                regulator-max-microvolt = <3300000>;
575 +                regulator-boot-on;
576 +                regulator-always-on;
577 +            };
578 +        };
579 +    };
580 +};
581 +
582 +&iomuxc {
583 +    pinctrl-names = "default";
b8d029 584 +    pinctrl-0 = <&pinctrl_hog>;
G 585 +
586 +    pinctrl_hog: hoggrp {
587 +        fsl,pins = <
588 +            MX8MP_IOMUXC_HDMI_DDC_SCL__HDMIMIX_HDMI_SCL                 0x400001c2
589 +            MX8MP_IOMUXC_HDMI_DDC_SDA__HDMIMIX_HDMI_SDA                 0x400001c2
590 +            MX8MP_IOMUXC_HDMI_HPD__HDMIMIX_HDMI_HPD                     0x40000010
591 +            MX8MP_IOMUXC_HDMI_CEC__HDMIMIX_HDMI_CEC                     0x40000010
592 +            /*
593 +             * M.2 pin20 & pin21 need to be set to 11 for 88W9098 to select the
594 +             * default Reference Clock Frequency
595 +             */
596 +            MX8MP_IOMUXC_SD1_DATA7__GPIO2_IO09                          0x1c4
597 +        >;
598 +    };
7d0d56 599 +
500850 600 +    pinctrl_wdog: wdoggrp {
G 601 +        fsl,pins = <
602 +            MX8MP_IOMUXC_GPIO1_IO02__WDOG1_WDOG_B                       0xc6
603 +        >;
604 +    };
605 +
7d0d56 606 +    pinctrl_leds: ledsgrp {
W 607 +        fsl,pins = <
608 +            MX8MP_IOMUXC_NAND_READY_B__GPIO3_IO16                       0x140
7872ca 609 +            MX8MP_IOMUXC_GPIO1_IO14__GPIO1_IO14                         0x140
G 610 +            MX8MP_IOMUXC_GPIO1_IO09__GPIO1_IO09                         0x140
611 +            MX8MP_IOMUXC_SAI5_RXD0__GPIO3_IO21                          0x140
612 +        >;
613 +    };
614 +
615 +    pinctrl_keys: keysgrp {
616 +        fsl,pins = <
617 +            MX8MP_IOMUXC_ECSPI1_MISO__GPIO5_IO08                        0x140
618 +            MX8MP_IOMUXC_ECSPI1_SS0__GPIO5_IO09                         0x140
619 +            MX8MP_IOMUXC_UART3_RXD__GPIO5_IO26                          0x140
620 +            MX8MP_IOMUXC_UART3_TXD__GPIO5_IO27                          0x140
7d0d56 621 +        >;
W 622 +    };
623 +
500850 624 +    pinctrl_pwm1: pwm1grp {
7d0d56 625 +        fsl,pins = <
500850 626 +            MX8MP_IOMUXC_GPIO1_IO08__PWM1_OUT                           0x116
G 627 +        >;
628 +    };
629 +
630 +    pinctrl_pwm3: pwm3grp {
631 +        fsl,pins = <
632 +            MX8MP_IOMUXC_SAI5_RXC__PWM3_OUT                             0x116
633 +        >;
634 +    };
635 +
636 +    pinctrl_uart1: uart1grp {
637 +        fsl,pins = <
638 +            MX8MP_IOMUXC_UART1_RXD__UART1_DCE_RX                        0x140
639 +            MX8MP_IOMUXC_UART1_TXD__UART1_DCE_TX                        0x140
7d0d56 640 +        >;
W 641 +    };
642 +
643 +    pinctrl_uart2: uart2grp {
644 +        fsl,pins = <
645 +            MX8MP_IOMUXC_UART2_RXD__UART2_DCE_RX                        0x49
646 +            MX8MP_IOMUXC_UART2_TXD__UART2_DCE_TX                        0x49
647 +        >;
648 +    };
649 +
ac4b9f 650 +    pinctrl_uart3: uart3grp {
G 651 +        fsl,pins = <
652 +            MX8MP_IOMUXC_ECSPI1_SCLK__UART3_DCE_RX                      0x82
653 +            MX8MP_IOMUXC_ECSPI1_MOSI__UART3_DCE_TX                      0x82
654 +        >;
655 +    };
656 +
657 +    pinctrl_flexcan1: flexcan1grp {
658 +        fsl,pins = <
659 +            MX8MP_IOMUXC_SPDIF_TX__CAN1_TX                              0x154
660 +            MX8MP_IOMUXC_SPDIF_RX__CAN1_RX                              0x154
661 +        >;
662 +    };
663 +
664 +    pinctrl_flexcan2: flexcan2grp {
665 +        fsl,pins = <
666 +            MX8MP_IOMUXC_SAI5_MCLK__CAN2_RX                             0x154
667 +            MX8MP_IOMUXC_SAI5_RXD3__CAN2_TX                             0x154
668 +        >;
669 +    };
670 +
500850 671 +    pinctrl_ecspi2: ecspi2grp {
G 672 +        fsl,pins = <
673 +            MX8MP_IOMUXC_ECSPI2_SCLK__ECSPI2_SCLK                       0x82
674 +            MX8MP_IOMUXC_ECSPI2_MOSI__ECSPI2_MOSI                       0x82
675 +            MX8MP_IOMUXC_ECSPI2_MISO__ECSPI2_MISO                       0x82
676 +            MX8MP_IOMUXC_ECSPI2_SS0__GPIO5_IO13                         0x40000
677 +        >;
678 +    };
679 +
7d0d56 680 +    pinctrl_i2c1: i2c1grp {
W 681 +        fsl,pins = <
682 +            MX8MP_IOMUXC_I2C1_SCL__I2C1_SCL                             0x400001c3
683 +            MX8MP_IOMUXC_I2C1_SDA__I2C1_SDA                             0x400001c3
684 +        >;
685 +    };
686 +
2b23f8 687 +    pinctrl_i2c2: i2c2grp {
G 688 +        fsl,pins = <
689 +            MX8MP_IOMUXC_I2C2_SCL__I2C2_SCL                             0x400001c2
690 +            MX8MP_IOMUXC_I2C2_SDA__I2C2_SDA                             0x400001c2
691 +        >;
692 +    };
693 +
500850 694 +    pinctrl_i2c5: i2c5grp {
7d0d56 695 +        fsl,pins = <
500850 696 +            MX8MP_IOMUXC_SD1_CMD__I2C5_SDA                              0x400001c2
G 697 +            MX8MP_IOMUXC_SD1_CLK__I2C5_SCL                              0x400001c2
7d0d56 698 +        >;
W 699 +    };
700 +
35deae 701 +    pinctrl_sai3: sai3grp {
G 702 +        fsl,pins = <
703 +            MX8MP_IOMUXC_SAI3_TXFS__AUDIOMIX_SAI3_TX_SYNC               0xd6
704 +            MX8MP_IOMUXC_SAI3_TXC__AUDIOMIX_SAI3_TX_BCLK                0xd6
705 +            MX8MP_IOMUXC_SAI3_RXD__AUDIOMIX_SAI3_RX_DATA00              0xd6
706 +            MX8MP_IOMUXC_SAI3_TXD__AUDIOMIX_SAI3_TX_DATA00              0xd6
707 +            MX8MP_IOMUXC_SAI3_MCLK__AUDIOMIX_SAI3_MCLK                  0xd6
708 +            MX8MP_IOMUXC_SAI3_RXC__GPIO4_IO29                           0xd6
709 +        >;
710 +    };
711 +
7d0d56 712 +    pinctrl_pmic: pmicirq {
W 713 +        fsl,pins = <
714 +            MX8MP_IOMUXC_GPIO1_IO03__GPIO1_IO03                         0x41
715 +        >;
716 +    };
717 +
718 +    pinctrl_usdhc2_gpio: usdhc2grp-gpio {
719 +        fsl,pins = <
720 +            MX8MP_IOMUXC_SD2_CD_B__GPIO2_IO12                           0x1c4
721 +        >;
722 +    };
723 +
724 +    pinctrl_usdhc2: usdhc2grp {
725 +        fsl,pins = <
726 +            MX8MP_IOMUXC_SD2_CLK__USDHC2_CLK                            0x190
727 +            MX8MP_IOMUXC_SD2_CMD__USDHC2_CMD                            0x1d0
728 +            MX8MP_IOMUXC_SD2_DATA0__USDHC2_DATA0                        0x1d0
729 +            MX8MP_IOMUXC_SD2_DATA1__USDHC2_DATA1                        0x1d0
730 +            MX8MP_IOMUXC_SD2_DATA2__USDHC2_DATA2                        0x1d0
731 +            MX8MP_IOMUXC_SD2_DATA3__USDHC2_DATA3                        0x1d0
732 +            MX8MP_IOMUXC_GPIO1_IO04__USDHC2_VSELECT                     0xc1
733 +        >;
734 +    };
735 +
736 +    pinctrl_usdhc2_100mhz: usdhc2grp-100mhz {
737 +        fsl,pins = <
738 +            MX8MP_IOMUXC_SD2_CLK__USDHC2_CLK                            0x194
739 +            MX8MP_IOMUXC_SD2_CMD__USDHC2_CMD                            0x1d4
740 +            MX8MP_IOMUXC_SD2_DATA0__USDHC2_DATA0                        0x1d4
741 +            MX8MP_IOMUXC_SD2_DATA1__USDHC2_DATA1                        0x1d4
742 +            MX8MP_IOMUXC_SD2_DATA2__USDHC2_DATA2                        0x1d4
743 +            MX8MP_IOMUXC_SD2_DATA3__USDHC2_DATA3                        0x1d4
744 +            MX8MP_IOMUXC_GPIO1_IO04__USDHC2_VSELECT                     0xc1
745 +        >;
746 +    };
747 +
748 +    pinctrl_usdhc2_200mhz: usdhc2grp-200mhz {
749 +        fsl,pins = <
750 +            MX8MP_IOMUXC_SD2_CLK__USDHC2_CLK                            0x196
751 +            MX8MP_IOMUXC_SD2_CMD__USDHC2_CMD                            0x1d6
752 +            MX8MP_IOMUXC_SD2_DATA0__USDHC2_DATA0                        0x1d6
753 +            MX8MP_IOMUXC_SD2_DATA1__USDHC2_DATA1                        0x1d6
754 +            MX8MP_IOMUXC_SD2_DATA2__USDHC2_DATA2                        0x1d6
755 +            MX8MP_IOMUXC_SD2_DATA3__USDHC2_DATA3                        0x1d6
756 +            MX8MP_IOMUXC_GPIO1_IO04__USDHC2_VSELECT                     0xc1
757 +        >;
758 +    };
759 +
760 +    pinctrl_usdhc3: usdhc3grp {
761 +        fsl,pins = <
762 +            MX8MP_IOMUXC_NAND_WE_B__USDHC3_CLK                          0x190
763 +            MX8MP_IOMUXC_NAND_WP_B__USDHC3_CMD                          0x1d0
764 +            MX8MP_IOMUXC_NAND_DATA04__USDHC3_DATA0                      0x1d0
765 +            MX8MP_IOMUXC_NAND_DATA05__USDHC3_DATA1                      0x1d0
766 +            MX8MP_IOMUXC_NAND_DATA06__USDHC3_DATA2                      0x1d0
767 +            MX8MP_IOMUXC_NAND_DATA07__USDHC3_DATA3                      0x1d0
768 +            MX8MP_IOMUXC_NAND_RE_B__USDHC3_DATA4                        0x1d0
769 +            MX8MP_IOMUXC_NAND_CE2_B__USDHC3_DATA5                       0x1d0
770 +            MX8MP_IOMUXC_NAND_CE3_B__USDHC3_DATA6                       0x1d0
771 +            MX8MP_IOMUXC_NAND_CLE__USDHC3_DATA7                         0x1d0
772 +            MX8MP_IOMUXC_NAND_CE1_B__USDHC3_STROBE                      0x190
773 +        >;
774 +    };
775 +
776 +    pinctrl_usdhc3_100mhz: usdhc3grp-100mhz {
777 +        fsl,pins = <
778 +            MX8MP_IOMUXC_NAND_WE_B__USDHC3_CLK                          0x194
779 +            MX8MP_IOMUXC_NAND_WP_B__USDHC3_CMD                          0x1d4
780 +            MX8MP_IOMUXC_NAND_DATA04__USDHC3_DATA0                      0x1d4
781 +            MX8MP_IOMUXC_NAND_DATA05__USDHC3_DATA1                      0x1d4
782 +            MX8MP_IOMUXC_NAND_DATA06__USDHC3_DATA2                      0x1d4
783 +            MX8MP_IOMUXC_NAND_DATA07__USDHC3_DATA3                      0x1d4
784 +            MX8MP_IOMUXC_NAND_RE_B__USDHC3_DATA4                        0x1d4
785 +            MX8MP_IOMUXC_NAND_CE2_B__USDHC3_DATA5                       0x1d4
786 +            MX8MP_IOMUXC_NAND_CE3_B__USDHC3_DATA6                       0x1d4
787 +            MX8MP_IOMUXC_NAND_CLE__USDHC3_DATA7                         0x1d4
788 +            MX8MP_IOMUXC_NAND_CE1_B__USDHC3_STROBE                      0x194
789 +        >;
790 +    };
791 +
792 +    pinctrl_usdhc3_200mhz: usdhc3grp-200mhz {
793 +        fsl,pins = <
794 +            MX8MP_IOMUXC_NAND_WE_B__USDHC3_CLK                          0x196
795 +            MX8MP_IOMUXC_NAND_WP_B__USDHC3_CMD                          0x1d6
796 +            MX8MP_IOMUXC_NAND_DATA04__USDHC3_DATA0                      0x1d6
797 +            MX8MP_IOMUXC_NAND_DATA05__USDHC3_DATA1                      0x1d6
798 +            MX8MP_IOMUXC_NAND_DATA06__USDHC3_DATA2                      0x1d6
799 +            MX8MP_IOMUXC_NAND_DATA07__USDHC3_DATA3                      0x1d6
800 +            MX8MP_IOMUXC_NAND_RE_B__USDHC3_DATA4                        0x1d6
801 +            MX8MP_IOMUXC_NAND_CE2_B__USDHC3_DATA5                       0x1d6
802 +            MX8MP_IOMUXC_NAND_CE3_B__USDHC3_DATA6                       0x1d6
803 +            MX8MP_IOMUXC_NAND_CLE__USDHC3_DATA7                         0x1d6
804 +            MX8MP_IOMUXC_NAND_CE1_B__USDHC3_STROBE                      0x196
805 +        >;
806 +    };
807 +
808 +    pinctrl_eqos: eqosgrp {
809 +        fsl,pins = <
810 +            MX8MP_IOMUXC_ENET_MDC__ENET_QOS_MDC                         0x2
811 +            MX8MP_IOMUXC_ENET_MDIO__ENET_QOS_MDIO                       0x2
812 +            MX8MP_IOMUXC_ENET_RD0__ENET_QOS_RGMII_RD0                   0x90
813 +            MX8MP_IOMUXC_ENET_RD1__ENET_QOS_RGMII_RD1                   0x90
814 +            MX8MP_IOMUXC_ENET_RD2__ENET_QOS_RGMII_RD2                   0x90
815 +            MX8MP_IOMUXC_ENET_RD3__ENET_QOS_RGMII_RD3                   0x90
816 +            MX8MP_IOMUXC_ENET_RXC__CCM_ENET_QOS_CLOCK_GENERATE_RX_CLK   0x90
817 +            MX8MP_IOMUXC_ENET_RX_CTL__ENET_QOS_RGMII_RX_CTL             0x90
818 +            MX8MP_IOMUXC_ENET_TD0__ENET_QOS_RGMII_TD0                   0x16
819 +            MX8MP_IOMUXC_ENET_TD1__ENET_QOS_RGMII_TD1                   0x16
820 +            MX8MP_IOMUXC_ENET_TD2__ENET_QOS_RGMII_TD2                   0x16
821 +            MX8MP_IOMUXC_ENET_TD3__ENET_QOS_RGMII_TD3                   0x16
822 +            MX8MP_IOMUXC_ENET_TX_CTL__ENET_QOS_RGMII_TX_CTL             0x16
823 +            MX8MP_IOMUXC_ENET_TXC__CCM_ENET_QOS_CLOCK_GENERATE_TX_CLK   0x16
824 +        >;
825 +    };
826 +
827 +    pinctrl_fec: fecgrp {
828 +        fsl,pins = <
829 +            MX8MP_IOMUXC_SAI1_RXD2__ENET1_MDC                           0x2
830 +            MX8MP_IOMUXC_SAI1_RXD3__ENET1_MDIO                          0x2
831 +            MX8MP_IOMUXC_SAI1_RXD4__ENET1_RGMII_RD0                     0x90
832 +            MX8MP_IOMUXC_SAI1_RXD5__ENET1_RGMII_RD1                     0x90
833 +            MX8MP_IOMUXC_SAI1_RXD6__ENET1_RGMII_RD2                     0x90
834 +            MX8MP_IOMUXC_SAI1_RXD7__ENET1_RGMII_RD3                     0x90
835 +            MX8MP_IOMUXC_SAI1_TXC__ENET1_RGMII_RXC                      0x90
836 +            MX8MP_IOMUXC_SAI1_TXFS__ENET1_RGMII_RX_CTL                  0x90
837 +            MX8MP_IOMUXC_SAI1_TXD0__ENET1_RGMII_TD0                     0x16
838 +            MX8MP_IOMUXC_SAI1_TXD1__ENET1_RGMII_TD1                     0x16
839 +            MX8MP_IOMUXC_SAI1_TXD2__ENET1_RGMII_TD2                     0x16
840 +            MX8MP_IOMUXC_SAI1_TXD3__ENET1_RGMII_TD3                     0x16
841 +            MX8MP_IOMUXC_SAI1_TXD4__ENET1_RGMII_TX_CTL                  0x16
842 +            MX8MP_IOMUXC_SAI1_TXD5__ENET1_RGMII_TXC                     0x16
843 +        >;
844 +    };
845 +};
846 diff --git a/arch/arm64/configs/igkboard-imx8mp_defconfig b/arch/arm64/configs/igkboard-imx8mp_defconfig
847 new file mode 100644
2f7a23 848 index 000000000..b0f923742
7d0d56 849 --- /dev/null
W 850 +++ b/arch/arm64/configs/igkboard-imx8mp_defconfig
2f7a23 851 @@ -0,0 +1,1103 @@
7d0d56 852 +CONFIG_SYSVIPC=y
W 853 +CONFIG_POSIX_MQUEUE=y
854 +CONFIG_AUDIT=y
855 +CONFIG_NO_HZ_IDLE=y
856 +CONFIG_HIGH_RES_TIMERS=y
857 +CONFIG_BPF_SYSCALL=y
858 +CONFIG_BPF_JIT=y
859 +CONFIG_PREEMPT=y
860 +CONFIG_IRQ_TIME_ACCOUNTING=y
861 +CONFIG_BSD_PROCESS_ACCT=y
862 +CONFIG_BSD_PROCESS_ACCT_V3=y
863 +CONFIG_TASKSTATS=y
864 +CONFIG_TASK_XACCT=y
865 +CONFIG_TASK_IO_ACCOUNTING=y
866 +CONFIG_IKCONFIG=y
867 +CONFIG_IKCONFIG_PROC=y
868 +CONFIG_NUMA_BALANCING=y
869 +CONFIG_MEMCG=y
870 +CONFIG_BLK_CGROUP=y
871 +CONFIG_CGROUP_PIDS=y
872 +CONFIG_CGROUP_FREEZER=y
873 +CONFIG_CGROUP_HUGETLB=y
874 +CONFIG_CPUSETS=y
875 +CONFIG_CGROUP_DEVICE=y
876 +CONFIG_CGROUP_CPUACCT=y
877 +CONFIG_CGROUP_PERF=y
878 +CONFIG_CGROUP_BPF=y
f77a70 879 +CONFIG_NAMESPACES=y
7d0d56 880 +CONFIG_USER_NS=y
W 881 +CONFIG_SCHED_AUTOGROUP=y
882 +CONFIG_RELAY=y
883 +CONFIG_BLK_DEV_INITRD=y
f77a70 884 +CONFIG_EXPERT=y
7d0d56 885 +CONFIG_KALLSYMS_ALL=y
W 886 +CONFIG_PROFILING=y
887 +CONFIG_ARCH_KEEMBAY=y
888 +CONFIG_ARCH_NXP=y
889 +CONFIG_ARCH_LAYERSCAPE=y
890 +CONFIG_ARCH_MXC=y
891 +CONFIG_ARCH_S32=y
892 +CONFIG_SOC_S32V234=y
893 +CONFIG_ARM64_VA_BITS_48=y
894 +CONFIG_SCHED_MC=y
895 +CONFIG_SCHED_SMT=y
896 +CONFIG_NUMA=y
897 +CONFIG_KEXEC=y
898 +CONFIG_KEXEC_FILE=y
899 +CONFIG_CRASH_DUMP=y
900 +CONFIG_XEN=y
901 +CONFIG_ARCH_FORCE_MAX_ORDER=14
902 +CONFIG_COMPAT=y
903 +CONFIG_RANDOMIZE_BASE=y
904 +CONFIG_PM_DEBUG=y
905 +CONFIG_PM_TEST_SUSPEND=y
906 +CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y
907 +CONFIG_ENERGY_MODEL=y
908 +CONFIG_ARM_PSCI_CPUIDLE=y
909 +CONFIG_CPU_FREQ=y
910 +CONFIG_CPU_FREQ_STAT=y
911 +CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
912 +CONFIG_CPU_FREQ_GOV_POWERSAVE=y
913 +CONFIG_CPU_FREQ_GOV_USERSPACE=y
914 +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
915 +CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y
916 +CONFIG_CPUFREQ_DT=y
917 +CONFIG_ACPI_CPPC_CPUFREQ=m
918 +CONFIG_ARM_SCPI_CPUFREQ=y
919 +CONFIG_ARM_IMX_CPUFREQ_DT=y
920 +CONFIG_ARM_SCMI_CPUFREQ=y
921 +CONFIG_QORIQ_CPUFREQ=y
922 +CONFIG_ACPI=y
923 +CONFIG_ACPI_APEI=y
924 +CONFIG_ACPI_APEI_GHES=y
925 +CONFIG_ACPI_APEI_MEMORY_FAILURE=y
926 +CONFIG_ACPI_APEI_EINJ=y
927 +CONFIG_VIRTUALIZATION=y
928 +CONFIG_KVM=y
929 +CONFIG_JUMP_LABEL=y
930 +CONFIG_MODULES=y
931 +CONFIG_MODULE_UNLOAD=y
932 +CONFIG_MODVERSIONS=y
933 +# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
934 +# CONFIG_COMPAT_BRK is not set
935 +CONFIG_KSM=y
936 +CONFIG_MEMORY_FAILURE=y
937 +CONFIG_TRANSPARENT_HUGEPAGE=y
938 +CONFIG_NET=y
939 +CONFIG_PACKET=y
940 +CONFIG_UNIX=y
941 +CONFIG_TLS=y
942 +CONFIG_TLS_DEVICE=y
943 +CONFIG_INET=y
944 +CONFIG_IP_MULTICAST=y
945 +CONFIG_IP_PNP=y
946 +CONFIG_IP_PNP_DHCP=y
947 +CONFIG_IP_PNP_BOOTP=y
948 +CONFIG_IPV6_SIT=m
949 +CONFIG_NETFILTER=y
950 +CONFIG_BRIDGE_NETFILTER=m
951 +CONFIG_NETFILTER_NETLINK_OSF=m
952 +CONFIG_NF_CONNTRACK=m
953 +CONFIG_NF_CONNTRACK_EVENTS=y
954 +CONFIG_NF_TABLES=y
955 +CONFIG_NF_TABLES_INET=y
956 +CONFIG_NF_TABLES_NETDEV=y
957 +CONFIG_NFT_CT=m
958 +CONFIG_NFT_MASQ=m
959 +CONFIG_NFT_NAT=m
960 +CONFIG_NFT_COMPAT=m
961 +CONFIG_NFT_DUP_NETDEV=m
962 +CONFIG_NFT_FWD_NETDEV=m
963 +CONFIG_NF_FLOW_TABLE=m
964 +CONFIG_NETFILTER_XT_MARK=m
965 +CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
966 +CONFIG_NETFILTER_XT_TARGET_LOG=m
967 +CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
968 +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
969 +CONFIG_NETFILTER_XT_MATCH_IPVS=m
970 +CONFIG_IP_VS=m
971 +CONFIG_NF_SOCKET_IPV4=m
972 +CONFIG_NF_TPROXY_IPV4=m
973 +CONFIG_IP_NF_IPTABLES=m
974 +CONFIG_IP_NF_FILTER=m
975 +CONFIG_IP_NF_TARGET_REJECT=m
976 +CONFIG_IP_NF_NAT=m
977 +CONFIG_IP_NF_TARGET_MASQUERADE=m
978 +CONFIG_IP_NF_MANGLE=m
979 +CONFIG_NF_SOCKET_IPV6=m
980 +CONFIG_NF_TPROXY_IPV6=m
981 +CONFIG_IP6_NF_IPTABLES=m
982 +CONFIG_IP6_NF_FILTER=m
983 +CONFIG_IP6_NF_TARGET_REJECT=m
984 +CONFIG_IP6_NF_MANGLE=m
985 +CONFIG_IP6_NF_NAT=m
986 +CONFIG_IP6_NF_TARGET_MASQUERADE=m
987 +CONFIG_NF_TABLES_BRIDGE=m
988 +CONFIG_BRIDGE_NF_EBTABLES=m
989 +CONFIG_BRIDGE=y
990 +CONFIG_BRIDGE_VLAN_FILTERING=y
991 +CONFIG_NET_DSA=m
992 +CONFIG_VLAN_8021Q_GVRP=y
993 +CONFIG_VLAN_8021Q_MVRP=y
994 +CONFIG_LLC2=y
995 +CONFIG_NET_SCHED=y
996 +CONFIG_NET_SCH_MULTIQ=m
997 +CONFIG_NET_SCH_CBS=m
998 +CONFIG_NET_SCH_ETF=m
999 +CONFIG_NET_SCH_TAPRIO=m
1000 +CONFIG_NET_SCH_MQPRIO=m
1001 +CONFIG_NET_SCH_INGRESS=m
1002 +CONFIG_NET_CLS_BASIC=m
1003 +CONFIG_NET_CLS_U32=m
1004 +CONFIG_NET_CLS_FLOWER=m
1005 +CONFIG_NET_CLS_ACT=y
1006 +CONFIG_NET_ACT_GACT=m
1007 +CONFIG_NET_ACT_MIRRED=m
1008 +CONFIG_NET_ACT_SKBEDIT=m
1009 +CONFIG_NET_ACT_GATE=m
1010 +CONFIG_TSN=y
1011 +CONFIG_QRTR=m
1012 +CONFIG_QRTR_SMD=m
1013 +CONFIG_QRTR_TUN=m
1014 +CONFIG_NET_PKTGEN=m
ac4b9f 1015 +CONFIG_CAN=y
G 1016 +CONFIG_CAN_ISOTP=y
7d0d56 1017 +CONFIG_BT=y
W 1018 +CONFIG_BT_RFCOMM=y
1019 +CONFIG_BT_RFCOMM_TTY=y
1020 +CONFIG_BT_BNEP=y
1021 +CONFIG_BT_BNEP_MC_FILTER=y
1022 +CONFIG_BT_BNEP_PROTO_FILTER=y
1023 +CONFIG_BT_HIDP=y
1024 +CONFIG_BT_LEDS=y
1025 +# CONFIG_BT_DEBUGFS is not set
1026 +CONFIG_BT_HCIBTUSB=m
1027 +CONFIG_BT_HCIUART=y
1028 +CONFIG_BT_HCIUART_BCSP=y
1029 +CONFIG_BT_HCIUART_ATH3K=y
1030 +CONFIG_BT_HCIUART_LL=y
1031 +CONFIG_BT_HCIUART_3WIRE=y
1032 +CONFIG_BT_HCIUART_BCM=y
1033 +CONFIG_BT_HCIUART_QCA=y
1034 +CONFIG_BT_HCIVHCI=y
1035 +CONFIG_BT_NXPUART=m
1036 +CONFIG_CFG80211=y
1037 +CONFIG_NL80211_TESTMODE=y
1038 +CONFIG_CFG80211_WEXT=y
1039 +CONFIG_MAC80211=y
1040 +CONFIG_MAC80211_LEDS=y
1041 +CONFIG_NFC=m
1042 +CONFIG_NFC_NCI=m
1043 +CONFIG_NFC_S3FWRN5_I2C=m
1044 +CONFIG_PCI=y
1045 +CONFIG_PCIEPORTBUS=y
1046 +CONFIG_PCI_IOV=y
1047 +CONFIG_PCI_PASID=y
1048 +CONFIG_HOTPLUG_PCI=y
1049 +CONFIG_HOTPLUG_PCI_ACPI=y
1050 +CONFIG_PCI_HOST_GENERIC=y
1051 +CONFIG_PCI_XGENE=y
1052 +CONFIG_PCIE_ALTERA=y
1053 +CONFIG_PCIE_ALTERA_MSI=y
1054 +CONFIG_PCI_HOST_THUNDER_PEM=y
1055 +CONFIG_PCI_HOST_THUNDER_ECAM=y
1056 +CONFIG_PCI_IMX6_HOST=y
1057 +CONFIG_PCI_IMX6_EP=y
1058 +CONFIG_PCI_LAYERSCAPE=y
1059 +CONFIG_PCI_HISI=y
1060 +CONFIG_PCIE_KIRIN=y
1061 +CONFIG_PCI_MESON=m
1062 +CONFIG_PCIE_LAYERSCAPE_GEN4=y
1063 +CONFIG_PCI_ENDPOINT=y
1064 +CONFIG_PCI_ENDPOINT_CONFIGFS=y
1065 +CONFIG_PCI_EPF_TEST=y
1066 +CONFIG_DEVTMPFS=y
1067 +CONFIG_DEVTMPFS_MOUNT=y
1068 +CONFIG_FW_LOADER_USER_HELPER=y
1069 +CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y
1070 +CONFIG_BRCMSTB_GISB_ARB=y
1071 +CONFIG_VEXPRESS_CONFIG=y
1072 +CONFIG_FSL_MC_UAPI_SUPPORT=y
1073 +CONFIG_ARM_SCMI_PROTOCOL=y
1074 +CONFIG_ARM_SCPI_PROTOCOL=y
1075 +CONFIG_EFI_CAPSULE_LOADER=y
1076 +CONFIG_IMX_DSP=y
1077 +CONFIG_IMX_SCU=y
1078 +CONFIG_IMX_SCU_PD=y
1079 +CONFIG_IMX_EL_ENCLAVE=y
1080 +CONFIG_GNSS=m
1081 +CONFIG_GNSS_MTK_SERIAL=m
1082 +CONFIG_MTD=y
1083 +CONFIG_MTD_CMDLINE_PARTS=y
1084 +CONFIG_MTD_BLOCK=y
1085 +CONFIG_MTD_CFI=y
1086 +CONFIG_MTD_CFI_ADV_OPTIONS=y
1087 +CONFIG_MTD_CFI_INTELEXT=y
1088 +CONFIG_MTD_CFI_AMDSTD=y
1089 +CONFIG_MTD_CFI_STAA=y
1090 +CONFIG_MTD_PHYSMAP=y
1091 +CONFIG_MTD_PHYSMAP_OF=y
1092 +CONFIG_MTD_DATAFLASH=y
1093 +CONFIG_MTD_SST25L=y
1094 +CONFIG_MTD_RAW_NAND=y
1095 +CONFIG_MTD_NAND_DENALI_DT=y
1096 +CONFIG_MTD_NAND_GPMI_NAND=y
1097 +CONFIG_MTD_NAND_FSL_IFC=y
1098 +CONFIG_MTD_SPI_NAND=y
1099 +CONFIG_MTD_SPI_NOR=y
1100 +# CONFIG_MTD_SPI_NOR_USE_4K_SECTORS is not set
1101 +CONFIG_MTD_UBI=y
1102 +CONFIG_BLK_DEV_LOOP=y
1103 +CONFIG_BLK_DEV_NBD=m
1104 +CONFIG_XEN_BLKDEV_BACKEND=m
1105 +CONFIG_VIRTIO_BLK=y
1106 +CONFIG_BLK_DEV_NVME=y
1107 +CONFIG_SRAM=y
1108 +CONFIG_PCI_ENDPOINT_TEST=y
2b23f8 1109 +CONFIG_EEPROM_AT24=y
7d0d56 1110 +CONFIG_UACCE=m
W 1111 +# CONFIG_SCSI_PROC_FS is not set
1112 +CONFIG_BLK_DEV_SD=y
1113 +CONFIG_SCSI_SAS_ATA=y
1114 +CONFIG_SCSI_HISI_SAS=y
1115 +CONFIG_SCSI_HISI_SAS_PCI=y
1116 +CONFIG_MEGARAID_SAS=y
1117 +CONFIG_SCSI_MPT3SAS=m
1118 +CONFIG_ATA=y
1119 +CONFIG_SATA_AHCI=y
1120 +CONFIG_SATA_AHCI_PLATFORM=y
1121 +CONFIG_AHCI_IMX=y
1122 +CONFIG_AHCI_CEVA=y
1123 +CONFIG_AHCI_XGENE=y
1124 +CONFIG_AHCI_QORIQ=y
1125 +CONFIG_SATA_SIL24=y
1126 +CONFIG_PATA_OF_PLATFORM=y
1127 +CONFIG_MD=y
1128 +CONFIG_BLK_DEV_MD=m
1129 +CONFIG_BLK_DEV_DM=m
1130 +CONFIG_DM_CRYPT=m
1131 +CONFIG_DM_MIRROR=m
1132 +CONFIG_DM_ZERO=m
1133 +CONFIG_NETDEVICES=y
1134 +CONFIG_MACVLAN=m
1135 +CONFIG_MACVTAP=m
1136 +CONFIG_TUN=y
1137 +CONFIG_VETH=m
1138 +CONFIG_VIRTIO_NET=y
1139 +CONFIG_NET_DSA_MSCC_FELIX=m
1140 +CONFIG_NET_DSA_SJA1105=m
1141 +CONFIG_NET_DSA_SJA1105_PTP=y
1142 +CONFIG_NET_DSA_SJA1105_TAS=y
1143 +CONFIG_NET_DSA_SJA1105_VL=y
1144 +CONFIG_AMD_XGBE=y
1145 +CONFIG_ATL1C=m
1146 +CONFIG_BCMGENET=m
1147 +CONFIG_BNX2X=m
1148 +CONFIG_SYSTEMPORT=m
1149 +CONFIG_MACB=y
1150 +CONFIG_THUNDER_NIC_PF=y
1151 +CONFIG_FEC=y
1152 +CONFIG_FEC_UIO=y
1153 +CONFIG_FSL_FMAN=y
1154 +CONFIG_FSL_DPAA_ETH=y
1155 +CONFIG_FSL_DPAA2_ETH=y
1156 +CONFIG_FSL_DPAA2_MAC=y
1157 +CONFIG_FSL_DPAA2_SWITCH=y
1158 +CONFIG_FSL_ENETC=y
1159 +CONFIG_FSL_ENETC_VF=y
1160 +CONFIG_FSL_ENETC_QOS=y
1161 +CONFIG_ENETC_TSN=y
1162 +CONFIG_HIX5HD2_GMAC=y
1163 +CONFIG_HNS_DSAF=y
1164 +CONFIG_HNS_ENET=y
1165 +CONFIG_HNS3=y
1166 +CONFIG_HNS3_HCLGE=y
1167 +CONFIG_HNS3_ENET=y
1168 +CONFIG_E1000=y
1169 +CONFIG_E1000E=y
1170 +CONFIG_IGB=y
1171 +CONFIG_IGBVF=y
1172 +CONFIG_MVMDIO=y
1173 +CONFIG_SKY2=y
1174 +CONFIG_MLX4_EN=m
1175 +CONFIG_MLX5_CORE=m
1176 +CONFIG_MLX5_CORE_EN=y
1177 +CONFIG_MSCC_OCELOT_SWITCH=y
1178 +CONFIG_QCOM_EMAC=m
1179 +CONFIG_RMNET=m
1180 +CONFIG_SMC91X=y
1181 +CONFIG_SMSC911X=y
1182 +CONFIG_STMMAC_ETH=y
1183 +CONFIG_DWMAC_GENERIC=m
1184 +CONFIG_AQUANTIA_PHY=y
1185 +CONFIG_BROADCOM_PHY=m
1186 +CONFIG_BCM54140_PHY=m
1187 +CONFIG_MARVELL_PHY=m
1188 +CONFIG_MARVELL_10G_PHY=m
1189 +CONFIG_MICREL_PHY=y
1190 +CONFIG_MICROSEMI_PHY=y
1191 +CONFIG_NXP_C45_TJA11XX_PHY=y
1192 +CONFIG_NXP_TJA11XX_PHY=y
1193 +CONFIG_AT803X_PHY=y
1194 +CONFIG_REALTEK_PHY=y
1195 +CONFIG_ROCKCHIP_PHY=y
1196 +CONFIG_VITESSE_PHY=y
ac4b9f 1197 +CONFIG_CAN_FLEXCAN=y
7d0d56 1198 +CONFIG_MDIO_BITBANG=y
W 1199 +CONFIG_MDIO_BUS_MUX_MULTIPLEXER=y
1200 +CONFIG_MDIO_BUS_MUX_MMIOREG=y
1201 +CONFIG_USB_PEGASUS=m
1202 +CONFIG_USB_RTL8150=m
1203 +CONFIG_USB_RTL8152=y
1204 +CONFIG_USB_LAN78XX=m
1205 +CONFIG_USB_USBNET=y
1206 +CONFIG_USB_NET_AX8817X=m
1207 +CONFIG_USB_NET_AX88179_178A=m
1208 +CONFIG_USB_NET_CDCETHER=m
1209 +CONFIG_USB_NET_CDC_NCM=m
1210 +CONFIG_USB_NET_DM9601=m
1211 +CONFIG_USB_NET_SR9800=m
1212 +CONFIG_USB_NET_SMSC75XX=m
1213 +CONFIG_USB_NET_SMSC95XX=m
1214 +CONFIG_USB_NET_NET1080=m
1215 +CONFIG_USB_NET_PLUSB=m
1216 +CONFIG_USB_NET_MCS7830=m
1217 +CONFIG_USB_NET_CDC_SUBSET=m
1218 +CONFIG_USB_NET_ZAURUS=m
1219 +CONFIG_HOSTAP=y
1220 +CONFIG_WL18XX=m
1221 +CONFIG_WLCORE_SDIO=m
1222 +CONFIG_XEN_NETDEV_BACKEND=m
1223 +CONFIG_IVSHMEM_NET=y
1224 +CONFIG_INPUT_EVDEV=y
1225 +CONFIG_KEYBOARD_ADC=m
1226 +CONFIG_KEYBOARD_GPIO=y
1227 +CONFIG_KEYBOARD_RPMSG=y
1228 +CONFIG_KEYBOARD_SNVS_PWRKEY=y
1229 +CONFIG_KEYBOARD_BBNSM_PWRKEY=y
1230 +CONFIG_KEYBOARD_IMX_SC_KEY=y
1231 +CONFIG_KEYBOARD_CROS_EC=y
1232 +CONFIG_INPUT_TOUCHSCREEN=y
1233 +CONFIG_TOUCHSCREEN_ATMEL_MXT=m
1234 +CONFIG_TOUCHSCREEN_EXC3000=m
1235 +CONFIG_TOUCHSCREEN_GOODIX=m
1236 +CONFIG_TOUCHSCREEN_EDT_FT5X06=m
1237 +CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_I2C=m
1238 +CONFIG_INPUT_MISC=y
1239 +CONFIG_INPUT_PWM_BEEPER=m
1240 +CONFIG_INPUT_PWM_VIBRA=m
1241 +# CONFIG_SERIO_SERPORT is not set
1242 +CONFIG_SERIO_AMBAKMI=y
1243 +CONFIG_LEGACY_PTY_COUNT=16
1244 +CONFIG_SERIAL_8250=y
1245 +CONFIG_SERIAL_8250_CONSOLE=y
1246 +CONFIG_SERIAL_8250_EXTENDED=y
1247 +CONFIG_SERIAL_8250_SHARE_IRQ=y
1248 +CONFIG_SERIAL_8250_DW=y
1249 +CONFIG_SERIAL_OF_PLATFORM=y
1250 +CONFIG_SERIAL_AMBA_PL011=y
1251 +CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
1252 +CONFIG_SERIAL_IMX=y
1253 +CONFIG_SERIAL_IMX_CONSOLE=y
1254 +CONFIG_SERIAL_XILINX_PS_UART=y
1255 +CONFIG_SERIAL_XILINX_PS_UART_CONSOLE=y
1256 +CONFIG_SERIAL_FSL_LPUART=y
1257 +CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
1258 +CONFIG_SERIAL_FSL_LINFLEXUART=y
1259 +CONFIG_SERIAL_FSL_LINFLEXUART_CONSOLE=y
1260 +CONFIG_SERIAL_DEV_BUS=y
1261 +CONFIG_VIRTIO_CONSOLE=y
1262 +CONFIG_IPMI_HANDLER=m
1263 +CONFIG_IPMI_DEVICE_INTERFACE=m
1264 +CONFIG_IPMI_SI=m
1265 +CONFIG_TCG_TPM=y
1266 +CONFIG_TCG_TIS_I2C_INFINEON=y
1267 +CONFIG_I2C_CHARDEV=y
1268 +CONFIG_I2C_MUX=y
1269 +CONFIG_I2C_MUX_GPIO=y
1270 +CONFIG_I2C_MUX_PCA954x=y
1271 +CONFIG_I2C_DESIGNWARE_PLATFORM=y
1272 +CONFIG_I2C_GPIO=m
1273 +CONFIG_I2C_IMX=y
1274 +CONFIG_I2C_IMX_LPI2C=y
1275 +CONFIG_I2C_RK3X=y
1276 +CONFIG_I2C_RPBUS=y
1277 +CONFIG_I2C_CROS_EC_TUNNEL=y
1278 +CONFIG_I2C_SLAVE_EEPROM=y
1279 +CONFIG_I3C=y
1280 +CONFIG_SVC_I3C_MASTER=y
1281 +CONFIG_SPI=y
1282 +CONFIG_SPI_CADENCE_QUADSPI=y
1283 +CONFIG_SPI_DESIGNWARE=m
1284 +CONFIG_SPI_DW_DMA=y
1285 +CONFIG_SPI_DW_MMIO=m
1286 +CONFIG_SPI_FSL_LPSPI=y
1287 +CONFIG_SPI_FSL_QUADSPI=y
1288 +CONFIG_SPI_NXP_FLEXSPI=y
1289 +CONFIG_SPI_IMX=y
1290 +CONFIG_SPI_FSL_DSPI=y
1291 +CONFIG_SPI_PL022=y
1292 +CONFIG_SPI_ROCKCHIP=y
1293 +CONFIG_SPI_SPIDEV=y
1294 +CONFIG_SPI_SLAVE=y
1295 +CONFIG_SPI_SLAVE_TIME=y
1296 +CONFIG_SPI_SLAVE_SYSTEM_CONTROL=y
1297 +CONFIG_SPMI=y
1298 +CONFIG_PPS_CLIENT_GPIO=y
1299 +CONFIG_PINCTRL_MAX77620=y
1300 +CONFIG_PINCTRL_SINGLE=y
1301 +CONFIG_PINCTRL_IMX8MM=y
1302 +CONFIG_PINCTRL_IMX8MN=y
1303 +CONFIG_PINCTRL_IMX8MP=y
1304 +CONFIG_PINCTRL_IMX8MQ=y
1305 +CONFIG_PINCTRL_IMX8QM=y
1306 +CONFIG_PINCTRL_IMX8QXP=y
1307 +CONFIG_PINCTRL_IMX8DXL=y
1308 +CONFIG_PINCTRL_IMX8ULP=y
1309 +CONFIG_PINCTRL_IMX93=y
1310 +CONFIG_PINCTRL_S32V234=y
f77a70 1311 +CONFIG_GPIO_SYSFS=y
7d0d56 1312 +CONFIG_GPIO_MXC=y
W 1313 +CONFIG_POWER_RESET_BRCMSTB=y
1314 +CONFIG_POWER_RESET_XGENE=y
1315 +CONFIG_POWER_RESET_SYSCON=y
1316 +CONFIG_SYSCON_REBOOT_MODE=y
1317 +CONFIG_BATTERY_SBS=m
1318 +CONFIG_BATTERY_BQ27XXX=y
1319 +CONFIG_BATTERY_MAX17042=m
1320 +CONFIG_CHARGER_BQ25890=m
1321 +CONFIG_CHARGER_BQ25980=m
1322 +CONFIG_SENSORS_ARM_SCMI=y
1323 +CONFIG_SENSORS_ARM_SCPI=y
1324 +CONFIG_SENSORS_FP9931=y
1325 +CONFIG_SENSORS_LM90=m
1326 +CONFIG_SENSORS_PWM_FAN=m
1327 +CONFIG_SENSORS_SL28CPLD=m
1328 +CONFIG_SENSORS_INA2XX=m
1329 +CONFIG_SENSORS_INA3221=m
1330 +CONFIG_THERMAL_WRITABLE_TRIPS=y
1331 +CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y
1332 +CONFIG_CPU_THERMAL=y
1333 +CONFIG_THERMAL_EMULATION=y
1334 +CONFIG_IMX_SC_THERMAL=y
1335 +CONFIG_IMX8MM_THERMAL=y
1336 +CONFIG_DEVICE_THERMAL=y
1337 +CONFIG_QORIQ_THERMAL=y
1338 +CONFIG_WATCHDOG=y
1339 +CONFIG_SL28CPLD_WATCHDOG=m
1340 +CONFIG_ARM_SP805_WATCHDOG=y
1341 +CONFIG_ARM_SBSA_WATCHDOG=y
1342 +CONFIG_DW_WATCHDOG=y
1343 +CONFIG_IMX2_WDT=y
1344 +CONFIG_IMX_SC_WDT=y
1345 +CONFIG_IMX7ULP_WDT=y
1346 +CONFIG_ARM_SMC_WATCHDOG=y
1347 +CONFIG_XEN_WDT=y
1348 +CONFIG_MFD_ADP5585=y
1349 +CONFIG_MFD_BD9571MWV=y
1350 +CONFIG_MFD_AXP20X_I2C=y
1351 +CONFIG_MFD_IMX_FLEXIO=y
1352 +CONFIG_MFD_HI6421_PMIC=y
1353 +CONFIG_MFD_FP9931=y
1354 +CONFIG_MFD_MAX77620=y
1355 +CONFIG_MFD_MT6397=y
1356 +CONFIG_MFD_RK808=y
1357 +CONFIG_MFD_SEC_CORE=y
1358 +CONFIG_MFD_SL28CPLD=y
1359 +CONFIG_MFD_ROHM_BD718XX=y
1360 +CONFIG_MFD_WCD934X=m
1361 +CONFIG_REGULATOR_FIXED_VOLTAGE=y
1362 +CONFIG_REGULATOR_AXP20X=y
1363 +CONFIG_REGULATOR_BD718XX=y
1364 +CONFIG_REGULATOR_BD9571MWV=y
1365 +CONFIG_REGULATOR_FAN53555=y
1366 +CONFIG_REGULATOR_GPIO=y
1367 +CONFIG_REGULATOR_HI6421V530=y
1368 +CONFIG_REGULATOR_MAX77620=y
1369 +CONFIG_REGULATOR_MAX8973=y
1370 +CONFIG_REGULATOR_FP9931=y
1371 +CONFIG_REGULATOR_MP8859=y
1372 +CONFIG_REGULATOR_MT6358=y
1373 +CONFIG_REGULATOR_MT6397=y
1374 +CONFIG_REGULATOR_PCA9450=y
1375 +CONFIG_REGULATOR_PF8X00=y
1376 +CONFIG_REGULATOR_PFUZE100=y
1377 +CONFIG_REGULATOR_PWM=y
1378 +CONFIG_REGULATOR_QCOM_SPMI=y
1379 +CONFIG_REGULATOR_RK808=y
1380 +CONFIG_REGULATOR_S2MPS11=y
1381 +CONFIG_REGULATOR_TPS65132=m
1382 +CONFIG_REGULATOR_VCTRL=m
1383 +CONFIG_RC_CORE=m
1384 +CONFIG_RC_DECODERS=y
1385 +CONFIG_IR_IMON_DECODER=m
1386 +CONFIG_IR_JVC_DECODER=m
1387 +CONFIG_IR_MCE_KBD_DECODER=m
1388 +CONFIG_IR_NEC_DECODER=m
1389 +CONFIG_IR_RC5_DECODER=m
1390 +CONFIG_IR_RC6_DECODER=m
1391 +CONFIG_IR_RCMM_DECODER=m
1392 +CONFIG_IR_SANYO_DECODER=m
1393 +CONFIG_IR_SHARP_DECODER=m
1394 +CONFIG_IR_SONY_DECODER=m
1395 +CONFIG_IR_XMP_DECODER=m
1396 +CONFIG_RC_DEVICES=y
1397 +CONFIG_IR_GPIO_CIR=m
1398 +CONFIG_MEDIA_SUPPORT=y
f77a70 1399 +CONFIG_MEDIA_SUPPORT_FILTER=y
7d0d56 1400 +CONFIG_MEDIA_CAMERA_SUPPORT=y
W 1401 +CONFIG_MEDIA_ANALOG_TV_SUPPORT=y
1402 +CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
1403 +CONFIG_MEDIA_SDR_SUPPORT=y
1404 +CONFIG_MEDIA_PLATFORM_SUPPORT=y
1405 +# CONFIG_DVB_NET is not set
1406 +CONFIG_MEDIA_USB_SUPPORT=y
1407 +CONFIG_USB_VIDEO_CLASS=m
1408 +CONFIG_V4L_PLATFORM_DRIVERS=y
1409 +CONFIG_SDR_PLATFORM_DRIVERS=y
1410 +CONFIG_V4L_MEM2MEM_DRIVERS=y
1411 +CONFIG_VIDEO_MX8_CAPTURE=y
1412 +CONFIG_VIDEO_MXC_CAPTURE=y
1413 +CONFIG_VIDEO_MXC_CSI_CAMERA=y
1414 +CONFIG_MXC_MIPI_CSI=y
1415 +CONFIG_MXC_CAMERA_OV5640_MIPI_V2=y
1416 +CONFIG_VIDEO_AMPHION_VPU=y
1417 +CONFIG_VIDEO_IMX8_JPEG=m
1418 +CONFIG_VIDEO_HANTRO=m
1419 +CONFIG_VIDEO_IMX219=m
1420 +CONFIG_VIDEO_OV5640=y
1421 +CONFIG_VIDEO_OV5645=m
1422 +CONFIG_VIDEO_AP1302=y
1423 +CONFIG_VIDEO_MT9M114=y
1424 +CONFIG_IMX_DPU_CORE=y
1425 +CONFIG_IMX8MM_LCDIF_CORE=y
1426 +CONFIG_IMX_LCDIFV3_CORE=y
1427 +CONFIG_DRM=y
1428 +CONFIG_DRM_I2C_NXP_TDA998X=m
1429 +CONFIG_DRM_MALI_DISPLAY=m
1430 +CONFIG_DRM_NOUVEAU=m
1431 +CONFIG_DRM_RCAR_DW_HDMI=m
1432 +CONFIG_DRM_PANEL_BOE_TV101WUM_NL6=m
1433 +CONFIG_DRM_PANEL_LVDS=m
1434 +CONFIG_DRM_PANEL_SIMPLE=y
1435 +CONFIG_DRM_PANEL_MANTIX_MLAF057WE51=m
1436 +CONFIG_DRM_PANEL_RAYDIUM_RM67191=y
1437 +CONFIG_DRM_PANEL_RAYDIUM_RM68200=y
1438 +CONFIG_DRM_PANEL_ROCKTECK_HIMAX8394F=y
1439 +CONFIG_DRM_PANEL_SEIKO_43WVF1G=y
1440 +CONFIG_DRM_PANEL_SITRONIX_ST7703=m
1441 +CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA=m
1442 +CONFIG_DRM_PANEL_WKS_101WX001=y
1443 +CONFIG_DRM_DISPLAY_CONNECTOR=m
1444 +CONFIG_DRM_LONTIUM_LT8912B=m
1445 +CONFIG_DRM_LONTIUM_LT9611=m
1446 +CONFIG_DRM_LONTIUM_LT9611UXC=m
1447 +CONFIG_DRM_FSL_IMX_LVDS_BRIDGE=y
1448 +CONFIG_DRM_NWL_MIPI_DSI=y
1449 +CONFIG_DRM_NXP_SEIKO_43WVFIG=y
1450 +CONFIG_DRM_PARADE_PS8640=m
1451 +CONFIG_DRM_SII902X=m
1452 +CONFIG_DRM_SIMPLE_BRIDGE=m
1453 +CONFIG_DRM_THINE_THC63LVD1024=m
1454 +CONFIG_DRM_TI_SN65DSI86=m
1455 +CONFIG_DRM_I2C_ADV7511=y
1456 +CONFIG_DRM_I2C_ADV7511_AUDIO=y
1457 +CONFIG_DRM_DW_HDMI_AHB_AUDIO=m
1458 +CONFIG_DRM_DW_HDMI_I2S_AUDIO=m
1459 +CONFIG_DRM_DW_HDMI_GP_AUDIO=y
1460 +CONFIG_DRM_DW_HDMI_CEC=m
1461 +CONFIG_DRM_ITE_IT6263=y
1462 +CONFIG_DRM_ITE_IT6161=y
1463 +CONFIG_DRM_IMX=y
1464 +CONFIG_DRM_IMX_LCDIF_MUX_DISPLAY=y
1465 +CONFIG_DRM_IMX_PARALLEL_DISPLAY=y
1466 +CONFIG_DRM_IMX_TVE=y
1467 +CONFIG_DRM_IMX_LDB=y
1468 +CONFIG_DRM_IMX8QM_LDB=y
1469 +CONFIG_DRM_IMX8QXP_LDB=y
1470 +CONFIG_DRM_IMX8MP_LDB=y
1471 +CONFIG_DRM_IMX93_LDB=y
1472 +CONFIG_DRM_IMX_DW_MIPI_DSI=y
1473 +CONFIG_DRM_IMX93_PARALLEL_DISPLAY_FORMAT=y
1474 +CONFIG_DRM_IMX_HDMI=y
1475 +CONFIG_DRM_IMX_SEC_DSIM=y
1476 +CONFIG_DRM_IMX_DCNANO=y
1477 +CONFIG_DRM_IMX_DCSS=y
1478 +CONFIG_DRM_IMX_CDNS_MHDP=y
1479 +CONFIG_DRM_ETNAVIV=m
1480 +CONFIG_DRM_HISI_HIBMC=m
1481 +CONFIG_DRM_HISI_KIRIN=m
1482 +CONFIG_DRM_MXSFB=y
1483 +CONFIG_DRM_PL111=m
1484 +CONFIG_DRM_LIMA=m
1485 +CONFIG_DRM_PANFROST=m
1486 +CONFIG_FB=y
1487 +CONFIG_FB_ARMCLCD=y
1488 +CONFIG_FB_EFI=y
1489 +CONFIG_FB_MXC_EINK_V2_PANEL=y
1490 +CONFIG_BACKLIGHT_PWM=y
1491 +CONFIG_BACKLIGHT_LP855X=m
1492 +CONFIG_BACKLIGHT_GPIO=y
f77a70 1493 +CONFIG_FRAMEBUFFER_CONSOLE=y
7d0d56 1494 +CONFIG_LOGO=y
W 1495 +# CONFIG_LOGO_LINUX_MONO is not set
1496 +# CONFIG_LOGO_LINUX_VGA16 is not set
1497 +CONFIG_SOUND=y
1498 +CONFIG_SND=y
1499 +CONFIG_SND_ALOOP=m
1500 +CONFIG_SND_USB_AUDIO=m
1501 +CONFIG_SND_SOC=y
1502 +CONFIG_SND_SOC_FSL_ASRC=m
1503 +CONFIG_SND_SOC_FSL_MQS=m
1504 +CONFIG_SND_SOC_FSL_MICFIL=m
1505 +CONFIG_SND_SOC_FSL_EASRC=m
1506 +CONFIG_SND_SOC_FSL_XCVR=m
1507 +CONFIG_SND_SOC_FSL_ESAI_CLIENT=y
1508 +CONFIG_SND_SOC_FSL_RPMSG=m
1509 +CONFIG_SND_IMX_SOC=m
1510 +CONFIG_SND_SOC_IMX_SGTL5000=m
1511 +CONFIG_SND_SOC_IMX_SPDIF=m
1512 +CONFIG_SND_SOC_FSL_ASOC_CARD=m
1513 +CONFIG_SND_SOC_IMX_AUDMIX=m
1514 +CONFIG_SND_SOC_IMX_HDMI=m
1515 +CONFIG_SND_SOC_IMX_CARD=m
1516 +CONFIG_SND_SOC_IMX_PCM512X=m
1517 +CONFIG_SND_SOC_SOF_TOPLEVEL=y
1518 +CONFIG_SND_SOC_SOF_OF=m
1519 +CONFIG_SND_SOC_SOF_IMX_TOPLEVEL=y
1520 +CONFIG_SND_SOC_SOF_IMX8=m
1521 +CONFIG_SND_SOC_SOF_IMX8M=m
1522 +CONFIG_SND_SOC_SOF_IMX8ULP=m
1523 +CONFIG_SND_SOC_AK4613=m
1524 +CONFIG_SND_SOC_BT_SCO=y
1525 +CONFIG_SND_SOC_CROS_EC_CODEC=m
1526 +CONFIG_SND_SOC_CS42XX8_I2C=y
1527 +CONFIG_SND_SOC_DMIC=m
1528 +CONFIG_SND_SOC_ES7134=m
1529 +CONFIG_SND_SOC_ES7241=m
1530 +CONFIG_SND_SOC_GTM601=m
1531 +CONFIG_SND_SOC_MAX98357A=m
1532 +CONFIG_SND_SOC_MAX98927=m
1533 +CONFIG_SND_SOC_MSM8916_WCD_ANALOG=m
1534 +CONFIG_SND_SOC_MSM8916_WCD_DIGITAL=m
1535 +CONFIG_SND_SOC_PCM3168A_I2C=m
1536 +CONFIG_SND_SOC_RT5659=m
1537 +CONFIG_SND_SOC_SIMPLE_AMPLIFIER=m
1538 +CONFIG_SND_SOC_SIMPLE_MUX=m
1539 +CONFIG_SND_SOC_SPDIF=m
1540 +CONFIG_SND_SOC_TAS571X=m
1541 +CONFIG_SND_SOC_WCD934X=m
1542 +CONFIG_SND_SOC_WM8524=y
1543 +CONFIG_SND_SOC_WM8904=m
1544 +CONFIG_SND_SOC_WM8960=m
1545 +CONFIG_SND_SOC_WM8962=m
1546 +CONFIG_SND_SOC_WSA881X=m
1547 +CONFIG_SND_SOC_RPMSG_WM8960=m
1548 +CONFIG_SND_SOC_RPMSG_AK4497=m
1549 +CONFIG_SND_SOC_LPASS_WSA_MACRO=m
1550 +CONFIG_SND_SOC_LPASS_VA_MACRO=m
1551 +CONFIG_SND_SIMPLE_CARD=y
1552 +CONFIG_SND_AUDIO_GRAPH_CARD=y
f77a70 1553 +CONFIG_HID_A4TECH=y
G 1554 +CONFIG_HID_APPLE=y
1555 +CONFIG_HID_BELKIN=y
1556 +CONFIG_HID_CHERRY=y
1557 +CONFIG_HID_CHICONY=y
1558 +CONFIG_HID_CYPRESS=y
1559 +CONFIG_HID_EZKEY=y
1560 +CONFIG_HID_ITE=y
1561 +CONFIG_HID_KENSINGTON=y
1562 +CONFIG_HID_LOGITECH=y
1563 +CONFIG_HID_REDRAGON=y
1564 +CONFIG_HID_MICROSOFT=y
1565 +CONFIG_HID_MONTEREY=y
7d0d56 1566 +CONFIG_HID_MULTITOUCH=m
W 1567 +CONFIG_I2C_HID_ACPI=m
1568 +CONFIG_I2C_HID_OF=m
1569 +CONFIG_USB_CONN_GPIO=y
1570 +CONFIG_USB=y
1571 +CONFIG_USB_OTG=y
1572 +CONFIG_USB_XHCI_HCD=y
1573 +CONFIG_USB_XHCI_PCI_RENESAS=m
1574 +CONFIG_USB_EHCI_HCD=y
1575 +CONFIG_USB_EHCI_HCD_PLATFORM=y
1576 +CONFIG_USB_OHCI_HCD=y
1577 +CONFIG_USB_OHCI_HCD_PLATFORM=y
1578 +CONFIG_USB_HCD_TEST_MODE=y
1579 +CONFIG_USB_ACM=m
1580 +CONFIG_USB_STORAGE=y
1581 +CONFIG_USB_UAS=y
1582 +CONFIG_USB_CDNS_SUPPORT=y
1583 +CONFIG_USB_CDNS3=y
1584 +CONFIG_USB_CDNS3_GADGET=y
1585 +CONFIG_USB_CDNS3_HOST=y
1586 +CONFIG_USB_MUSB_HDRC=y
1587 +CONFIG_USB_DWC3=y
1588 +CONFIG_USB_DWC2=y
1589 +CONFIG_USB_CHIPIDEA=y
1590 +CONFIG_USB_CHIPIDEA_UDC=y
1591 +CONFIG_USB_CHIPIDEA_HOST=y
1592 +CONFIG_USB_ISP1760=y
1593 +CONFIG_USB_SERIAL=y
1594 +CONFIG_USB_SERIAL_CONSOLE=y
1595 +CONFIG_USB_SERIAL_GENERIC=y
1596 +CONFIG_USB_SERIAL_SIMPLE=y
1597 +CONFIG_USB_SERIAL_CP210X=m
1598 +CONFIG_USB_SERIAL_FTDI_SIO=y
1599 +CONFIG_USB_SERIAL_OPTION=m
1600 +CONFIG_USB_TEST=m
1601 +CONFIG_USB_EHSET_TEST_FIXTURE=y
1602 +CONFIG_USB_HSIC_USB3503=y
1603 +CONFIG_NOP_USB_XCEIV=y
1604 +CONFIG_USB_MXS_PHY=y
1605 +CONFIG_USB_ULPI=y
1606 +CONFIG_USB_GADGET=y
1607 +CONFIG_USB_SNP_UDC_PLAT=y
1608 +CONFIG_USB_BDC_UDC=y
1609 +CONFIG_USB_CONFIGFS=y
1610 +CONFIG_USB_CONFIGFS_SERIAL=y
1611 +CONFIG_USB_CONFIGFS_ACM=y
1612 +CONFIG_USB_CONFIGFS_OBEX=y
1613 +CONFIG_USB_CONFIGFS_NCM=y
1614 +CONFIG_USB_CONFIGFS_ECM=y
1615 +CONFIG_USB_CONFIGFS_ECM_SUBSET=y
1616 +CONFIG_USB_CONFIGFS_RNDIS=y
1617 +CONFIG_USB_CONFIGFS_EEM=y
1618 +CONFIG_USB_CONFIGFS_MASS_STORAGE=y
1619 +CONFIG_USB_CONFIGFS_F_LB_SS=y
1620 +CONFIG_USB_CONFIGFS_F_FS=y
1621 +CONFIG_USB_CONFIGFS_F_UAC1=y
1622 +CONFIG_USB_CONFIGFS_F_UAC1_LEGACY=y
1623 +CONFIG_USB_CONFIGFS_F_UAC2=y
1624 +CONFIG_USB_CONFIGFS_F_MIDI=y
1625 +CONFIG_USB_CONFIGFS_F_HID=y
1626 +CONFIG_USB_CONFIGFS_F_UVC=y
1627 +CONFIG_USB_ZERO=m
1628 +CONFIG_USB_AUDIO=m
1629 +CONFIG_USB_ETH=m
1630 +CONFIG_USB_MASS_STORAGE=m
1631 +CONFIG_USB_G_SERIAL=m
1632 +CONFIG_TYPEC=y
1633 +CONFIG_TYPEC_TCPM=y
1634 +CONFIG_TYPEC_TCPCI=y
1635 +CONFIG_TYPEC_FUSB302=m
1636 +CONFIG_TYPEC_TPS6598X=m
1637 +CONFIG_TYPEC_HD3SS3220=m
1638 +CONFIG_TYPEC_SWITCH_GPIO=y
1639 +CONFIG_MMC=y
1640 +CONFIG_MMC_BLOCK_MINORS=32
1641 +CONFIG_MMC_ARMMMCI=y
1642 +CONFIG_MMC_SDHCI=y
1643 +CONFIG_MMC_SDHCI_ACPI=y
1644 +CONFIG_MMC_SDHCI_PLTFM=y
1645 +CONFIG_MMC_SDHCI_OF_ARASAN=y
1646 +CONFIG_MMC_SDHCI_OF_ESDHC=y
1647 +CONFIG_MMC_SDHCI_CADENCE=y
1648 +CONFIG_MMC_SDHCI_ESDHC_IMX=y
1649 +CONFIG_MMC_SDHCI_F_SDH30=y
1650 +CONFIG_MMC_SPI=y
1651 +CONFIG_MMC_DW=y
1652 +CONFIG_MMC_DW_EXYNOS=y
1653 +CONFIG_MMC_DW_HI3798CV200=y
1654 +CONFIG_MMC_DW_K3=y
1655 +CONFIG_MMC_MTK=y
1656 +CONFIG_MMC_SDHCI_XENON=y
1657 +CONFIG_MMC_SDHCI_AM654=y
1658 +CONFIG_SCSI_UFSHCD=y
1659 +CONFIG_SCSI_UFSHCD_PLATFORM=y
1660 +CONFIG_NEW_LEDS=y
1661 +CONFIG_LEDS_CLASS=y
1662 +CONFIG_LEDS_CLASS_MULTICOLOR=m
1663 +CONFIG_LEDS_LM3692X=m
1664 +CONFIG_LEDS_PCA9532=m
1665 +CONFIG_LEDS_GPIO=y
1666 +CONFIG_LEDS_PCA995X=m
1667 +CONFIG_LEDS_PWM=y
1668 +CONFIG_LEDS_SYSCON=y
1669 +CONFIG_LEDS_TRIGGER_TIMER=y
1670 +CONFIG_LEDS_TRIGGER_DISK=y
1671 +CONFIG_LEDS_TRIGGER_HEARTBEAT=y
1672 +CONFIG_LEDS_TRIGGER_CPU=y
1673 +CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
1674 +CONFIG_LEDS_TRIGGER_PANIC=y
1675 +CONFIG_EDAC=y
1676 +CONFIG_EDAC_GHES=y
1677 +CONFIG_EDAC_LAYERSCAPE=m
1678 +CONFIG_EDAC_SYNOPSYS=y
1679 +CONFIG_RTC_CLASS=y
2b23f8 1680 +CONFIG_RTC_DRV_ISL1208=y
7d0d56 1681 +CONFIG_DMADEVICES=y
W 1682 +CONFIG_FSL_EDMA=y
1683 +CONFIG_FSL_QDMA=m
1684 +CONFIG_FSL_EDMA_V3=y
1685 +CONFIG_IMX_SDMA=y
1686 +CONFIG_MV_XOR_V2=y
1687 +CONFIG_MXS_DMA=y
1688 +CONFIG_MXC_PXP_V3=y
1689 +CONFIG_PL330_DMA=y
1690 +CONFIG_QCOM_HIDMA_MGMT=y
1691 +CONFIG_QCOM_HIDMA=y
1692 +CONFIG_DW_EDMA=y
1693 +CONFIG_DW_EDMA_PCIE=y
1694 +CONFIG_FSL_DPAA2_QDMA=m
1695 +CONFIG_DMATEST=y
1696 +CONFIG_DMABUF_HEAPS=y
1697 +CONFIG_DMABUF_HEAPS_SYSTEM=y
1698 +CONFIG_DMABUF_HEAPS_CMA=y
1699 +CONFIG_DMABUF_HEAPS_DSP=y
1700 +CONFIG_UIO_PCI_GENERIC=y
1701 +CONFIG_UIO_IVSHMEM=y
1702 +CONFIG_VFIO=y
1703 +CONFIG_VFIO_PCI=y
1704 +CONFIG_VFIO_FSL_MC=y
1705 +CONFIG_VIRTIO_PCI=y
1706 +CONFIG_VIRTIO_BALLOON=y
1707 +CONFIG_VIRTIO_MMIO=y
1708 +CONFIG_VIRTIO_IVSHMEM=y
1709 +CONFIG_XEN_GNTDEV=y
1710 +CONFIG_XEN_GRANT_DEV_ALLOC=y
1711 +CONFIG_STAGING=y
1712 +CONFIG_STAGING_MEDIA=y
1713 +CONFIG_VIDEO_IMX_CAPTURE=y
1714 +CONFIG_IMX8_MEDIA_DEVICE=m
1715 +CONFIG_MHDP_HDMIRX=y
1716 +CONFIG_MHDP_HDMIRX_CEC=y
1717 +CONFIG_FSL_DPAA2=y
1718 +CONFIG_FSL_PPFE=y
1719 +CONFIG_FSL_PPFE_UTIL_DISABLED=y
1720 +CONFIG_ETHOSU=y
1721 +CONFIG_CHROME_PLATFORMS=y
1722 +CONFIG_CROS_EC=y
1723 +CONFIG_CROS_EC_I2C=y
1724 +CONFIG_CROS_EC_SPI=y
1725 +CONFIG_CROS_EC_CHARDEV=m
1726 +CONFIG_CLK_VEXPRESS_OSC=y
1727 +CONFIG_COMMON_CLK_RK808=y
1728 +CONFIG_COMMON_CLK_SCMI=y
1729 +CONFIG_COMMON_CLK_SCPI=y
1730 +CONFIG_COMMON_CLK_CS2000_CP=y
1731 +CONFIG_COMMON_CLK_FSL_SAI=y
1732 +CONFIG_COMMON_CLK_S2MPS11=y
1733 +CONFIG_COMMON_CLK_XGENE=y
1734 +CONFIG_COMMON_CLK_PWM=y
1735 +CONFIG_COMMON_CLK_VC5=y
1736 +CONFIG_CLK_IMX8MM=y
1737 +CONFIG_CLK_IMX8MN=y
1738 +CONFIG_CLK_IMX8MP=y
1739 +CONFIG_CLK_IMX8MQ=y
1740 +CONFIG_CLK_IMX8QXP=y
1741 +CONFIG_CLK_IMX8ULP=y
1742 +CONFIG_CLK_IMX93=y
1743 +CONFIG_HWSPINLOCK=y
1744 +CONFIG_ARM_MHU=y
1745 +CONFIG_IMX_MBOX=y
1746 +CONFIG_PLATFORM_MHU=y
1747 +CONFIG_IOMMU_IO_PGTABLE_ARMV7S=y
1748 +CONFIG_ARM_SMMU=y
1749 +CONFIG_ARM_SMMU_V3=y
1750 +CONFIG_REMOTEPROC=y
1751 +CONFIG_IMX_REMOTEPROC=y
1752 +CONFIG_IMX_DSP_REMOTEPROC=m
1753 +CONFIG_RPMSG_CHAR=m
1754 +CONFIG_RPMSG_CTRL=m
1755 +CONFIG_RPMSG_QCOM_GLINK_RPM=y
1756 +CONFIG_SOUNDWIRE=m
1757 +CONFIG_SOUNDWIRE_QCOM=m
1758 +CONFIG_SOC_BRCMSTB=y
1759 +CONFIG_FSL_DPAA=y
1760 +CONFIG_FSL_MC_DPIO=y
1761 +CONFIG_FSL_RCPM=y
1762 +CONFIG_FSL_QIXIS=y
1763 +CONFIG_SOC_TI=y
1764 +CONFIG_EXTCON_PTN5150=m
1765 +CONFIG_EXTCON_USB_GPIO=y
1766 +CONFIG_EXTCON_USBC_CROS_EC=y
1767 +CONFIG_IIO=y
1768 +CONFIG_FXLS8962AF_I2C=m
1769 +CONFIG_IIO_ST_ACCEL_3AXIS=m
1770 +CONFIG_IMX8QXP_ADC=y
1771 +CONFIG_IMX93_ADC=y
2f7a23 1772 +CONFIG_MS1112=y
2b23f8 1773 +CONFIG_BMG160=m
7d0d56 1774 +CONFIG_IIO_ST_GYRO_3AXIS=m
2b23f8 1775 +CONFIG_MAX30100=m
G 1776 +CONFIG_MAX30102=m
1777 +CONFIG_DHT11=y
1778 +CONFIG_HDC100X=y
1779 +CONFIG_HTS221=y
7d0d56 1780 +CONFIG_FXOS8700_I2C=y
W 1781 +CONFIG_RPMSG_IIO_PEDOMETER=m
1782 +CONFIG_INV_MPU6050_I2C=m
1783 +CONFIG_IIO_ST_LSM6DSX=y
1784 +CONFIG_SENSORS_ISL29018=y
1785 +CONFIG_IIO_ST_MAGN_3AXIS=m
1786 +CONFIG_MPL3115=y
1787 +CONFIG_MS5611=m
1788 +CONFIG_MS5611_I2C=m
1789 +CONFIG_PWM=y
1790 +CONFIG_PWM_ADP5585=y
1791 +CONFIG_PWM_CROS_EC=m
1792 +CONFIG_PWM_FSL_FTM=m
1793 +CONFIG_PWM_IMX27=y
1794 +CONFIG_PWM_RPCHIP=y
1795 +CONFIG_PWM_SL28CPLD=m
1796 +CONFIG_SL28CPLD_INTC=y
1797 +CONFIG_RESET_IMX7=y
1798 +CONFIG_RESET_IMX8ULP_SIM=y
1799 +CONFIG_PHY_XGENE=y
1800 +CONFIG_PHY_MIXEL_LVDS=y
1801 +CONFIG_PHY_MIXEL_LVDS_COMBO=y
1802 +CONFIG_PHY_CADENCE_SALVO=y
1803 +CONFIG_PHY_FSL_IMX8MP_LVDS=y
1804 +CONFIG_PHY_FSL_IMX93_MIPI_DPHY=y
1805 +CONFIG_PHY_MIXEL_MIPI_DPHY=y
1806 +CONFIG_PHY_FSL_IMX8M_PCIE=y
1807 +CONFIG_PHY_FSL_IMX8Q_PCIE=y
1808 +CONFIG_PHY_SAMSUNG_HDMI_PHY=y
1809 +CONFIG_PHY_QCOM_USB_HS=y
1810 +CONFIG_PHY_SAMSUNG_USB2=y
1811 +CONFIG_ARM_CCI_PMU=m
1812 +CONFIG_ARM_CCN=m
1813 +CONFIG_ARM_CMN=m
1814 +CONFIG_ARM_SMMU_V3_PMU=m
1815 +CONFIG_ARM_DSU_PMU=m
1816 +CONFIG_FSL_IMX8_DDR_PMU=y
1817 +CONFIG_FSL_IMX9_DDR_PMU=y
1818 +CONFIG_ARM_SPE_PMU=m
1819 +CONFIG_ARM_DMC620_PMU=m
1820 +CONFIG_HISI_PMU=y
1821 +CONFIG_NVMEM_IMX_OCOTP=y
1822 +CONFIG_NVMEM_IMX_OCOTP_SCU=y
1823 +CONFIG_NVMEM_RMEM=m
1824 +CONFIG_FPGA=y
1825 +CONFIG_FPGA_BRIDGE=m
1826 +CONFIG_ALTERA_FREEZE_BRIDGE=m
1827 +CONFIG_FPGA_REGION=m
1828 +CONFIG_OF_FPGA_REGION=m
1829 +CONFIG_TEE=y
1830 +CONFIG_OPTEE=y
1831 +CONFIG_MUX_MMIO=y
1832 +CONFIG_SLIM_QCOM_CTRL=m
1833 +CONFIG_MXC_SIM=y
1834 +CONFIG_MXC_GPU_VIV=y
1835 +CONFIG_MXC_EMVSIM=y
1836 +CONFIG_EXT2_FS=y
1837 +CONFIG_EXT3_FS=y
1838 +CONFIG_EXT4_FS_POSIX_ACL=y
1839 +CONFIG_FANOTIFY=y
1840 +CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
1841 +CONFIG_QUOTA=y
1842 +CONFIG_AUTOFS4_FS=y
1843 +CONFIG_FUSE_FS=m
1844 +CONFIG_CUSE=m
1845 +CONFIG_OVERLAY_FS=m
1846 +CONFIG_VFAT_FS=y
f77a70 1847 +CONFIG_EXFAT_FS=y
G 1848 +CONFIG_NTFS_FS=y
1849 +CONFIG_NTFS_RW=y
1850 +CONFIG_NTFS3_FS=y
1851 +CONFIG_NTFS3_64BIT_CLUSTER=y
1852 +CONFIG_NTFS3_LZX_XPRESS=y
1853 +CONFIG_NTFS3_FS_POSIX_ACL=y
7d0d56 1854 +CONFIG_TMPFS_POSIX_ACL=y
W 1855 +CONFIG_HUGETLBFS=y
1856 +CONFIG_EFIVAR_FS=y
1857 +CONFIG_JFFS2_FS=y
1858 +CONFIG_NFS_FS=y
1859 +CONFIG_NFS_V4=y
1860 +CONFIG_NFS_V4_1=y
1861 +CONFIG_NFS_V4_2=y
1862 +CONFIG_ROOT_NFS=y
1863 +CONFIG_NLS_CODEPAGE_437=y
f77a70 1864 +CONFIG_NLS_CODEPAGE_936=y
G 1865 +CONFIG_NLS_CODEPAGE_950=y
1866 +CONFIG_NLS_CODEPAGE_874=y
7d0d56 1867 +CONFIG_NLS_ISO8859_1=y
f77a70 1868 +CONFIG_NLS_UTF8=y
7d0d56 1869 +CONFIG_TRUSTED_KEYS=m
W 1870 +# CONFIG_TRUSTED_KEYS_TPM is not set
1871 +# CONFIG_TRUSTED_KEYS_TEE is not set
1872 +CONFIG_SECURITY=y
1873 +CONFIG_CRYPTO_USER=y
1874 +CONFIG_CRYPTO_TEST=m
1875 +CONFIG_CRYPTO_ANUBIS=m
1876 +CONFIG_CRYPTO_ARIA=m
1877 +CONFIG_CRYPTO_BLOWFISH=m
1878 +CONFIG_CRYPTO_CAMELLIA=m
1879 +CONFIG_CRYPTO_CAST5=m
1880 +CONFIG_CRYPTO_CAST6=m
1881 +CONFIG_CRYPTO_FCRYPT=m
1882 +CONFIG_CRYPTO_KHAZAD=m
1883 +CONFIG_CRYPTO_SEED=m
1884 +CONFIG_CRYPTO_SERPENT=m
1885 +CONFIG_CRYPTO_TEA=m
1886 +CONFIG_CRYPTO_TWOFISH=m
1887 +CONFIG_CRYPTO_ARC4=m
1888 +CONFIG_CRYPTO_CFB=m
1889 +CONFIG_CRYPTO_CTS=m
1890 +CONFIG_CRYPTO_LRW=m
1891 +CONFIG_CRYPTO_OFB=m
1892 +CONFIG_CRYPTO_PCBC=m
1893 +CONFIG_CRYPTO_CHACHA20POLY1305=m
1894 +CONFIG_CRYPTO_ECHAINIV=y
1895 +CONFIG_CRYPTO_TLS=m
f77a70 1896 +CONFIG_CRYPTO_BLAKE2B=m
7d0d56 1897 +CONFIG_CRYPTO_MD4=m
W 1898 +CONFIG_CRYPTO_RMD160=m
1899 +CONFIG_CRYPTO_STREEBOG=m
1900 +CONFIG_CRYPTO_VMAC=m
1901 +CONFIG_CRYPTO_WP512=m
1902 +CONFIG_CRYPTO_XCBC=m
f77a70 1903 +CONFIG_CRYPTO_XXHASH=m
G 1904 +CONFIG_CRYPTO_LZO=y
1905 +CONFIG_CRYPTO_ZSTD=y
7d0d56 1906 +CONFIG_CRYPTO_ANSI_CPRNG=y
W 1907 +CONFIG_CRYPTO_USER_API_HASH=m
1908 +CONFIG_CRYPTO_USER_API_SKCIPHER=m
1909 +CONFIG_CRYPTO_USER_API_RNG=m
1910 +CONFIG_CRYPTO_USER_API_AEAD=m
1911 +CONFIG_CRYPTO_CHACHA20_NEON=m
1912 +CONFIG_CRYPTO_GHASH_ARM64_CE=y
1913 +CONFIG_CRYPTO_SHA1_ARM64_CE=y
1914 +CONFIG_CRYPTO_SHA2_ARM64_CE=y
1915 +CONFIG_CRYPTO_SHA512_ARM64_CE=m
1916 +CONFIG_CRYPTO_SHA3_ARM64=m
1917 +CONFIG_CRYPTO_SM3_ARM64_CE=m
1918 +CONFIG_CRYPTO_POLYVAL_ARM64_CE=m
1919 +CONFIG_CRYPTO_AES_ARM64_CE_BLK=y
1920 +CONFIG_CRYPTO_AES_ARM64_BS=m
1921 +CONFIG_CRYPTO_AES_ARM64_CE_CCM=y
1922 +CONFIG_CRYPTO_CRCT10DIF_ARM64_CE=m
1923 +CONFIG_CRYPTO_DEV_FSL_CAAM_SECVIO=m
1924 +CONFIG_CRYPTO_DEV_FSL_CAAM=m
1925 +CONFIG_CRYPTO_DEV_FSL_CAAM_SM_TEST=m
1926 +CONFIG_CRYPTO_DEV_FSL_DPAA2_CAAM=m
1927 +CONFIG_CRYPTO_DEV_CCREE=m
1928 +CONFIG_CRYPTO_DEV_HISI_SEC2=m
1929 +CONFIG_CRYPTO_DEV_HISI_ZIP=m
1930 +CONFIG_CRYPTO_DEV_HISI_HPRE=m
1931 +CONFIG_CRYPTO_DEV_HISI_TRNG=m
1932 +CONFIG_CRYPTO_DEV_AMLOGIC_GXL=m
1933 +CONFIG_INDIRECT_PIO=y
1934 +CONFIG_CRC_CCITT=m
1935 +CONFIG_CRC8=y
1936 +CONFIG_CMA_SIZE_MBYTES=32
1937 +CONFIG_PRINTK_TIME=y
1938 +CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y
1939 +CONFIG_DEBUG_INFO_REDUCED=y
1940 +CONFIG_MAGIC_SYSRQ=y
1941 +CONFIG_DEBUG_FS=y
1942 +# CONFIG_SCHED_DEBUG is not set
1943 +# CONFIG_DEBUG_PREEMPT is not set
1944 +# CONFIG_FTRACE is not set
1945 +CONFIG_CORESIGHT=y
1946 +CONFIG_CORESIGHT_LINK_AND_SINK_TMC=y
1947 +CONFIG_CORESIGHT_CATU=m
1948 +CONFIG_CORESIGHT_SINK_TPIU=m
1949 +CONFIG_CORESIGHT_SINK_ETBV10=m
1950 +CONFIG_CORESIGHT_SOURCE_ETM4X=y
1951 +CONFIG_CORESIGHT_STM=m
1952 +CONFIG_CORESIGHT_CPU_DEBUG=m
1953 +CONFIG_CORESIGHT_CTI=m
1954 +CONFIG_MEMTEST=y
2f7a23 1955 diff --git a/drivers/iio/adc/Kconfig b/drivers/iio/adc/Kconfig
G 1956 index 3946eb595..15278c13c 100644
1957 --- a/drivers/iio/adc/Kconfig
1958 +++ b/drivers/iio/adc/Kconfig
1959 @@ -1164,6 +1164,18 @@ config TI_ADC161S626
1960        This driver can also be built as a module. If so, the module will be
1961        called ti-adc161s626.
1962  
1963 +config MS1112
1964 +    tristate "Ruimeng Technology MS1112 ADC"
1965 +    depends on I2C
1966 +    select IIO_BUFFER
1967 +    select IIO_TRIGGERED_BUFFER
1968 +    help
1969 +      If you say yes here you get support for Ruimeng Technology ADS1015
1970 +      ADC chip.
1971 +
1972 +      This driver can also be built as a module. If so, the module will be
1973 +      called ms1112.
1974 +
1975  config TI_ADS1015
1976      tristate "Texas Instruments ADS1015 ADC"
1977      depends on I2C
1978 diff --git a/drivers/iio/adc/Makefile b/drivers/iio/adc/Makefile
1979 index 83233c38c..f403164cf 100644
1980 --- a/drivers/iio/adc/Makefile
1981 +++ b/drivers/iio/adc/Makefile
1982 @@ -104,6 +104,7 @@ obj-$(CONFIG_TI_ADC12138) += ti-adc12138.o
1983  obj-$(CONFIG_TI_ADC108S102) += ti-adc108s102.o
1984  obj-$(CONFIG_TI_ADC128S052) += ti-adc128s052.o
1985  obj-$(CONFIG_TI_ADC161S626) += ti-adc161s626.o
1986 +obj-$(CONFIG_MS1112) += ms1112.o
1987  obj-$(CONFIG_TI_ADS1015) += ti-ads1015.o
1988  obj-$(CONFIG_TI_ADS7950) += ti-ads7950.o
1989  obj-$(CONFIG_TI_ADS8344) += ti-ads8344.o
1990 diff --git a/drivers/iio/adc/ms1112.c b/drivers/iio/adc/ms1112.c
1991 new file mode 100644
1992 index 000000000..cf8ea5c66
1993 --- /dev/null
1994 +++ b/drivers/iio/adc/ms1112.c
1995 @@ -0,0 +1,569 @@
1996 +// SPDX-License-Identifier: GPL-2.0-only
1997 +/*
1998 + * MS1112 - Ruimeng Technology Analog-to-Digital Converter
1999 + *
2000 + * Copyright (c) 2024, LingYun IoT System Studio.
2001 + *
2002 + * IIO driver for MS1112 ADC 7-bit I2C slave address: 0x4A
2003 + */
2004 +
2005 +#include <linux/init.h>
2006 +#include <linux/module.h>
2007 +#include <linux/errno.h>
2008 +#include <linux/gpio.h>
2009 +#include <linux/cdev.h>
2010 +#include <linux/device.h>
2011 +#include <linux/of_gpio.h>
2012 +#include <linux/semaphore.h>
2013 +#include <linux/timer.h>
2014 +#include <linux/i2c.h>
2015 +#include <asm/uaccess.h>
2016 +#include <asm/io.h>
2017 +#include <linux/iio/iio.h>
2018 +#include <linux/iio/driver.h>
2019 +
2020 +#define MS1112_DRV_NAME                "ms1112"
2021 +
2022 +#define MS1112_CONV_REG                0x00
2023 +#define MS1112_CFG_REG                0x01
2024 +#define MS1112_DEFAULT_CONFIG        0xFC
2025 +
2026 +#define MS1112_CHANNELS                4
2027 +#define MS1112_CFG_DR_SHIFT            2
2028 +#define MS1112_CFG_MOD_SHIFT        4
2029 +#define MS1112_CFG_PGA_SHIFT        0
2030 +#define MS1112_CFG_MUX_SHIFT        5
2031 +
2032 +#define MS1112_CFG_DR_MASK            GENMASK(3, 2)
2033 +#define MS1112_CFG_MOD_MASK            BIT(4)
2034 +#define MS1112_CFG_PGA_MASK            GENMASK(1, 0)
2035 +#define MS1112_CFG_MUX_MASK            GENMASK(6, 5)
2036 +
2037 +#define MS1112_DEFAULT_PGA            0
2038 +#define MS1112_DEFAULT_DATA_RATE    3
2039 +#define MS1112_DEFAULT_CHAN            2
2040 +#define MS1112_DEFAULT_MODE            1
2041 +
2042 +#define MS1112_CONTINUOUS            0
2043 +#define MS1112_SINGLESHOT            1
2044 +
2045 +struct ms1112_chip_data {
2046 +    struct iio_chan_spec const    *channels;
2047 +    int                            num_channels;
2048 +    const struct iio_info        *info;
2049 +    const int                    *data_rate;
2050 +    const int                    data_rate_len;
2051 +    const int                    *scale;
2052 +    const int                    scale_len;
2053 +    bool                        has_comparator;
2054 +};
2055 +
2056 +enum ms1112_channels {
2057 +    MS1112_AIN0_AIN1 = 0,
2058 +    MS1112_AIN2,
2059 +    MS1112_AIN0,
2060 +    MS1112_AIN1,
2061 +    MS1112_TIMESTAMP,
2062 +};
2063 +
2064 +static const int ms1112_data_rate[] = {
2065 +    240,60,30,15
2066 +};
2067 +
2068 +static const int ms1112_fullscale_range[] = {
2069 +    2048
2070 +};
2071 +
2072 +static const int ms1112_scale[] = { /* 12bit ADC */
2073 +    2048,11,
2074 +    2048,13,
2075 +    2048,14,
2076 +    2048,15
2077 +};
2078 +
2079 +#define FIT_CHECK(_testbits, _fitbits)                \
2080 +    (                                                \
2081 +        (_fitbits) *                                \
2082 +        !!sizeof(struct {                            \
2083 +        static_assert((_testbits) <= (_fitbits));    \
2084 +        int pad;                                    \
2085 +        })                                            \
2086 +    )
2087 +
2088 +#define MS1112_V_CHAN(_chan, _addr, _realbits, _shift, _event_spec, _num_event_specs) { \
2089 +    .type = IIO_VOLTAGE,                \
2090 +    .indexed = 1,                        \
2091 +    .address = _addr,                    \
2092 +    .channel = _chan,                    \
2093 +    .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |    \
2094 +    BIT(IIO_CHAN_INFO_SCALE) |                        \
2095 +    BIT(IIO_CHAN_INFO_SAMP_FREQ),                    \
2096 +    .info_mask_shared_by_all_available =            \
2097 +    BIT(IIO_CHAN_INFO_SCALE) |                        \
2098 +    BIT(IIO_CHAN_INFO_SAMP_FREQ),                    \
2099 +    .scan_index = _addr,                            \
2100 +    .scan_type = {                                    \
2101 +        .sign = 's',                                \
2102 +        .realbits = (_realbits),                    \
2103 +        .storagebits = FIT_CHECK((_realbits) + (_shift), 16),    \
2104 +        .shift = (_shift),                            \
2105 +        .endianness = IIO_CPU,                        \
2106 +    },                                                \
2107 +    .event_spec = (_event_spec),                    \
2108 +    .num_event_specs = (_num_event_specs),            \
2109 +    .datasheet_name = "AIN"#_chan,                    \
2110 +}
2111 +
2112 +#define MS1112_V_DIFF_CHAN(_chan, _chan2, _addr, _realbits, _shift, _event_spec, _num_event_specs) { \
2113 +    .type = IIO_VOLTAGE,                            \
2114 +    .differential = 1,                                \
2115 +    .indexed = 1,                                    \
2116 +    .address = _addr,                                \
2117 +    .channel = _chan,                                \
2118 +    .channel2 = _chan2,                                \
2119 +    .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |    \
2120 +    BIT(IIO_CHAN_INFO_SCALE) |                        \
2121 +    BIT(IIO_CHAN_INFO_SAMP_FREQ),                    \
2122 +    .info_mask_shared_by_all_available =            \
2123 +    BIT(IIO_CHAN_INFO_SCALE) |                        \
2124 +    BIT(IIO_CHAN_INFO_SAMP_FREQ),                    \
2125 +    .scan_index = _addr,                            \
2126 +    .scan_type = {                                    \
2127 +        .sign = 's',                                \
2128 +        .realbits = (_realbits),                    \
2129 +        .storagebits = FIT_CHECK((_realbits) + (_shift), 16),    \
2130 +        .shift = (_shift),                            \
2131 +        .endianness = IIO_CPU,                        \
2132 +    },                                                \
2133 +    .event_spec = (_event_spec),                    \
2134 +    .num_event_specs = (_num_event_specs),            \
2135 +    .datasheet_name = "AIN"#_chan"-AIN"#_chan2,        \
2136 +}
2137 +
2138 +struct ms1112_channel_data {
2139 +    bool enabled;
2140 +    unsigned int pga;
2141 +    unsigned int data_rate;
2142 +    unsigned int mode;
2143 +};
2144 +
2145 +struct ms1112_thresh_data {
2146 +    int high_thresh;
2147 +    int low_thresh;
2148 +};
2149 +
2150 +struct ms1112_data {
2151 +    struct ms1112_channel_data channel_data[MS1112_CHANNELS];
2152 +    struct ms1112_thresh_data thresh_data[MS1112_CHANNELS];
2153 +    const struct ms1112_chip_data *chip;
2154 +    struct mutex lock;
2155 +    void *private_data;
2156 +    struct i2c_client *client;
2157 +};
2158 +
2159 +/* MS1112 don't use the register address */
2160 +static int ms1112_read_regs(struct ms1112_data *dev, uint8_t reg, void *buf, uint8_t size)
2161 +{
2162 +    int                    ret = 0;
2163 +    struct i2c_msg        msg[1];
2164 +    struct i2c_client    *client = dev->client;
2165 +
2166 +    msg[0].addr  = client->addr;
2167 +    msg[0].flags = I2C_M_RD;
2168 +    msg[0].buf     = buf;
2169 +    msg[0].len     = size;
2170 +
2171 +    ret = i2c_transfer(client->adapter, msg, 1);
2172 +    if(ret != 1) {
2173 +        dev_err(&dev->client->dev, "%s() i2c_transfer error, ret=%d\n", __func__, ret);
2174 +        ret = -EREMOTEIO;
2175 +    }
2176 +
2177 +    return ret;
2178 +}
2179 +
2180 +/* MS1112 don't use the register address */
2181 +static s32 ms1112_write_regs(struct ms1112_data *dev, uint8_t reg, uint8_t *data, uint8_t bytes)
2182 +{
2183 +    int                    ret = 0;
2184 +    struct i2c_msg        msg;
2185 +    struct i2c_client    *client = dev->client;
2186 +
2187 +    msg.addr  = client->addr;
2188 +    msg.flags = 0;
2189 +    msg.buf   = data;
2190 +    msg.len   = bytes;
2191 +
2192 +    ret = i2c_transfer(client->adapter, &msg, 1);
2193 +    if(ret != 1) {
2194 +        dev_err(&dev->client->dev, "%s() i2c_transfer error, ret=%d\n", __func__, ret);
2195 +        ret = -EREMOTEIO;
2196 +    }
2197 +
2198 +    return ret;
2199 +}
2200 +
2201 +static int ms1112_readdata(struct ms1112_data *dev,unsigned int *val)
2202 +{
2203 +    unsigned char    buf[3];
2204 +    unsigned char    rx_data[3];
2205 +    int                rv = 0;
2206 +
2207 +    rv = ms1112_read_regs(dev, MS1112_CONV_REG, rx_data, 3);
2208 +    if(rv<0) {
2209 +        return rv;
2210 +    }
2211 +
2212 +    buf[0] = rx_data[0];
2213 +    buf[1] = rx_data[1];
2214 +    buf[2] = rx_data[2];
2215 +
2216 +    *val = (buf[0]<<8) | buf[1];
2217 +    return rv;
2218 +}
2219 +
2220 +static int ms1112_get_adc_result(struct ms1112_data *data, int chan, int *val)
2221 +{
2222 +    int            ret = 0;
2223 +    int            pga, dr , mode;
2224 +    uint8_t        mask, cfg;
2225 +
2226 +    if (chan < 0 || chan >= MS1112_CHANNELS)
2227 +        return -EINVAL;
2228 +
2229 +    mode = data->channel_data[chan].mode;
2230 +    pga = data->channel_data[chan].pga;
2231 +    dr = data->channel_data[chan].data_rate;
2232 +
2233 +    mask = MS1112_CFG_MUX_MASK | MS1112_CFG_PGA_MASK |
2234 +        MS1112_CFG_DR_MASK | MS1112_CFG_MOD_MASK | MS1112_SINGLESHOT << 7;
2235 +
2236 +    cfg = chan << MS1112_CFG_MUX_SHIFT | pga << MS1112_CFG_PGA_SHIFT |
2237 +        dr << MS1112_CFG_DR_SHIFT | mode << MS1112_CFG_MOD_SHIFT | MS1112_SINGLESHOT << 7;
2238 +
2239 +    cfg = (cfg & mask);
2240 +
2241 +    ms1112_write_regs(data, MS1112_CFG_REG, &cfg, 1);
2242 +
2243 +    ret = ms1112_readdata(data,val);
2244 +    return ret;
2245 +}
2246 +
2247 +static int ms1112_set_scale(struct ms1112_data *data, struct iio_chan_spec const *chan,
2248 +        int scale, int uscale)
2249 +{
2250 +    int i;
2251 +    int fullscale = div_s64((scale * 1000000LL + uscale) <<
2252 +            (chan->scan_type.realbits - 1), 1000000);
2253 +
2254 +    for (i = 0; i < ARRAY_SIZE(ms1112_fullscale_range); i++) {
2255 +        if (ms1112_fullscale_range[i] == fullscale) {
2256 +            data->channel_data[chan->address].pga = i;
2257 +            return 0;
2258 +        }
2259 +    }
2260 +
2261 +    return -EINVAL;
2262 +}
2263 +
2264 +static int ms1112_set_data_rate(struct ms1112_data *data, int chan, int rate)
2265 +{
2266 +    int i;
2267 +
2268 +    for (i = 0; i < data->chip->data_rate_len; i++) {
2269 +        if (data->chip->data_rate[i] == rate) {
2270 +            data->channel_data[chan].data_rate = i;
2271 +            return 0;
2272 +        }
2273 +    }
2274 +
2275 +    return -EINVAL;
2276 +}
2277 +
2278 +static int ms1112_read_avail(struct iio_dev *indio_dev,
2279 +        struct iio_chan_spec const *chan,
2280 +        const int **vals, int *type, int *length,
2281 +        long mask)
2282 +{
2283 +    struct ms1112_data *data = iio_priv(indio_dev);
2284 +
2285 +    if (chan->type != IIO_VOLTAGE)
2286 +        return -EINVAL;
2287 +
2288 +    switch (mask) {
2289 +        case IIO_CHAN_INFO_SCALE:
2290 +            *type = IIO_VAL_FRACTIONAL_LOG2;
2291 +            *vals =  data->chip->scale;
2292 +            *length = data->chip->scale_len;
2293 +            return IIO_AVAIL_LIST;
2294 +        case IIO_CHAN_INFO_SAMP_FREQ:
2295 +            *type = IIO_VAL_INT;
2296 +            *vals = data->chip->data_rate;
2297 +            *length = data->chip->data_rate_len;
2298 +            return IIO_AVAIL_LIST;
2299 +        default:
2300 +            return -EINVAL;
2301 +    }
2302 +}
2303 +
2304 +static int ms1112_read_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan, int *val, int *val2, long mask)
2305 +{
2306 +    int ret, idx;
2307 +    struct ms1112_data *data = iio_priv(indio_dev);
2308 +
2309 +    mutex_lock(&data->lock);
2310 +    switch (mask) {
2311 +        case IIO_CHAN_INFO_RAW:
2312 +
2313 +            ret = iio_device_claim_direct_mode(indio_dev);
2314 +            if (ret)
2315 +                break;
2316 +
2317 +            ret = ms1112_get_adc_result(data, chan->address, val);
2318 +            if (ret < 0) {
2319 +                goto release_direct;
2320 +            }
2321 +
2322 +            *val = sign_extend32(*val >> chan->scan_type.shift,
2323 +                    chan->scan_type.realbits - 1);
2324 +
2325 +            ret = IIO_VAL_INT;
2326 +release_direct:
2327 +            iio_device_release_direct_mode(indio_dev);
2328 +            break;
2329 +
2330 +        case IIO_CHAN_INFO_SCALE:
2331 +            idx = data->channel_data[chan->address].pga;
2332 +            *val = ms1112_fullscale_range[idx];
2333 +            *val2 = chan->scan_type.realbits - 1;
2334 +            ret = IIO_VAL_FRACTIONAL_LOG2;
2335 +            break;
2336 +        case IIO_CHAN_INFO_SAMP_FREQ:
2337 +            idx = data->channel_data[chan->address].data_rate;
2338 +            *val = data->chip->data_rate[idx];
2339 +            ret = IIO_VAL_INT;
2340 +            break;
2341 +        default:
2342 +            ret = -EINVAL;
2343 +            break;
2344 +    }
2345 +    mutex_unlock(&data->lock);
2346 +
2347 +    return ret;
2348 +}
2349 +
2350 +static int ms1112_write_raw(struct iio_dev *indio_dev,
2351 +        struct iio_chan_spec const *chan, int val,
2352 +        int val2, long mask)
2353 +{
2354 +    struct ms1112_data *data = iio_priv(indio_dev);
2355 +    int ret;
2356 +
2357 +    mutex_lock(&data->lock);
2358 +    switch (mask) {
2359 +        case IIO_CHAN_INFO_SCALE:
2360 +            ret = ms1112_set_scale(data, chan, val, val2);
2361 +            break;
2362 +        case IIO_CHAN_INFO_SAMP_FREQ:
2363 +            ret = ms1112_set_data_rate(data, chan->address, val);
2364 +            break;
2365 +        default:
2366 +            ret = -EINVAL;
2367 +            break;
2368 +    }
2369 +    mutex_unlock(&data->lock);
2370 +
2371 +    return ret;
2372 +}
2373 +
2374 +static const struct iio_info ms1112_info = {
2375 +    .read_raw = ms1112_read_raw,
2376 +    .write_raw = ms1112_write_raw,
2377 +    .read_avail = ms1112_read_avail,
2378 +};
2379 +
2380 +
2381 +static const struct iio_chan_spec ms1112_channels[] = {
2382 +    MS1112_V_DIFF_CHAN(0, 1, MS1112_AIN0_AIN1, 16, 0, NULL, 0),
2383 +    MS1112_V_CHAN(2, MS1112_AIN2, 16, 0, NULL, 0),
2384 +    MS1112_V_CHAN(0, MS1112_AIN0, 16, 0, NULL, 0),
2385 +    MS1112_V_CHAN(1, MS1112_AIN1, 16, 0, NULL, 0),
2386 +    IIO_CHAN_SOFT_TIMESTAMP(MS1112_TIMESTAMP),
2387 +};
2388 +
2389 +static int ms1112_client_get_channels_config(struct i2c_client *client)
2390 +{
2391 +    struct iio_dev *indio_dev = i2c_get_clientdata(client);
2392 +    struct ms1112_data *data = iio_priv(indio_dev);
2393 +    struct device *dev = &client->dev;
2394 +    struct fwnode_handle *node;
2395 +    int i = -1;
2396 +
2397 +    device_for_each_child_node(dev, node) {
2398 +        u32 pval;
2399 +        unsigned int channel;
2400 +        unsigned int pga = MS1112_DEFAULT_PGA;
2401 +        unsigned int data_rate = MS1112_DEFAULT_DATA_RATE;
2402 +        unsigned int mode = MS1112_DEFAULT_MODE;
2403 +
2404 +        if (fwnode_property_read_u32(node, "reg", &pval)) {
2405 +            dev_err(dev, "invalid reg on %pfw\n", node);
2406 +            continue;
2407 +        }
2408 +
2409 +        channel = pval;
2410 +        if (channel >= MS1112_CHANNELS) {
2411 +            dev_err(dev, "invalid channel index %d on %pfw\n",
2412 +                    channel, node);
2413 +            continue;
2414 +        }
2415 +
2416 +        if (!fwnode_property_read_u32(node, "ti,gain", &pval)) {
2417 +            pga = pval;
2418 +            if (pga > 3 ) {
2419 +                dev_err(dev, "invalid gain on %pfw\n", node);
2420 +                fwnode_handle_put(node);
2421 +                return -EINVAL;
2422 +            }
2423 +        }
2424 +
2425 +        if (!fwnode_property_read_u32(node, "ti,datarate", &pval)) {
2426 +            data_rate = pval;
2427 +            if (data_rate > 3) {
2428 +                dev_err(dev, "invalid data_rate on %pfw\n", node);
2429 +                fwnode_handle_put(node);
2430 +                return -EINVAL;
2431 +            }
2432 +        }
2433 +
2434 +        if (!fwnode_property_read_u32(node, "ti,mode", &pval)) {
2435 +            mode = pval;
2436 +            if (mode > 1) {
2437 +                dev_err(dev, "invalid mode on %pfw\n", node);
2438 +                fwnode_handle_put(node);
2439 +                return -EINVAL;
2440 +            }
2441 +        }
2442 +
2443 +
2444 +        data->channel_data[channel].pga = pga;
2445 +        data->channel_data[channel].data_rate = data_rate;
2446 +        data->channel_data[channel].mode = mode;
2447 +        i++;
2448 +    }
2449 +
2450 +    return i < 0 ? -EINVAL : 0;
2451 +}
2452 +
2453 +static void ms1112_get_channels_config(struct i2c_client *client)
2454 +{
2455 +    unsigned int k;
2456 +
2457 +    struct iio_dev *indio_dev = i2c_get_clientdata(client);
2458 +    struct ms1112_data *data = iio_priv(indio_dev);
2459 +
2460 +    if (!ms1112_client_get_channels_config(client))
2461 +        return;
2462 +
2463 +    /* fallback on default configuration */
2464 +    for (k = 0; k < MS1112_CHANNELS; ++k) {
2465 +        data->channel_data[k].pga = MS1112_DEFAULT_PGA;
2466 +        data->channel_data[k].data_rate = MS1112_DEFAULT_DATA_RATE;
2467 +        data->channel_data[k].mode = MS1112_DEFAULT_MODE;
2468 +    }
2469 +}
2470 +
2471 +static int ms1112_probe(struct i2c_client *client,const struct i2c_device_id *id)
2472 +{
2473 +    struct iio_dev *indio_dev;
2474 +    const struct ms1112_chip_data *chip;
2475 +    struct ms1112_data *data;
2476 +    int ret;
2477 +    int i;
2478 +
2479 +    chip = device_get_match_data(&client->dev);
2480 +    if (!chip)
2481 +        chip = (const struct ms1112_chip_data *)id->driver_data;
2482 +    if (!chip)
2483 +        return dev_err_probe(&client->dev, -EINVAL, "Unknown chip\n");
2484 +
2485 +    indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*indio_dev));
2486 +    if (!indio_dev)
2487 +        return -ENOMEM;
2488 +
2489 +    data = iio_priv(indio_dev);
2490 +    i2c_set_clientdata(client, indio_dev);
2491 +
2492 +    mutex_init(&data->lock);
2493 +
2494 +    indio_dev->name = MS1112_DRV_NAME;
2495 +    indio_dev->info = chip->info;
2496 +    indio_dev->modes = INDIO_DIRECT_MODE;
2497 +    indio_dev->channels = chip->channels;
2498 +    indio_dev->num_channels = chip->num_channels;
2499 +    data->chip = chip;
2500 +    data->client = client;
2501 +
2502 +    for (i = 0; i < MS1112_CHANNELS; i++) {
2503 +        int realbits = indio_dev->channels[i].scan_type.realbits;
2504 +
2505 +        data->thresh_data[i].low_thresh = -1 << (realbits - 1);
2506 +        data->thresh_data[i].high_thresh = (1 << (realbits - 1)) - 1;
2507 +    }
2508 +
2509 +    /* we need to keep this ABI the same as used by hwmon ADS1015 driver */
2510 +    ms1112_get_channels_config(client);
2511 +
2512 +    ret = iio_device_register(indio_dev);
2513 +    if (ret)
2514 +        dev_err(&client->dev, "Failed to register IIO device\n");
2515 +    return ret;
2516 +}
2517 +
2518 +static void ms1112_remove(struct i2c_client *client)
2519 +{
2520 +    struct iio_dev *indio_dev = i2c_get_clientdata(client);
2521 +
2522 +    iio_device_unregister(indio_dev);
2523 +
2524 +}
2525 +
2526 +static const struct ms1112_chip_data ms1112_data = {
2527 +    .channels    = ms1112_channels,
2528 +    .num_channels    = ARRAY_SIZE(ms1112_channels),
2529 +    .info        = &ms1112_info,
2530 +    .data_rate    = ms1112_data_rate,
2531 +    .data_rate_len    = ARRAY_SIZE(ms1112_data_rate),
2532 +    .scale        = ms1112_scale,
2533 +    .scale_len    = ARRAY_SIZE(ms1112_scale),
2534 +    .has_comparator = false,
2535 +};
2536 +
2537 +static const struct i2c_device_id ms1112_id[] = {
2538 +    { "ms1112", (kernel_ulong_t)&ms1112_data },
2539 +    {}
2540 +};
2541 +MODULE_DEVICE_TABLE(i2c, ms1112_id);
2542 +
2543 +static const struct of_device_id ms1112_of_match[] = {
2544 +    { .compatible = "ms,ms1112" },
2545 +    { },
2546 +};
2547 +MODULE_DEVICE_TABLE(of, ms1112_of_match);
2548 +
2549 +static struct i2c_driver ms1112_driver = {
2550 +    .driver = {
2551 +        .owner = THIS_MODULE,
2552 +        .name = "ms1112",
2553 +        .of_match_table = ms1112_of_match,
2554 +    },
2555 +    .probe = ms1112_probe,
2556 +    .remove = ms1112_remove,
2557 +    .id_table    = ms1112_id,
2558 +};
2559 +
2560 +module_i2c_driver(ms1112_driver);
2561 +
2562 +MODULE_AUTHOR("Tang Junfeng");
2563 +MODULE_DESCRIPTION("MS1112 IIO ADC Driver");
2564 +MODULE_LICENSE("GPL");