diff --git a/arch/loongarch/boot/dts/loongson/Makefile b/arch/loongarch/boot/dts/loongson/Makefile index cc114acdc..9af2c5f90 100644 --- a/arch/loongarch/boot/dts/loongson/Makefile +++ b/arch/loongarch/boot/dts/loongson/Makefile @@ -3,6 +3,6 @@ dtb-$(CONFIG_LOONGSON64_GENERIC) += loongson3_ls7a.dtb dtb-$(CONFIG_LOONGSON_2K500) += ls2k500_mini_dp.dtb dtb-$(CONFIG_LOONGSON_2K1000) += ls2k1000_dp.dtb dtb-$(CONFIG_LOONGSON_2P500) += ls2p500_gbkpjm0_v10.dtb -dtb-$(CONFIG_LOONGSON_2K300) += ls2k300_mini_dp.dtb ls2k300_pai.dtb +dtb-$(CONFIG_LOONGSON_2K300) += ls2k300_mini_dp.dtb ls2k300_pai.dtb ls2k300_gongkong_gbkpgk0.dtb obj-y += $(patsubst %.dtb, %.dtb.o, $(dtb-y)) diff --git a/arch/loongarch/boot/dts/loongson/loongson2k300.dtsi b/arch/loongarch/boot/dts/loongson/loongson2k300.dtsi index 28e04cfd9..a002aa5d7 100644 --- a/arch/loongarch/boot/dts/loongson/loongson2k300.dtsi +++ b/arch/loongarch/boot/dts/loongson/loongson2k300.dtsi @@ -166,18 +166,34 @@ pinctrl-single,bits = <0x10 0x00000f00 0x00000f00>; }; + can0_as_gpio_pins: pinmux_G68_G69_as_gpio { + pinctrl-single,bits = <0x10 0x00000000 0x00000f00>; + }; + can1_pins: pinmux_G70_G71_as_can1 { pinctrl-single,bits = <0x10 0x0000f000 0x0000f000>; }; + can1_as_gpio_pins: pinmux_G70_G71_as_gpio { + pinctrl-single,bits = <0x10 0x00000000 0x0000f000>; + }; + can2_pins: pinmux_G72_G73_as_can2 { pinctrl-single,bits = <0x10 0x000f0000 0x000f0000>; }; + can2_as_gpio_pins: pinmux_G72_G73_as_gpio { + pinctrl-single,bits = <0x10 0x00000000 0x000f0000>; + }; + can3_pins: pinmux_G74_G75_as_can3 { pinctrl-single,bits = <0x10 0x00f00000 0x00f00000>; }; + can3_as_gpio_pins: pinmux_G74_G75_as_gpio { + pinctrl-single,bits = <0x10 0x00000000 0x00f00000>; + }; + i2s_pins: pinmux_G76_G80_as_i2s { pinctrl-single,bits = <0x10 0xff000000 0xff000000 0x14 0x00000003 0x00000003>; @@ -501,7 +517,9 @@ interrupt-parent = <&icu>; interrupts = <8>; pinctrl-0 = <&can0_pins>; - pinctrl-names = "default"; + pinctrl-1 = <&can0_as_gpio_pins>; + pinctrl-names = "default", "isolate"; + ls,canfd-tx-gpio = <&gpio 69 GPIO_ACTIVE_HIGH>; dmas = <&dma 0 0xaae>; dma-names = "rx"; status = "disabled"; @@ -515,7 +533,9 @@ interrupt-parent = <&icu>; interrupts = <9>; pinctrl-0 = <&can1_pins>; - pinctrl-names = "default"; + pinctrl-1 = <&can1_as_gpio_pins>; + pinctrl-names = "default", "isolate"; + ls,canfd-tx-gpio = <&gpio 71 GPIO_ACTIVE_HIGH>; dmas = <&dma 1 0xaae>; dma-names = "rx"; status = "disabled"; @@ -529,7 +549,9 @@ interrupt-parent = <&icu>; interrupts = <10>; pinctrl-0 = <&can2_pins>; - pinctrl-names = "default"; + pinctrl-1 = <&can2_as_gpio_pins>; + pinctrl-names = "default", "isolate"; + ls,canfd-tx-gpio = <&gpio 73 GPIO_ACTIVE_HIGH>; dmas = <&dma 2 0xaae>; dma-names = "rx"; status = "disabled"; @@ -543,7 +565,9 @@ interrupt-parent = <&icu>; interrupts = <11>; pinctrl-0 = <&can3_pins>; - pinctrl-names = "default"; + pinctrl-1 = <&can3_as_gpio_pins>; + pinctrl-names = "default", "isolate"; + ls,canfd-tx-gpio = <&gpio 75 GPIO_ACTIVE_HIGH>; dmas = <&dma 3 0xaae>; dma-names = "rx"; status = "disabled"; diff --git a/arch/loongarch/boot/dts/loongson/loongson_panel_param.dtsi b/arch/loongarch/boot/dts/loongson/loongson_panel_param.dtsi index 63de5b3f3..614326cc8 100644 --- a/arch/loongarch/boot/dts/loongson/loongson_panel_param.dtsi +++ b/arch/loongarch/boot/dts/loongson/loongson_panel_param.dtsi @@ -94,5 +94,54 @@ pixelclk-active = <0>; }; }; + + // 松大染印10寸屏 + panel-MTF101WS56A-1024x600{ + width-mm = <229>; + height-mm = <149>; + label = "MTF101WS56A-1024x600"; + data-mapping = "jeida-24"; + + panel-timing { + clock-frequency = <40800000>; + hactive = <1024>; + vactive = <600>; + // this timining is better + hsync-len = <5>; + hfront-porch = <15>; + hback-porch = <70>; + vfront-porch = <1>; + vback-porch = <8>; + vsync-len = <1>; + de-active = <1>; + hsync-active = <0>; + vsync-active = <0>; + pixelclk-active = <0>; + }; + }; + + // 松大染印15寸屏 + panel-G150XGEL07-1024x768{ + width-mm = <304>; + height-mm = <228>; + label = "G150XGEL07-1024x768"; + data-mapping = "jeida-24"; + + panel-timing { + clock-frequency = <65000000>; + hactive = <1024>; + vactive = <768>; + hsync-len = <5>; + hfront-porch = <100>; + hback-porch = <215>; + vfront-porch = <2>; + vback-porch = <18>; + vsync-len = <18>; + de-active = <1>; + hsync-active = <0>; + vsync-active = <0>; + pixelclk-active = <0>; + }; + }; }; }; diff --git a/arch/loongarch/boot/dts/loongson/ls2k300_g2k03z2_core.dtsi b/arch/loongarch/boot/dts/loongson/ls2k300_g2k03z2_core.dtsi new file mode 100644 index 000000000..de3e99f93 --- /dev/null +++ b/arch/loongarch/boot/dts/loongson/ls2k300_g2k03z2_core.dtsi @@ -0,0 +1,53 @@ +#include "loongson2k300.dtsi" + +/ { + chosen { + stdout-path = "serial0:115200n8"; + bootargs = "earlycon"; + }; + + /* not need memory node, we get memory info from boot params. */ + //memory { + // name = "memory"; + // device_type = "memory"; + // reg = <0 0x00200000 0 0x0ee00000 + // 0 0x90000000 0 0x10000000>; + //}; + + reserved-memory { + #address-cells = <2>; + #size-cells = <2>; + ranges; + + linux,cma { + compatible = "shared-dma-pool"; + reusable; + size = <0 0x02000000>; + linux,cma-default; + }; + }; +}; + +&uart0 { + status = "okay"; +}; + +&spi0 { + status = "okay"; + + spi-flash@0 { + compatible = "jedec,spi-nor"; + spi-max-frequency = <25000000>; + reg = <0>; + }; +}; + +&i2c2 { + status = "okay"; + pinctrl-0 = <&i2c2_G82_G83_pins>; +}; + +&i2c3 { + status = "okay"; + pinctrl-0 = <&i2c3_G84_G85_pins>; +}; diff --git a/arch/loongarch/boot/dts/loongson/ls2k300_gongkong_gbkpgk0.dts b/arch/loongarch/boot/dts/loongson/ls2k300_gongkong_gbkpgk0.dts new file mode 100644 index 000000000..4c5bc528f --- /dev/null +++ b/arch/loongarch/boot/dts/loongson/ls2k300_gongkong_gbkpgk0.dts @@ -0,0 +1,338 @@ +#include "ls2k300_g2k03z2_core.dtsi" +#include + +/ { + model = "LS2K300-GONGKONG-GBKPGK0"; + + leds { + compatible = "gpio-leds"; + + sys_stat { + label = "sys_stat"; + gpios = <&io_expander_a 8 GPIO_ACTIVE_LOW>; + linux,default-trigger = "heartbeat"; + default-state = "on"; + }; + + led1 { + label = "led1"; + gpios = <&io_expander_a 5 GPIO_ACTIVE_LOW>; + default-state = "off"; + }; + + led2 { + label = "led2"; + gpios = <&io_expander_a 7 GPIO_ACTIVE_LOW>; + default-state = "off"; + }; + + led3 { + label = "led3"; + gpios = <&io_expander_a 6 GPIO_ACTIVE_LOW>; + default-state = "off"; + }; + }; + + lcd_backlight: backlight { + compatible = "gpio-backlight"; + gpios = <&gpio 89 GPIO_ACTIVE_HIGH>; + default-on; + }; + + panel: dvo-connector@0 { + #address-cells = <1>; + #size-cells = <0>; + compatible = "panel-lvds", "auo,b101ean01"; + backlight = <&lcd_backlight>; + + /* lcd power on control gpio */ + // enable-gpios = <&pioA 3 GPIO_ACTIVE_HIGH>; + // power-supply = <&vdd_lcd>; +#if 1 // 4.3' LCD + width-mm = <223>; + height-mm = <125>; + label = "ATK-MD0430R-800x480"; + data-mapping = "jeida-24"; + + panel-timing { + clock-frequency = <27000000>; + hactive = <800>; + vactive = <480>; + hsync-len = <40>; + hfront-porch = <48>; + hback-porch = <40>; + vfront-porch = <13>; + vback-porch = <32>; + vsync-len = <1>; + de-active = <1>; + hsync-active = <0>; + vsync-active = <0>; + pixelclk-active = <0>; + }; +#else // 7' LCD + width-mm = <223>; + height-mm = <125>; + label = "ATK-MD0700R-1024x600"; + data-mapping = "jeida-24"; + + panel-timing { + clock-frequency = <51200000>; + hactive = <1024>; + vactive = <600>; + hsync-len = <20>; + hfront-porch = <160>; + hback-porch = <140>; + vfront-porch = <12>; + vback-porch = <20>; + vsync-len = <3>; + de-active = <1>; + hsync-active = <0>; + vsync-active = <0>; + pixelclk-active = <0>; + }; +#endif + port@0 { + reg = <0>; + + #address-cells = <1>; + #size-cells = <0>; + + dvo_connector_in: endpoint@0 { + reg = <0>; + remote-endpoint = <&dc_out_rgb0>; + }; + }; + }; + + vccio_codec: 3_3V{ + compatible = "regulator-fixed"; + regulator-name = "VCC_IO"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + regulator-always-on; + }; + + // 虽然这个时钟在从模式下没用,但 es8388 驱动必须指定这个时钟 + es8388_clk: es8388-clock { + compatible = "fixed-clock"; + clock-frequency = <12288000>; + #clock-cells = <1>; + }; +}; + +&dc { + status = "ok"; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + dc_out_rgb0: endpoint { + remote-endpoint = <&dvo_connector_in>; + }; + }; + }; +}; + +&gmac0 { + status = "okay"; + phy-handle = <&yt8511h0>; + mdio { + compatible = "snps,dwmac-mdio"; + #address-cells = <1>; + #size-cells = <0>; + + yt8511h0: ethernet-phy@0 { + compatible = "ethernet-phy-ieee802.3-c22"; + reg = <0>; + motorcomm,led0_cfg = <0x40>; //千兆常亮 + motorcomm,led1_cfg = <0x30>; //百兆 十兆常亮 + motorcomm,led2_cfg = <0x2600>; //有数据时闪烁 + }; + }; +}; + +&gmac1 { + status = "okay"; + phy-handle = <&yt8511h1>; + mdio { + compatible = "snps,dwmac-mdio"; + #address-cells = <1>; + #size-cells = <0>; + + yt8511h1: ethernet-phy@1 { + compatible = "ethernet-phy-ieee802.3-c22"; + reg = <0>; + motorcomm,led0_cfg = <0x40>; //千兆常亮 + motorcomm,led1_cfg = <0x30>; //百兆 十兆常亮 + motorcomm,led2_cfg = <0x2600>; //有数据时闪烁 + }; + }; +}; + +&i2c2 { + i2c-speed = <400000>; + + codec: es8388@11{ + compatible = "everest,es8388"; + reg = <0x11>; + AVDD-supply = <&vccio_codec>; + DVDD-supply = <&vccio_codec>; + HPVDD-supply = <&vccio_codec>; + PVDD-supply = <&vccio_codec>; + clocks = <&es8388_clk 0>; + }; + + dido_A000: xl9555@20 { + compatible = "nxp,pca9555"; + reg = <0x20>; + gpio-controller; + #gpio-cells = <2>; + interrupt-parent = <&io_expander_a>; + interrupts = <10 IRQ_TYPE_EDGE_FALLING>; + interrupt-controller; + #interrupt-cells = <2>; + }; + + dido_A001: xl9555@21 { + compatible = "nxp,pca9555"; + reg = <0x21>; + gpio-controller; + #gpio-cells = <2>; + interrupt-parent = <&io_expander_a>; + interrupts = <11 IRQ_TYPE_EDGE_FALLING>; + interrupt-controller; + #interrupt-cells = <2>; + }; + + dido_A010: xl9555@22 { + compatible = "nxp,pca9555"; + reg = <0x22>; + gpio-controller; + #gpio-cells = <2>; + interrupt-parent = <&io_expander_a>; + interrupts = <12 IRQ_TYPE_EDGE_FALLING>; + interrupt-controller; + #interrupt-cells = <2>; + }; +}; + +&i2c3 { + i2c-speed = <400000>; + + touchpad: gt9147@14 { + compatible = "goodix,gt9147"; + reg = <0x14>; + interrupt-parent = <&io_expander_a>; + interrupts = <2 IRQ_TYPE_EDGE_FALLING>; + irq-gpios = <&io_expander_a 2 GPIO_ACTIVE_LOW>; + reset-gpios = <&io_expander_a 3 GPIO_ACTIVE_LOW>; + }; + + io_expander_b: xl9555@26 { + compatible = "nxp,pca9555"; + reg = <0x26>; + gpio-controller; + #gpio-cells = <2>; + // 2K300 GPIO 支持中断控制 + // GPIO 中断号为 vhwirq-base + pinnum (194 = 128 + 66) + interrupt-parent = <&gpio>; + interrupts = <194 IRQ_TYPE_EDGE_FALLING>; + interrupt-controller; + #interrupt-cells = <2>; + }; + + io_expander_a: xl9555@27 { + compatible = "nxp,pca9555"; + reg = <0x27>; + gpio-controller; + #gpio-cells = <2>; + // 2K300 GPIO 支持中断控制 + // GPIO 中断号为 vhwirq-base + pinnum (195 = 128 + 67) + interrupt-parent = <&gpio>; + interrupts = <195 IRQ_TYPE_EDGE_FALLING>; + interrupt-controller; + #interrupt-cells = <2>; + }; + + dido_B000: xl9555@20 { + compatible = "nxp,pca9555"; + reg = <0x20>; + gpio-controller; + #gpio-cells = <2>; + interrupt-parent = <&io_expander_a>; + interrupts = <15 IRQ_TYPE_EDGE_FALLING>; + interrupt-controller; + #interrupt-cells = <2>; + }; + + dido_B001: xl9555@21 { + compatible = "nxp,pca9555"; + reg = <0x21>; + gpio-controller; + #gpio-cells = <2>; + interrupt-parent = <&io_expander_a>; + interrupts = <14 IRQ_TYPE_EDGE_FALLING>; + interrupt-controller; + #interrupt-cells = <2>; + }; + + dido_B010: xl9555@22 { + compatible = "nxp,pca9555"; + reg = <0x22>; + gpio-controller; + #gpio-cells = <2>; + interrupt-parent = <&io_expander_a>; + interrupts = <13 IRQ_TYPE_EDGE_FALLING>; + interrupt-controller; + #interrupt-cells = <2>; + }; +}; + +&uart1 { + status = "okay"; +}; + +&uart5 { + status = "okay"; +}; + +&can2 { + status = "ok"; +}; + +&can3 { + status = "ok"; +}; + +&adc { + status = "okay"; +}; + +&sdio1 { + pinctrl-0 = <&sdio1_pins>; + pinctrl-names = "default"; + cap-sd-highspeed; + cap-mmc-highspeed; + bus-width = <4>; + //cd-gpios = <&io_expander_a 4 GPIO_ACTIVE_LOW>; + status = "okay"; +}; + +&i2s { + status = "okay"; +}; + +&audio { + status = "okay"; +}; + +&sound { + status = "okay"; + loongson,audio-codec = <&codec>; + // Easy Compatible for asound.state Configure + loongson,sound-card-name = "ES8388"; +}; + diff --git a/arch/loongarch/boot/dts/loongson/ls2k300_mini_dp.dts b/arch/loongarch/boot/dts/loongson/ls2k300_mini_dp.dts index 414fd7f61..fdfe1c9ac 100644 --- a/arch/loongarch/boot/dts/loongson/ls2k300_mini_dp.dts +++ b/arch/loongarch/boot/dts/loongson/ls2k300_mini_dp.dts @@ -135,6 +135,14 @@ interrupts = <210 IRQ_TYPE_EDGE_FALLING>; irq-gpios = <&gpio 82 GPIO_ACTIVE_LOW>; }; + touchpad_2: ft5426@38 { + compatible = "focaltech,fts"; + reg = <0x38>; + interrupt-parent = <&gpio>; + interrupts = <210 IRQ_TYPE_EDGE_FALLING>; + irq-gpios = <&gpio 82 GPIO_ACTIVE_LOW>; + }; + }; &i2c2 { diff --git a/arch/loongarch/boot/dts/loongson/ls2k300_pai_pihat.dts b/arch/loongarch/boot/dts/loongson/ls2k300_pai_pihat.dts index ed024515f..db9996632 100644 --- a/arch/loongarch/boot/dts/loongson/ls2k300_pai_pihat.dts +++ b/arch/loongarch/boot/dts/loongson/ls2k300_pai_pihat.dts @@ -13,14 +13,14 @@ }; &pinmux { - gpio_63_60_pins: pinmux_G60_G63_as_gpio { - pinctrl-single,bits = <0xc 0x00000000 0xff000000>; - }; + gpio_63_60_pins: pinmux_G60_G63_as_gpio { + pinctrl-single,bits = <0xc 0x00000000 0xff000000>; + }; }; &gpio { - pinctrl-0 = <&gpio_63_60_pins>; - pinctrl-names = "default"; + pinctrl-0 = <&gpio_63_60_pins>; + pinctrl-names = "default"; }; &uart2 { @@ -45,12 +45,6 @@ &spi1 { status = "disable"; - - spidev0@0 { - compatible = "rohm,dh2228fv"; - reg = <0>; - spi-max-frequency = <25000000>; - }; }; &spi2 { @@ -67,7 +61,7 @@ spi-max-frequency = <1500000>; }; - spidev1@1 { + spidev2@1 { compatible = "rohm,dh2228fv"; reg = <1>; spi-max-frequency = <25000000>; diff --git a/arch/loongarch/boot/dts/loongson/ls2p500_evb.dts b/arch/loongarch/boot/dts/loongson/ls2p500_evb.dts deleted file mode 100644 index ec181209e..000000000 --- a/arch/loongarch/boot/dts/loongson/ls2p500_evb.dts +++ /dev/null @@ -1,136 +0,0 @@ -#include "loongson2p500.dtsi" -#include -#include - -/ { - model = "LS2P500-EVB"; - chosen { - stdout-path = "serial0:115200n8"; - bootargs = "earlycon"; - }; - - memory { - name = "memory"; - device_type = "memory"; - /* low 256MB, 0 ~ 2MB reserved, highest 16MB reserved. */ - reg = <0 0x00200000 0 0x0ee00000 - 0 0x90000000 0 0x30000000>; - }; - - reserved-memory { - #address-cells = <2>; - #size-cells = <2>; - ranges; - - linux,cma { - compatible = "shared-dma-pool"; - reusable; - size = <0 0x02000000>; - // alloc-ranges = <0 0x00200000 0 0x09000000>; - linux,cma-default; - }; - }; -}; - -&uart0 { - status = "okay"; -}; - -&uart1 { - status = "okay"; -}; - -&uart2 { - status = "okay"; -}; - -&uart3 { - status = "okay"; -}; - -&uart4 { - status = "okay"; -}; - -&uart5 { - status = "okay"; -}; - -&uart6 { - status = "okay"; -}; - -&uart7 { - status = "okay"; -}; - - -&spi0 { - status = "okay"; - // spidev@0 { - // compatible = "rohm,dh2228fv"; - // spi-max-frequency = <100000000>; - // reg = <0>; - // }; -}; - -&spi2 { - status = "okay"; -}; - -&i2c2 { - status = "okay"; -}; - -&gmac0 { - status = "okay"; -}; - -&gmac1 { - status = "okay"; -}; - -// &sdio { -// status = "okay"; -// }; - -&rtc0 { - status = "okay"; -}; - -&pwm0 { - status = "okay"; -}; - -&pwm1 { - status = "okay"; -}; - -&pwm2 { - status = "okay"; -}; - -&pwm3 { - status = "okay"; -}; - -&prt_pwm7 { - status = "okay"; -}; - -&prt_pwm8 { - status = "okay"; -}; - -&prt_pwm9 { - status = "okay"; -}; - -&prt_pwm10 { - status = "okay"; -}; - -&prt_pwm11 { - status = "okay"; -}; - diff --git a/arch/loongarch/boot/dts/loongson/ls2p500_gbkpjm0_v10.dts b/arch/loongarch/boot/dts/loongson/ls2p500_gbkpjm0_v10.dts index 108e5d1e5..0fa9065ec 100644 --- a/arch/loongarch/boot/dts/loongson/ls2p500_gbkpjm0_v10.dts +++ b/arch/loongarch/boot/dts/loongson/ls2p500_gbkpjm0_v10.dts @@ -16,6 +16,16 @@ default-state = "on"; }; }; + +}; + +&pioA { + eth_bypass { + gpio-hog; + gpios = <13 GPIO_ACTIVE_HIGH>; + output-high; + line-name = "eth-bypass"; + }; }; // UART LCD @@ -53,6 +63,9 @@ &gmac0 { status = "okay"; + snps,reset-gpio = <&pioA 12 GPIO_ACTIVE_LOW>; + snps,reset-active-low; + snps,reset-delays-us = <0 50000 50000>; }; &gmac1 { diff --git a/arch/loongarch/boot/dts/loongson/ls2p500_rsj_mb_v10.dts b/arch/loongarch/boot/dts/loongson/ls2p500_rsj_mb_v10.dts deleted file mode 100644 index ae36431b9..000000000 --- a/arch/loongarch/boot/dts/loongson/ls2p500_rsj_mb_v10.dts +++ /dev/null @@ -1,233 +0,0 @@ -#include "ls2p500_g2p05z0_v10.dtsi" -#include -#include -#include - -/ { - model = "LS2P500-RSJ"; - - gpio-keys { - //compatible = "gpio-keys"; - compatible = "gpio-keys-polled"; - poll-interval = <20>; - - key1@0 { - label = "key1"; - linux,code = ; - gpios = <&pioC 6 GPIO_ACTIVE_LOW>; - }; - key2@1 { - label = "key2"; - linux,code = ; - gpios = <&pioC 7 GPIO_ACTIVE_LOW>; - }; - key3@2 { - label = "key3"; - linux,code = ; - gpios = <&pioC 8 GPIO_ACTIVE_LOW>; - }; - key4@3 { - label = "key4"; - linux,code = ; - gpios = <&pioC 9 GPIO_ACTIVE_LOW>; - }; - key5@4 { - label = "key5"; - linux,code = ; - gpios = <&pioC 10 GPIO_ACTIVE_LOW>; - }; - key6@5 { - label = "key6"; - linux,code = ; - gpios = <&pioC 11 GPIO_ACTIVE_LOW>; - }; - key7@6 { - label = "key7"; - linux,code = ; - gpios = <&pioC 12 GPIO_ACTIVE_LOW>; - }; - key8@7 { - label = "key8"; - linux,code = ; - gpios = <&pioC 13 GPIO_ACTIVE_LOW>; - }; - key9@8 { - label = "key9"; - linux,code = ; - gpios = <&pioC 14 GPIO_ACTIVE_LOW>; - }; - key10@9 { - label = "key10"; - linux,code = ; - gpios = <&pioC 15 GPIO_ACTIVE_LOW>; - }; - key11@10 { - label = "key11"; - linux,code = ; - gpios = <&pioC 16 GPIO_ACTIVE_LOW>; - }; - key12@11 { - label = "key12"; - linux,code = ; - gpios = <&pioC 17 GPIO_ACTIVE_LOW>; - }; - key13@12 { - label = "key13"; - linux,code = ; - gpios = <&pioC 18 GPIO_ACTIVE_LOW>; - }; - }; - - pps0 { - compatible = "pps-gpio"; - gpios = <&pioB 26 GPIO_ACTIVE_HIGH>; - }; - - pps1 { - compatible = "pps-gpio"; - gpios = <&pioB 27 GPIO_ACTIVE_HIGH>; - }; - - dac_vdd:dac_vdd_5v { - compatible = "regulator-fixed"; - regulator-name = "5v"; - regulator-min-microvolt = <5000000>; - regulator-max-microvolt = <5000000>; - enable-active-high; - regulator-boot-on; - }; - - backlight { - compatible = "gpio-backlight"; - gpios = <&pioC 20 GPIO_ACTIVE_HIGH>; - default-on; - }; - - leds { - compatible = "gpio-leds"; - - led1 { - label = "led1"; - gpios = <&pioC 19 GPIO_ACTIVE_LOW>; - linux,default-trigger = "heartbeat"; - default-state = "on"; - }; - }; -}; - -// UART LCD -&uart1 { - status = "okay"; -}; - -// RS485 -&uart2 { - status = "okay"; -}; - -// RS485 -&uart3 { - status = "okay"; - pinctrl-names = "default"; - pinctrl-0 = <&uart3_pins>, <&uart3_on_uart1>; -}; - -// PRT-UART0 -&uart4 { - status = "okay"; -}; - -// SCA-UART0 -&uart6 { - status = "okay"; -}; - -// PRT-I2C0 -&i2c2 { - status = "okay"; - - mcp4728-0@60{ - compatible = "microchip,mcp4728"; - reg = <0x60>; - vdd-supply = <&dac_vdd>; - // 外部电路有时要限制输出电压 - mcp4728,rawmax = <2928>; - }; - mcp4728-4@64{ - compatible = "microchip,mcp4728"; - reg = <0x64>; - vdd-supply = <&dac_vdd>; - // 外部电路有时要限制输出电压 - mcp4728,rawmax = <2928>; - }; -}; - -// PRT-I2C1 -&i2c3 { - status = "okay"; - - sd2068@32 { - compatible = "whwave,sd2068"; - reg = <0x32>; - }; - - eeprom@57 { - compatible = "atmel,24c32"; - reg = <0x57>; - pagesize = <32>; - }; -}; - -&spi2 { - status = "okay"; - - ms518xn@0 { - compatible = "ruimeng,ms518xn"; - reg = <0>; - spi-max-frequency = <1000000>; - ms518xn-chip-type = "ms5189n"; - ms518xn-chip-ref = <1>; //4.096V - ms518xn-chip-rb = <1>; // do not readback - }; -}; - -&spi3 { - status = "okay"; - - max31865@0 { - compatible = "maxim,max31865"; - reg = <0>; - spi-max-frequency = <1000000>; - spi-cpha; - maxim,3-wire; - - // 利用GPIO切换通道 - // gpios = - use-gpio-channels; - channel-bits = <2>; - // channel0 --> 0 + affined - // 比如两个GPIO LOW 实际上表示都断开的情况 - // 硬件从 index 1 开始,可以偏移 1 - channel-affined = <1>; - // force+ - force-gpios = < - &pioC 23 0 - &pioC 32 0 - >; - // in+ - in-positive-gpios = < - &pioC 33 0 - &pioC 34 0 - >; - // in- - in-negative-gpios = < - &pioC 35 0 - &pioC 36 0 - >; - }; -}; - -&gmac0 { - status = "okay"; -}; - diff --git a/arch/loongarch/configs/loongson_2k1000_i2s_defconfig b/arch/loongarch/configs/loongson_2k1000_i2s_defconfig deleted file mode 100644 index 9cedcbe37..000000000 --- a/arch/loongarch/configs/loongson_2k1000_i2s_defconfig +++ /dev/null @@ -1,569 +0,0 @@ -CONFIG_LOCALVERSION=".lsgd" -# CONFIG_LOCALVERSION_AUTO is not set -CONFIG_SYSVIPC=y -CONFIG_POSIX_MQUEUE=y -CONFIG_NO_HZ=y -CONFIG_HIGH_RES_TIMERS=y -CONFIG_PREEMPT=y -CONFIG_BSD_PROCESS_ACCT=y -CONFIG_BSD_PROCESS_ACCT_V3=y -CONFIG_TASKSTATS=y -CONFIG_TASK_DELAY_ACCT=y -CONFIG_TASK_XACCT=y -CONFIG_TASK_IO_ACCOUNTING=y -CONFIG_LOG_BUF_SHIFT=16 -CONFIG_MEMCG=y -CONFIG_BLK_CGROUP=y -CONFIG_CFS_BANDWIDTH=y -CONFIG_RT_GROUP_SCHED=y -CONFIG_CGROUP_PIDS=y -CONFIG_CGROUP_FREEZER=y -CONFIG_CGROUP_HUGETLB=y -CONFIG_CPUSETS=y -CONFIG_CGROUP_DEVICE=y -CONFIG_CGROUP_CPUACCT=y -CONFIG_CGROUP_PERF=y -CONFIG_CGROUP_BPF=y -CONFIG_NAMESPACES=y -CONFIG_USER_NS=y -CONFIG_CHECKPOINT_RESTORE=y -CONFIG_SCHED_AUTOGROUP=y -CONFIG_SYSFS_DEPRECATED=y -CONFIG_RELAY=y -CONFIG_BLK_DEV_INITRD=y -CONFIG_EXPERT=y -CONFIG_BPF_SYSCALL=y -CONFIG_USERFAULTFD=y -CONFIG_PERF_EVENTS=y -# CONFIG_COMPAT_BRK is not set -CONFIG_LOONGSON_2K1000=y -CONFIG_CPU_HAS_LSX=y -CONFIG_CPU_HAS_LASX=y -CONFIG_SMP=y -CONFIG_NR_CPUS=2 -CONFIG_KEXEC=y -CONFIG_HIBERNATION=y -CONFIG_CPU_FREQ=y -CONFIG_CPU_FREQ_GOV_POWERSAVE=y -CONFIG_CPU_FREQ_GOV_USERSPACE=y -CONFIG_CPU_FREQ_GOV_ONDEMAND=y -CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y -CONFIG_MODULES=y -CONFIG_MODULE_FORCE_LOAD=y -CONFIG_MODULE_UNLOAD=y -CONFIG_MODULE_FORCE_UNLOAD=y -CONFIG_MODVERSIONS=y -# CONFIG_BLK_DEV_BSG is not set -CONFIG_BLK_DEV_THROTTLING=y -CONFIG_PARTITION_ADVANCED=y -CONFIG_IOSCHED_BFQ=y -CONFIG_BFQ_GROUP_IOSCHED=y -CONFIG_SPARSEMEM_MANUAL=y -CONFIG_MEMORY_HOTPLUG=y -CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE=y -CONFIG_MEMORY_HOTREMOVE=y -CONFIG_KSM=y -CONFIG_TRANSPARENT_HUGEPAGE=y -CONFIG_FRONTSWAP=y -CONFIG_CMA_AREAS=19 -CONFIG_ZSWAP=y -CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD=y -CONFIG_Z3FOLD=y -CONFIG_NET=y -CONFIG_PACKET=y -CONFIG_UNIX=y -CONFIG_XFRM_USER=y -CONFIG_NET_KEY=y -CONFIG_INET=y -CONFIG_IP_MULTICAST=y -CONFIG_IP_ADVANCED_ROUTER=y -CONFIG_IP_MULTIPLE_TABLES=y -CONFIG_IP_ROUTE_MULTIPATH=y -CONFIG_IP_ROUTE_VERBOSE=y -CONFIG_IP_PNP=y -CONFIG_IP_PNP_DHCP=y -CONFIG_IP_PNP_BOOTP=y -CONFIG_IP_PNP_RARP=y -CONFIG_IP_MROUTE=y -CONFIG_INET_ESP=y -CONFIG_INET_UDP_DIAG=y -CONFIG_TCP_CONG_ADVANCED=y -CONFIG_IPV6_ROUTER_PREF=y -CONFIG_IPV6_ROUTE_INFO=y -CONFIG_IPV6_MROUTE=y -CONFIG_NETWORK_PHY_TIMESTAMPING=y -CONFIG_NETFILTER=y -CONFIG_BRIDGE_NETFILTER=y -CONFIG_NF_CONNTRACK=y -CONFIG_NF_CONNTRACK_SECMARK=y -CONFIG_NF_CONNTRACK_ZONES=y -CONFIG_NF_CONNTRACK_EVENTS=y -CONFIG_NF_CONNTRACK_TIMEOUT=y -CONFIG_NF_CONNTRACK_TIMESTAMP=y -CONFIG_NF_CONNTRACK_LABELS=y -CONFIG_NF_CONNTRACK_AMANDA=y -CONFIG_NF_CONNTRACK_FTP=y -CONFIG_NF_CONNTRACK_H323=y -CONFIG_NF_CONNTRACK_IRC=y -CONFIG_NF_CONNTRACK_NETBIOS_NS=y -CONFIG_NF_CONNTRACK_SNMP=y -CONFIG_NF_CONNTRACK_PPTP=y -CONFIG_NF_CONNTRACK_SANE=y -CONFIG_NF_CONNTRACK_SIP=y -CONFIG_NF_CONNTRACK_TFTP=y -CONFIG_NF_CT_NETLINK=y -CONFIG_NF_CT_NETLINK_TIMEOUT=y -CONFIG_NETFILTER_XT_MARK=y -CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y -CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y -CONFIG_NETFILTER_XT_MATCH_IPVS=y -CONFIG_IP_VS=y -CONFIG_IP_VS_PROTO_TCP=y -CONFIG_IP_VS_PROTO_UDP=y -CONFIG_IP_VS_RR=y -CONFIG_IP_VS_NFCT=y -CONFIG_NF_SOCKET_IPV4=y -CONFIG_NF_TPROXY_IPV4=y -CONFIG_NF_DUP_IPV4=y -CONFIG_NF_LOG_ARP=y -CONFIG_NF_LOG_IPV4=y -CONFIG_IP_NF_IPTABLES=y -CONFIG_IP_NF_MATCH_AH=y -CONFIG_IP_NF_MATCH_ECN=y -CONFIG_IP_NF_MATCH_RPFILTER=y -CONFIG_IP_NF_MATCH_TTL=y -CONFIG_IP_NF_FILTER=y -CONFIG_IP_NF_TARGET_REJECT=y -CONFIG_IP_NF_TARGET_SYNPROXY=y -CONFIG_IP_NF_NAT=y -CONFIG_IP_NF_TARGET_MASQUERADE=y -CONFIG_IP_NF_TARGET_NETMAP=y -CONFIG_IP_NF_TARGET_REDIRECT=y -CONFIG_IP_NF_MANGLE=y -CONFIG_IP_NF_TARGET_CLUSTERIP=y -CONFIG_IP_NF_TARGET_ECN=y -CONFIG_IP_NF_TARGET_TTL=y -CONFIG_IP_NF_RAW=y -CONFIG_IP_NF_SECURITY=y -CONFIG_IP_NF_ARPTABLES=y -CONFIG_IP_NF_ARPFILTER=y -CONFIG_IP_NF_ARP_MANGLE=y -CONFIG_IP6_NF_IPTABLES=y -CONFIG_IP6_NF_FILTER=y -CONFIG_RDS=y -CONFIG_BRIDGE=y -CONFIG_BRIDGE_VLAN_FILTERING=y -CONFIG_VLAN_8021Q=y -CONFIG_NETLINK_DIAG=y -CONFIG_CGROUP_NET_PRIO=y -CONFIG_CAN=y -CONFIG_CAN_SJA1000=y -CONFIG_CAN_SJA1000_PLATFORM=y -CONFIG_BT=y -CONFIG_BT_HCIBTUSB=m -CONFIG_CFG80211=y -CONFIG_NL80211_TESTMODE=y -CONFIG_CFG80211_DEVELOPER_WARNINGS=y -CONFIG_CFG80211_CERTIFICATION_ONUS=y -CONFIG_CFG80211_REG_CELLULAR_HINTS=y -CONFIG_CFG80211_REG_RELAX_NO_IR=y -CONFIG_MAC80211=y -CONFIG_MAC80211_MESH=y -CONFIG_RFKILL=y -CONFIG_PCIEPORTBUS=y -CONFIG_HOTPLUG_PCI_PCIE=y -CONFIG_PCIEAER=y -# CONFIG_PCIEASPM is not set -CONFIG_PCI_IOV=y -CONFIG_HOTPLUG_PCI=y -CONFIG_HOTPLUG_PCI_SHPC=y -CONFIG_UEVENT_HELPER=y -CONFIG_DEVTMPFS=y -CONFIG_DEVTMPFS_MOUNT=y -CONFIG_MTD=y -CONFIG_MTD_CMDLINE_PARTS=y -CONFIG_MTD_BLOCK=y -CONFIG_MTD_BLOCK2MTD=y -CONFIG_MTD_RAW_NAND=y -CONFIG_MTD_NAND_ECC_SW_BCH=y -CONFIG_MTD_NAND_LS=y -CONFIG_MTD_SPI_NOR=y -CONFIG_MTD_UBI=y -CONFIG_BLK_DEV_LOOP=y -CONFIG_BLK_DEV_CRYPTOLOOP=y -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=32768 -CONFIG_BLK_DEV_NVME=y -CONFIG_EEPROM_AT24=y -# CONFIG_SCSI_PROC_FS is not set -CONFIG_BLK_DEV_SD=y -CONFIG_CHR_DEV_SG=y -CONFIG_SCSI_CONSTANTS=y -CONFIG_SCSI_LOGGING=y -# CONFIG_SCSI_LOWLEVEL is not set -CONFIG_ATA=y -CONFIG_SATA_AHCI=y -CONFIG_SATA_AHCI_PLATFORM=y -CONFIG_PATA_ATIIXP=y -CONFIG_MD=y -CONFIG_BLK_DEV_DM=y -CONFIG_DM_THIN_PROVISIONING=y -CONFIG_NETDEVICES=y -CONFIG_DUMMY=y -CONFIG_MACVLAN=y -CONFIG_IPVLAN=y -CONFIG_VXLAN=y -CONFIG_VETH=y -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_NET_VENDOR_ADAPTEC is not set -# CONFIG_NET_VENDOR_AGERE is not set -# CONFIG_NET_VENDOR_ALACRITECH is not set -# CONFIG_NET_VENDOR_ALTEON is not set -# CONFIG_NET_VENDOR_AMAZON is not set -# CONFIG_NET_VENDOR_AMD is not set -# CONFIG_NET_VENDOR_AQUANTIA is not set -# CONFIG_NET_VENDOR_ARC is not set -# CONFIG_NET_VENDOR_ATHEROS is not set -# CONFIG_NET_VENDOR_AURORA is not set -# CONFIG_NET_VENDOR_BROADCOM is not set -# CONFIG_NET_VENDOR_BROCADE is not set -# CONFIG_NET_VENDOR_CADENCE is not set -# CONFIG_NET_VENDOR_CAVIUM is not set -# CONFIG_NET_VENDOR_CHELSIO is not set -# CONFIG_NET_VENDOR_CISCO is not set -# CONFIG_NET_VENDOR_CORTINA is not set -# CONFIG_NET_VENDOR_DEC is not set -# CONFIG_NET_VENDOR_DLINK is not set -# CONFIG_NET_VENDOR_EMULEX is not set -# CONFIG_NET_VENDOR_EZCHIP is not set -# CONFIG_NET_VENDOR_GOOGLE is not set -# CONFIG_NET_VENDOR_HUAWEI is not set -# CONFIG_NET_VENDOR_INTEL is not set -# CONFIG_NET_VENDOR_MARVELL is not set -# CONFIG_NET_VENDOR_MELLANOX is not set -# CONFIG_NET_VENDOR_MICREL is not set -# CONFIG_NET_VENDOR_MICROCHIP is not set -# CONFIG_NET_VENDOR_MICROSEMI is not set -# CONFIG_NET_VENDOR_MYRI is not set -# CONFIG_NET_VENDOR_NATSEMI is not set -# CONFIG_NET_VENDOR_NETERION is not set -# CONFIG_NET_VENDOR_NETRONOME is not set -# CONFIG_NET_VENDOR_NI is not set -# CONFIG_NET_VENDOR_NVIDIA is not set -# CONFIG_NET_VENDOR_OKI is not set -# CONFIG_NET_VENDOR_PACKET_ENGINES is not set -# CONFIG_NET_VENDOR_PENSANDO is not set -# CONFIG_NET_VENDOR_QLOGIC is not set -# CONFIG_NET_VENDOR_QUALCOMM is not set -# CONFIG_NET_VENDOR_RDC is not set -# CONFIG_NET_VENDOR_REALTEK is not set -# CONFIG_NET_VENDOR_RENESAS is not set -# CONFIG_NET_VENDOR_ROCKER is not set -# CONFIG_NET_VENDOR_SAMSUNG is not set -# CONFIG_NET_VENDOR_SEEQ is not set -# CONFIG_NET_VENDOR_SOLARFLARE is not set -# CONFIG_NET_VENDOR_SILAN is not set -# CONFIG_NET_VENDOR_SIS is not set -# CONFIG_NET_VENDOR_SMSC is not set -# CONFIG_NET_VENDOR_SOCIONEXT is not set -CONFIG_STMMAC_ETH=y -CONFIG_STMMAC_PCI=y -# CONFIG_NET_VENDOR_SUN is not set -# CONFIG_NET_VENDOR_SYNOPSYS is not set -# CONFIG_NET_VENDOR_TEHUTI is not set -# CONFIG_NET_VENDOR_TI is not set -# CONFIG_NET_VENDOR_VIA is not set -# CONFIG_NET_VENDOR_WIZNET is not set -# CONFIG_NET_VENDOR_XILINX is not set -CONFIG_MOTORCOMM_PHY=y -CONFIG_USB_USBNET=y -# CONFIG_WLAN_VENDOR_ADMTEK is not set -# CONFIG_WLAN_VENDOR_ATH is not set -# CONFIG_WLAN_VENDOR_ATMEL is not set -# CONFIG_WLAN_VENDOR_BROADCOM is not set -# CONFIG_WLAN_VENDOR_CISCO is not set -CONFIG_IPW2100=m -CONFIG_IPW2100_MONITOR=y -CONFIG_IPW2200=m -CONFIG_IPW2200_MONITOR=y -CONFIG_IPW2200_PROMISCUOUS=y -CONFIG_IPW2200_QOS=y -CONFIG_LIBIPW_DEBUG=y -CONFIG_IWL4965=m -CONFIG_IWL3945=m -CONFIG_IWLWIFI=m -CONFIG_IWLDVM=m -CONFIG_IWLMVM=m -CONFIG_IWLWIFI_BCAST_FILTERING=y -# CONFIG_WLAN_VENDOR_INTERSIL is not set -# CONFIG_WLAN_VENDOR_MARVELL is not set -# CONFIG_WLAN_VENDOR_MEDIATEK is not set -# CONFIG_WLAN_VENDOR_MICROCHIP is not set -# CONFIG_WLAN_VENDOR_RALINK is not set -CONFIG_RTL8180=m -CONFIG_RTL8187=m -CONFIG_RTL_CARDS=m -CONFIG_RTL8XXXU=m -CONFIG_RTW88=m -CONFIG_RTW88_8822BE=m -CONFIG_RTW88_8822CE=m -CONFIG_RTW88_8723DE=m -CONFIG_RTW88_8821CE=m -# CONFIG_WLAN_VENDOR_RSI is not set -# CONFIG_WLAN_VENDOR_ST is not set -# CONFIG_WLAN_VENDOR_TI is not set -# CONFIG_WLAN_VENDOR_ZYDAS is not set -# CONFIG_WLAN_VENDOR_QUANTENNA is not set -CONFIG_INPUT_MOUSEDEV=y -CONFIG_INPUT_MOUSEDEV_PSAUX=y -CONFIG_INPUT_EVDEV=y -CONFIG_KEYBOARD_GPIO_POLLED=y -# CONFIG_MOUSE_PS2 is not set -CONFIG_INPUT_TOUCHSCREEN=y -CONFIG_TOUCHSCREEN_GOODIX=y -# CONFIG_SERIO_SERPORT is not set -CONFIG_LEGACY_PTY_COUNT=16 -CONFIG_SERIAL_8250=y -CONFIG_SERIAL_8250_CONSOLE=y -# CONFIG_SERIAL_8250_PCI is not set -CONFIG_SERIAL_8250_NR_UARTS=16 -CONFIG_SERIAL_8250_RUNTIME_UARTS=16 -CONFIG_SERIAL_8250_EXTENDED=y -CONFIG_SERIAL_8250_MANY_PORTS=y -CONFIG_SERIAL_8250_SHARE_IRQ=y -CONFIG_SERIAL_8250_RSA=y -CONFIG_SERIAL_OF_PLATFORM=y -CONFIG_SERIAL_NONSTANDARD=y -CONFIG_SERIAL_DEV_BUS=y -CONFIG_HW_RANDOM=y -CONFIG_I2C_CHARDEV=y -CONFIG_I2C_MUX_GPMUX=y -CONFIG_I2C_MUX_REG=y -CONFIG_I2C_GPIO=y -CONFIG_I2C_OCORES=y -CONFIG_I2C_LS2X=y -CONFIG_I2C_DEBUG_CORE=y -CONFIG_SPI=y -CONFIG_SPI_LS=y -CONFIG_PINCTRL=y -CONFIG_PINCTRL_LS2K1000=y -CONFIG_PINCTRL_SINGLE=y -CONFIG_GPIO_SYSFS=y -CONFIG_GPIO_LOONGSON=y -CONFIG_GPIO_PCA953X=y -CONFIG_GPIO_PCA953X_IRQ=y -CONFIG_POWER_RESET=y -CONFIG_POWER_RESET_SYSCON=y -CONFIG_POWER_RESET_SYSCON_POWEROFF=y -CONFIG_POWER_SUPPLY=y -CONFIG_SENSORS_GPIO_FAN=y -CONFIG_THERMAL=y -CONFIG_LOONGSON2K_THERMAL=y -CONFIG_WATCHDOG=y -CONFIG_LOONGSON2_WDT=y -CONFIG_REGULATOR=y -CONFIG_REGULATOR_FIXED_VOLTAGE=y -# CONFIG_MEDIA_CEC_SUPPORT is not set -CONFIG_MEDIA_SUPPORT=y -CONFIG_VIDEO_V4L2_SUBDEV_API=y -CONFIG_VIDEO_ADV_DEBUG=y -CONFIG_VIDEO_FIXED_MINOR_RANGES=y -CONFIG_MEDIA_USB_SUPPORT=y -CONFIG_USB_VIDEO_CLASS=y -CONFIG_USB_GSPCA=y -CONFIG_USB_M5602=y -CONFIG_USB_STV06XX=y -CONFIG_USB_GL860=y -CONFIG_USB_GSPCA_BENQ=y -CONFIG_USB_GSPCA_CONEX=y -CONFIG_USB_GSPCA_CPIA1=y -CONFIG_USB_GSPCA_DTCS033=y -CONFIG_USB_GSPCA_ETOMS=y -CONFIG_USB_GSPCA_FINEPIX=y -CONFIG_USB_GSPCA_JEILINJ=y -CONFIG_USB_GSPCA_JL2005BCD=y -CONFIG_USB_GSPCA_KONICA=y -CONFIG_USB_GSPCA_MARS=y -CONFIG_USB_GSPCA_MR97310A=y -CONFIG_USB_GSPCA_NW80X=y -CONFIG_USB_GSPCA_OV519=y -CONFIG_USB_GSPCA_OV534=y -CONFIG_USB_GSPCA_OV534_9=y -CONFIG_USB_GSPCA_PAC207=y -CONFIG_USB_GSPCA_PAC7302=y -CONFIG_USB_GSPCA_PAC7311=y -CONFIG_USB_GSPCA_SE401=y -CONFIG_USB_GSPCA_SN9C2028=y -CONFIG_USB_GSPCA_SN9C20X=y -CONFIG_USB_GSPCA_SONIXB=y -CONFIG_USB_GSPCA_SONIXJ=y -CONFIG_USB_GSPCA_SPCA500=y -CONFIG_USB_GSPCA_SPCA501=y -CONFIG_USB_GSPCA_SPCA505=y -CONFIG_USB_GSPCA_SPCA506=y -CONFIG_USB_GSPCA_SPCA508=y -CONFIG_USB_GSPCA_SPCA561=y -CONFIG_USB_GSPCA_SPCA1528=y -CONFIG_USB_GSPCA_SQ905=y -CONFIG_USB_GSPCA_SQ905C=y -CONFIG_USB_GSPCA_SQ930X=y -CONFIG_USB_GSPCA_STK014=y -CONFIG_USB_GSPCA_STK1135=y -CONFIG_USB_GSPCA_STV0680=y -CONFIG_USB_GSPCA_SUNPLUS=y -CONFIG_USB_GSPCA_T613=y -CONFIG_USB_GSPCA_TOPRO=y -CONFIG_USB_GSPCA_TOUPTEK=y -CONFIG_USB_GSPCA_TV8532=y -CONFIG_USB_GSPCA_VC032X=y -CONFIG_USB_GSPCA_VICAM=y -CONFIG_USB_GSPCA_XIRLINK_CIT=y -CONFIG_USB_GSPCA_ZC3XX=y -CONFIG_DRM=y -# CONFIG_DRM_LOONGSON_PCI_DRIVER is not set -# CONFIG_DRM_LSDC is not set -CONFIG_DRM_PANEL_LVDS=y -CONFIG_DRM_DISPLAY_CONNECTOR=y -CONFIG_DRM_SII902X=y -CONFIG_DRM_SIMPLE_BRIDGE=y -CONFIG_FB_RADEON=y -CONFIG_BACKLIGHT_PWM=y -CONFIG_BACKLIGHT_GPIO=y -# CONFIG_VGA_CONSOLE is not set -CONFIG_FRAMEBUFFER_CONSOLE=y -CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y -CONFIG_LOGO=y -# CONFIG_LOGO_LINUX_MONO is not set -# CONFIG_LOGO_LINUX_VGA16 is not set -CONFIG_SOUND=y -CONFIG_SND=y -CONFIG_SND_OSSEMUL=y -CONFIG_SND_MIXER_OSS=y -CONFIG_SND_PCM_OSS=y -CONFIG_SND_DYNAMIC_MINORS=y -CONFIG_SND_SEQUENCER=y -CONFIG_SND_SEQ_DUMMY=y -CONFIG_SND_SEQUENCER_OSS=y -# CONFIG_SND_DRIVERS is not set -# CONFIG_SND_PCI is not set -# CONFIG_SND_SPI is not set -CONFIG_SND_USB_AUDIO=y -CONFIG_SND_SOC=y -CONFIG_SND_LS1X_SOC=y -CONFIG_SND_LS1X_SOC_BOARD1C=y -CONFIG_SND_SOC_ES7210=y -CONFIG_HIDRAW=y -CONFIG_HID_MULTITOUCH=y -CONFIG_HID_PID=y -CONFIG_USB_HIDDEV=y -CONFIG_USB=y -CONFIG_USB_MON=y -CONFIG_USB_EHCI_HCD=y -CONFIG_USB_EHCI_ROOT_HUB_TT=y -CONFIG_USB_EHCI_HCD_PLATFORM=y -CONFIG_USB_OHCI_HCD=y -# CONFIG_USB_OHCI_HCD_PCI is not set -CONFIG_USB_OHCI_HCD_PLATFORM=y -CONFIG_USB_ACM=y -CONFIG_USB_STORAGE=y -CONFIG_USB_DWC2=y -CONFIG_USB_SERIAL=y -CONFIG_USB_SERIAL_OPTION=y -CONFIG_LEDS_CLASS=y -CONFIG_LEDS_GPIO=y -CONFIG_LEDS_PWM=y -CONFIG_LEDS_TRIGGER_HEARTBEAT=y -CONFIG_LEDS_TRIGGER_DEFAULT_ON=y -CONFIG_LEDS_TRIGGER_AUDIO=y -CONFIG_RTC_CLASS=y -CONFIG_RTC_DRV_SD3078=y -CONFIG_RTC_DRV_LS2X=y -CONFIG_DMADEVICES=y -CONFIG_LS_APBDMAC=y -# CONFIG_VIRTIO_MENU is not set -# CONFIG_VHOST_MENU is not set -CONFIG_STAGING=y -CONFIG_R8188EU=y -# CONFIG_LOONGARCH_PLATFORM_DEVICES is not set -CONFIG_LOONGSON2_SYSCLK_SOFT=y -# CONFIG_IOMMU_SUPPORT is not set -CONFIG_PM_DEVFREQ=y -CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y -CONFIG_DEVFREQ_GOV_PERFORMANCE=y -CONFIG_DEVFREQ_GOV_POWERSAVE=y -CONFIG_DEVFREQ_GOV_USERSPACE=y -CONFIG_PWM=y -CONFIG_PWM_LS=y -CONFIG_EXT2_FS=y -CONFIG_EXT2_FS_XATTR=y -CONFIG_EXT2_FS_POSIX_ACL=y -CONFIG_EXT2_FS_SECURITY=y -CONFIG_EXT3_FS=y -CONFIG_EXT3_FS_POSIX_ACL=y -CONFIG_EXT3_FS_SECURITY=y -CONFIG_BTRFS_FS=y -CONFIG_BTRFS_FS_POSIX_ACL=y -CONFIG_FANOTIFY=y -CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y -CONFIG_QUOTA=y -# CONFIG_PRINT_QUOTA_WARNING is not set -CONFIG_AUTOFS4_FS=y -CONFIG_OVERLAY_FS=y -CONFIG_OVERLAY_FS_INDEX=y -CONFIG_OVERLAY_FS_XINO_AUTO=y -CONFIG_OVERLAY_FS_METACOPY=y -CONFIG_FSCACHE=y -CONFIG_ISO9660_FS=y -CONFIG_JOLIET=y -CONFIG_ZISOFS=y -CONFIG_UDF_FS=y -CONFIG_MSDOS_FS=y -CONFIG_VFAT_FS=y -CONFIG_FAT_DEFAULT_UTF8=y -CONFIG_EXFAT_FS=y -CONFIG_PROC_KCORE=y -CONFIG_TMPFS=y -CONFIG_TMPFS_POSIX_ACL=y -CONFIG_HUGETLBFS=y -CONFIG_CONFIGFS_FS=y -CONFIG_UBIFS_FS=y -CONFIG_UBIFS_FS_ADVANCED_COMPR=y -CONFIG_SQUASHFS=y -CONFIG_SQUASHFS_XATTR=y -CONFIG_SQUASHFS_LZ4=y -CONFIG_SQUASHFS_LZO=y -CONFIG_SQUASHFS_XZ=y -CONFIG_NFS_FS=y -CONFIG_NFS_V3_ACL=y -CONFIG_NFS_V4=y -CONFIG_NFS_V4_1=y -CONFIG_NFS_V4_2=y -CONFIG_ROOT_NFS=y -CONFIG_NFSD=y -CONFIG_NFSD_V3_ACL=y -CONFIG_NFSD_V4=y -CONFIG_NFSD_BLOCKLAYOUT=y -CONFIG_NLS_CODEPAGE_437=y -CONFIG_NLS_CODEPAGE_936=y -CONFIG_NLS_ASCII=y -CONFIG_NLS_ISO8859_1=y -CONFIG_NLS_UTF8=y -CONFIG_KEY_DH_OPERATIONS=y -CONFIG_SECURITY=y -CONFIG_SECURITY_SELINUX=y -CONFIG_SECURITY_SELINUX_BOOTPARAM=y -CONFIG_SECURITY_SELINUX_DISABLE=y -CONFIG_SECURITY_APPARMOR=y -CONFIG_SECURITY_YAMA=y -CONFIG_DEFAULT_SECURITY_DAC=y -# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set -CONFIG_PRINTK_TIME=y -CONFIG_STRIP_ASM_SYMS=y -CONFIG_MAGIC_SYSRQ=y -# CONFIG_SCHED_DEBUG is not set -CONFIG_SCHEDSTATS=y -# CONFIG_DEBUG_PREEMPT is not set -# CONFIG_FTRACE is not set -CONFIG_CMDLINE_BOOL=y -CONFIG_CMDLINE="fbcon=logo-pos:center fbcon=logo-count:1" -CONFIG_UNWINDER_ORC=y diff --git a/arch/loongarch/configs/loongson_2k1000_xr21_defconfig b/arch/loongarch/configs/loongson_2k1000_xr21_defconfig deleted file mode 100644 index 06f30baf3..000000000 --- a/arch/loongarch/configs/loongson_2k1000_xr21_defconfig +++ /dev/null @@ -1,587 +0,0 @@ -CONFIG_LOCALVERSION=".lsgd" -# CONFIG_LOCALVERSION_AUTO is not set -CONFIG_SYSVIPC=y -CONFIG_POSIX_MQUEUE=y -CONFIG_NO_HZ=y -CONFIG_HIGH_RES_TIMERS=y -CONFIG_PREEMPT=y -CONFIG_BSD_PROCESS_ACCT=y -CONFIG_BSD_PROCESS_ACCT_V3=y -CONFIG_TASKSTATS=y -CONFIG_TASK_DELAY_ACCT=y -CONFIG_TASK_XACCT=y -CONFIG_TASK_IO_ACCOUNTING=y -CONFIG_LOG_BUF_SHIFT=16 -CONFIG_MEMCG=y -CONFIG_BLK_CGROUP=y -CONFIG_CFS_BANDWIDTH=y -CONFIG_RT_GROUP_SCHED=y -CONFIG_CGROUP_PIDS=y -CONFIG_CGROUP_FREEZER=y -CONFIG_CGROUP_HUGETLB=y -CONFIG_CPUSETS=y -CONFIG_CGROUP_DEVICE=y -CONFIG_CGROUP_CPUACCT=y -CONFIG_CGROUP_PERF=y -CONFIG_CGROUP_BPF=y -CONFIG_NAMESPACES=y -CONFIG_USER_NS=y -CONFIG_CHECKPOINT_RESTORE=y -CONFIG_SCHED_AUTOGROUP=y -CONFIG_SYSFS_DEPRECATED=y -CONFIG_RELAY=y -CONFIG_BLK_DEV_INITRD=y -CONFIG_EXPERT=y -CONFIG_BPF_SYSCALL=y -CONFIG_USERFAULTFD=y -CONFIG_PERF_EVENTS=y -# CONFIG_COMPAT_BRK is not set -CONFIG_LOONGSON_2K1000=y -CONFIG_CPU_HAS_LSX=y -CONFIG_CPU_HAS_LASX=y -CONFIG_SMP=y -CONFIG_NR_CPUS=2 -CONFIG_KEXEC=y -CONFIG_HIBERNATION=y -CONFIG_CPU_FREQ=y -CONFIG_CPU_FREQ_GOV_POWERSAVE=y -CONFIG_CPU_FREQ_GOV_USERSPACE=y -CONFIG_CPU_FREQ_GOV_ONDEMAND=y -CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y -CONFIG_MODULES=y -CONFIG_MODULE_FORCE_LOAD=y -CONFIG_MODULE_UNLOAD=y -CONFIG_MODULE_FORCE_UNLOAD=y -CONFIG_MODVERSIONS=y -CONFIG_TRIM_UNUSED_KSYMS=y -# CONFIG_BLK_DEV_BSG is not set -CONFIG_BLK_DEV_THROTTLING=y -CONFIG_PARTITION_ADVANCED=y -CONFIG_IOSCHED_BFQ=y -CONFIG_BFQ_GROUP_IOSCHED=y -CONFIG_SPARSEMEM_MANUAL=y -CONFIG_MEMORY_HOTPLUG=y -CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE=y -CONFIG_MEMORY_HOTREMOVE=y -CONFIG_KSM=y -CONFIG_TRANSPARENT_HUGEPAGE=y -CONFIG_FRONTSWAP=y -CONFIG_CMA_AREAS=19 -CONFIG_ZSWAP=y -CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD=y -CONFIG_Z3FOLD=y -CONFIG_NET=y -CONFIG_PACKET=y -CONFIG_UNIX=y -CONFIG_XFRM_USER=y -CONFIG_NET_KEY=y -CONFIG_INET=y -CONFIG_IP_MULTICAST=y -CONFIG_IP_ADVANCED_ROUTER=y -CONFIG_IP_MULTIPLE_TABLES=y -CONFIG_IP_ROUTE_MULTIPATH=y -CONFIG_IP_ROUTE_VERBOSE=y -CONFIG_IP_PNP=y -CONFIG_IP_PNP_DHCP=y -CONFIG_IP_PNP_BOOTP=y -CONFIG_IP_PNP_RARP=y -CONFIG_IP_MROUTE=y -CONFIG_INET_ESP=y -CONFIG_INET_UDP_DIAG=y -CONFIG_TCP_CONG_ADVANCED=y -CONFIG_IPV6_ROUTER_PREF=y -CONFIG_IPV6_ROUTE_INFO=y -CONFIG_IPV6_MROUTE=y -CONFIG_NETWORK_PHY_TIMESTAMPING=y -CONFIG_NETFILTER=y -CONFIG_BRIDGE_NETFILTER=y -CONFIG_NF_CONNTRACK=y -CONFIG_NF_CONNTRACK_SECMARK=y -CONFIG_NF_CONNTRACK_ZONES=y -CONFIG_NF_CONNTRACK_EVENTS=y -CONFIG_NF_CONNTRACK_TIMEOUT=y -CONFIG_NF_CONNTRACK_TIMESTAMP=y -CONFIG_NF_CONNTRACK_LABELS=y -CONFIG_NF_CONNTRACK_AMANDA=y -CONFIG_NF_CONNTRACK_FTP=y -CONFIG_NF_CONNTRACK_H323=y -CONFIG_NF_CONNTRACK_IRC=y -CONFIG_NF_CONNTRACK_NETBIOS_NS=y -CONFIG_NF_CONNTRACK_SNMP=y -CONFIG_NF_CONNTRACK_PPTP=y -CONFIG_NF_CONNTRACK_SANE=y -CONFIG_NF_CONNTRACK_SIP=y -CONFIG_NF_CONNTRACK_TFTP=y -CONFIG_NF_CT_NETLINK=y -CONFIG_NF_CT_NETLINK_TIMEOUT=y -CONFIG_NETFILTER_XT_MARK=y -CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y -CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y -CONFIG_NETFILTER_XT_MATCH_IPVS=y -CONFIG_IP_VS=y -CONFIG_IP_VS_PROTO_TCP=y -CONFIG_IP_VS_PROTO_UDP=y -CONFIG_IP_VS_RR=y -CONFIG_IP_VS_NFCT=y -CONFIG_NF_SOCKET_IPV4=y -CONFIG_NF_TPROXY_IPV4=y -CONFIG_NF_DUP_IPV4=y -CONFIG_NF_LOG_ARP=y -CONFIG_NF_LOG_IPV4=y -CONFIG_IP_NF_IPTABLES=y -CONFIG_IP_NF_MATCH_AH=y -CONFIG_IP_NF_MATCH_ECN=y -CONFIG_IP_NF_MATCH_RPFILTER=y -CONFIG_IP_NF_MATCH_TTL=y -CONFIG_IP_NF_FILTER=y -CONFIG_IP_NF_TARGET_REJECT=y -CONFIG_IP_NF_TARGET_SYNPROXY=y -CONFIG_IP_NF_NAT=y -CONFIG_IP_NF_TARGET_MASQUERADE=y -CONFIG_IP_NF_TARGET_NETMAP=y -CONFIG_IP_NF_TARGET_REDIRECT=y -CONFIG_IP_NF_MANGLE=y -CONFIG_IP_NF_TARGET_CLUSTERIP=y -CONFIG_IP_NF_TARGET_ECN=y -CONFIG_IP_NF_TARGET_TTL=y -CONFIG_IP_NF_RAW=y -CONFIG_IP_NF_SECURITY=y -CONFIG_IP_NF_ARPTABLES=y -CONFIG_IP_NF_ARPFILTER=y -CONFIG_IP_NF_ARP_MANGLE=y -CONFIG_IP6_NF_IPTABLES=y -CONFIG_IP6_NF_FILTER=y -CONFIG_RDS=y -CONFIG_BRIDGE=y -CONFIG_BRIDGE_VLAN_FILTERING=y -CONFIG_VLAN_8021Q=y -CONFIG_NETLINK_DIAG=y -CONFIG_CGROUP_NET_PRIO=y -CONFIG_CAN=y -CONFIG_CAN_SJA1000=y -CONFIG_CAN_SJA1000_PLATFORM=y -CONFIG_BT=y -CONFIG_BT_HCIBTUSB=m -CONFIG_CFG80211=y -CONFIG_NL80211_TESTMODE=y -CONFIG_CFG80211_DEVELOPER_WARNINGS=y -CONFIG_CFG80211_CERTIFICATION_ONUS=y -CONFIG_CFG80211_REG_CELLULAR_HINTS=y -CONFIG_CFG80211_REG_RELAX_NO_IR=y -CONFIG_MAC80211=y -CONFIG_MAC80211_MESH=y -CONFIG_RFKILL=y -CONFIG_PCIEPORTBUS=y -CONFIG_HOTPLUG_PCI_PCIE=y -CONFIG_PCIEAER=y -# CONFIG_PCIEASPM is not set -CONFIG_PCI_IOV=y -CONFIG_HOTPLUG_PCI=y -CONFIG_HOTPLUG_PCI_SHPC=y -CONFIG_UEVENT_HELPER=y -CONFIG_DEVTMPFS=y -CONFIG_DEVTMPFS_MOUNT=y -CONFIG_MTD=y -CONFIG_MTD_CMDLINE_PARTS=y -CONFIG_MTD_BLOCK=y -CONFIG_MTD_BLOCK2MTD=y -CONFIG_MTD_RAW_NAND=y -CONFIG_MTD_NAND_ECC_SW_BCH=y -CONFIG_MTD_NAND_LS=y -CONFIG_MTD_SPI_NOR=y -CONFIG_MTD_UBI=y -CONFIG_BLK_DEV_LOOP=y -CONFIG_BLK_DEV_CRYPTOLOOP=y -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=32768 -CONFIG_BLK_DEV_NVME=y -CONFIG_LS_LOCALIO=y -CONFIG_EEPROM_AT24=y -# CONFIG_SCSI_PROC_FS is not set -CONFIG_BLK_DEV_SD=y -CONFIG_CHR_DEV_SG=y -CONFIG_SCSI_CONSTANTS=y -CONFIG_SCSI_LOGGING=y -# CONFIG_SCSI_LOWLEVEL is not set -CONFIG_ATA=y -CONFIG_SATA_AHCI=y -CONFIG_SATA_AHCI_PLATFORM=y -CONFIG_PATA_ATIIXP=y -CONFIG_MD=y -CONFIG_BLK_DEV_DM=y -CONFIG_DM_THIN_PROVISIONING=y -CONFIG_NETDEVICES=y -CONFIG_DUMMY=y -CONFIG_MACVLAN=y -CONFIG_IPVLAN=y -CONFIG_VXLAN=y -CONFIG_VETH=y -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_NET_VENDOR_ADAPTEC is not set -# CONFIG_NET_VENDOR_AGERE is not set -# CONFIG_NET_VENDOR_ALACRITECH is not set -# CONFIG_NET_VENDOR_ALTEON is not set -# CONFIG_NET_VENDOR_AMAZON is not set -# CONFIG_NET_VENDOR_AMD is not set -# CONFIG_NET_VENDOR_AQUANTIA is not set -# CONFIG_NET_VENDOR_ARC is not set -# CONFIG_NET_VENDOR_ATHEROS is not set -# CONFIG_NET_VENDOR_AURORA is not set -# CONFIG_NET_VENDOR_BROADCOM is not set -# CONFIG_NET_VENDOR_BROCADE is not set -# CONFIG_NET_VENDOR_CADENCE is not set -# CONFIG_NET_VENDOR_CAVIUM is not set -# CONFIG_NET_VENDOR_CHELSIO is not set -# CONFIG_NET_VENDOR_CISCO is not set -# CONFIG_NET_VENDOR_CORTINA is not set -# CONFIG_NET_VENDOR_DEC is not set -# CONFIG_NET_VENDOR_DLINK is not set -# CONFIG_NET_VENDOR_EMULEX is not set -# CONFIG_NET_VENDOR_EZCHIP is not set -# CONFIG_NET_VENDOR_GOOGLE is not set -# CONFIG_NET_VENDOR_HUAWEI is not set -# CONFIG_NET_VENDOR_INTEL is not set -# CONFIG_NET_VENDOR_MARVELL is not set -# CONFIG_NET_VENDOR_MELLANOX is not set -# CONFIG_NET_VENDOR_MICREL is not set -# CONFIG_NET_VENDOR_MICROCHIP is not set -# CONFIG_NET_VENDOR_MICROSEMI is not set -# CONFIG_NET_VENDOR_MYRI is not set -# CONFIG_NET_VENDOR_NATSEMI is not set -# CONFIG_NET_VENDOR_NETERION is not set -# CONFIG_NET_VENDOR_NETRONOME is not set -# CONFIG_NET_VENDOR_NI is not set -# CONFIG_NET_VENDOR_NVIDIA is not set -# CONFIG_NET_VENDOR_OKI is not set -# CONFIG_NET_VENDOR_PACKET_ENGINES is not set -# CONFIG_NET_VENDOR_PENSANDO is not set -# CONFIG_NET_VENDOR_QLOGIC is not set -# CONFIG_NET_VENDOR_QUALCOMM is not set -# CONFIG_NET_VENDOR_RDC is not set -CONFIG_8139CP=y -CONFIG_8139TOO=y -CONFIG_8139TOO_TUNE_TWISTER=y -CONFIG_8139TOO_8129=y -CONFIG_8139_OLD_RX_RESET=y -CONFIG_R8169=y -# CONFIG_NET_VENDOR_RENESAS is not set -# CONFIG_NET_VENDOR_ROCKER is not set -# CONFIG_NET_VENDOR_SAMSUNG is not set -# CONFIG_NET_VENDOR_SEEQ is not set -# CONFIG_NET_VENDOR_SOLARFLARE is not set -# CONFIG_NET_VENDOR_SILAN is not set -# CONFIG_NET_VENDOR_SIS is not set -# CONFIG_NET_VENDOR_SMSC is not set -# CONFIG_NET_VENDOR_SOCIONEXT is not set -CONFIG_STMMAC_ETH=y -CONFIG_STMMAC_PCI=y -# CONFIG_NET_VENDOR_SUN is not set -# CONFIG_NET_VENDOR_SYNOPSYS is not set -# CONFIG_NET_VENDOR_TEHUTI is not set -# CONFIG_NET_VENDOR_TI is not set -# CONFIG_NET_VENDOR_VIA is not set -# CONFIG_NET_VENDOR_WIZNET is not set -# CONFIG_NET_VENDOR_XILINX is not set -CONFIG_MOTORCOMM_PHY=y -CONFIG_USB_USBNET=y -# CONFIG_WLAN_VENDOR_ADMTEK is not set -# CONFIG_WLAN_VENDOR_ATH is not set -# CONFIG_WLAN_VENDOR_ATMEL is not set -# CONFIG_WLAN_VENDOR_BROADCOM is not set -# CONFIG_WLAN_VENDOR_CISCO is not set -CONFIG_IPW2100=m -CONFIG_IPW2100_MONITOR=y -CONFIG_IPW2200=m -CONFIG_IPW2200_MONITOR=y -CONFIG_IPW2200_PROMISCUOUS=y -CONFIG_IPW2200_QOS=y -CONFIG_LIBIPW_DEBUG=y -CONFIG_IWL4965=m -CONFIG_IWL3945=m -CONFIG_IWLWIFI=m -CONFIG_IWLDVM=m -CONFIG_IWLMVM=m -CONFIG_IWLWIFI_BCAST_FILTERING=y -# CONFIG_WLAN_VENDOR_INTERSIL is not set -# CONFIG_WLAN_VENDOR_MARVELL is not set -# CONFIG_WLAN_VENDOR_MEDIATEK is not set -# CONFIG_WLAN_VENDOR_MICROCHIP is not set -# CONFIG_WLAN_VENDOR_RALINK is not set -CONFIG_RTL8180=m -CONFIG_RTL8187=m -CONFIG_RTL_CARDS=m -CONFIG_RTL8XXXU=m -CONFIG_RTW88=m -CONFIG_RTW88_8822BE=m -CONFIG_RTW88_8822CE=m -CONFIG_RTW88_8723DE=m -CONFIG_RTW88_8821CE=m -# CONFIG_WLAN_VENDOR_RSI is not set -# CONFIG_WLAN_VENDOR_ST is not set -# CONFIG_WLAN_VENDOR_TI is not set -# CONFIG_WLAN_VENDOR_ZYDAS is not set -# CONFIG_WLAN_VENDOR_QUANTENNA is not set -CONFIG_INPUT_MOUSEDEV=y -CONFIG_INPUT_MOUSEDEV_PSAUX=y -CONFIG_INPUT_EVDEV=y -CONFIG_KEYBOARD_GPIO_POLLED=y -# CONFIG_MOUSE_PS2 is not set -CONFIG_INPUT_TOUCHSCREEN=y -CONFIG_TOUCHSCREEN_GOODIX=y -CONFIG_TOUCHSCREEN_FTS=y -# CONFIG_SERIO_SERPORT is not set -CONFIG_LEGACY_PTY_COUNT=16 -CONFIG_SERIAL_8250=y -CONFIG_SERIAL_8250_CONSOLE=y -# CONFIG_SERIAL_8250_PCI is not set -CONFIG_SERIAL_8250_NR_UARTS=16 -CONFIG_SERIAL_8250_RUNTIME_UARTS=16 -CONFIG_SERIAL_8250_EXTENDED=y -CONFIG_SERIAL_8250_MANY_PORTS=y -CONFIG_SERIAL_8250_SHARE_IRQ=y -CONFIG_SERIAL_8250_RSA=y -CONFIG_SERIAL_OF_PLATFORM=y -CONFIG_SERIAL_NONSTANDARD=y -CONFIG_SERIAL_DEV_BUS=y -CONFIG_HW_RANDOM=y -CONFIG_I2C_CHARDEV=y -CONFIG_I2C_MUX_GPMUX=y -CONFIG_I2C_MUX_REG=y -CONFIG_I2C_GPIO=y -CONFIG_I2C_OCORES=y -CONFIG_I2C_LS2X=y -CONFIG_I2C_DEBUG_CORE=y -CONFIG_SPI=y -CONFIG_SPI_SPIDEV=y -CONFIG_SPI_LS=y -CONFIG_PINCTRL=y -CONFIG_PINCTRL_LS2K1000=y -CONFIG_PINCTRL_SINGLE=y -CONFIG_GPIO_SYSFS=y -CONFIG_GPIO_LOONGSON=y -CONFIG_GPIO_PCA953X=y -CONFIG_GPIO_PCA953X_IRQ=y -CONFIG_POWER_RESET=y -CONFIG_POWER_RESET_SYSCON=y -CONFIG_POWER_RESET_SYSCON_POWEROFF=y -CONFIG_POWER_SUPPLY=y -CONFIG_SENSORS_GPIO_FAN=y -CONFIG_SENSORS_AHT21=y -CONFIG_THERMAL=y -CONFIG_LOONGSON2K_THERMAL=y -CONFIG_WATCHDOG=y -CONFIG_GPIO_WATCHDOG=y -CONFIG_GPIO_WATCHDOG_ARCH_INITCALL=y -CONFIG_LOONGSON2_WDT=y -CONFIG_REGULATOR=y -CONFIG_REGULATOR_FIXED_VOLTAGE=y -# CONFIG_MEDIA_CEC_SUPPORT is not set -CONFIG_MEDIA_SUPPORT=y -CONFIG_VIDEO_V4L2_SUBDEV_API=y -CONFIG_VIDEO_ADV_DEBUG=y -CONFIG_VIDEO_FIXED_MINOR_RANGES=y -CONFIG_MEDIA_USB_SUPPORT=y -CONFIG_USB_VIDEO_CLASS=y -CONFIG_USB_GSPCA=y -CONFIG_USB_M5602=y -CONFIG_USB_STV06XX=y -CONFIG_USB_GL860=y -CONFIG_USB_GSPCA_BENQ=y -CONFIG_USB_GSPCA_CONEX=y -CONFIG_USB_GSPCA_CPIA1=y -CONFIG_USB_GSPCA_DTCS033=y -CONFIG_USB_GSPCA_ETOMS=y -CONFIG_USB_GSPCA_FINEPIX=y -CONFIG_USB_GSPCA_JEILINJ=y -CONFIG_USB_GSPCA_JL2005BCD=y -CONFIG_USB_GSPCA_KONICA=y -CONFIG_USB_GSPCA_MARS=y -CONFIG_USB_GSPCA_MR97310A=y -CONFIG_USB_GSPCA_NW80X=y -CONFIG_USB_GSPCA_OV519=y -CONFIG_USB_GSPCA_OV534=y -CONFIG_USB_GSPCA_OV534_9=y -CONFIG_USB_GSPCA_PAC207=y -CONFIG_USB_GSPCA_PAC7302=y -CONFIG_USB_GSPCA_PAC7311=y -CONFIG_USB_GSPCA_SE401=y -CONFIG_USB_GSPCA_SN9C2028=y -CONFIG_USB_GSPCA_SN9C20X=y -CONFIG_USB_GSPCA_SONIXB=y -CONFIG_USB_GSPCA_SONIXJ=y -CONFIG_USB_GSPCA_SPCA500=y -CONFIG_USB_GSPCA_SPCA501=y -CONFIG_USB_GSPCA_SPCA505=y -CONFIG_USB_GSPCA_SPCA506=y -CONFIG_USB_GSPCA_SPCA508=y -CONFIG_USB_GSPCA_SPCA561=y -CONFIG_USB_GSPCA_SPCA1528=y -CONFIG_USB_GSPCA_SQ905=y -CONFIG_USB_GSPCA_SQ905C=y -CONFIG_USB_GSPCA_SQ930X=y -CONFIG_USB_GSPCA_STK014=y -CONFIG_USB_GSPCA_STK1135=y -CONFIG_USB_GSPCA_STV0680=y -CONFIG_USB_GSPCA_SUNPLUS=y -CONFIG_USB_GSPCA_T613=y -CONFIG_USB_GSPCA_TOPRO=y -CONFIG_USB_GSPCA_TOUPTEK=y -CONFIG_USB_GSPCA_TV8532=y -CONFIG_USB_GSPCA_VC032X=y -CONFIG_USB_GSPCA_VICAM=y -CONFIG_USB_GSPCA_XIRLINK_CIT=y -CONFIG_USB_GSPCA_ZC3XX=y -CONFIG_DRM=y -# CONFIG_DRM_LOONGSON_PCI_DRIVER is not set -# CONFIG_DRM_LSDC is not set -CONFIG_DRM_PANEL_LVDS=y -CONFIG_DRM_DISPLAY_CONNECTOR=y -CONFIG_DRM_SII902X=y -CONFIG_DRM_SIMPLE_BRIDGE=y -CONFIG_FB_RADEON=y -CONFIG_BACKLIGHT_PWM=y -CONFIG_BACKLIGHT_GPIO=y -# CONFIG_VGA_CONSOLE is not set -CONFIG_FRAMEBUFFER_CONSOLE=y -CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y -CONFIG_LOGO=y -# CONFIG_LOGO_LINUX_MONO is not set -# CONFIG_LOGO_LINUX_VGA16 is not set -CONFIG_SOUND=y -CONFIG_SND=y -CONFIG_SND_HDA_INTEL=y -CONFIG_SND_HDA_LOONGSON=y -CONFIG_SND_HDA_HWDEP=y -CONFIG_SND_HDA_INPUT_BEEP=y -CONFIG_SND_HDA_PATCH_LOADER=y -CONFIG_SND_HDA_CODEC_REALTEK=y -CONFIG_SND_HDA_CODEC_SIGMATEL=y -CONFIG_SND_HDA_CODEC_HDMI=y -CONFIG_SND_HDA_CODEC_CONEXANT=y -CONFIG_SND_USB_AUDIO=y -CONFIG_SND_SOC=y -CONFIG_SND_SOC_LOONGSON=y -CONFIG_SND_SOC_LOONGSON_CJC8988=y -CONFIG_SND_LS=y -CONFIG_SND_LS_PCM=y -CONFIG_HIDRAW=y -CONFIG_HID_MULTITOUCH=y -CONFIG_HID_PID=y -CONFIG_USB_HIDDEV=y -CONFIG_USB=y -CONFIG_USB_MON=y -CONFIG_USB_EHCI_HCD=y -CONFIG_USB_EHCI_ROOT_HUB_TT=y -CONFIG_USB_EHCI_HCD_PLATFORM=y -CONFIG_USB_OHCI_HCD=y -# CONFIG_USB_OHCI_HCD_PCI is not set -CONFIG_USB_OHCI_HCD_PLATFORM=y -CONFIG_USB_STORAGE=y -CONFIG_USB_DWC2=y -CONFIG_USB_SERIAL=y -CONFIG_USB_SERIAL_XR21V141X=y -CONFIG_USB_SERIAL_OPTION=y -CONFIG_USB_GADGET=y -CONFIG_USB_CONFIGFS=y -CONFIG_USB_CONFIGFS_RNDIS=y -CONFIG_USB_ETH=y -CONFIG_USB_ETH_EEM=y -CONFIG_MMC=y -CONFIG_MMC_LS2K=y -CONFIG_LEDS_GPIO=y -CONFIG_LEDS_PWM=y -CONFIG_LEDS_TRIGGER_HEARTBEAT=y -CONFIG_LEDS_TRIGGER_DEFAULT_ON=y -CONFIG_RTC_CLASS=y -CONFIG_RTC_DRV_SD2068=y -CONFIG_RTC_DRV_SD3078=y -CONFIG_RTC_DRV_LS2X=y -CONFIG_DMADEVICES=y -CONFIG_LS_APBDMAC=y -# CONFIG_VIRTIO_MENU is not set -# CONFIG_VHOST_MENU is not set -CONFIG_STAGING=y -CONFIG_R8188EU=y -# CONFIG_LOONGARCH_PLATFORM_DEVICES is not set -CONFIG_LOONGSON2_SYSCLK_SOFT=y -# CONFIG_IOMMU_SUPPORT is not set -CONFIG_PM_DEVFREQ=y -CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y -CONFIG_DEVFREQ_GOV_PERFORMANCE=y -CONFIG_DEVFREQ_GOV_POWERSAVE=y -CONFIG_DEVFREQ_GOV_USERSPACE=y -CONFIG_PWM=y -CONFIG_PWM_LS=y -CONFIG_LOONGSON_MSI_2K1000=y -CONFIG_EXT2_FS=y -CONFIG_EXT2_FS_XATTR=y -CONFIG_EXT2_FS_POSIX_ACL=y -CONFIG_EXT2_FS_SECURITY=y -CONFIG_EXT3_FS=y -CONFIG_EXT3_FS_POSIX_ACL=y -CONFIG_EXT3_FS_SECURITY=y -CONFIG_BTRFS_FS=y -CONFIG_BTRFS_FS_POSIX_ACL=y -CONFIG_FANOTIFY=y -CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y -CONFIG_QUOTA=y -# CONFIG_PRINT_QUOTA_WARNING is not set -CONFIG_AUTOFS4_FS=y -CONFIG_OVERLAY_FS=y -CONFIG_OVERLAY_FS_INDEX=y -CONFIG_OVERLAY_FS_XINO_AUTO=y -CONFIG_OVERLAY_FS_METACOPY=y -CONFIG_FSCACHE=y -CONFIG_ISO9660_FS=y -CONFIG_JOLIET=y -CONFIG_ZISOFS=y -CONFIG_UDF_FS=y -CONFIG_MSDOS_FS=y -CONFIG_VFAT_FS=y -CONFIG_FAT_DEFAULT_UTF8=y -CONFIG_EXFAT_FS=y -CONFIG_PROC_KCORE=y -CONFIG_TMPFS=y -CONFIG_TMPFS_POSIX_ACL=y -CONFIG_HUGETLBFS=y -CONFIG_UBIFS_FS=y -CONFIG_UBIFS_FS_ADVANCED_COMPR=y -CONFIG_SQUASHFS=y -CONFIG_SQUASHFS_XATTR=y -CONFIG_SQUASHFS_LZ4=y -CONFIG_SQUASHFS_LZO=y -CONFIG_SQUASHFS_XZ=y -CONFIG_NFS_FS=y -CONFIG_NFS_V3_ACL=y -CONFIG_NFS_V4=y -CONFIG_NFS_V4_1=y -CONFIG_NFS_V4_2=y -CONFIG_ROOT_NFS=y -CONFIG_NFSD=y -CONFIG_NFSD_V3_ACL=y -CONFIG_NFSD_V4=y -CONFIG_NFSD_BLOCKLAYOUT=y -CONFIG_NLS_CODEPAGE_437=y -CONFIG_NLS_CODEPAGE_936=y -CONFIG_NLS_ASCII=y -CONFIG_NLS_ISO8859_1=y -CONFIG_NLS_UTF8=y -CONFIG_KEY_DH_OPERATIONS=y -CONFIG_SECURITY=y -CONFIG_SECURITY_SELINUX=y -CONFIG_SECURITY_SELINUX_BOOTPARAM=y -CONFIG_SECURITY_SELINUX_DISABLE=y -CONFIG_SECURITY_APPARMOR=y -CONFIG_SECURITY_YAMA=y -CONFIG_DEFAULT_SECURITY_DAC=y -# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set -CONFIG_PRINTK_TIME=y -CONFIG_STRIP_ASM_SYMS=y -CONFIG_MAGIC_SYSRQ=y -# CONFIG_SCHED_DEBUG is not set -CONFIG_SCHEDSTATS=y -# CONFIG_DEBUG_PREEMPT is not set -# CONFIG_FTRACE is not set -CONFIG_CMDLINE_BOOL=y -CONFIG_CMDLINE="fbcon=logo-pos:center fbcon=logo-count:1" -CONFIG_UNWINDER_ORC=y diff --git a/arch/loongarch/configs/loongson_2k300_defconfig b/arch/loongarch/configs/loongson_2k300_defconfig index 0a699cc50..9cecae541 100644 --- a/arch/loongarch/configs/loongson_2k300_defconfig +++ b/arch/loongarch/configs/loongson_2k300_defconfig @@ -83,6 +83,7 @@ CONFIG_IPV6_ROUTE_INFO=y CONFIG_IPV6_MROUTE=y CONFIG_NETWORK_PHY_TIMESTAMPING=y CONFIG_NETFILTER=y +CONFIG_BRIDGE_NETFILTER=y CONFIG_NF_CONNTRACK=y CONFIG_NF_CONNTRACK_SECMARK=y CONFIG_NF_CONNTRACK_ZONES=y @@ -101,6 +102,34 @@ CONFIG_NF_CONNTRACK_SIP=y CONFIG_NF_CONNTRACK_TFTP=y CONFIG_NF_CT_NETLINK=y CONFIG_NF_CT_NETLINK_TIMEOUT=y +CONFIG_NF_TABLES=y +CONFIG_NF_TABLES_INET=y +CONFIG_NF_TABLES_NETDEV=y +CONFIG_NFT_NUMGEN=y +CONFIG_NFT_CT=y +CONFIG_NFT_COUNTER=y +CONFIG_NFT_CONNLIMIT=y +CONFIG_NFT_LOG=y +CONFIG_NFT_LIMIT=y +CONFIG_NFT_MASQ=y +CONFIG_NFT_REDIR=y +CONFIG_NFT_NAT=y +CONFIG_NFT_TUNNEL=y +CONFIG_NFT_OBJREF=y +CONFIG_NFT_QUEUE=y +CONFIG_NFT_QUOTA=y +CONFIG_NFT_REJECT=y +CONFIG_NFT_COMPAT=y +CONFIG_NFT_HASH=y +CONFIG_NFT_XFRM=y +CONFIG_NFT_SOCKET=y +CONFIG_NFT_OSF=y +CONFIG_NFT_TPROXY=y +CONFIG_NFT_SYNPROXY=y +CONFIG_NFT_DUP_NETDEV=y +CONFIG_NFT_FWD_NETDEV=y +CONFIG_NF_FLOW_TABLE_INET=y +CONFIG_NF_FLOW_TABLE=y CONFIG_NETFILTER_XT_TARGET_AUDIT=y CONFIG_NETFILTER_XT_TARGET_CHECKSUM=y CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y @@ -150,6 +179,7 @@ CONFIG_NETFILTER_XT_MATCH_NFACCT=y CONFIG_NETFILTER_XT_MATCH_OSF=y CONFIG_NETFILTER_XT_MATCH_OWNER=y CONFIG_NETFILTER_XT_MATCH_POLICY=y +CONFIG_NETFILTER_XT_MATCH_PHYSDEV=y CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y CONFIG_NETFILTER_XT_MATCH_QUOTA=y CONFIG_NETFILTER_XT_MATCH_RATEEST=y @@ -163,6 +193,8 @@ CONFIG_NETFILTER_XT_MATCH_STRING=y CONFIG_NETFILTER_XT_MATCH_TCPMSS=y CONFIG_NETFILTER_XT_MATCH_TIME=y CONFIG_NETFILTER_XT_MATCH_U32=y +CONFIG_NF_TABLES_ARP=y +CONFIG_NF_FLOW_TABLE_IPV4=y CONFIG_NF_LOG_ARP=y CONFIG_IP_NF_IPTABLES=y CONFIG_IP_NF_MATCH_AH=y @@ -187,10 +219,37 @@ CONFIG_IP_NF_ARPFILTER=y CONFIG_IP_NF_ARP_MANGLE=y CONFIG_IP6_NF_IPTABLES=y CONFIG_IP6_NF_FILTER=y +CONFIG_NF_TABLES_BRIDGE=y +CONFIG_NFT_BRIDGE_META=y +CONFIG_NFT_BRIDGE_REJECT=y +CONFIG_NF_LOG_BRIDGE=y +CONFIG_NF_CONNTRACK_BRIDGE=y +CONFIG_BRIDGE_NF_EBTABLES=y +CONFIG_BRIDGE_EBT_BROUTE=y +CONFIG_BRIDGE_EBT_T_FILTER=y +CONFIG_BRIDGE_EBT_T_NAT=y +CONFIG_BRIDGE_EBT_802_3=y +CONFIG_BRIDGE_EBT_AMONG=y +CONFIG_BRIDGE_EBT_ARP=y +CONFIG_BRIDGE_EBT_IP=y +CONFIG_BRIDGE_EBT_IP6=y +CONFIG_BRIDGE_EBT_LIMIT=y +CONFIG_BRIDGE_EBT_MARK=y +CONFIG_BRIDGE_EBT_PKTTYPE=y +CONFIG_BRIDGE_EBT_STP=y +CONFIG_BRIDGE_EBT_VLAN=y +CONFIG_BRIDGE_EBT_ARPREPLY=y +CONFIG_BRIDGE_EBT_DNAT=y +CONFIG_BRIDGE_EBT_MARK_T=y +CONFIG_BRIDGE_EBT_REDIRECT=y +CONFIG_BRIDGE_EBT_SNAT=y +CONFIG_BRIDGE_EBT_LOG=y +CONFIG_BRIDGE_EBT_NFLOG=y CONFIG_BPFILTER=y CONFIG_RDS=y CONFIG_BRIDGE=y CONFIG_BRIDGE_VLAN_FILTERING=y +CONFIG_BRIDGE_MRP=y CONFIG_NET_DSA=y CONFIG_VLAN_8021Q=y CONFIG_VLAN_8021Q_GVRP=y @@ -234,6 +293,8 @@ CONFIG_SCSI_LOGGING=y # CONFIG_SCSI_LOWLEVEL is not set CONFIG_NETDEVICES=y CONFIG_DUMMY=y +CONFIG_WIREGUARD=m +CONFIG_WIREGUARD_DEBUG=y CONFIG_MACVLAN=y CONFIG_MACVTAP=y CONFIG_IPVLAN=y @@ -368,7 +429,9 @@ CONFIG_INPUT_MOUSEDEV_PSAUX=y CONFIG_INPUT_MOUSEDEV_SCREEN_X=1280 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=800 CONFIG_INPUT_EVDEV=y +CONFIG_KEYBOARD_GPIO=y CONFIG_KEYBOARD_GPIO_POLLED=y +CONFIG_KEYBOARD_MATRIX_POLLED=y # CONFIG_MOUSE_PS2 is not set CONFIG_MOUSE_SERIAL=y CONFIG_INPUT_TOUCHSCREEN=y @@ -400,11 +463,13 @@ CONFIG_SPI=y CONFIG_SPI_SPIDEV=y CONFIG_SPI_LS=y CONFIG_SPI_LS_IO=y +CONFIG_PPS_CLIENT_GPIO=y CONFIG_PINCTRL=y CONFIG_PINCTRL_SINGLE=y CONFIG_GPIO_SYSFS=y CONFIG_GPIO_LOONGSON_IRQCHIP=y CONFIG_GPIO_PCA953X=y +CONFIG_GPIO_PCA953X_IRQ=y CONFIG_W1=y CONFIG_W1_MASTER_GPIO=y CONFIG_W1_SLAVE_THERM=y @@ -514,7 +579,9 @@ CONFIG_LOONGSON2_GUTS=y CONFIG_IIO=y CONFIG_MCP320X=y CONFIG_TI_ADS1015=y +CONFIG_MS518XN_ADC=y CONFIG_LS_2K300_ADC=y +CONFIG_MCP4728=y CONFIG_IIO_ST_GYRO_3AXIS=y CONFIG_ADIS16475=y CONFIG_INV_MPU6050_SPI=y @@ -522,6 +589,7 @@ CONFIG_IIO_ST_LSM9DS0=y # CONFIG_IIO_ST_LSM9DS0_I2C is not set CONFIG_MS5611=y CONFIG_MS5611_SPI=y +CONFIG_MAX31865=y CONFIG_PWM=y CONFIG_PWM_LS=y CONFIG_LOONGSON_IOINTC_2K500=y @@ -590,6 +658,9 @@ CONFIG_DEFAULT_SECURITY_DAC=y CONFIG_CRYPTO_HMAC=y CONFIG_CRYPTO_DEFLATE=y CONFIG_CRYPTO_LZO=y +CONFIG_CRYPTO_LIB_BLAKE2S=y +CONFIG_CRYPTO_LIB_CURVE25519=y +CONFIG_CRYPTO_LIB_CHACHA20POLY1305=y CONFIG_PRINTK_TIME=y CONFIG_STRIP_ASM_SYMS=y CONFIG_MAGIC_SYSRQ=y diff --git a/arch/loongarch/configs/loongson_2p500_defconfig b/arch/loongarch/configs/loongson_2p500_defconfig index 7abe9a0fb..3a90775f3 100644 --- a/arch/loongarch/configs/loongson_2p500_defconfig +++ b/arch/loongarch/configs/loongson_2p500_defconfig @@ -66,8 +66,8 @@ CONFIG_Z3FOLD=m CONFIG_NET=y CONFIG_PACKET=y CONFIG_UNIX=y -CONFIG_XFRM_USER=m -CONFIG_NET_KEY=m +CONFIG_XFRM_USER=y +CONFIG_NET_KEY=y CONFIG_INET=y CONFIG_IP_MULTICAST=y CONFIG_IP_ADVANCED_ROUTER=y @@ -79,11 +79,11 @@ CONFIG_IP_PNP_DHCP=y CONFIG_IP_PNP_BOOTP=y CONFIG_IP_PNP_RARP=y CONFIG_IP_MROUTE=y -CONFIG_INET_DIAG=m -CONFIG_INET_UDP_DIAG=m -# CONFIG_IPV6 is not set +CONFIG_INET_UDP_DIAG=y +CONFIG_INET_RAW_DIAG=y CONFIG_NETWORK_PHY_TIMESTAMPING=y CONFIG_NETFILTER=y +CONFIG_BRIDGE_NETFILTER=y CONFIG_NF_CONNTRACK=y CONFIG_NF_LOG_NETDEV=y CONFIG_NF_CONNTRACK_ZONES=y @@ -105,21 +105,26 @@ CONFIG_NF_CT_NETLINK_TIMEOUT=y CONFIG_NF_CT_NETLINK_HELPER=y CONFIG_NETFILTER_NETLINK_GLUE_CT=y CONFIG_NF_TABLES=y +CONFIG_NF_TABLES_INET=y CONFIG_NF_TABLES_NETDEV=y CONFIG_NFT_NUMGEN=y CONFIG_NFT_CT=y +CONFIG_NFT_FLOW_OFFLOAD=y CONFIG_NFT_COUNTER=y CONFIG_NFT_CONNLIMIT=y CONFIG_NFT_LOG=y CONFIG_NFT_LIMIT=y CONFIG_NFT_MASQ=y CONFIG_NFT_REDIR=y +CONFIG_NFT_NAT=y CONFIG_NFT_TUNNEL=y CONFIG_NFT_OBJREF=y CONFIG_NFT_QUEUE=y CONFIG_NFT_QUOTA=y CONFIG_NFT_REJECT=y +CONFIG_NFT_COMPAT=y CONFIG_NFT_HASH=y +CONFIG_NFT_FIB_INET=y CONFIG_NFT_XFRM=y CONFIG_NFT_SOCKET=y CONFIG_NFT_OSF=y @@ -127,9 +132,15 @@ CONFIG_NFT_TPROXY=y CONFIG_NFT_SYNPROXY=y CONFIG_NFT_DUP_NETDEV=y CONFIG_NFT_FWD_NETDEV=y +CONFIG_NFT_FIB_NETDEV=y +CONFIG_NF_FLOW_TABLE_INET=y CONFIG_NF_FLOW_TABLE=y +CONFIG_NETFILTER_XT_SET=y +CONFIG_NETFILTER_XT_TARGET_CHECKSUM=y CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y CONFIG_NETFILTER_XT_TARGET_CONNMARK=y +CONFIG_NETFILTER_XT_TARGET_CT=y +CONFIG_NETFILTER_XT_TARGET_DSCP=y CONFIG_NETFILTER_XT_TARGET_HMARK=y CONFIG_NETFILTER_XT_TARGET_IDLETIMER=y CONFIG_NETFILTER_XT_TARGET_LED=y @@ -138,7 +149,10 @@ CONFIG_NETFILTER_XT_TARGET_MARK=y CONFIG_NETFILTER_XT_TARGET_NFLOG=y CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y CONFIG_NETFILTER_XT_TARGET_TEE=y +CONFIG_NETFILTER_XT_TARGET_TPROXY=y +CONFIG_NETFILTER_XT_TARGET_TRACE=y CONFIG_NETFILTER_XT_TARGET_TCPMSS=y +CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=y CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y CONFIG_NETFILTER_XT_MATCH_BPF=y CONFIG_NETFILTER_XT_MATCH_CGROUP=y @@ -168,6 +182,7 @@ CONFIG_NETFILTER_XT_MATCH_NFACCT=y CONFIG_NETFILTER_XT_MATCH_OSF=y CONFIG_NETFILTER_XT_MATCH_OWNER=y CONFIG_NETFILTER_XT_MATCH_POLICY=y +CONFIG_NETFILTER_XT_MATCH_PHYSDEV=y CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y CONFIG_NETFILTER_XT_MATCH_QUOTA=y CONFIG_NETFILTER_XT_MATCH_RATEEST=y @@ -199,6 +214,7 @@ CONFIG_IP_SET_HASH_NETPORT=y CONFIG_IP_SET_HASH_NETIFACE=y CONFIG_IP_SET_LIST_SET=y CONFIG_IP_VS=y +CONFIG_IP_VS_IPV6=y CONFIG_IP_VS_DEBUG=y CONFIG_IP_VS_PROTO_TCP=y CONFIG_IP_VS_PROTO_UDP=y @@ -220,7 +236,6 @@ CONFIG_IP_VS_SED=y CONFIG_IP_VS_NQ=y CONFIG_IP_VS_FTP=y CONFIG_IP_VS_PE_SIP=y -CONFIG_NF_TABLES_IPV4=y CONFIG_NFT_DUP_IPV4=y CONFIG_NFT_FIB_IPV4=y CONFIG_NF_TABLES_ARP=y @@ -229,6 +244,7 @@ CONFIG_NF_LOG_ARP=y CONFIG_IP_NF_IPTABLES=y CONFIG_IP_NF_MATCH_AH=y CONFIG_IP_NF_MATCH_ECN=y +CONFIG_IP_NF_MATCH_RPFILTER=y CONFIG_IP_NF_MATCH_TTL=y CONFIG_IP_NF_FILTER=y CONFIG_IP_NF_TARGET_REJECT=y @@ -245,12 +261,65 @@ CONFIG_IP_NF_RAW=y CONFIG_IP_NF_ARPTABLES=y CONFIG_IP_NF_ARPFILTER=y CONFIG_IP_NF_ARP_MANGLE=y +CONFIG_NFT_DUP_IPV6=y +CONFIG_NFT_FIB_IPV6=y +CONFIG_NF_FLOW_TABLE_IPV6=y +CONFIG_IP6_NF_IPTABLES=y +CONFIG_IP6_NF_MATCH_AH=y +CONFIG_IP6_NF_MATCH_EUI64=y +CONFIG_IP6_NF_MATCH_FRAG=y +CONFIG_IP6_NF_MATCH_OPTS=y +CONFIG_IP6_NF_MATCH_HL=y +CONFIG_IP6_NF_MATCH_IPV6HEADER=y +CONFIG_IP6_NF_MATCH_MH=y +CONFIG_IP6_NF_MATCH_RPFILTER=y +CONFIG_IP6_NF_MATCH_RT=y +CONFIG_IP6_NF_MATCH_SRH=y +CONFIG_IP6_NF_TARGET_HL=y +CONFIG_IP6_NF_FILTER=y +CONFIG_IP6_NF_TARGET_REJECT=y +CONFIG_IP6_NF_TARGET_SYNPROXY=y +CONFIG_IP6_NF_MANGLE=y +CONFIG_IP6_NF_RAW=y +CONFIG_IP6_NF_NAT=y +CONFIG_IP6_NF_TARGET_MASQUERADE=y +CONFIG_IP6_NF_TARGET_NPT=y +CONFIG_NF_TABLES_BRIDGE=y +CONFIG_NFT_BRIDGE_META=y +CONFIG_NFT_BRIDGE_REJECT=y +CONFIG_NF_LOG_BRIDGE=y CONFIG_NF_CONNTRACK_BRIDGE=y -CONFIG_NETLINK_DIAG=m +CONFIG_BRIDGE_NF_EBTABLES=y +CONFIG_BRIDGE_EBT_BROUTE=y +CONFIG_BRIDGE_EBT_T_FILTER=y +CONFIG_BRIDGE_EBT_T_NAT=y +CONFIG_BRIDGE_EBT_802_3=y +CONFIG_BRIDGE_EBT_AMONG=y +CONFIG_BRIDGE_EBT_ARP=y +CONFIG_BRIDGE_EBT_IP=y +CONFIG_BRIDGE_EBT_IP6=y +CONFIG_BRIDGE_EBT_LIMIT=y +CONFIG_BRIDGE_EBT_MARK=y +CONFIG_BRIDGE_EBT_PKTTYPE=y +CONFIG_BRIDGE_EBT_STP=y +CONFIG_BRIDGE_EBT_VLAN=y +CONFIG_BRIDGE_EBT_ARPREPLY=y +CONFIG_BRIDGE_EBT_DNAT=y +CONFIG_BRIDGE_EBT_MARK_T=y +CONFIG_BRIDGE_EBT_REDIRECT=y +CONFIG_BRIDGE_EBT_SNAT=y +CONFIG_BRIDGE_EBT_LOG=y +CONFIG_BRIDGE_EBT_NFLOG=y +CONFIG_BPFILTER=y +CONFIG_BPFILTER_UMH=y +CONFIG_BRIDGE=y +CONFIG_BRIDGE_VLAN_FILTERING=y +CONFIG_BRIDGE_MRP=y +CONFIG_VLAN_8021Q=y +CONFIG_VLAN_8021Q_GVRP=y +CONFIG_VLAN_8021Q_MVRP=y +CONFIG_NETLINK_DIAG=y CONFIG_CGROUP_NET_PRIO=y -CONFIG_CAN=m -CONFIG_CAN_SJA1000=m -CONFIG_CAN_SJA1000_PLATFORM=m # CONFIG_WIRELESS is not set # CONFIG_PCIEASPM is not set CONFIG_UEVENT_HELPER=y diff --git a/arch/loongarch/include/asm/mach-loongson64/boot_param.h b/arch/loongarch/include/asm/mach-loongson64/boot_param.h index d801e9179..82f26df38 100644 --- a/arch/loongarch/include/asm/mach-loongson64/boot_param.h +++ b/arch/loongarch/include/asm/mach-loongson64/boot_param.h @@ -110,6 +110,7 @@ extern u32 __dtb_ls2k1000_dp_begin[]; extern u32 __dtb_ls2p500_gbkpjm0_v10_begin[]; extern u32 __dtb_ls2k300_mini_dp_begin[]; extern u32 __dtb_ls2k300_pai_begin[]; +extern u32 __dtb_ls2k300_gongkong_gbkpgk0_begin[]; extern char __dtb_start[]; extern struct boot_params *efi_bp; extern struct loongson_board_info b_info; diff --git a/arch/loongarch/loongson64/init.c b/arch/loongarch/loongson64/init.c index a5a526e0f..d5e43c215 100644 --- a/arch/loongarch/loongson64/init.c +++ b/arch/loongarch/loongson64/init.c @@ -212,8 +212,10 @@ static void __init parse_dt_cpus(void) } static char cpu_full_name_bak[] = " - "; -#ifdef CONFIG_LOONGSON_2K500 +#if defined(CONFIG_LOONGSON_2K500) static char cpu_ls2k500_name[] = "loongson-2k500"; +#elif defined(CONFIG_LOONGSON_2K300) +static char cpu_ls2k300_name[] = "loongson-2k300"; #endif static inline int check_cpu_full_name_invaild(int cpu) @@ -260,8 +262,12 @@ static void *get_fdt_by_board_name(void) fdt = &__dtb_ls2k300_mini_dp_begin; else if (!strncmp(b_info.board_name, "LS2K300-PAI", 11)) fdt = &__dtb_ls2k300_pai_begin; + else if (!strncmp(b_info.board_name, "LS2K300-GONGKONG-GBKPGK0", 24)) + fdt = &__dtb_ls2k300_gongkong_gbkpgk0_begin; else fdt = &__dtb_ls2k300_mini_dp_begin; + + __cpu_full_name[0] = cpu_ls2k300_name; #endif } return fdt; diff --git a/drivers/gpu/drm/loongson/lsdc_crtc.c b/drivers/gpu/drm/loongson/lsdc_crtc.c index 6bcea819c..947da294a 100644 --- a/drivers/gpu/drm/loongson/lsdc_crtc.c +++ b/drivers/gpu/drm/loongson/lsdc_crtc.c @@ -262,10 +262,20 @@ static void lsdc_enable_display(struct lsdc_device *ldev, unsigned int index) if (index == 0) { val = readl(ldev->reg_base + LSDC_CRTC0_CFG_REG); val |= CFG_OUTPUT_EN_BIT; + if (ldev->display_rgb565) { + val |= 0x7; + val ^= 0x7; + val |= 0x3; + } writel(val, ldev->reg_base + LSDC_CRTC0_CFG_REG); } else if (index == 1) { val = readl(ldev->reg_base + LSDC_CRTC1_CFG_REG); val |= CFG_OUTPUT_EN_BIT; + if (ldev->display_rgb565) { + val |= 0x7; + val ^= 0x7; + val |= 0x3; + } writel(val, ldev->reg_base + LSDC_CRTC1_CFG_REG); } } diff --git a/drivers/gpu/drm/loongson/lsdc_drv.c b/drivers/gpu/drm/loongson/lsdc_drv.c index 019db58d1..ca69b06a6 100644 --- a/drivers/gpu/drm/loongson/lsdc_drv.c +++ b/drivers/gpu/drm/loongson/lsdc_drv.c @@ -193,7 +193,10 @@ static int lsdc_mode_config_init(struct lsdc_device *ldev) ddev->mode_config.min_height = 1; ddev->mode_config.max_width = 4096; ddev->mode_config.max_height = 4096; - ddev->mode_config.preferred_depth = 24; + if (ldev->display_rgb565) + ddev->mode_config.preferred_depth = 16; + else + ddev->mode_config.preferred_depth = 24; ddev->mode_config.prefer_shadow = ldev->use_vram_helper; ddev->mode_config.cursor_width = descp->hw_cursor_h; @@ -329,7 +332,10 @@ int lsdc_common_probe(struct lsdc_device *ldev) if (ret) goto err_poll_fini; - drm_fbdev_generic_setup(ddev, 32); + if (ldev->display_rgb565) + drm_fbdev_generic_setup(ddev, 16); + else + drm_fbdev_generic_setup(ddev, 32); // 设置完fb后再显示 // CFG_OUTPUT_EN_BIT 在 common_probe 中设置才有效 diff --git a/drivers/gpu/drm/loongson/lsdc_drv.h b/drivers/gpu/drm/loongson/lsdc_drv.h index f34424a50..f294b2bea 100644 --- a/drivers/gpu/drm/loongson/lsdc_drv.h +++ b/drivers/gpu/drm/loongson/lsdc_drv.h @@ -157,6 +157,8 @@ struct lsdc_device { bool has_dt; /* @has_ports_node: true if there are OF graph in the DT */ bool has_ports_node; + + bool display_rgb565; }; static inline struct lsdc_device *to_lsdc(struct drm_device *ddev) diff --git a/drivers/gpu/drm/loongson/lsdc_platform_drv.c b/drivers/gpu/drm/loongson/lsdc_platform_drv.c index f22d9cdbf..29a217ff9 100644 --- a/drivers/gpu/drm/loongson/lsdc_platform_drv.c +++ b/drivers/gpu/drm/loongson/lsdc_platform_drv.c @@ -178,6 +178,11 @@ static int lsdc_platform_probe(struct platform_device *pdev) of_property_read_bool(dev->of_node, "lsdc,relax_alignment"); } + ldev->display_rgb565 = 0; + if (dev->of_node) { + ldev->display_rgb565 = of_property_read_bool(dev->of_node, "display_rgb565"); + } + ret = lsdc_common_probe(ldev); if (ret) { goto err_free; diff --git a/drivers/iio/temperature/max31865.c b/drivers/iio/temperature/max31865.c index ca18a33fc..041ec595f 100644 --- a/drivers/iio/temperature/max31865.c +++ b/drivers/iio/temperature/max31865.c @@ -83,7 +83,7 @@ static int max31865_parse_gpio_channels(struct device *dev, const char* con_id, GPIOD_OUT_LOW); if (IS_ERR((*gpios)[i])) { - pr_err("gpio(%s) channel[%d] get fail\n", + dev_err(dev, "gpio(%s) channel[%d] get fail\n", con_id, i); return PTR_ERR((*gpios)[i]); } @@ -351,6 +351,7 @@ static int max31865_probe(struct spi_device *spi) const struct spi_device_id *id = spi_get_device_id(spi); struct iio_dev *indio_dev; struct max31865_data *data; + struct gpio_desc* drdy_gpiod; int ret; indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*data)); @@ -404,6 +405,18 @@ static int max31865_probe(struct spi_device *spi) &data->in_negative_gpios, data->channel_bits); } + drdy_gpiod = devm_gpiod_get_optional(&spi->dev, "drdy", GPIOD_IN); + if (IS_ERR_OR_NULL(drdy_gpiod)) + { + dev_warn(&spi->dev, "DRDY GPIO not configured\n"); + } + else + { + gpiod_direction_input(drdy_gpiod); + dev_warn(&spi->dev, "DRDY GPIO[%d] Set INPUT\n", desc_to_gpio(drdy_gpiod)); + gpiod_put(drdy_gpiod); + } + return devm_iio_device_register(&spi->dev, indio_dev); } diff --git a/drivers/input/keyboard/Kconfig b/drivers/input/keyboard/Kconfig index 793ecbbda..52fa83933 100644 --- a/drivers/input/keyboard/Kconfig +++ b/drivers/input/keyboard/Kconfig @@ -305,6 +305,16 @@ config KEYBOARD_MATRIX To compile this driver as a module, choose M here: the module will be called matrix_keypad. +config KEYBOARD_MATRIX_POLLED + tristate "GPIO-POLLED driven matrix keypad support" + depends on GPIOLIB || COMPILE_TEST + select INPUT_MATRIXKMAP + help + Enable support for GPIO driven matrix keypad. + + To compile this driver as a module, choose M here: the + module will be called matrix_keypad. + config KEYBOARD_HIL_OLD tristate "HP HIL keyboard support (simple driver)" depends on GSC || HP300 diff --git a/drivers/input/keyboard/Makefile b/drivers/input/keyboard/Makefile index 1d689fdd5..fb8ba14eb 100644 --- a/drivers/input/keyboard/Makefile +++ b/drivers/input/keyboard/Makefile @@ -40,6 +40,7 @@ obj-$(CONFIG_KEYBOARD_LOCOMO) += locomokbd.o obj-$(CONFIG_KEYBOARD_LPC32XX) += lpc32xx-keys.o obj-$(CONFIG_KEYBOARD_MAPLE) += maple_keyb.o obj-$(CONFIG_KEYBOARD_MATRIX) += matrix_keypad.o +obj-$(CONFIG_KEYBOARD_MATRIX_POLLED) += matrix_keypad_polled.o obj-$(CONFIG_KEYBOARD_MAX7359) += max7359_keypad.o obj-$(CONFIG_KEYBOARD_MCS) += mcs_touchkey.o obj-$(CONFIG_KEYBOARD_MPR121) += mpr121_touchkey.o diff --git a/drivers/input/keyboard/matrix_keypad_polled.c b/drivers/input/keyboard/matrix_keypad_polled.c new file mode 100644 index 000000000..b2c5bd064 --- /dev/null +++ b/drivers/input/keyboard/matrix_keypad_polled.c @@ -0,0 +1,388 @@ +// All GPIOS are pull-up + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct matrix_keypad_polled { + const struct matrix_keypad_platform_data *pdata; + struct input_dev *input; + unsigned int row_shift; + + int out_value; + int row_values[MATRIX_MAX_ROWS]; + int col_values[MATRIX_MAX_COLS]; + int poll_interval; +}; + +enum matrix_keypad_edge { + MATRIX_KEY_GPIO_FALLING, + MATRIX_KEY_GPIO_RISING, +}; + +static void keypad_all_row_input(struct matrix_keypad_polled *keypad) +{ + const struct matrix_keypad_platform_data *pdata = keypad->pdata; + int i; + + for (i = 0; i < pdata->num_row_gpios; i++) + gpio_direction_input(pdata->row_gpios[i]); +} + +static void keypad_all_row_output(struct matrix_keypad_polled *keypad) +{ + const struct matrix_keypad_platform_data *pdata = keypad->pdata; + int i; + + for (i = 0; i < pdata->num_row_gpios; i++) + gpio_direction_output(pdata->row_gpios[i], keypad->out_value); +} + +static void keypad_all_col_input(struct matrix_keypad_polled *keypad) +{ + const struct matrix_keypad_platform_data *pdata = keypad->pdata; + int i; + + for (i = 0; i < pdata->num_col_gpios; i++) + gpio_direction_input(pdata->col_gpios[i]); +} + +static void keypad_all_col_output(struct matrix_keypad_polled *keypad) +{ + const struct matrix_keypad_platform_data *pdata = keypad->pdata; + int i; + + for (i = 0; i < pdata->num_col_gpios; i++) + gpio_direction_output(pdata->col_gpios[i], keypad->out_value); +} + +static int keypad_which_row_bounce(struct matrix_keypad_polled* keypad, + enum matrix_keypad_edge* edge) +{ + const struct matrix_keypad_platform_data *pdata = keypad->pdata; + int val, i; + + for (i = 0; i < pdata->num_row_gpios; i++) + { + val = gpio_get_value_cansleep(pdata->row_gpios[i]); + if (val != keypad->row_values[i]) + { + keypad->row_values[i] = val; + *edge = (val == 0) ? + MATRIX_KEY_GPIO_FALLING : MATRIX_KEY_GPIO_RISING; + return i; + } + } + + return -1; +} + +static int keypad_which_col_bounce(struct matrix_keypad_polled* keypad) +{ + const struct matrix_keypad_platform_data *pdata = keypad->pdata; + int val, i; + + for (i = 0; i < pdata->num_col_gpios; i++) + { + val = gpio_get_value_cansleep(pdata->col_gpios[i]); + if (val != keypad->col_values[i]) + { + keypad->col_values[i] = val; + return i; + } + } + + return -1; +} + +static int keypad_assert_row(struct matrix_keypad_polled* keypad, + enum matrix_keypad_edge* edge) +{ + keypad_all_col_output(keypad); + keypad_all_row_input(keypad); + + return keypad_which_row_bounce(keypad, edge); +} + +static int keypad_assert_col(struct matrix_keypad_polled* keypad) +{ + keypad_all_row_output(keypad); + keypad_all_col_input(keypad); + + return keypad_which_col_bounce(keypad); +} + +static void matrix_keypad_polled(struct input_dev *input) +{ + struct matrix_keypad_polled *keypad = input_get_drvdata(input); + const unsigned short *keycodes = input->keycode; + enum matrix_keypad_edge edge; + int row, col, code; + + row = keypad_assert_row(keypad, &edge); + if (row >= 0) + { + col = keypad_assert_col(keypad); + + //pr_info("(%d,%d) = %d\n", + // row, col, edge); + + code = MATRIX_SCAN_CODE(row, col, keypad->row_shift); + input_event(input, EV_MSC, MSC_SCAN, code); + input_report_key(input, keycodes[code], !edge); + } + + input_sync(input); +} + +static int matrix_keypad_polled_start(struct input_dev *dev) +{ + return 0; +} + +static void matrix_keypad_polled_stop(struct input_dev *dev) +{ +} + +static int matrix_keypad_polled_init_gpio(struct platform_device *pdev, + struct matrix_keypad_polled *keypad) +{ + const struct matrix_keypad_platform_data *pdata = keypad->pdata; + int i, err; + + /* initialized strobe lines as outputs, activated */ + for (i = 0; i < pdata->num_col_gpios; i++) { + err = gpio_request(pdata->col_gpios[i], "matrix_kbd_col"); + if (err) { + dev_err(&pdev->dev, + "failed to request GPIO%d for COL%d\n", + pdata->col_gpios[i], i); + goto err_free_cols; + } + + gpio_direction_output(pdata->col_gpios[i], 0); + keypad->col_values[i] = ! keypad->out_value; + } + + for (i = 0; i < pdata->num_row_gpios; i++) { + err = gpio_request(pdata->row_gpios[i], "matrix_kbd_row"); + if (err) { + dev_err(&pdev->dev, + "failed to request GPIO%d for ROW%d\n", + pdata->row_gpios[i], i); + goto err_free_rows; + } + + gpio_direction_input(pdata->row_gpios[i]); + keypad->row_values[i] = ! keypad->out_value; + } + + return 0; + +err_free_rows: + while (--i >= 0) + gpio_free(pdata->row_gpios[i]); + i = pdata->num_col_gpios; +err_free_cols: + while (--i >= 0) + gpio_free(pdata->col_gpios[i]); + + return err; +} + +static void keypad_free_gpio(struct matrix_keypad_polled *keypad) +{ + const struct matrix_keypad_platform_data *pdata = keypad->pdata; + int i; + + for (i = 0; i < pdata->num_row_gpios; i++) + gpio_free(pdata->row_gpios[i]); + + for (i = 0; i < pdata->num_col_gpios; i++) + gpio_free(pdata->col_gpios[i]); +} + +#ifdef CONFIG_OF +static struct matrix_keypad_platform_data * +matrix_keypad_polled_parse_dt(struct device *dev) +{ + struct matrix_keypad_platform_data *pdata; + struct device_node *np = dev->of_node; + unsigned int *gpios; + int ret, i, nrow, ncol; + + if (!np) { + dev_err(dev, "device lacks DT data\n"); + return ERR_PTR(-ENODEV); + } + + pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL); + if (!pdata) { + dev_err(dev, "could not allocate memory for platform data\n"); + return ERR_PTR(-ENOMEM); + } + + pdata->num_row_gpios = nrow = of_gpio_named_count(np, "row-gpios"); + pdata->num_col_gpios = ncol = of_gpio_named_count(np, "col-gpios"); + if (nrow <= 0 || ncol <= 0) { + dev_err(dev, "number of keypad rows/columns not specified\n"); + return ERR_PTR(-EINVAL); + } + + if (of_get_property(np, "linux,no-autorepeat", NULL)) + pdata->no_autorepeat = true; + + gpios = devm_kcalloc(dev, + pdata->num_row_gpios + pdata->num_col_gpios, + sizeof(unsigned int), + GFP_KERNEL); + if (!gpios) { + dev_err(dev, "could not allocate memory for gpios\n"); + return ERR_PTR(-ENOMEM); + } + + for (i = 0; i < nrow; i++) { + ret = of_get_named_gpio(np, "row-gpios", i); + if (ret < 0) + return ERR_PTR(ret); + gpios[i] = ret; + } + + for (i = 0; i < ncol; i++) { + ret = of_get_named_gpio(np, "col-gpios", i); + if (ret < 0) + return ERR_PTR(ret); + gpios[nrow + i] = ret; + } + + pdata->row_gpios = gpios; + pdata->col_gpios = &gpios[pdata->num_row_gpios]; + + return pdata; +} +#else +static inline struct matrix_keypad_platform_data * +matrix_keypad_parse_dt(struct device *dev) +{ + dev_err(dev, "no platform data defined\n"); + + return ERR_PTR(-EINVAL); +} +#endif + +static int matrix_keypad_polled_probe(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + const struct matrix_keypad_platform_data *pdata; + struct matrix_keypad_polled *keypad; + struct input_dev *input; + int err; + + pdata = dev_get_platdata(dev); + if (!pdata) { + pdata = matrix_keypad_polled_parse_dt(dev); + if (IS_ERR(pdata)) + return PTR_ERR(pdata); + } else if (!pdata->keymap_data) { + dev_err(&pdev->dev, "no keymap data defined\n"); + return -EINVAL; + } + + keypad = kzalloc(sizeof(struct matrix_keypad_polled), GFP_KERNEL); + input = devm_input_allocate_device(dev); + if (!keypad || !input) { + err = -ENOMEM; + goto err_free_mem; + } + + keypad->input = input; + keypad->pdata = pdata; + keypad->row_shift = get_count_order(pdata->num_col_gpios); + of_property_read_u32(dev->of_node, "poll-interval", + &keypad->poll_interval); + + input->open = matrix_keypad_polled_start; + input->close = matrix_keypad_polled_stop; + + err = matrix_keypad_build_keymap(pdata->keymap_data, NULL, + pdata->num_row_gpios, + pdata->num_col_gpios, + NULL, input); + if (err) { + dev_err(&pdev->dev, "failed to build keymap\n"); + goto err_free_mem; + } + + __set_bit(EV_KEY, input->evbit); + if (!pdata->no_autorepeat) + __set_bit(EV_REP, input->evbit); + input_set_capability(input, EV_MSC, MSC_SCAN); + input_set_drvdata(input, keypad); + + err = input_setup_polling(input, matrix_keypad_polled); + if (err) { + dev_err(&pdev->dev, "unable to set up polling, err=%d\n", err); + return err; + } + + input_set_poll_interval(input, keypad->poll_interval); + + err = matrix_keypad_polled_init_gpio(pdev, keypad); + if (err) + goto err_free_mem; + + err = input_register_device(input); + if (err) + goto err_free_gpio; + + input_sync(input); + + return 0; + +err_free_gpio: + keypad_free_gpio(keypad); +err_free_mem: + input_free_device(input); + kfree(keypad); + return err; +} + +static int matrix_keypad_polled_remove(struct platform_device *pdev) +{ + struct matrix_keypad_polled *keypad = platform_get_drvdata(pdev); + + keypad_free_gpio(keypad); + input_unregister_device(keypad->input); + kfree(keypad); + + return 0; +} + +#ifdef CONFIG_OF +static const struct of_device_id matrix_keypad_polled_dt_match[] = { + { .compatible = "gpio-matrix-keypad-polled" }, + { } +}; +MODULE_DEVICE_TABLE(of, matrix_keypad_polled_dt_match); +#endif + +static struct platform_driver matrix_keypad_polled_driver = { + .probe = matrix_keypad_polled_probe, + .remove = matrix_keypad_polled_remove, + .driver = { + .name = "matrix-keypad-polled", + .of_match_table = of_match_ptr(matrix_keypad_polled_dt_match), + }, +}; +module_platform_driver(matrix_keypad_polled_driver); diff --git a/drivers/input/touchscreen/goodix.c b/drivers/input/touchscreen/goodix.c index 0826d8134..05bd6496c 100644 --- a/drivers/input/touchscreen/goodix.c +++ b/drivers/input/touchscreen/goodix.c @@ -722,6 +722,7 @@ static int goodix_reset(struct goodix_ts_data *ts) /* begin select I2C slave addr */ error = gpiod_direction_output(ts->gpiod_rst, 0); + error = gpiod_direction_output(ts->gpiod_int, 0); if (error) return error; @@ -741,7 +742,7 @@ static int goodix_reset(struct goodix_ts_data *ts) usleep_range(6000, 10000); /* T4: > 5ms */ /* end select I2C slave addr */ - error = gpiod_direction_input(ts->gpiod_rst); + error = gpiod_direction_input(ts->gpiod_int); if (error) return error; diff --git a/drivers/misc/dht11.c b/drivers/misc/dht11.c index d674ba0e5..607c919b1 100644 --- a/drivers/misc/dht11.c +++ b/drivers/misc/dht11.c @@ -14,146 +14,170 @@ #include #include #include +#include #include #include //内核延时 忙等 #include +#include // 包含 GPIO 支持 #define ERROR_PRINT(x) do{ \ - printk(x " is error!\n"); \ + printk(KERN_ERR x " is error!\n"); \ return -1; \ }while(0) #define DEVICE_NAME "dht11" -#define HIGH 1 -#define LOW 0 +#define HIGH 1 // 代表高电平 +#define LOW 0 // 代表低电平 -/*1、platform匹配*/ -/*2、匹配成功后,注册字符设备或杂项设备*/ +#define DHT_MAXCOUNT 32000 // 计数超时的最大值 -int dht11_GPIO; //DHT11_GPIO编号 +// dht11响应信号 + 数据信号,一共 1 + 40 次低高电平变化 +#define DHT_PULSES 41 +// 低高电平变化中,低和高各变化一次,所以电平维持计数记录需要 (1 + 40) * 2 次 +#define DHT_PULSES_SAMPLING_COUNT (DHT_PULSES * 2) + +struct gpio_desc* dht11_gpiod; //DHT11_GPIO编号 struct dht11_info { - dev_t devt; - struct cdev cdev; - struct class *dht11_class; - struct device *dht11_device; + dev_t devt; // 实际上就是 u32 类型 用于记录主设备号 + struct miscdevice dht11_device; // misc设备 用于创建 /dev/ 下的节点 }; + struct dht11_info dht11; -/*起始信号 -主机发送采集信号 -主机由高电平-->低电平(至少18ms)--->高电平(20-40us) -DHT响应信号 低电平(80us)--->高电平(80us) +/* + * dht11 采样时序 + * 1. 起始信号 + * 主机发送采集信号,此时 GPIO 由 CPU 控制,设置为输出状态 + * 主机由高电平-->低电平(至少18ms)--->高电平(20-40us) + * + * 2. DHT响应信号,此时 GPIO 由 dht11 控制,所以应该设置为输入状态 + * 低电平(80us)--->高电平(80us) + * + * 3. DHT数据传输信号,共40bit,即5字节数据开始传输,先发送的bit是字节里的高位(MSB) + * 数据开始 低电平(50us) ---> 数据0 高电平 26us-28us + * 数据开始 低电平(50us) ---> 数据1 高电平 70us + */ -数据开始 低电平(50us) -数据0 高电平 26us-28us -数据1 高电平70us -*/ - -void end(void) +static void end(void) { - gpio_direction_output(dht11_GPIO, HIGH); -} -/*数据采集*/ -unsigned char get_dht11_value(void) -{ - int i; - volatile int max_wait; - unsigned char data = 0; - for (i = 0; i < 8; i++) { //8bit - udelay(10); - if (gpio_get_value(dht11_GPIO) == LOW) { - // max_wait = 0; - // while(gpio_get_value(dht11_GPIO) == LOW) { - // ++max_wait; - // udelay(1); - // if (max_wait == 40) { - // pr_info("33333\n"); - // break; - // } - // } - // udelay(40); - while(gpio_get_value(dht11_GPIO) == LOW); - /*当变为高电平时, 等待40us 查看是否为高电平 - 如果为高电平 则为 1 - 如果为低电平 则为 0 - */ - udelay(30); - if (gpio_get_value(dht11_GPIO) == HIGH) { - data |= (0x1 << (7 - i)); //数据自高位到低位 - udelay(40); - } - else - data &= ~(0x1 << (7 - i)); // 置为0 - } - } - return data; + // 建议结束时,GPIO输出高,下次采样成功率高点 + gpiod_direction_output(dht11_gpiod, HIGH); } ssize_t dht11_read(struct file *file, char __user * user_buf, size_t size, loff_t * loff) { - volatile int max_wait; int err; unsigned char dht11_data[5]; - //mdelay(5); //拉低5ms 以免过快检测导致读取数据失败 - gpio_set_value(dht11_GPIO, LOW); - mdelay(20); //拉低20ms - /*拉高20-40us*/ - gpio_set_value(dht11_GPIO, HIGH); - udelay(30); //拉高30us - //设置为输入 - gpio_direction_input(dht11_GPIO); - /*DHT11响应信号*/ - udelay(10); - if (gpio_get_value(dht11_GPIO) == LOW) { - //80us 低电平 - // max_wait = 0; - err = 0; - // while(gpio_get_value(dht11_GPIO) == LOW) { - // ++max_wait; - // udelay(10); - // if (max_wait == 20) { - // err = 1; - // break; - // } - // } - // max_wait = 0; - // while(gpio_get_value(dht11_GPIO) == LOW) { - // ++max_wait; - // if (max_wait == 214742000) { - // err = 1; - // break; - // } - // } - // while(gpio_get_value(dht11_GPIO) == LOW); - udelay(70); //拉高80us - //80us 高电平 - // while(gpio_get_value(dht11_GPIO) == HIGH); + unsigned int pulse_counts[DHT_PULSES_SAMPLING_COUNT]; + volatile unsigned int i; + unsigned int pulse_low_average; + int data_index; - // max_wait = 0; - // while(gpio_get_value(dht11_GPIO) == HIGH) { - // ++max_wait; - // if (max_wait == 214742000) { - // err = 1; - // pr_info("2222222\n"); - // break; - // } - // } - udelay(80); //拉高80us + /* + * 下列算法解析: + * + * DHT_PULSES_SAMPLING_COUNT 为 82,因为从DHT11的响应信号开始,低高电平一共有82次 + * 低 80us 高 80us 为2次,这是一开始的响应信号 + * 低 50us 高 28us 或 70us,表示bit为0或1,这个有40次信号 + * 所以 (1 + 40) * 2 = 82 + * 数组输出化 0,因为这个数组是将电平维持时间通过计数形式表达 + * 如果电平维持时间为 80us,那么 pulse_counts[i] 就会比较大 + * 如果电平维持时间为 28us,那么 pulse_counts[i] 就会相比于80us时比较小 + * + * 对于代表 低电平维持了 50us 的那些pulse_counts[i]而言(从i=2,i += 2) + * 由于维持的时间都相同,所以计数值都差不多,把这40个低电平50us的计数求平均数 + * 那么这个平均数就代表 50us 的计数 + * 当分辨bit是0还是1时,就需要看低电平50us后的高电平维持的时间,也就是计数值。 + * 当计数值小于上面求的平均数,代表着高电平维持的时间少于50us,也就是在了 28us 左右,那么当前bit为0。 + * 当计数值大于上面求的平均数,代表着低电平维持的时间多于50us,也就是在了 70us 左右,那么当前bit为1。 + * + * 这样就能得到5个字节的数据。 + */ + for (i = 0; i < DHT_PULSES_SAMPLING_COUNT; ++i) + pulse_counts[i] = 0; + for (i = 0; i < 5; ++i) + dht11_data[i] = 0; - if (!err) { - dht11_data[0] = get_dht11_value(); //湿度整数数据 - dht11_data[1] = get_dht11_value(); //湿度小数数据 0 - dht11_data[2] = get_dht11_value(); //温度整数数据 - dht11_data[3] = get_dht11_value(); //温度小数数据 - dht11_data[4] = get_dht11_value(); //校验和 + // 实现 1. 起始信号 的时序 + gpiod_direction_output(dht11_gpiod, LOW); + mdelay(20); //拉低20ms 要求是(最小18ms) + gpiod_direction_output(dht11_gpiod, HIGH); + udelay(40); //拉高40us 要求是(20-40us) + + // 之后是DHT11响应信号的数据传输信号,所以 GPIO 要设置为输入状态 + gpiod_direction_input(dht11_gpiod); + + err = 0; + for (i = 0; i < DHT_PULSES_SAMPLING_COUNT; i += 2) { + // 根据前面所说,响应信号和数据传输信号,都是以低电平开始,高电平结束 + // 这里就是前面说的计数,将电平维持时间转化为计数值 + while(gpiod_get_value(dht11_gpiod) == LOW) { + if (++pulse_counts[i] >= DHT_MAXCOUNT) { + // failed + err = 1; + break; + } } + if (err) + break; + while(gpiod_get_value(dht11_gpiod) == HIGH) { + if (++pulse_counts[i + 1] >= DHT_MAXCOUNT) { + // failed + err = 1; + break; + } + } + if (err) + break; + } + + // 计数过大(DHT_MAXCOUNT),代表DHT11数据信号采样(计数)失败 + if (err) { + // 计数失败会很常见,所以这个打印可以注释掉 + pr_info("dht11 lost response! (GPIO : %d)\n", desc_to_gpio(dht11_gpiod)); + end(); + return -16; + } + + /* + * 开始统计收集到的计数值,此时已经和DHT11没关系了 + */ + + // 跳过一开始的 80us 低 80us 高的响应信号 所以 i 不会等于0和1 + + // 算出低电平的维持50us时的平均值 + pulse_low_average = 0; + for (i = 2; i < DHT_PULSES_SAMPLING_COUNT; i += 2) + pulse_low_average += pulse_counts[i]; + pulse_low_average /= DHT_PULSES; //平均值 + + // 根据平均值,区分 bit 0 还是 bit 1 + for (i = 3; i < DHT_PULSES_SAMPLING_COUNT; i += 2) { + /* + * 3 5 7 9 11 13 15 17 + * 19 21 23 25 27 29 31 33 + * 35 37 39 41 43 45 47 49 + * 51 53 55 57 59 61 63 65 + * 67 69 71 73 75 77 79 81 + * + * 要算当前的 pulse_counts[i] 属于那个字节,也就是 data_index + * i从3开始,所以先减去3 + * 8bit 一个字节,但是 pulse_counts[i - 1] pulse_counts[i] 构成一个bit + * 所以 8 * 2 = 16,所以要除以16,这样就算到了 data_index + */ + data_index = (i - 3) / 16; + dht11_data[data_index] <<= 1; // 前面说过,先来的bit属于高位,所以先左移一位,将高位向前移动 + + // 高于平均值代表是 bit1 + if (pulse_counts[i] >= pulse_low_average) + dht11_data[data_index] |= 1; + // 由于前面已经左移一位,所以第 0 位一定是 0,所以遇到bit0,无需再置位 } if (copy_to_user(user_buf, dht11_data, size) != 0) ERROR_PRINT("dht11 date copy_to_user failed"); - //恢复为输出模式高电平 end(); return 0; } @@ -162,21 +186,27 @@ ssize_t dht11_write(struct file *file, const char __user *user_buf, size_t size, { int ret; unsigned int gpio; + struct gpio_desc* new_gpiod_desc; - /* 检查用户空间的buffer是否足够大以存储一个无符号整型 */ + // 检查用户空间的buffer是否足够大以存储一个无符号整型也就是4字节 if (size < sizeof(gpio)) { printk(KERN_WARNING "dht11_write: buffer too small\n"); return -EINVAL; } - /* 从用户空间复制数据到内核空间 */ + // 从用户空间复制数据到内核空间 不能直接 memcpy ret = copy_from_user(&gpio, user_buf, sizeof(gpio)); if (ret != 0) { printk(KERN_ERR "dht11_write: failed to copy data from user space\n"); return -EFAULT; } - dht11_GPIO = gpio; + // 根据 GPIO 编号获取 gpiod_desc + new_gpiod_desc = gpio_to_desc(gpio); + if (new_gpiod_desc < 0) + return -1; + + dht11_gpiod = new_gpiod_desc; // 更新 gpiod_desc 之后 read 调用时就会操作新的gpio /* 返回写入的字节数 */ return sizeof(gpio); @@ -186,100 +216,122 @@ int dht11_open(struct inode * inode, struct file * file) { return 0; } + int dht11_release(struct inode * inode, struct file *file) { return 0; } + +/* + * 因为最终目的是为了对 /dev/dht11 节点进行io + * 所以需要实现这些内核接口,实现了才能进行操作 + * open 和 release 对应 open 和 close 函数,但没有什么初始化和关闭操作,所以函数里面无需实现代码 + * + * read 对应 read 函数,是为了读取5个字节的采样数据,也就是触发一次采样 + * + * write 对应 write 函数,对于dht11而言,没什么要写入的,但是本驱动实现的是改变操作dht11的gpio的效果 + * 比如一开始设备树里面注册的是gpio 88去控制的,但是实际使用时,改成了gpio 61去控制 + * 那么write写入61这个数字所在int的指针,即可修改gpiod_desc(dht11_gpiod)为 gpio 61 的gpiod_desc + * 后续的read函数也是操作gpio 61这个引脚。 + */ struct file_operations fops = { .open = dht11_open, .release = dht11_release, .read = dht11_read, - .write = dht11_write, // 添加这行 + .write = dht11_write, .owner = THIS_MODULE }; -/*匹配成功进入probe函数*/ +/* + * 字符设备管理代码 + * 下面的代码是为了向内核注册驱动和设备 + * + * 这两个是为了注册驱动和注销驱动 + * dht11_init + * dht11_exit + * + * 这两个是为了声明设备和删除设备 + * dht11_probe + * dht11_remove + * + * 有了驱动,才会去找设备 + * 而找到设备靠的是设备树里面有没有一个设备的 compatible 字段和 + * of_match_table 里面 compatible 字段匹配 + * 如果匹配了,就会调用 dht11_probe + */ + int dht11_probe(struct platform_device *pdev) { - /*匹配成功之后,获取硬件资源,然后注册字符设备*/ - /*SHT11-gpios = <&gpk3 0 GPIO_ACTIVE_HIGH>;*/ int ret; - dht11_GPIO = of_get_named_gpio(pdev->dev.of_node, "SHT11-gpios", 0); - if (dht11_GPIO < 0) - ERROR_PRINT("of_get_named_gpio"); - /*获取资源*/ - // ret = gpio_request(dht11_GPIO, "dht11_gpio"); - // if (ret != 0) - // { - // ERROR_PRINT("gpio_request!"); - // } - ret = gpio_direction_output(dht11_GPIO, HIGH); - if (ret != 0) - ERROR_PRINT("gpio_direction_output"); + + /* + * dht11-gpios = <&gpio 61 GPIO_ACTIVE_HIGH>; + * 注意 GPIO_ACTIVE_HIGH 这个也要关注 + * 如果 GPIO的高电平对应逻辑值 1,那么填 GPIO_ACTIVE_HIGH + * 否则 填GPIO_ACTIVE_LOW + */ + dht11_gpiod = devm_gpiod_get_optional(&pdev->dev, DEVICE_NAME, 0); + if (dht11_gpiod <= 0) + ERROR_PRINT("devm_gpiod_get_optional"); + /*注册字符设备驱动*/ - /*分配设备号*/ - ret = alloc_chrdev_region(&dht11.devt, 0, 1, "dht11"); + // 分配设备号 + ret = alloc_chrdev_region(&dht11.devt, 0, 1, DEVICE_NAME); if (ret != 0) ERROR_PRINT("alloc_chrdev_region"); - /*初始化cdev*/ - dht11.cdev.owner = THIS_MODULE; - cdev_init(&dht11.cdev, &fops); - /*将cdev注册到内核*/ - ret = cdev_add(&dht11.cdev, dht11.devt,1); - if (ret != 0) - ERROR_PRINT("cdev_add"); - /*创建设备class*/ - dht11.dht11_class = class_create(THIS_MODULE, "dht11_class"); - if (dht11.dht11_class == NULL) - ERROR_PRINT("class_create"); - /*在class下创建设备节点*/ - dht11.dht11_device = device_create(dht11.dht11_class, NULL, dht11.devt, NULL, DEVICE_NAME); - if (dht11.dht11_device == NULL) - ERROR_PRINT("device_create"); - printk("probe success!\n"); + // 注册 misc 设备,在/dev/下生成 dht11 节点(文件) + dht11.dht11_device.minor = MISC_DYNAMIC_MINOR; // 动态分配次设备号 + dht11.dht11_device.name = "dht11"; + dht11.dht11_device.fops = &fops; + ret = misc_register(&dht11.dht11_device); // 这样 /dev 下就会生成对应节点 + if (ret < 0) { + unregister_chrdev_region(dht11.devt, 1); + return ret; + } + + printk(KERN_INFO "dht11 probe success! (GPIO: %d)\n", desc_to_gpio(dht11_gpiod)); return 0; } + int dht11_remove(struct platform_device *pdev) { + // 注销 misc 设备 + misc_deregister(&dht11.dht11_device); + // 注销设备号 + unregister_chrdev_region(dht11.devt, 1); + // 释放 GPIO 描述符 + gpiod_put(dht11_gpiod); return 0; } + struct of_device_id of_match_table[] = { {.compatible = "dht11-sensor"}, {} -}; //设备树匹配 +}; // 设备树匹配 struct platform_driver pdrv = { .probe = dht11_probe, .remove = dht11_remove, .driver = { - .name = "dht11", + .name = DEVICE_NAME, .owner = THIS_MODULE, .of_match_table = of_match_table }, }; + static int dht11_init(void) { - //注册platform_driver + // 注册platform_driver int ret = platform_driver_register(&pdrv); if (ret != 0) ERROR_PRINT("platform driver register"); return 0; } + static void dht11_exit(void) { - /*注销设备节点*/ - device_destroy(dht11.dht11_class, dht11.devt); - /*注销class*/ - class_destroy(dht11.dht11_class); - /*注销字符设备*/ - cdev_del(&dht11.cdev); - /*注销设备号*/ - unregister_chrdev_region(dht11.devt, 1); - /*注销GPIO*/ - gpio_free(dht11_GPIO); - /*注销设备节点*/ /*注销platform_driver*/ platform_driver_unregister(&pdrv); } diff --git a/drivers/net/can/ls_canfd/Makefile b/drivers/net/can/ls_canfd/Makefile index c822ba53e..a5c0f98fa 100644 --- a/drivers/net/can/ls_canfd/Makefile +++ b/drivers/net/can/ls_canfd/Makefile @@ -8,6 +8,18 @@ # matching values else you do not screw only LS CAN FD build but even # base kernel build -obj-$(CONFIG_CAN_LSCANFD) := lscanfd.o -lscanfd-y := lscanfd_dma.elfbin -obj-$(CONFIG_CAN_LSCANFD_PLATFORM) += lscanfd_platform.elfbin +quiet_cmd_build_lscanfd_dma = GEN $@ + cmd_build_lscanfd_dma = cp $(obj)/lscanfd_dma.o_shipped $@ + +quiet_cmd_build_lscanfd_platform = GEN $@ + cmd_build_lscanfd_platform = cp $(obj)/lscanfd_platform.o_shipped $@ + +$(obj)/lscanfd_dma.o: FORCE + $(call if_changed,build_lscanfd_dma) + +$(obj)/lscanfd_platform.o: FORCE + $(call if_changed,build_lscanfd_platform) + +obj-$(CONFIG_CAN_LSCANFD) := lscanfd_dma.o +obj-$(CONFIG_CAN_LSCANFD_PLATFORM) += lscanfd_platform.o + diff --git a/drivers/net/can/ls_canfd/lscanfd_dma.elfbin b/drivers/net/can/ls_canfd/lscanfd_dma.elfbin deleted file mode 100644 index 5030c9691..000000000 Binary files a/drivers/net/can/ls_canfd/lscanfd_dma.elfbin and /dev/null differ diff --git a/drivers/net/can/ls_canfd/lscanfd_dma.o_shipped b/drivers/net/can/ls_canfd/lscanfd_dma.o_shipped new file mode 100644 index 000000000..b08a62d85 Binary files /dev/null and b/drivers/net/can/ls_canfd/lscanfd_dma.o_shipped differ diff --git a/drivers/net/can/ls_canfd/lscanfd_platform.elfbin b/drivers/net/can/ls_canfd/lscanfd_platform.elfbin deleted file mode 100644 index 43a227acc..000000000 Binary files a/drivers/net/can/ls_canfd/lscanfd_platform.elfbin and /dev/null differ diff --git a/drivers/net/can/ls_canfd/lscanfd_platform.o_shipped b/drivers/net/can/ls_canfd/lscanfd_platform.o_shipped new file mode 100644 index 000000000..aad8598fb Binary files /dev/null and b/drivers/net/can/ls_canfd/lscanfd_platform.o_shipped differ diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c index ded88edd8..4c45ba08f 100644 --- a/drivers/usb/serial/option.c +++ b/drivers/usb/serial/option.c @@ -250,6 +250,7 @@ static void option_instat_callback(struct urb *urb); #define QUECTEL_PRODUCT_EP06 0x0306 #define QUECTEL_PRODUCT_EM12 0x0512 #define QUECTEL_PRODUCT_RM500Q 0x0800 +#define QUECTEL_PRODUCT_EC200A_CN 0x6005 #define QUECTEL_PRODUCT_EC200T 0x6026 #define QUECTEL_PRODUCT_EC200U_CN 0x0901 @@ -1119,6 +1120,7 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0, 0) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0xff, 0x10), .driver_info = ZLP }, + { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200A_CN) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200T, 0xff, 0, 0) }, { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200U_CN) }, @@ -2095,6 +2097,7 @@ static struct usb_serial_driver option_1port_device = { .suspend = usb_wwan_suspend, .resume = usb_wwan_resume, #endif + .reset_resume = usb_wwan_resume, }; static struct usb_serial_driver * const serial_drivers[] = { @@ -2128,6 +2131,36 @@ static int option_probe(struct usb_serial *serial, */ if (device_flags & NUMEP2 && iface_desc->bNumEndpoints != 2) return -ENODEV; +#if 1 //Added by Quectel + //Quectel UC20's interface 4 can be used as USB Network device + if (serial->dev->descriptor.idVendor == cpu_to_le16(0x05C6) + && serial->dev->descriptor.idProduct == cpu_to_le16(0x9003) + && serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4) + return -ENODEV; + + //Quectel EC20(MDM9215)'s interface 4 can be used as USB Network device + if (serial->dev->descriptor.idVendor == cpu_to_le16(0x05C6) + && serial->dev->descriptor.idProduct == cpu_to_le16(0x9215) + && serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4) + return -ENODEV; + + if (serial->dev->descriptor.idVendor == cpu_to_le16(0x2C7C)) { + __u16 idProduct = le16_to_cpu(serial->dev->descriptor.idProduct); + struct usb_interface_descriptor *intf = &serial->interface->cur_altsetting->desc; + + if (intf->bInterfaceClass != 0xFF || intf->bInterfaceSubClass == 0x42) { + //ECM, RNDIS, NCM, MBIM, ACM, UAC, ADB + return -ENODEV; + } + + if ((idProduct&0xF000) == 0x0000) { + //MDM interface 4 is QMI + if (intf->bInterfaceNumber == 4 && intf->bNumEndpoints == 3 + && intf->bInterfaceSubClass == 0xFF && intf->bInterfaceProtocol == 0xFF) + return -ENODEV; + } + } +#endif /* Store the device flags so we can use them during attach. */ usb_set_serial_data(serial, (void *)device_flags); diff --git a/drivers/usb/serial/usb_wwan.c b/drivers/usb/serial/usb_wwan.c index 4b9845807..873af4c86 100644 --- a/drivers/usb/serial/usb_wwan.c +++ b/drivers/usb/serial/usb_wwan.c @@ -478,6 +478,21 @@ static struct urb *usb_wwan_setup_urb(struct usb_serial_port *port, if (intfdata->use_zlp && dir == USB_DIR_OUT) urb->transfer_flags |= URB_ZERO_PACKET; +#if 1 //Added by Quectel for Zero Packet + if (dir == USB_DIR_OUT) { + if (serial->dev->descriptor.idVendor == cpu_to_le16(0x05C6) + && serial->dev->descriptor.idProduct == cpu_to_le16(0x9090)) + urb->transfer_flags |= URB_ZERO_PACKET; + if (serial->dev->descriptor.idVendor == cpu_to_le16(0x05C6) + && serial->dev->descriptor.idProduct == cpu_to_le16(0x9003)) + urb->transfer_flags |= URB_ZERO_PACKET; + if (serial->dev->descriptor.idVendor == cpu_to_le16(0x05C6) + && serial->dev->descriptor.idProduct == cpu_to_le16(0x9215)) + urb->transfer_flags |= URB_ZERO_PACKET; + if (serial->dev->descriptor.idVendor == cpu_to_le16(0x2C7C)) + urb->transfer_flags |= URB_ZERO_PACKET; + } +#endif return urb; }