diff --git a/feeds/ipq807x_v5.4/ath11k-wifi/board-cig-wf660a.bin.IPQ6018 b/feeds/ipq807x_v5.4/ath11k-wifi/board-cig-wf660a.bin.IPQ6018 index e43f9ab4..4744d579 100755 Binary files a/feeds/ipq807x_v5.4/ath11k-wifi/board-cig-wf660a.bin.IPQ6018 and b/feeds/ipq807x_v5.4/ath11k-wifi/board-cig-wf660a.bin.IPQ6018 differ diff --git a/feeds/ipq807x_v5.4/ipq60xx/base-files/etc/board.d/02_network b/feeds/ipq807x_v5.4/ipq60xx/base-files/etc/board.d/02_network index a8ab7646..9232547a 100755 --- a/feeds/ipq807x_v5.4/ipq60xx/base-files/etc/board.d/02_network +++ b/feeds/ipq807x_v5.4/ipq60xx/base-files/etc/board.d/02_network @@ -34,6 +34,10 @@ qcom_setup_interfaces() ucidef_set_interface_lan "eth1" ucidef_set_interface_wan "eth0" ;; + cig,wf660a) + ucidef_set_interface_wan "eth0" + ;; + yuncore,fap650) ucidef_set_interface_lan "eth3 eth2 eth1 eth0" ucidef_set_interface_wan "eth4" @@ -60,7 +64,17 @@ qcom_setup_macs() lan_mac=$(macaddr_add "$wan_mac" 1) ucidef_set_network_device_mac eth0 $wan_mac ucidef_set_network_device_mac eth1 $lan_mac - ucidef_set_label_macaddr $wan_mac + ucidef_set_label_macaddr $wan_mac + ;; + cig,wf660a) + mmc_dev=$(find_mtd_chardev "0:APPSBLENV") + [ -z "$mmc_dev" ] && mmc_dev=$(find_mmc_part "0:APPSBLENV") + [ -z "$mmc_dev" ] && return + mac=$(grep BaseMacAddress= $mmc_dev | cut -dx -f2) + [ -z "$mac" ] && return; + wan_mac=$(macaddr_canonicalize $mac) + ucidef_set_network_device_mac eth0 $wan_mac + ip link set eth0 address $wan_mac ;; yuncore,ax840) wan_mac=$(cat /sys/class/net/eth1/address) diff --git a/feeds/ipq807x_v5.4/ipq60xx/base-files/etc/hotplug.d/firmware/10-ath11k-caldata b/feeds/ipq807x_v5.4/ipq60xx/base-files/etc/hotplug.d/firmware/10-ath11k-caldata index 901a6338..2b8c059c 100755 --- a/feeds/ipq807x_v5.4/ipq60xx/base-files/etc/hotplug.d/firmware/10-ath11k-caldata +++ b/feeds/ipq807x_v5.4/ipq60xx/base-files/etc/hotplug.d/firmware/10-ath11k-caldata @@ -36,6 +36,20 @@ ath11k_generate_macs_ion4x() { echo -ne \\x${wifimac2//:/\\x} >> /lib/firmware/ath11k-macs } +ath11k_generate_macs_wf660a() { + touch /lib/firmware/ath11k-macs + mmc_dev=$(find_mtd_chardev "0:APPSBLENV") + [ -z "$mmc_dev" ] && mmc_dev=$(find_mmc_part "0:APPSBLENV") + [ -n "$mmc_dev" ] && mac=$(grep BaseMacAddress= $mmc_dev | cut -dx -f2) + eth=$(macaddr_canonicalize $mac) + mac1=$(macaddr_add $eth 1) + mac2=$(macaddr_add $eth 2) + mac3=$(macaddr_add $eth 3) + echo -ne \\x${mac1//:/\\x} >> /lib/firmware/ath11k-macs + echo -ne \\x${mac2//:/\\x} >> /lib/firmware/ath11k-macs + echo -ne \\x${mac3//:/\\x} >> /lib/firmware/ath11k-macs +} + caldata_die() { echo "caldata: " "$*" exit 1 @@ -60,6 +74,7 @@ case "$FIRMWARE" in "ath11k/IPQ6018/hw1.0/caldata.bin") case "$board" in cig,wf188n|\ + cig,wf660a|\ edgecore,eap101|\ hfcl,ion4xi|\ hfcl,ion4x|\ @@ -97,6 +112,9 @@ ath11k-macs) cig,wf188n) ath11k_generate_macs ;; + cig,wf660a) + ath11k_generate_macs_wf660a + ;; esac ;; ath11k/IPQ6018/hw1.0/board.bin) diff --git a/feeds/ipq807x_v5.4/ipq60xx/base-files/lib/upgrade/platform.sh b/feeds/ipq807x_v5.4/ipq60xx/base-files/lib/upgrade/platform.sh index a7ba920e..3312eedb 100755 --- a/feeds/ipq807x_v5.4/ipq60xx/base-files/lib/upgrade/platform.sh +++ b/feeds/ipq807x_v5.4/ipq60xx/base-files/lib/upgrade/platform.sh @@ -49,6 +49,52 @@ do_flash_emmc() { tar Oxf $tar_file ${board_dir}/$part | dd of=${emmcblock} } +spi_nor_emmc_do_upgrade_bootconfig() { + local tar_file="$1" + + local board_dir=$(tar tf $tar_file | grep -m 1 '^sysupgrade-.*/$') + board_dir=${board_dir%/} + [ -f /proc/boot_info/getbinary_bootconfig ] || { + echo "bootconfig does not exist" + exit + } + CI_ROOTPART="$(cat /proc/boot_info/rootfs/upgradepartition)" + CI_KERNPART="$(cat /proc/boot_info/0:HLOS/upgradepartition)" + + [ -n "$CI_KERNPART" -a -n "$CI_ROOTPART" ] || { + echo "kernel or rootfs partition is unknown" + exit + } + + local primary="0" + [ "$(cat /proc/boot_info/rootfs/primaryboot)" = "0" ] && primary="1" + echo "$primary" > /proc/boot_info/rootfs/primaryboot 2>/dev/null + echo "$primary" > /proc/boot_info/0:HLOS/primaryboot 2>/dev/null + cp /proc/boot_info/getbinary_bootconfig /tmp/bootconfig + + do_flash_emmc $tar_file $CI_KERNPART $board_dir kernel + do_flash_emmc $tar_file $CI_ROOTPART $board_dir root + + local emmcblock="$(find_mmc_part "rootfs_data")" + if [ -e "$emmcblock" ]; then + mkfs.ext4 -F "$emmcblock" + fi + + for part in "0:BOOTCONFIG" "0:BOOTCONFIG1"; do + local mtdchar=$(echo $(find_mtd_chardev $part) | sed 's/^.\{5\}//') + if [ -n "$mtdchar" ]; then + echo start to update $mtdchar + mtd -qq write /proc/boot_info/getbinary_bootconfig "/dev/${mtdchar}" 2>/dev/null && echo update mtd $mtdchar + else + emmcblock=$(find_mmc_part $part) + echo erase ${emmcblock} + dd if=/dev/zero of=${emmcblock} 2> /dev/null + echo update $emmcblock + dd if=/tmp/bootconfig of=${emmcblock} 2> /dev/null + fi + done +} + emmc_do_upgrade() { local tar_file="$1" @@ -67,6 +113,7 @@ platform_check_image() { local magic_long="$(get_magic_long "$1")" board=$(board_name) case $board in + cig,wf660a|\ cig,wf188n|\ cig,wf194c4|\ cig,wf196|\ @@ -95,6 +142,9 @@ platform_do_upgrade() { board=$(board_name) case $board in + cig,wf660a) + spi_nor_emmc_do_upgrade_bootconfig $1 + ;; cig,wf188n|\ glinet,ax1800|\ glinet,axt1800|\ diff --git a/feeds/ipq807x_v5.4/ipq60xx/files/arch/arm64/boot/dts/qcom/qcom-ipq6018-cig-wf660a.dts b/feeds/ipq807x_v5.4/ipq60xx/files/arch/arm64/boot/dts/qcom/qcom-ipq6018-cig-wf660a.dts new file mode 100755 index 00000000..0ba4eea9 --- /dev/null +++ b/feeds/ipq807x_v5.4/ipq60xx/files/arch/arm64/boot/dts/qcom/qcom-ipq6018-cig-wf660a.dts @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) +/* + * IPQ6018 CP01 board device tree source + * + * Copyright (c) 2019-2021 The Linux Foundation. All rights reserved. + */ + +/dts-v1/; + +#include "qcom-ipq6018-cp01-cig-wf660a.dtsi" + +/ { + model = "Cigtech WF-660a"; + compatible = "cig,wf660a", "qcom,ipq6018-ap-cp01-c1", "qcom,ipq6018-ap-cp01", "qcom,ipq6018"; +}; + +&tlmm { + i2c_1_pins: i2c_1_pins { + mux { + pins = "gpio42", "gpio43"; + function = "blsp2_i2c"; + drive-strength = <8>; + bias-pull-down; + }; + }; +}; + +&i2c_1 { + pinctrl-0 = <&i2c_1_pins>; + pinctrl-names = "default"; + status = "ok"; +}; + +&sdhc_1 { + status = "ok"; +}; + +&sdhc_2 { + status = "disable"; +}; \ No newline at end of file diff --git a/feeds/ipq807x_v5.4/ipq60xx/files/arch/arm64/boot/dts/qcom/qcom-ipq6018-cp01-cig-wf660a.dtsi b/feeds/ipq807x_v5.4/ipq60xx/files/arch/arm64/boot/dts/qcom/qcom-ipq6018-cp01-cig-wf660a.dtsi new file mode 100755 index 00000000..059e7d28 --- /dev/null +++ b/feeds/ipq807x_v5.4/ipq60xx/files/arch/arm64/boot/dts/qcom/qcom-ipq6018-cp01-cig-wf660a.dtsi @@ -0,0 +1,475 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) +/* + * IPQ6018 CP01 board device tree source + * + * Copyright (c) 2019-2021 The Linux Foundation. All rights reserved. + */ + +/dts-v1/; + +#include "ipq6018.dtsi" +#include "ipq6018-cpr-regulator.dtsi" +#include +#include +#include + +/ { + compatible = "cig,wf660a", "qcom,ipq6018-ap-cp01", "qcom,ipq6018"; + + aliases { + serial0 = &blsp1_uart3; + serial1 = &blsp1_uart2; + sdhc1 = &sdhc_1; + /* + * Aliases as required by u-boot + * to patch MAC addresses + */ + ethernet0 = "/soc/dp1"; + ethernet1 = "/soc/dp2"; + ethernet2 = "/soc/dp3"; + ethernet3 = "/soc/dp4"; + ethernet4 = "/soc/dp5"; + }; + + chosen { + stdout-path = "serial0:115200n8"; + bootargs-append = " swiotlb=1"; + }; +}; + +&blsp1_uart2 { + pinctrl-0 = <&hsuart_pins>; + pinctrl-names = "default"; + qca,bt-rfr-fixup; + status = "ok"; +}; + +&blsp1_uart3 { + pinctrl-0 = <&serial_3_pins>; + pinctrl-names = "default"; + status = "ok"; +}; + +&spi_0 { + pinctrl-0 = <&spi_0_pins>; + pinctrl-names = "default"; + cs-select = <0>; + status = "ok"; + + m25p80@0 { + #address-cells = <1>; + #size-cells = <1>; + reg = <0>; + compatible = "n25q128a11"; + linux,modalias = "m25p80", "n25q128a11"; + spi-max-frequency = <50000000>; + use-default-sizes; + }; +}; + +&spi_1 { /* BLSP1 QUP1 */ + pinctrl-0 = <&spi_1_pins>; + pinctrl-names = "default"; + cs-select = <0>; + quartz-reset-gpio = <&tlmm 79 1>; + status = "disabled"; + spidev1: spi@1 { + compatible = "qca,spidev"; + reg = <0>; + spi-max-frequency = <24000000>; + }; +}; + +&i2c_0 { + pinctrl-0 = <&i2c_0_pins>; + pinctrl-names = "default"; + status = "ok"; +}; + +&tlmm { + i2c_0_pins: i2c_0_pins { + mux { + pins = "gpio69", "gpio70"; + function = "blsp1_i2c"; + drive-strength = <8>; + bias-pull-down; + }; + }; + + i2c_1_pins: i2c_1_pins { + mux { + pins = "gpio42", "gpio43"; + function = "blsp2_i2c"; + drive-strength = <8>; + bias-pull-down; + }; + }; + + i2c_4_pins: i2c_4_pins { + mux { + pins = "gpio55", "gpio56"; + function = "blsp4_i2c"; + drive-strength = <8>; + bias-pull-down; + }; + }; + + spi_0_pins: spi-0-pins { + pins = "gpio38", "gpio39", "gpio40", "gpio41"; + function = "blsp0_spi"; + drive-strength = <8>; + bias-pull-down; + }; + + spi_1_pins: spi_1_pins { + mux { + pins = "gpio69", "gpio71", "gpio72"; + function = "blsp1_spi"; + drive-strength = <8>; + bias-pull-down; + }; + spi_cs { + pins = "gpio70"; + function = "blsp1_spi"; + drive-strength = <8>; + bias-disable; + }; + quartz_interrupt { + pins = "gpio78"; + function = "gpio"; + input; + bias-disable; + }; + quartz_reset { + pins = "gpio79"; + function = "gpio"; + output-low; + bias-disable; + }; + + }; + + sd_pins: sd-pinmux { + pins = "gpio62"; + function = "sd_card"; + drive-strength = <8>; + bias-pull-up; + }; + + mdio_pins: mdio_pinmux { + mux_0 { + pins = "gpio64"; + function = "mdc"; + drive-strength = <8>; + bias-pull-up; + }; + mux_1 { + pins = "gpio65"; + function = "mdio"; + drive-strength = <8>; + bias-pull-up; + }; + mux_2 { + pins = "gpio75"; + function = "gpio"; + bias-pull-up; + }; + mux_3 { + pins = "gpio77"; + function = "gpio"; + bias-pull-up; + }; + }; + + pwm_pins: pwm_pinmux { + mux_1 { + pins = "gpio22"; + function = "pwm02"; + drive-strength = <8>; + }; + mux_2 { + pins = "gpio23"; + function = "pwm12"; + drive-strength = <8>; + }; + mux_3 { + pins = "gpio24"; + function = "pwm22"; + drive-strength = <8>; + }; + }; + + hsuart_pins: hsuart_pins { + mux { + pins = "gpio71", "gpio72"; + function = "blsp1_uart"; + drive-strength = <8>; + bias-disable; + }; + }; + + leds_pins: leds_pins { + led_5g { + pins = "gpio35"; + function = "gpio"; + drive-strength = <8>; + bias-pull-down; + }; + led_2g { + pins = "gpio37"; + function = "gpio"; + drive-strength = <8>; + bias-pull-down; + }; + led_usb0 { + pins = "gpio50"; + function = "gpio"; + drive-strength = <8>; + bias-pull-down; + }; + }; + + btcoex_pins: btcoex_pins { + mux_0 { + pins = "gpio51"; + function = "pta1_1"; + drive-strength = <6>; + bias-pull-down; + }; + mux_1 { + pins = "gpio53"; + function = "pta1_0"; + drive-strength = <6>; + bias-pull-down; + }; + mux_2 { + pins = "gpio52"; + function = "pta1_2"; + drive-strength = <6>; + bias-pull-down; + }; + }; +}; + +&soc { + mdio: mdio@90000 { + pinctrl-0 = <&mdio_pins>; + pinctrl-names = "default"; + phy-reset-gpio = <&tlmm 77 0>; + status = "ok"; + phy0: ethernet-phy@0 { + reg = <0>; + }; + phy1: ethernet-phy@1 { + reg = <1>; + }; + phy2: ethernet-phy@2 { + reg = <2>; + }; + phy3: ethernet-phy@3 { + reg = <3>; + }; + phy4: ethernet-phy@4 { + reg = <0x1c>; + }; + }; + + dp1 { + device_type = "network"; + compatible = "qcom,nss-dp"; + qcom,id = <1>; + reg = <0x3a001000 0x200>; + qcom,mactype = <0>; + local-mac-address = [000000000000]; + qcom,link-poll = <1>; + qcom,phy-mdio-addr = <0>; + phy-mode = "sgmii"; + }; + + dp2 { + device_type = "network"; + compatible = "qcom,nss-dp"; + qcom,id = <2>; + reg = <0x3a001200 0x200>; + qcom,mactype = <0>; + local-mac-address = [000000000000]; + qcom,link-poll = <1>; + qcom,phy-mdio-addr = <1>; + phy-mode = "sgmii"; + }; + + dp3 { + device_type = "network"; + compatible = "qcom,nss-dp"; + qcom,id = <3>; + reg = <0x3a001400 0x200>; + qcom,mactype = <0>; + local-mac-address = [000000000000]; + qcom,link-poll = <1>; + qcom,phy-mdio-addr = <2>; + phy-mode = "sgmii"; + }; + + dp4 { + device_type = "network"; + compatible = "qcom,nss-dp"; + qcom,id = <4>; + reg = <0x3a001600 0x200>; + qcom,mactype = <0>; + local-mac-address = [000000000000]; + qcom,link-poll = <1>; + qcom,phy-mdio-addr = <3>; + phy-mode = "sgmii"; + }; + + dp5 { + device_type = "network"; + compatible = "qcom,nss-dp"; + qcom,id = <5>; + reg = <0x3a001800 0x200>; + qcom,mactype = <0>; + local-mac-address = [000000000000]; + qcom,link-poll = <1>; + qcom,phy-mdio-addr = <28>; + phy-mode = "sgmii"; + }; + + i2c_4: i2c@78b9000 { + compatible = "qcom,i2c-qup-v2.2.1"; + #address-cells = <1>; + #size-cells = <0>; + reg = <0x78b9000 0x600>; + interrupts = ; + clocks = <&gcc GCC_BLSP1_AHB_CLK>, + <&gcc GCC_BLSP1_QUP5_I2C_APPS_CLK>; + clock-names = "iface", "core"; + clock-frequency = <100000>; + dmas = <&blsp_dma 21>, <&blsp_dma 20>; + dma-names = "rx", "tx"; + pinctrl-0 = <&i2c_4_pins>; + status = "ok"; + }; + + ess-switch@3a000000 { + switch_cpu_bmp = <0x1>; /* cpu port bitmap */ + switch_lan_bmp = <0x0>; /* lan port bitmap */ + switch_wan_bmp = <0x20>; /* wan port bitmap */ + switch_inner_bmp = <0xc0>; /*inner port bitmap*/ + switch_mac_mode = <0x0>; /* mac mode for uniphy instance0*/ + switch_mac_mode1 = <0xf>; /* mac mode for uniphy instance1*/ + switch_mac_mode2 = <0xff>; /* mac mode for uniphy instance2*/ + qcom,port_phyinfo { + port@0 { + port_id = <1>; + phy_address = <0>; + }; + port@1 { + port_id = <2>; + phy_address = <1>; + }; + port@2 { + port_id = <3>; + phy_address = <2>; + }; + port@3 { + port_id = <4>; + phy_address = <3>; + }; + port@4 { + port_id = <5>; + phy_address = <0x1c>; + port_mac_sel = "QGMAC_PORT"; + }; + }; + }; + + nss-macsec0 { + compatible = "qcom,nss-macsec"; + phy_addr = <0x1c>; + phy_access_mode = <0>; + mdiobus = <&mdio>; + }; + + pwm { + pinctrl-0 = <&pwm_pins>; + pinctrl-names = "default"; + used-pwm-indices = <1>, <1>, <1>, <0>; + dft-pwm-status = <0>, <1>, <0>, <0>; + status = "ok"; + }; + + leds { + compatible = "gpio-leds"; + pinctrl-0 = <&leds_pins>; + pinctrl-names = "default"; + + led@35 { + label = "led_5g"; + gpios = <&tlmm 35 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "led_5g"; + default-state = "off"; + }; + led@37 { + label = "led_2g"; + gpios = <&tlmm 37 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "led_2g"; + default-state = "off"; + }; + led@50 { + label = "led_usb0"; + gpios = <&tlmm 50 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "usb-host"; + default-state = "off"; + }; + }; +}; + +&qpic_bam { + status = "ok"; +}; + +&qpic_nand { + status = "disable"; +}; + +&pcie_phy { + status = "ok"; +}; + +&pcie0 { +#if defined(__CNSS2__) + status = "ok"; +#endif +}; + +&qusb_phy_0 { + status = "ok"; +}; + +&qusb_phy_1 { + status = "ok"; +}; + +&usb2 { + status = "ok"; +}; + +&ssphy_0 { + status = "ok"; +}; + +&usb3 { + status = "ok"; +}; + +&nss_crypto { + status = "ok"; +}; + +&sd_pwrseq { + status = "disable"; +}; + +&ipq6018_l2 { + status = "disable"; +}; diff --git a/feeds/ipq807x_v5.4/ipq60xx/image/ipq60xx.mk b/feeds/ipq807x_v5.4/ipq60xx/image/ipq60xx.mk index bd49c703..585b751f 100644 --- a/feeds/ipq807x_v5.4/ipq60xx/image/ipq60xx.mk +++ b/feeds/ipq807x_v5.4/ipq60xx/image/ipq60xx.mk @@ -2,6 +2,17 @@ KERNEL_LOADADDR := 0x41080000 DEVICE_VARS += CE_TYPE +define Device/cig_wf660a + DEVICE_TITLE := Cigtech WF-660a + DEVICE_DTS := qcom-ipq6018-cig-wf660a + SUPPORTED_DEVICES := cig,wf660a + DEVICE_DTS_CONFIG := config@cp01-c1 + DEVICE_PACKAGES := ath11k-wifi-cig-wf660a uboot-env uboot-envtools + IMAGES := sysupgrade.tar mmc-factory.bin + IMAGE/mmc-factory.bin := append-ubi | qsdk-ipq-factory-mmc +endef +TARGET_DEVICES += cig_wf660a + define Device/cig_wf188n DEVICE_TITLE := Cigtech WF-188n DEVICE_DTS := qcom-ipq6018-cig-wf188n diff --git a/feeds/ipq807x_v5.4/ipq60xx/modules.mk b/feeds/ipq807x_v5.4/ipq60xx/modules.mk index 1d51296d..b75eb702 100644 --- a/feeds/ipq807x_v5.4/ipq60xx/modules.mk +++ b/feeds/ipq807x_v5.4/ipq60xx/modules.mk @@ -77,6 +77,23 @@ endef $(eval $(call KernelPackage,usb-dwc3-qcom-internal)) +define KernelPackage/diag-char + TITLE:=CHAR DIAG + KCONFIG:= CONFIG_DIAG_MHI=y@ge5.4 \ + CONFIG_DIAG_OVER_PCIE=n@ge5.4 \ + CONFIG_DIAGFWD_BRIDGE_CODE=y \ + CONFIG_DIAG_CHAR=m + DEPENDS:=+kmod-lib-crc-ccitt + FILES:=$(LINUX_DIR)/drivers/char/diag/diagchar.ko +endef + +define KernelPackage/diag-char/description + CHAR DIAG +endef + +$(eval $(call KernelPackage,diag-char)) + + define KernelPackage/bootconfig SUBMENU:=Other modules TITLE:=Bootconfig partition for failsafe diff --git a/profiles/cig_wf660a.yml b/profiles/cig_wf660a.yml new file mode 100755 index 00000000..bae5e590 --- /dev/null +++ b/profiles/cig_wf660a.yml @@ -0,0 +1,41 @@ +--- +profile: cig_wf660a +target: ipq60xx +subtarget: generic +description: Build image for the Cigtech WF660a +image: bin/targets/ipq60xx/generic/openwrt-ipq60xx-cig_wf660a-squashfs-sysupgrade.tar +feeds: + - name: ipq807x + path: ../../feeds/ipq807x_v5.4 +packages: + - ipq60xx + - e2fsprogs + - ath11k-fwtest + - ftm + - gpsd + - gpsd-utils + - libgps + - gpsd-clients + - kmod-diag-char + - coreutils + - coreutils-stty +include: + - wifi-ax + - ucentral-ap + +diffconfig: | + CONFIG_PACKAGE_libblkid=y + CONFIG_PACKAGE_libext2fs=y + CONFIG_PACKAGE_libuuid=y + CONFIG_PACKAGE_libcomerr=y + CONFIG_PACKAGE_libss=y + CONFIG_PACKAGE_i2c-tools=y + CONFIG_PACKAGE_libi2c=y + CONFIG_PACKAGE_coreutils=y + CONFIG_PACKAGE_coreutils-stty=y + CONFIG_PACKAGE_kmod-i2c-core=y + CONFIG_PACKAGE_gpsd=y + CONFIG_PACKAGE_gpsd-utils=y + CONFIG_PACKAGE_libgps=y + CONFIG_PACKAGE_gpsd-clients=y + CONFIG_PACKAGE_kmod-diag-char=y