From 9585ff23dfb4dd1ee83b9f639a21986b3a0ad883 Mon Sep 17 00:00:00 2001 From: maoxiaochuan Date: Mon, 23 Sep 2024 10:54:42 +0800 Subject: [PATCH] update to e4af36c7270 1.add 2k300_gongkong board support 2.update dht11 driver 3.support EC200A-CN 4G model 4.goodix:reset: reset timing fixing 5.other bugs fix --- arch/loongarch/boot/dts/loongson/Makefile | 2 +- .../boot/dts/loongson/loongson2k300.dtsi | 32 +- .../dts/loongson/loongson_panel_param.dtsi | 49 ++ .../dts/loongson/ls2k300_g2k03z2_core.dtsi | 53 ++ .../dts/loongson/ls2k300_gongkong_gbkpgk0.dts | 338 ++++++++++ .../boot/dts/loongson/ls2k300_mini_dp.dts | 8 + .../boot/dts/loongson/ls2k300_pai_pihat.dts | 18 +- .../boot/dts/loongson/ls2p500_evb.dts | 136 ---- .../boot/dts/loongson/ls2p500_gbkpjm0_v10.dts | 13 + .../boot/dts/loongson/ls2p500_rsj_mb_v10.dts | 233 ------- .../configs/loongson_2k1000_i2s_defconfig | 569 ----------------- .../configs/loongson_2k1000_xr21_defconfig | 587 ------------------ .../configs/loongson_2k300_defconfig | 71 +++ .../configs/loongson_2p500_defconfig | 89 ++- .../include/asm/mach-loongson64/boot_param.h | 1 + arch/loongarch/loongson64/init.c | 8 +- drivers/gpu/drm/loongson/lsdc_crtc.c | 10 + drivers/gpu/drm/loongson/lsdc_drv.c | 10 +- drivers/gpu/drm/loongson/lsdc_drv.h | 2 + drivers/gpu/drm/loongson/lsdc_platform_drv.c | 5 + drivers/iio/temperature/max31865.c | 15 +- drivers/input/keyboard/Kconfig | 10 + drivers/input/keyboard/Makefile | 1 + drivers/input/keyboard/matrix_keypad_polled.c | 388 ++++++++++++ drivers/input/touchscreen/goodix.c | 3 +- drivers/misc/dht11.c | 370 ++++++----- drivers/net/can/ls_canfd/Makefile | 18 +- drivers/net/can/ls_canfd/lscanfd_dma.elfbin | Bin 97864 -> 0 bytes .../net/can/ls_canfd/lscanfd_dma.o_shipped | Bin 0 -> 98120 bytes .../net/can/ls_canfd/lscanfd_platform.elfbin | Bin 14336 -> 0 bytes .../can/ls_canfd/lscanfd_platform.o_shipped | Bin 0 -> 13392 bytes drivers/usb/serial/option.c | 33 + drivers/usb/serial/usb_wwan.c | 15 + 33 files changed, 1368 insertions(+), 1719 deletions(-) create mode 100644 arch/loongarch/boot/dts/loongson/ls2k300_g2k03z2_core.dtsi create mode 100644 arch/loongarch/boot/dts/loongson/ls2k300_gongkong_gbkpgk0.dts delete mode 100644 arch/loongarch/boot/dts/loongson/ls2p500_evb.dts delete mode 100644 arch/loongarch/boot/dts/loongson/ls2p500_rsj_mb_v10.dts delete mode 100644 arch/loongarch/configs/loongson_2k1000_i2s_defconfig delete mode 100644 arch/loongarch/configs/loongson_2k1000_xr21_defconfig create mode 100644 drivers/input/keyboard/matrix_keypad_polled.c delete mode 100644 drivers/net/can/ls_canfd/lscanfd_dma.elfbin create mode 100644 drivers/net/can/ls_canfd/lscanfd_dma.o_shipped delete mode 100644 drivers/net/can/ls_canfd/lscanfd_platform.elfbin create mode 100644 drivers/net/can/ls_canfd/lscanfd_platform.o_shipped 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 5030c9691d1e0cb9217d1b27d1ccd68dea3ed576..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97864 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 Y8}*Inr^v>5$8WOy-KGZJLQlj03+*lkHUIzs 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 0000000000000000000000000000000000000000..b08a62d8527ecfa7e93763e0c90ddeda2e775995 GIT binary patch literal 98120 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 literal 0 HcmV?d00001 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 43a227acc0064a1120db32e0260d121f8970f3bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14336 zcmeI3UyNK;9mmhy*~$tPD->ivTw{hQR=D|>+73dZLwco_50P<{I;scMXp^zHMyX8=LEUTpzpm zv*KG%@35TP(9rl2jV;j}r7;>?U+;Uq#Hd$4@E+^;%bz!9_shk;ccIuXJ>qYaYv(u0 z53g^OR~I+RYt@bNH_S%)(Tn}^H_!LWAEP<8neTbeQrTMUmw$BrjS|OOf7etWATLi6 z{{g)k#nj_Fo151>N9`vj3d`H5JR+Reu|8H<9H;U!TF25t-`hq$ero#OYoci{tl#{n ze_pZkDPz3%yeEpx-OShtY>YtLR~E+gF=^m?1}bh*FoeTVAM z!q-it-A?15D)c?p|BhaNC;gLDvZiJFP}qcInz%!8D>66LN$xhqlbIG-iTUy1TpqFk3KhoyRdL#}~2&avQ)<81zB^FGba zJzh1NKis@;9|`!N>t#6UIKU?Wq&y@g>&s3bxYi$W^fx+1rpuOqnLKVxcs?4Kbn zalv(5a2*#sPp|h6^ggfEIlxN}YozDYm ze&lnAOI&ar7hJ~$&(rICLhswGWG8T)&)c1RPG@ohuJiezvtAoR)&;J8g6nmG>wGS% z`H{~dE^)ziTyPy1JWsFl3B6sblOJ%M&t)f{Gmaiy=d_9wXZ39i=#uJhSb z^CO=_T=EI79T!~31<%v( zVROy_z3(utg6sWYyi~~fJeXF~vv8fyG2#68)Qt_U_1hi&4Lq~t0bH*Od~fPva0b`; z-=XG5{)f241=n%GbzJZ~y_*9z3%x&Zo>sth{&$Lhoquqh&)v>?-Pqt-uWWqeo4ouh zoK?tWwcGgP4o99@f1|?}q|O}Il+k%U(ZPI|t)(Y^UZp*?`w4m`C9;71#rxmJ76agz z6VD^yd!0GC3a8{z`MbzE>A7d%hz?kV;Oz0VEj053U=t5`Sh=Px*Y;Cg?~ z)uJfw`AOKWb^KbRk%ZlD<#J<$FEyiv-;8=;lB{%k)Y0nhtGD9%>4~Kzd}t+%>T78b z=Cx?4G0|w(5_;Hcb#2q{B=O16PJH;r*6O}y^3dTM8$R^~_10-Zw!YK|>@e!u=SRKO zlPgPImXVo>FL!&jq{oBF)nMK&d%{_!eNMHxL4u@H=Nn`6^#RxW0{cMkiys)HK z!o!WEc_vJ{`=hY8pDytJRyVMFfGV~e$cM)_!frijc6!Y?Iy@i8adfI1NB;bM{@fk+ z+;zmCi=$o=w_0K1r$L5isIBytaRO^=1F)JtzEL9JlJrwPxfe^{L9t#FSr}o}4}~d0=|B zT=oxDW-9JiM~>U9%HhV$zcw?H)rv;UWXRTvhQ5LyaTNL6T6OHCw&%=)&o!16>Dy|3 z@OLeq!*___PAUsd+}DL4xB7yC?m^*P6bFB$GuWak`{@Y6b>n8yxOYma;2%_Y4#(f? zRPWw#rTWLIC^&aw{JGA@v-Dz)c9kI=zoHlOuiKU}Uyn|Bt? z3m@k^AotfIwmEO$F z&P);wSDU?htQ#bn`)y@3iz;V13v}?Wk@&F8$)@cWEr)w(nQ`3B!<pcl)jG|f5w=WsEvhdkanyVykC|1;RF4mF3Q?XUM#VaSfbVY5Ow*mTN?&LY9Du<+-H<5I= zcea=IQr9ph{o0(R6=HWrpWk_{V(&xb_dO z{eWx#;CXuOA9^2#r3Bah;TQh#w+meR2iJbUwSVwDz4i~i_7AT8<9-zW`F@)ZaP1#l z`vKSf!SnRmKlHwJk)6P`f8-nf;TIfj%ml9efNTHYd3x<1dhH)v`$xXv|9&wFuKj~+ zKj7Lwc%EMShhF;!*Z$!T{+Go+I7-2T`(Et_I_)1kPp|z$ul<8-|M<5Q@ZS=n;1~!0 z;Mxzk_79$?*Z!f`{=v0>=-|I2M!~gzaP0?N`v=d{YyZ%rG;*M={of${@ZXa*xb_dO z{eWx#;CXuOAA0x|I|f|)FDd^|NgG`I2iJbUwSVwDz4i~i_7AT8?^FIS6jA`L{ex>i z;MzZUo?iQhUi$~v{wI}xd@lg5{ex>i;MzZUo?iQhUi$~v{tqbs`2G%D`v=#4z_owy zJiYc0z4i~T{U1{P`FWoYaP1#l`vKSf!SnRmKlHwJk)6P`|Jy}^&mVkW1HLPp!q&jG zA8_p-JWsFvL+|Ir)&8rZgMZ&k0l4-LuKj>(|KNFg?H_vIY(2oW|05z}|L(WB;Mza9 z_5-f{gXihBf9QSjg#ujrKPCeB-yv;q?H^qG0oVS)^Yq$3^gfI$KidDi^t1o%&KPj* zA6)wZ*Z#rt^x8l4zT<_f;M)I!=-_|5w86E1aP0?N`v=d{YyZ&u;sXV^_Mi59kV)wo z-`3Ld{Y|fcw#7qF`kwqAk(R7ab;fdTcPv1hVO`$5nCHWmK25-;-1j)oS>+QQ_}ofc z!`}h(zo{OhR}}&&7iCG4a^ZIp=Q!iikL%CB`!mvDt{QiW6S95dlle=R2k*}qQqa2fb5^I zk@kNVF_yUh_LiDv@>6^^=B2b4oG~8j_!{+$^8dDs$NLr&uvhmuL5)%V-OfBqE? z@sWS}y3xkRI{N=Z?G;^nCa_R;)KzGcxh|69Z|<9|C2HvKDo)cz{!R-Dv&i%N4D1YfNcl;VY*j+e6%k!uu+7atAz9T44)h4h6>ZHRI#= m^cr>jcI~md2OB-70o(h4mKsSu@_o!GP4QN}Z7 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 != 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; }