15 Commits

Author SHA1 Message Date
1503b03c01 [Mod] 优化 compile_command.json 文件过滤 2024-12-31 23:17:26 +08:00
29c2a9e10a [Stop] BOS 结构不适合插入 0xEE 描述符
[详细说明]
1. 不应修改BOS,BOS 是多个 DeviceCaps 的集合;
2. 未见Windows驱动发起 Get Descriptor 0xEE的请求;
2024-12-25 18:40:53 +08:00
b02f79e095 [Mod] 新增忽略 patch 文件 2024-12-25 14:45:52 +08:00
12dbf26ada [Mod] Linux USB Gadget 支持WinUSB免驱
[详细说明]
1. 新增 调试宏:CONFIG_GAOYANG;
2. 开启 调试宏:DEBUG,打印USB控制器寄存器信息
2024-12-24 22:24:15 +08:00
5721f88ac8 [Mod] 更新.gitignore 忽略文件 2024-12-24 16:45:10 +08:00
1ef0139a35 it is very important to check OUTPUT_DIR
Signed-off-by: carbon <carbon@milkv.io>
2024-08-13 20:16:42 +08:00
5ebe86a2e1 duo256m and duos use their own loadsystemko.sh
Signed-off-by: carbon <carbon@milkv.io>
2024-08-13 19:54:24 +08:00
92987fe512 kernel: support usb sound card audio
Signed-off-by: carbon <carbon@milkv.io>
2024-08-12 19:22:06 +08:00
2ce96adacd add parted,i2c-tools,spi-tools,c-periphery
Signed-off-by: carbon <carbon@milkv.io>
2024-08-09 17:10:20 +08:00
b7f88865a7 enable sophgo-library for duo256m and duos
Signed-off-by: carbon <carbon@milkv.io>
2024-08-08 21:18:53 +08:00
b96fd78ebe buildroot: add sophgo-library package
Signed-off-by: carbon <carbon@milkv.io>
2024-08-08 21:17:14 +08:00
61be427409 use mke2fs instead of genext2fs for genimage
When genimage makes an SD card image, it uses genext2fs
by default to create the rootfs partition.
However, starting from commit 4618c08e2, the creation fails.
Use mke2fs instead.

Signed-off-by: carbon <carbon@milkv.io>
2024-08-08 20:11:04 +08:00
fa4a1ca8f5 add 3rd lib dir to profile
Signed-off-by: carbon <carbon@milkv.io>
2024-08-08 16:03:02 +08:00
de86827e25 duo256m and duos support wiringx
Signed-off-by: carbon <carbon@milkv.io>
2024-08-07 21:40:29 +08:00
32edff0b7c buildroot add duo-wiringx package
Signed-off-by: carbon <carbon@milkv.io>
2024-08-07 21:39:50 +08:00
32 changed files with 268 additions and 20 deletions

21
.gitignore vendored
View File

@ -1,22 +1,25 @@
install/
out/
host-tools
host-tools/
tags
.svim
.DS_Store
compile_commands*.json
*~
*.swp
*.swo
*.bak
*.rej
.DS_Store
*.patch
tags
.tags*
cscope.*
ncscope.*
.svim
out/
install/
host-tools/
.vscode/
.cache/
__pycache__
.vscode

View File

@ -81,7 +81,11 @@ function prepare_env()
source build/${MV_BUILD_ENV} > /dev/null 2>&1
defconfig ${MV_BOARD_LINK} > /dev/null 2>&1
echo "OUTPUT_DIR: ${OUTPUT_DIR}" # @build/milkvsetup.sh
echo "OUTPUT_DIR: ${OUTPUT_DIR}" # @build/envsetup_milkv.sh
if [ -z "${OUTPUT_DIR// }" ]; then
print_err "OUTPUT_DIR is not assigned, please check!"
exit 1
fi
if [ "${STORAGE_TYPE}" == "sd" ]; then
MILKV_IMAGE_CONFIG=device/${MILKV_BOARD}/genimage.cfg

View File

@ -152,7 +152,7 @@ CONFIG_SND=y
# CONFIG_SND_PROC_FS is not set
# CONFIG_SND_DRIVERS is not set
# CONFIG_SND_SPI is not set
# CONFIG_SND_USB is not set
CONFIG_SND_USB_AUDIO=y
CONFIG_SND_SOC=y
CONFIG_SND_SOC_CV182XA_CV182XAADC=y
CONFIG_SND_SOC_CV182XA_CV182XADAC=y

View File

@ -150,7 +150,7 @@ CONFIG_SND=y
# CONFIG_SND_PROC_FS is not set
# CONFIG_SND_DRIVERS is not set
# CONFIG_SND_SPI is not set
# CONFIG_SND_USB is not set
CONFIG_SND_USB_AUDIO=y
CONFIG_SND_SOC=y
CONFIG_SND_SOC_CV182XA_CV182XAADC=y
CONFIG_SND_SOC_CV182XA_CV182XADAC=y

View File

@ -161,7 +161,7 @@ CONFIG_SND=y
# CONFIG_SND_PROC_FS is not set
# CONFIG_SND_DRIVERS is not set
# CONFIG_SND_SPI is not set
# CONFIG_SND_USB is not set
CONFIG_SND_USB_AUDIO=y
CONFIG_SND_SOC=y
CONFIG_SND_SOC_CV182XA_CV182XAADC=y
CONFIG_SND_SOC_CV182XA_CV182XADAC=y

View File

@ -160,7 +160,7 @@ CONFIG_SND=y
# CONFIG_SND_PROC_FS is not set
# CONFIG_SND_DRIVERS is not set
# CONFIG_SND_SPI is not set
# CONFIG_SND_USB is not set
CONFIG_SND_USB_AUDIO=y
CONFIG_SND_SOC=y
CONFIG_SND_SOC_CV182XA_CV182XAADC=y
CONFIG_SND_SOC_CV182XA_CV182XADAC=y

View File

@ -143,7 +143,7 @@ CONFIG_SND=y
# CONFIG_SND_PROC_FS is not set
# CONFIG_SND_DRIVERS is not set
# CONFIG_SND_SPI is not set
# CONFIG_SND_USB is not set
CONFIG_SND_USB_AUDIO=y
CONFIG_SND_SOC=y
CONFIG_SND_SOC_CV182XA_CV182XAADC=y
CONFIG_SND_SOC_CV182XA_CV182XADAC=y

View File

@ -153,7 +153,7 @@ CONFIG_SND=y
# CONFIG_SND_PROC_FS is not set
# CONFIG_SND_DRIVERS is not set
# CONFIG_SND_SPI is not set
# CONFIG_SND_USB is not set
CONFIG_SND_USB_AUDIO=y
CONFIG_SND_SOC=y
CONFIG_SND_SOC_CV182XA_CV182XAADC=y
CONFIG_SND_SOC_CV182XA_CV182XADAC=y

View File

@ -36,6 +36,9 @@ BR2_PACKAGE_TREE=y
BR2_PACKAGE_E2FSPROGS=y
BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y
BR2_PACKAGE_EVTEST=y
BR2_PACKAGE_I2C_TOOLS=y
BR2_PACKAGE_PARTED=y
BR2_PACKAGE_SPI_TOOLS=y
BR2_PACKAGE_PYTHON3=y
BR2_PACKAGE_PYTHON3_PY_PYC=y
BR2_PACKAGE_PYTHON3_BZIP2=y
@ -47,6 +50,7 @@ BR2_PACKAGE_PYTHON_REQUESTS=y
BR2_PACKAGE_CA_CERTIFICATES=y
BR2_PACKAGE_LIBOPENSSL_BIN=y
BR2_PACKAGE_LIBOPENSSL_ENGINES=y
BR2_PACKAGE_C_PERIPHERY=y
BR2_PACKAGE_LIBUSB=y
BR2_PACKAGE_LIBUSB_EXAMPLES=y
BR2_PACKAGE_JSON_C=y
@ -70,6 +74,8 @@ BR2_PACKAGE_CVI_PINMUX=y
BR2_PACKAGE_CVI_PINMUX_SG200X=y
BR2_PACKAGE_DUO_PINMUX=y
BR2_PACKAGE_DUO_PINMUX_DUO256M=y
BR2_PACKAGE_DUO_WIRINGX=y
BR2_PACKAGE_SOPHGO_LIBRARY=y
BR2_PACKAGE_COREUTILS=y
BR2_PACKAGE_HTOP=y
BR2_PACKAGE_KMOD=y

View File

@ -36,6 +36,9 @@ BR2_PACKAGE_TREE=y
BR2_PACKAGE_E2FSPROGS=y
BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y
BR2_PACKAGE_EVTEST=y
BR2_PACKAGE_I2C_TOOLS=y
BR2_PACKAGE_PARTED=y
BR2_PACKAGE_SPI_TOOLS=y
BR2_PACKAGE_PYTHON3=y
BR2_PACKAGE_PYTHON3_PY_PYC=y
BR2_PACKAGE_PYTHON3_BZIP2=y
@ -48,6 +51,7 @@ BR2_PACKAGE_PYTHON_REQUESTS=y
BR2_PACKAGE_CA_CERTIFICATES=y
BR2_PACKAGE_LIBOPENSSL_BIN=y
BR2_PACKAGE_LIBOPENSSL_ENGINES=y
BR2_PACKAGE_C_PERIPHERY=y
BR2_PACKAGE_LIBUSB=y
BR2_PACKAGE_LIBUSB_EXAMPLES=y
BR2_PACKAGE_JSON_C=y
@ -71,6 +75,8 @@ BR2_PACKAGE_CVI_PINMUX=y
BR2_PACKAGE_CVI_PINMUX_SG200X=y
BR2_PACKAGE_DUO_PINMUX=y
BR2_PACKAGE_DUO_PINMUX_DUO256M=y
BR2_PACKAGE_DUO_WIRINGX=y
BR2_PACKAGE_SOPHGO_LIBRARY=y
BR2_PACKAGE_COREUTILS=y
BR2_PACKAGE_HTOP=y
BR2_PACKAGE_KMOD=y

View File

@ -36,6 +36,9 @@ BR2_PACKAGE_TREE=y
BR2_PACKAGE_E2FSPROGS=y
BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y
BR2_PACKAGE_EVTEST=y
BR2_PACKAGE_I2C_TOOLS=y
BR2_PACKAGE_PARTED=y
BR2_PACKAGE_SPI_TOOLS=y
BR2_PACKAGE_PYTHON3=y
BR2_PACKAGE_PYTHON3_PY_PYC=y
BR2_PACKAGE_PYTHON3_BZIP2=y
@ -47,6 +50,7 @@ BR2_PACKAGE_PYTHON_REQUESTS=y
BR2_PACKAGE_CA_CERTIFICATES=y
BR2_PACKAGE_LIBOPENSSL_BIN=y
BR2_PACKAGE_LIBOPENSSL_ENGINES=y
BR2_PACKAGE_C_PERIPHERY=y
BR2_PACKAGE_LIBUSB=y
BR2_PACKAGE_LIBUSB_EXAMPLES=y
BR2_PACKAGE_JSON_C=y
@ -76,6 +80,8 @@ BR2_PACKAGE_CVI_PINMUX=y
BR2_PACKAGE_CVI_PINMUX_SG200X=y
BR2_PACKAGE_DUO_PINMUX=y
BR2_PACKAGE_DUO_PINMUX_DUOS=y
BR2_PACKAGE_DUO_WIRINGX=y
BR2_PACKAGE_SOPHGO_LIBRARY=y
BR2_PACKAGE_COREUTILS=y
BR2_PACKAGE_HTOP=y
BR2_PACKAGE_KMOD=y

View File

@ -36,6 +36,9 @@ BR2_PACKAGE_TREE=y
BR2_PACKAGE_E2FSPROGS=y
BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y
BR2_PACKAGE_EVTEST=y
BR2_PACKAGE_I2C_TOOLS=y
BR2_PACKAGE_PARTED=y
BR2_PACKAGE_SPI_TOOLS=y
BR2_PACKAGE_PYTHON3=y
BR2_PACKAGE_PYTHON3_PY_PYC=y
BR2_PACKAGE_PYTHON3_BZIP2=y
@ -47,6 +50,7 @@ BR2_PACKAGE_PYTHON_REQUESTS=y
BR2_PACKAGE_CA_CERTIFICATES=y
BR2_PACKAGE_LIBOPENSSL_BIN=y
BR2_PACKAGE_LIBOPENSSL_ENGINES=y
BR2_PACKAGE_C_PERIPHERY=y
BR2_PACKAGE_LIBUSB=y
BR2_PACKAGE_LIBUSB_EXAMPLES=y
BR2_PACKAGE_JSON_C=y
@ -76,6 +80,8 @@ BR2_PACKAGE_CVI_PINMUX=y
BR2_PACKAGE_CVI_PINMUX_SG200X=y
BR2_PACKAGE_DUO_PINMUX=y
BR2_PACKAGE_DUO_PINMUX_DUOS=y
BR2_PACKAGE_DUO_WIRINGX=y
BR2_PACKAGE_SOPHGO_LIBRARY=y
BR2_PACKAGE_COREUTILS=y
BR2_PACKAGE_HTOP=y
BR2_PACKAGE_KMOD=y

View File

@ -36,6 +36,9 @@ BR2_PACKAGE_TREE=y
BR2_PACKAGE_E2FSPROGS=y
BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y
BR2_PACKAGE_EVTEST=y
BR2_PACKAGE_I2C_TOOLS=y
BR2_PACKAGE_PARTED=y
BR2_PACKAGE_SPI_TOOLS=y
BR2_PACKAGE_PYTHON3=y
BR2_PACKAGE_PYTHON3_PY_PYC=y
BR2_PACKAGE_PYTHON3_BZIP2=y
@ -48,6 +51,7 @@ BR2_PACKAGE_PYTHON_REQUESTS=y
BR2_PACKAGE_CA_CERTIFICATES=y
BR2_PACKAGE_LIBOPENSSL_BIN=y
BR2_PACKAGE_LIBOPENSSL_ENGINES=y
BR2_PACKAGE_C_PERIPHERY=y
BR2_PACKAGE_LIBUSB=y
BR2_PACKAGE_LIBUSB_EXAMPLES=y
BR2_PACKAGE_JSON_C=y
@ -77,6 +81,8 @@ BR2_PACKAGE_CVI_PINMUX=y
BR2_PACKAGE_CVI_PINMUX_SG200X=y
BR2_PACKAGE_DUO_PINMUX=y
BR2_PACKAGE_DUO_PINMUX_DUOS=y
BR2_PACKAGE_DUO_WIRINGX=y
BR2_PACKAGE_SOPHGO_LIBRARY=y
BR2_PACKAGE_COREUTILS=y
BR2_PACKAGE_HTOP=y
BR2_PACKAGE_KMOD=y

View File

@ -36,6 +36,9 @@ BR2_PACKAGE_TREE=y
BR2_PACKAGE_E2FSPROGS=y
BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y
BR2_PACKAGE_EVTEST=y
BR2_PACKAGE_I2C_TOOLS=y
BR2_PACKAGE_PARTED=y
BR2_PACKAGE_SPI_TOOLS=y
BR2_PACKAGE_PYTHON3=y
BR2_PACKAGE_PYTHON3_PY_PYC=y
BR2_PACKAGE_PYTHON3_BZIP2=y
@ -48,6 +51,7 @@ BR2_PACKAGE_PYTHON_REQUESTS=y
BR2_PACKAGE_CA_CERTIFICATES=y
BR2_PACKAGE_LIBOPENSSL_BIN=y
BR2_PACKAGE_LIBOPENSSL_ENGINES=y
BR2_PACKAGE_C_PERIPHERY=y
BR2_PACKAGE_LIBUSB=y
BR2_PACKAGE_LIBUSB_EXAMPLES=y
BR2_PACKAGE_JSON_C=y
@ -77,6 +81,8 @@ BR2_PACKAGE_CVI_PINMUX=y
BR2_PACKAGE_CVI_PINMUX_SG200X=y
BR2_PACKAGE_DUO_PINMUX=y
BR2_PACKAGE_DUO_PINMUX_DUOS=y
BR2_PACKAGE_DUO_WIRINGX=y
BR2_PACKAGE_SOPHGO_LIBRARY=y
BR2_PACKAGE_COREUTILS=y
BR2_PACKAGE_HTOP=y
BR2_PACKAGE_KMOD=y

View File

@ -2712,6 +2712,8 @@ endmenu
menu "Sophgo packages"
source "package/cvi-pinmux/Config.in"
source "package/duo-pinmux/Config.in"
source "package/duo-wiringx/Config.in"
source "package/sophgo-library/Config.in"
endmenu
menu "System tools"

View File

@ -0,0 +1,26 @@
From 027658db506ccc0097ad9c1d2cd4f7c9d8210edb Mon Sep 17 00:00:00 2001
From: carbon <carbon@milkv.io>
Date: Wed, 17 Apr 2024 15:09:26 +0800
Subject: [PATCH] fix time_t
---
src/wiringx.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/src/wiringx.c b/src/wiringx.c
index 034674a..4171a75 100644
--- a/src/wiringx.c
+++ b/src/wiringx.c
@@ -113,6 +113,9 @@ static struct spi_t spi[2] = {
} while(0)
#endif
+typedef time_t __time_t;
+typedef suseconds_t __suseconds_t;
+
/* Both the delayMicroseconds and the delayMicrosecondsHard
are taken from wiringPi */
static void delayMicrosecondsHard(unsigned int howLong) {
--
2.25.1

View File

@ -0,0 +1,6 @@
config BR2_PACKAGE_DUO_WIRINGX
bool "wiringX"
help
wiringX for Milk-V Duo series
https://github.com/milkv-duo/duo-wiringx

View File

@ -0,0 +1,4 @@
# From https://github.com/milkv-duo/duo-wiringx
sha256 1e2ef2d87fa7b24e84e52464f77ac54b96c0854fb3ead66541b411552ca6256e duo-wiringx-1.0.2.tar.gz
# Locally calculated
sha256 fab3dd6bdab226f1c08630b1dd917e11fcb4ec5e1e020e2c16f83a0a13863e85 LICENSE

View File

@ -0,0 +1,7 @@
DUO_WIRINGX_VERSION = 1.0.2
DUO_WIRINGX_SITE = $(call github,milkv-duo,duo-wiringx,$(DUO_WIRINGX_VERSION))
DUO_WIRINGX_LICENSE = MPL-2.0
DUO_WIRINGX_LICENSE_FILES = COPYING
DUO_WIRINGX_INSTALL_STAGING = YES
$(eval $(cmake-package))

View File

@ -0,0 +1,5 @@
config BR2_PACKAGE_SOPHGO_LIBRARY
bool "sophgo library"
depends on BR2_aarch64 || BR2_RISCV_64
help
Some library files provided by Sophgo.

View File

@ -0,0 +1 @@
sha256 fff9781ee598761c72dbd75f5d51f1b74b9d5546eb33ba891710ae70e1e84a07 sophgo-library-1.0.0.tar.gz

View File

@ -0,0 +1,30 @@
SOPHGO_LIBRARY_VERSION = 1.0.0
SOPHGO_LIBRARY_SITE = $(call github,milkv-duo,sophgo-library,$(SOPHGO_LIBRARY_VERSION))
SOPHGO_LIBRARY_INSTALL_STAGING = YES
ifeq ($(BR2_aarch64),y)
ifeq ($(BR2_TOOLCHAIN_USES_GLIBC),y)
SOPHGO_LIB_DIR = glibc_arm64
else ifeq ($(BR2_TOOLCHAIN_USES_MUSL),y)
SOPHGO_LIB_DIR = musl_arm64
endif
else ifeq ($(BR2_RISCV_64),y)
ifeq ($(BR2_TOOLCHAIN_USES_GLIBC),y)
SOPHGO_LIB_DIR = glibc_riscv64
else ifeq ($(BR2_TOOLCHAIN_USES_MUSL),y)
SOPHGO_LIB_DIR = musl_riscv64
endif
else
SOPHGO_LIB_DIR = $(BR2_ARCH)
endif
define SOPHGO_LIBRARY_INSTALL_STAGING_CMDS
cp -a $(@D)/$(SOPHGO_LIB_DIR)/lib/* $(STAGING_DIR)/usr/lib/
endef
define SOPHGO_LIBRARY_INSTALL_TARGET_CMDS
$(Q)mkdir -p $(TARGET_DIR)/mnt/system/lib
cp -a $(@D)/$(SOPHGO_LIB_DIR)/lib/* $(TARGET_DIR)/mnt/system/lib/
endef
$(eval $(generic-package))

View File

@ -1,5 +1,5 @@
export PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/mnt/system/usr/bin:/mnt/system/usr/sbin"
export LD_LIBRARY_PATH="/mnt/system/lib:/mnt/system/usr/lib"
export LD_LIBRARY_PATH="/mnt/system/lib:/mnt/system/usr/lib:/mnt/system/usr/lib/3rd"
if [ "$PS1" ]; then
if [ "`id -u`" -eq 0 ]; then

View File

@ -0,0 +1,37 @@
#!/bin/sh
${CVI_SHOPTS}
#
# Start to insert kernel modules
#
insmod /mnt/system/ko/cv181x_sys.ko
insmod /mnt/system/ko/cv181x_base.ko
insmod /mnt/system/ko/cv181x_rtos_cmdqu.ko
insmod /mnt/system/ko/cv181x_fast_image.ko
insmod /mnt/system/ko/cvi_mipi_rx.ko
insmod /mnt/system/ko/snsr_i2c.ko
insmod /mnt/system/ko/cv181x_vi.ko
insmod /mnt/system/ko/cv181x_vpss.ko
insmod /mnt/system/ko/cv181x_dwa.ko
insmod /mnt/system/ko/cv181x_vo.ko
insmod /mnt/system/ko/cv181x_mipi_tx.ko
insmod /mnt/system/ko/cv181x_rgn.ko
#insmod /mnt/system/ko/cv181x_wdt.ko
insmod /mnt/system/ko/cv181x_clock_cooling.ko
insmod /mnt/system/ko/cv181x_tpu.ko
insmod /mnt/system/ko/cv181x_vcodec.ko
insmod /mnt/system/ko/cv181x_jpeg.ko
insmod /mnt/system/ko/cvi_vc_driver.ko MaxVencChnNum=9 MaxVdecChnNum=9
#insmod /mnt/system/ko/cv181x_rtc.ko
insmod /mnt/system/ko/cv181x_ive.ko
#insmod /mnt/system/ko/3rd/gt9xx.ko
echo 3 > /proc/sys/vm/drop_caches
dmesg -n 4
#usb hub control
#/etc/uhubon.sh host
exit $?

View File

@ -12,6 +12,7 @@ image boot.vfat {
image rootfs.ext4 {
ext4 {
label = "rootfs"
use-mke2fs = true
}
size = 768M
}

View File

@ -12,6 +12,7 @@ image boot.vfat {
image rootfs.ext4 {
ext4 {
label = "rootfs"
use-mke2fs = true
}
size = 768M
}

View File

@ -12,6 +12,7 @@ image boot.vfat {
image rootfs.ext4 {
ext4 {
label = "rootfs"
use-mke2fs = true
}
size = 768M
}

View File

@ -12,6 +12,7 @@ image boot.vfat {
image rootfs.ext4 {
ext4 {
label = "rootfs"
use-mke2fs = true
}
size = 768M
}

View File

@ -66,3 +66,5 @@ obj-$(CONFIG_USBIP_CORE) += usbip/
obj-$(CONFIG_TYPEC) += typec/
obj-$(CONFIG_USB_ROLE_SWITCH) += roles/
subdir-ccflags-y += -DDEBUG -DCONFIG_GAOYANG

View File

@ -7,6 +7,7 @@
/* #define VERBOSE_DEBUG */
#include "linux/types.h"
#include <linux/kallsyms.h>
#include <linux/kernel.h>
#include <linux/slab.h>
@ -664,6 +665,58 @@ static int bos_desc(struct usb_composite_dev *cdev)
struct usb_ext_cap_descriptor *usb_ext;
struct usb_dcd_config_params dcd_config_params;
struct usb_bos_descriptor *bos = cdev->req->buf;
#if defined (CONFIG_GAOYANG)
#if defined (CONFIG_GAOYANG_WCID20)
/* WCID20 device capability descriptor */
#define USB_CAP_TYPE_WCID 5
#define USB_CAP_WCID_SIZE 0x1C
#define WINUSB20_WCID_VENDOR_CODE 0x00
#define WINUSB20_WCID_DESC_SET_SIZE 162
struct usb_cap_wcid20_descriptor {
__u8 bLength;
__u8 bDescriptorType;
__u8 bDevCapabilityType;
__u8 bReserved ;
__u8 bPlatformCapabilityUUID_16[16];
__u32 dwWindowsVersion;
__le32 wDescriptorSetTotalLength;
__u8 bVendorCode;
__u8 bAltEnumCode;
} __attribute__((packed));
char winusb20_wcidbos_uuid[] = {
0xdf, 0x60, 0xdd, 0xd8, 0x89, 0x45, 0xc7, 0x4c,
0x9c, 0xd2, 0x65, 0x9d, 0x9e, 0x64, 0x8a, 0x9f,
};
uint32_t winusb20_wcidbos_version = 0x06030000;
struct usb_cap_wcid20_descriptor *usb_cap_wcid;
#endif // !defined (CONFIG_GAOYANG_WCID20)
/* WCID10 device capability descriptor */
#define USB_OS_SIZE 0x12
#define USB_DT_OS USB_DT_STRING
#define WCID_VENDOR_CODE 0x00
struct usb_cap_wcid10_descriptor {
__u8 bLength;
__u8 bDescriptorType;
__u16 MicrosoftString[7];
__u8 bVendorCode;
union {
__u8 bPad;
__u8 bFlags;
};
} __attribute__((packed));
uint8_t os_string[] = {
0x4D, 0x00, 0x53, 0x00, 0x46, 0x00, 0x54,
0x00, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00
};
struct usb_cap_wcid10_descriptor *usb_os = cdev->req->buf;
#endif // defined (CONFIG_GAOYANG)
unsigned int besl = 0;
bos->bLength = USB_DT_BOS_SIZE;
@ -671,6 +724,15 @@ static int bos_desc(struct usb_composite_dev *cdev)
bos->wTotalLength = cpu_to_le16(USB_DT_BOS_SIZE);
bos->bNumDeviceCaps = 0;
#if defined (CONFIG_GAOYANG)
usb_os->bLength = USB_OS_SIZE;
usb_os->bDescriptorType = USB_DT_OS;
usb_os->bVendorCode = WCID_VENDOR_CODE;
memcpy(usb_os->MicrosoftString, os_string, sizeof(os_string));
bos->wTotalLength = cpu_to_le16(USB_OS_SIZE);
bos->bNumDeviceCaps = 0;
#endif // defined (CONFIG_GAOYANG_WCID20)
/* Get Controller configuration */
if (cdev->gadget->ops->get_config_params) {
@ -694,7 +756,6 @@ static int bos_desc(struct usb_composite_dev *cdev)
if (dcd_config_params.besl_deep != USB_DEFAULT_BESL_UNSPECIFIED)
besl |= USB_BESL_DEEP_VALID |
USB_SET_BESL_DEEP(dcd_config_params.besl_deep);
/*
* A SuperSpeed device shall include the USB2.0 extension descriptor
* and shall support LPM when operating in USB2.0 HS mode.
@ -708,6 +769,21 @@ static int bos_desc(struct usb_composite_dev *cdev)
usb_ext->bmAttributes = cpu_to_le32(USB_LPM_SUPPORT |
USB_BESL_SUPPORT | besl);
#if defined (CONFIG_GAOYANG)
#if defined (CONFIG_GAOYANG_WCID20)
usb_cap_wcid = cdev->req->buf + le16_to_cpu(bos->wTotalLength);
le16_add_cpu(&bos->wTotalLength, USB_CAP_WCID_SIZE);
bos->bNumDeviceCaps++;
usb_cap_wcid->bLength = USB_CAP_WCID_SIZE;
usb_cap_wcid->bDescriptorType = USB_DT_DEVICE_CAPABILITY;
usb_cap_wcid->bDevCapabilityType = USB_CAP_TYPE_WCID;
usb_cap_wcid->dwWindowsVersion = winusb20_wcidbos_version;
usb_cap_wcid->wDescriptorSetTotalLength = cpu_to_le32(WINUSB20_WCID_DESC_SET_SIZE);
usb_cap_wcid->bVendorCode = WINUSB20_WCID_VENDOR_CODE;
memcpy(usb_cap_wcid->bPlatformCapabilityUUID_16, winusb20_wcidbos_uuid, sizeof(winusb20_wcidbos_uuid));
#endif // !defined (CONFIG_GAOYANG_WCID20)
#endif // defined (CONFIG_GAOYANG)
/*
* The Superspeed USB Capability descriptor shall be implemented by all
* SuperSpeed devices.
@ -1685,7 +1761,7 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
if (gadget->lpm_capable)
cdev->desc.bcdUSB = cpu_to_le16(0x0201);
else
cdev->desc.bcdUSB = cpu_to_le16(0x0200);
cdev->desc.bcdUSB = cpu_to_le16(0x0201);
}
value = min(w_length, (u16) sizeof cdev->desc);
@ -1716,11 +1792,16 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
value = min(w_length, (u16) value);
break;
case USB_DT_BOS:
#if !defined (CONFIG_GAOYANG)
if (gadget_is_superspeed(gadget) ||
gadget->lpm_capable) {
value = bos_desc(cdev);
value = min(w_length, (u16) value);
}
#else
value = bos_desc(cdev);
value = min(w_length, (u16) value);
#endif // defined (CONFIG_GAOYANG)
break;
case USB_DT_OTG:
if (gadget_is_otg(gadget)) {