[PATCH v2 2/2] usb: gadget: Add CDC ACM function

Pali Rohár pali at kernel.org
Mon Nov 22 16:48:10 CET 2021


Hello! I have just few notes, see below.

> diff --git a/drivers/usb/gadget/Makefile b/drivers/usb/gadget/Makefile
> index f560068..d5d891b 100644
> --- a/drivers/usb/gadget/Makefile
> +++ b/drivers/usb/gadget/Makefile
> @@ -30,6 +30,7 @@ obj-$(CONFIG_USB_FUNCTION_MASS_STORAGE) += f_mass_storage.o
>  obj-$(CONFIG_USB_FUNCTION_FASTBOOT) += f_fastboot.o
>  obj-$(CONFIG_USB_FUNCTION_SDP) += f_sdp.o
>  obj-$(CONFIG_USB_FUNCTION_ROCKUSB) += f_rockusb.o
> +obj-$(CONFIG_USB_FUNCTION_ACM)	+= f_acm.o
>  endif
>  endif
>  ifdef CONFIG_USB_ETHER
> diff --git a/drivers/usb/gadget/f_acm.c b/drivers/usb/gadget/f_acm.c
> new file mode 100644
> index 0000000..3ea3b4a
> --- /dev/null
> +++ b/drivers/usb/gadget/f_acm.c
...
> +static struct usb_cdc_header_desc acm_header_desc = {
> +	.bLength =		sizeof(acm_header_desc),
> +	.bDescriptorType =	USB_DT_CS_INTERFACE,
> +	.bDescriptorSubType =	USB_CDC_HEADER_TYPE,
> +	.bcdCDC =		cpu_to_le16(0x0110),

This is global structure initialization. So should not it use
__constant_cpu_to_le16() macro instead of cpu_to_le16()? I guess that on
armel or x86 is cpu_to_le16() just identity macro, but on big endian
systems it is needed to use constant initialization. Other gadget
drivers are using those __constant_cpu* macros.

> +};
...
> +int drv_usb_acm_stdio_init(void)
> +{
> +	struct stdio_dev stdio;
> +
> +	strcpy(stdio.name, "stdio_acm");

Just suggestion: What about "usbacm" or just "acm"?

> +	stdio.flags = DEV_FLAGS_INPUT | DEV_FLAGS_OUTPUT;
> +	stdio.tstc = acm_stdio_tstc;
> +	stdio.getc = acm_stdio_getc;
> +	stdio.putc = acm_stdio_putc;
> +	stdio.puts = acm_stdio_puts;
> +	stdio.start = acm_stdio_start;
> +	stdio.stop = acm_stdio_stop;
> +	stdio.priv = NULL;
> +	stdio.ext = 0;
> +
> +	return stdio_register(&stdio);
> +}
> diff --git a/include/stdio_dev.h b/include/stdio_dev.h
> index 8fb9a12..d584793 100644
> --- a/include/stdio_dev.h
> +++ b/include/stdio_dev.h
> @@ -103,6 +103,7 @@ int drv_lcd_init(void);
>  int drv_video_init(void);
>  int drv_keyboard_init(void);
>  int drv_usbtty_init(void);
> +int drv_usb_acm_stdio_init(void);

Other functions do not have stdio in name too. So what about shorting
it? E.g. just drv_usbacm_init()?

>  int drv_nc_init(void);
>  int drv_jtag_console_init(void);
>  int cbmemc_init(void);
> -- 
> 2.7.4
> 


More information about the U-Boot mailing list