diff mbox series

[v2,2/2] usb: gadget: f_uac2: Populate SS descriptors' wBytesPerInterval

Message ID 20210909082651.11912-3-jackp@codeaurora.org (mailing list archive)
State Superseded
Headers show
Series usb: gadget: f_uac2: Fixes for SuperSpeed | expand

Commit Message

Jack Pham Sept. 9, 2021, 8:26 a.m. UTC
For Isochronous endpoints, the SS companion descriptor's
wBytesPerInterval field is required to reserve bus time in order
to transmit the required payload during the service interval.
If left at 0, the UAC2 function is unable to transact data on its
playback or capture endpoints in SuperSpeed mode.

Since f_uac2 currently does not support any bursting this value can
be exactly equal to the calculated wMaxPacketSize.

Tested with Windows 10 as a host.

Fixes: f8cb3d556be3 ("usb: f_uac2: adds support for SS and SSP")
Signed-off-by: Jack Pham <jackp@codeaurora.org>
---
v2: New patch

 drivers/usb/gadget/function/f_uac2.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

kernel test robot Sept. 9, 2021, 5:08 p.m. UTC | #1
Hi Jack,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on usb/usb-testing]
[also build test ERROR on peter.chen-usb/for-usb-next linus/master next-20210909]
[cannot apply to v5.14]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Jack-Pham/usb-gadget-f_uac2-Fixes-for-SuperSpeed/20210909-162955
base:   https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing
config: i386-randconfig-a016-20210908 (attached as .config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 261cbe98c38f8c1ee1a482fe76511110e790f58a)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/0day-ci/linux/commit/f262014b234c389fc10439b7c11aa10ea84270f6
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Jack-Pham/usb-gadget-f_uac2-Fixes-for-SuperSpeed/20210909-162955
        git checkout f262014b234c389fc10439b7c11aa10ea84270f6
        # save the attached .config to linux build tree
        mkdir build_dir
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross O=build_dir ARCH=i386 SHELL=/bin/bash

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

>> drivers/usb/gadget/function/f_uac2.c:1181:19: error: member reference type 'struct usb_ss_ep_comp_descriptor' is not a pointer; did you mean to use '.'?
           ss_epin_desc_comp->wBytesPerInterval = ss_epin_desc->wMaxPacketSize;
           ~~~~~~~~~~~~~~~~~^~
                            .
>> drivers/usb/gadget/function/f_uac2.c:1181:53: error: member reference type 'struct usb_endpoint_descriptor' is not a pointer; did you mean to use '.'?
           ss_epin_desc_comp->wBytesPerInterval = ss_epin_desc->wMaxPacketSize;
                                                  ~~~~~~~~~~~~^~
                                                              .
>> drivers/usb/gadget/function/f_uac2.c:1181:39: error: expression is not assignable
           ss_epin_desc_comp->wBytesPerInterval = ss_epin_desc->wMaxPacketSize;
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^
   drivers/usb/gadget/function/f_uac2.c:1182:20: error: member reference type 'struct usb_ss_ep_comp_descriptor' is not a pointer; did you mean to use '.'?
           ss_epout_desc_comp->wBytesPerInterval = ss_epout_desc->wMaxPacketSize;
           ~~~~~~~~~~~~~~~~~~^~
                             .
   drivers/usb/gadget/function/f_uac2.c:1182:55: error: member reference type 'struct usb_endpoint_descriptor' is not a pointer; did you mean to use '.'?
           ss_epout_desc_comp->wBytesPerInterval = ss_epout_desc->wMaxPacketSize;
                                                   ~~~~~~~~~~~~~^~
                                                                .
   drivers/usb/gadget/function/f_uac2.c:1182:40: error: expression is not assignable
           ss_epout_desc_comp->wBytesPerInterval = ss_epout_desc->wMaxPacketSize;
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^
   6 errors generated.


vim +1181 drivers/usb/gadget/function/f_uac2.c

   939	
   940	static int
   941	afunc_bind(struct usb_configuration *cfg, struct usb_function *fn)
   942	{
   943		struct f_uac2 *uac2 = func_to_uac2(fn);
   944		struct g_audio *agdev = func_to_g_audio(fn);
   945		struct usb_composite_dev *cdev = cfg->cdev;
   946		struct usb_gadget *gadget = cdev->gadget;
   947		struct device *dev = &gadget->dev;
   948		struct f_uac2_opts *uac2_opts = g_audio_to_uac2_opts(agdev);
   949		struct usb_string *us;
   950		int ret;
   951	
   952		ret = afunc_validate_opts(agdev, dev);
   953		if (ret)
   954			return ret;
   955	
   956		us = usb_gstrings_attach(cdev, fn_strings, ARRAY_SIZE(strings_fn));
   957		if (IS_ERR(us))
   958			return PTR_ERR(us);
   959	
   960		if (FUOUT_EN(uac2_opts)) {
   961			out_feature_unit_desc = build_fu_desc(uac2_opts->c_chmask);
   962			if (!out_feature_unit_desc)
   963				return -ENOMEM;
   964		}
   965		if (FUIN_EN(uac2_opts)) {
   966			in_feature_unit_desc = build_fu_desc(uac2_opts->p_chmask);
   967			if (!in_feature_unit_desc) {
   968				ret = -ENOMEM;
   969				goto err_free_fu;
   970			}
   971		}
   972	
   973		iad_desc.iFunction = us[STR_ASSOC].id;
   974		std_ac_if_desc.iInterface = us[STR_IF_CTRL].id;
   975		in_clk_src_desc.iClockSource = us[STR_CLKSRC_IN].id;
   976		out_clk_src_desc.iClockSource = us[STR_CLKSRC_OUT].id;
   977		usb_out_it_desc.iTerminal = us[STR_USB_IT].id;
   978		io_in_it_desc.iTerminal = us[STR_IO_IT].id;
   979		usb_in_ot_desc.iTerminal = us[STR_USB_OT].id;
   980		io_out_ot_desc.iTerminal = us[STR_IO_OT].id;
   981		std_as_out_if0_desc.iInterface = us[STR_AS_OUT_ALT0].id;
   982		std_as_out_if1_desc.iInterface = us[STR_AS_OUT_ALT1].id;
   983		std_as_in_if0_desc.iInterface = us[STR_AS_IN_ALT0].id;
   984		std_as_in_if1_desc.iInterface = us[STR_AS_IN_ALT1].id;
   985	
   986		if (FUOUT_EN(uac2_opts)) {
   987			u8 *i_feature = (u8 *)out_feature_unit_desc +
   988					out_feature_unit_desc->bLength - 1;
   989			*i_feature = us[STR_FU_OUT].id;
   990		}
   991		if (FUIN_EN(uac2_opts)) {
   992			u8 *i_feature = (u8 *)in_feature_unit_desc +
   993					in_feature_unit_desc->bLength - 1;
   994			*i_feature = us[STR_FU_IN].id;
   995		}
   996	
   997	
   998		/* Initialize the configurable parameters */
   999		usb_out_it_desc.bNrChannels = num_channels(uac2_opts->c_chmask);
  1000		usb_out_it_desc.bmChannelConfig = cpu_to_le32(uac2_opts->c_chmask);
  1001		io_in_it_desc.bNrChannels = num_channels(uac2_opts->p_chmask);
  1002		io_in_it_desc.bmChannelConfig = cpu_to_le32(uac2_opts->p_chmask);
  1003		as_out_hdr_desc.bNrChannels = num_channels(uac2_opts->c_chmask);
  1004		as_out_hdr_desc.bmChannelConfig = cpu_to_le32(uac2_opts->c_chmask);
  1005		as_in_hdr_desc.bNrChannels = num_channels(uac2_opts->p_chmask);
  1006		as_in_hdr_desc.bmChannelConfig = cpu_to_le32(uac2_opts->p_chmask);
  1007		as_out_fmt1_desc.bSubslotSize = uac2_opts->c_ssize;
  1008		as_out_fmt1_desc.bBitResolution = uac2_opts->c_ssize * 8;
  1009		as_in_fmt1_desc.bSubslotSize = uac2_opts->p_ssize;
  1010		as_in_fmt1_desc.bBitResolution = uac2_opts->p_ssize * 8;
  1011		if (FUOUT_EN(uac2_opts)) {
  1012			__le32 *bma = (__le32 *)&out_feature_unit_desc->bmaControls[0];
  1013			u32 control = 0;
  1014	
  1015			if (uac2_opts->c_mute_present)
  1016				control |= CONTROL_RDWR << FU_MUTE_CTRL;
  1017			if (uac2_opts->c_volume_present)
  1018				control |= CONTROL_RDWR << FU_VOL_CTRL;
  1019			*bma = cpu_to_le32(control);
  1020		}
  1021		if (FUIN_EN(uac2_opts)) {
  1022			__le32 *bma = (__le32 *)&in_feature_unit_desc->bmaControls[0];
  1023			u32 control = 0;
  1024	
  1025			if (uac2_opts->p_mute_present)
  1026				control |= CONTROL_RDWR << FU_MUTE_CTRL;
  1027			if (uac2_opts->p_volume_present)
  1028				control |= CONTROL_RDWR << FU_VOL_CTRL;
  1029			*bma = cpu_to_le32(control);
  1030		}
  1031	
  1032		snprintf(clksrc_in, sizeof(clksrc_in), "%uHz", uac2_opts->p_srate);
  1033		snprintf(clksrc_out, sizeof(clksrc_out), "%uHz", uac2_opts->c_srate);
  1034	
  1035		ret = usb_interface_id(cfg, fn);
  1036		if (ret < 0) {
  1037			dev_err(dev, "%s:%d Error!\n", __func__, __LINE__);
  1038			goto err_free_fu;
  1039		}
  1040		iad_desc.bFirstInterface = ret;
  1041	
  1042		std_ac_if_desc.bInterfaceNumber = ret;
  1043		uac2->ac_intf = ret;
  1044		uac2->ac_alt = 0;
  1045	
  1046		if (EPOUT_EN(uac2_opts)) {
  1047			ret = usb_interface_id(cfg, fn);
  1048			if (ret < 0) {
  1049				dev_err(dev, "%s:%d Error!\n", __func__, __LINE__);
  1050				goto err_free_fu;
  1051			}
  1052			std_as_out_if0_desc.bInterfaceNumber = ret;
  1053			std_as_out_if1_desc.bInterfaceNumber = ret;
  1054			uac2->as_out_intf = ret;
  1055			uac2->as_out_alt = 0;
  1056	
  1057			if (EPOUT_FBACK_IN_EN(uac2_opts)) {
  1058				fs_epout_desc.bmAttributes =
  1059				  USB_ENDPOINT_XFER_ISOC | USB_ENDPOINT_SYNC_ASYNC;
  1060				hs_epout_desc.bmAttributes =
  1061				  USB_ENDPOINT_XFER_ISOC | USB_ENDPOINT_SYNC_ASYNC;
  1062				ss_epout_desc.bmAttributes =
  1063				  USB_ENDPOINT_XFER_ISOC | USB_ENDPOINT_SYNC_ASYNC;
  1064				std_as_out_if1_desc.bNumEndpoints++;
  1065			} else {
  1066				fs_epout_desc.bmAttributes =
  1067				  USB_ENDPOINT_XFER_ISOC | USB_ENDPOINT_SYNC_ADAPTIVE;
  1068				hs_epout_desc.bmAttributes =
  1069				  USB_ENDPOINT_XFER_ISOC | USB_ENDPOINT_SYNC_ADAPTIVE;
  1070				ss_epout_desc.bmAttributes =
  1071				  USB_ENDPOINT_XFER_ISOC | USB_ENDPOINT_SYNC_ADAPTIVE;
  1072			}
  1073		}
  1074	
  1075		if (EPIN_EN(uac2_opts)) {
  1076			ret = usb_interface_id(cfg, fn);
  1077			if (ret < 0) {
  1078				dev_err(dev, "%s:%d Error!\n", __func__, __LINE__);
  1079				goto err_free_fu;
  1080			}
  1081			std_as_in_if0_desc.bInterfaceNumber = ret;
  1082			std_as_in_if1_desc.bInterfaceNumber = ret;
  1083			uac2->as_in_intf = ret;
  1084			uac2->as_in_alt = 0;
  1085		}
  1086	
  1087		if (FUOUT_EN(uac2_opts) || FUIN_EN(uac2_opts)) {
  1088			uac2->int_ep = usb_ep_autoconfig(gadget, &fs_ep_int_desc);
  1089			if (!uac2->int_ep) {
  1090				dev_err(dev, "%s:%d Error!\n", __func__, __LINE__);
  1091				ret = -ENODEV;
  1092				goto err_free_fu;
  1093			}
  1094	
  1095			std_ac_if_desc.bNumEndpoints = 1;
  1096		}
  1097	
  1098		/* Calculate wMaxPacketSize according to audio bandwidth */
  1099		ret = set_ep_max_packet_size(uac2_opts, &fs_epin_desc, USB_SPEED_FULL,
  1100					     true);
  1101		if (ret < 0) {
  1102			dev_err(dev, "%s:%d Error!\n", __func__, __LINE__);
  1103			return ret;
  1104		}
  1105	
  1106		ret = set_ep_max_packet_size(uac2_opts, &fs_epout_desc, USB_SPEED_FULL,
  1107					     false);
  1108		if (ret < 0) {
  1109			dev_err(dev, "%s:%d Error!\n", __func__, __LINE__);
  1110			return ret;
  1111		}
  1112	
  1113		ret = set_ep_max_packet_size(uac2_opts, &hs_epin_desc, USB_SPEED_HIGH,
  1114					     true);
  1115		if (ret < 0) {
  1116			dev_err(dev, "%s:%d Error!\n", __func__, __LINE__);
  1117			return ret;
  1118		}
  1119	
  1120		ret = set_ep_max_packet_size(uac2_opts, &hs_epout_desc, USB_SPEED_HIGH,
  1121					     false);
  1122		if (ret < 0) {
  1123			dev_err(dev, "%s:%d Error!\n", __func__, __LINE__);
  1124			return ret;
  1125		}
  1126	
  1127		ret = set_ep_max_packet_size(uac2_opts, &ss_epin_desc, USB_SPEED_SUPER,
  1128					     true);
  1129		if (ret < 0) {
  1130			dev_err(dev, "%s:%d Error!\n", __func__, __LINE__);
  1131			return ret;
  1132		}
  1133	
  1134		ret = set_ep_max_packet_size(uac2_opts, &ss_epout_desc, USB_SPEED_SUPER,
  1135					     false);
  1136		if (ret < 0) {
  1137			dev_err(dev, "%s:%d Error!\n", __func__, __LINE__);
  1138			return ret;
  1139		}
  1140	
  1141		if (EPOUT_EN(uac2_opts)) {
  1142			agdev->out_ep = usb_ep_autoconfig(gadget, &fs_epout_desc);
  1143			if (!agdev->out_ep) {
  1144				dev_err(dev, "%s:%d Error!\n", __func__, __LINE__);
  1145				ret = -ENODEV;
  1146				goto err_free_fu;
  1147			}
  1148			if (EPOUT_FBACK_IN_EN(uac2_opts)) {
  1149				agdev->in_ep_fback = usb_ep_autoconfig(gadget,
  1150							       &fs_epin_fback_desc);
  1151				if (!agdev->in_ep_fback) {
  1152					dev_err(dev, "%s:%d Error!\n",
  1153						__func__, __LINE__);
  1154					ret = -ENODEV;
  1155					goto err_free_fu;
  1156				}
  1157			}
  1158		}
  1159	
  1160		if (EPIN_EN(uac2_opts)) {
  1161			agdev->in_ep = usb_ep_autoconfig(gadget, &fs_epin_desc);
  1162			if (!agdev->in_ep) {
  1163				dev_err(dev, "%s:%d Error!\n", __func__, __LINE__);
  1164				ret = -ENODEV;
  1165				goto err_free_fu;
  1166			}
  1167		}
  1168	
  1169		agdev->in_ep_maxpsize = max_t(u16,
  1170					le16_to_cpu(fs_epin_desc.wMaxPacketSize),
  1171					le16_to_cpu(hs_epin_desc.wMaxPacketSize));
  1172		agdev->out_ep_maxpsize = max_t(u16,
  1173					le16_to_cpu(fs_epout_desc.wMaxPacketSize),
  1174					le16_to_cpu(hs_epout_desc.wMaxPacketSize));
  1175	
  1176		agdev->in_ep_maxpsize = max_t(u16, agdev->in_ep_maxpsize,
  1177					le16_to_cpu(ss_epin_desc.wMaxPacketSize));
  1178		agdev->out_ep_maxpsize = max_t(u16, agdev->out_ep_maxpsize,
  1179					le16_to_cpu(ss_epout_desc.wMaxPacketSize));
  1180	
> 1181		ss_epin_desc_comp->wBytesPerInterval = ss_epin_desc->wMaxPacketSize;
  1182		ss_epout_desc_comp->wBytesPerInterval = ss_epout_desc->wMaxPacketSize;
  1183	
  1184		// HS and SS endpoint addresses are copied from autoconfigured FS descriptors
  1185		hs_ep_int_desc.bEndpointAddress = fs_ep_int_desc.bEndpointAddress;
  1186		hs_epout_desc.bEndpointAddress = fs_epout_desc.bEndpointAddress;
  1187		hs_epin_fback_desc.bEndpointAddress = fs_epin_fback_desc.bEndpointAddress;
  1188		hs_epin_desc.bEndpointAddress = fs_epin_desc.bEndpointAddress;
  1189		ss_epout_desc.bEndpointAddress = fs_epout_desc.bEndpointAddress;
  1190		ss_epin_fback_desc.bEndpointAddress = fs_epin_fback_desc.bEndpointAddress;
  1191		ss_epin_desc.bEndpointAddress = fs_epin_desc.bEndpointAddress;
  1192		ss_ep_int_desc.bEndpointAddress = fs_ep_int_desc.bEndpointAddress;
  1193	
  1194		setup_descriptor(uac2_opts);
  1195	
  1196		ret = usb_assign_descriptors(fn, fs_audio_desc, hs_audio_desc, ss_audio_desc,
  1197					     ss_audio_desc);
  1198		if (ret)
  1199			goto err_free_fu;
  1200	
  1201		agdev->gadget = gadget;
  1202	
  1203		agdev->params.p_chmask = uac2_opts->p_chmask;
  1204		agdev->params.p_srate = uac2_opts->p_srate;
  1205		agdev->params.p_ssize = uac2_opts->p_ssize;
  1206		if (FUIN_EN(uac2_opts)) {
  1207			agdev->params.p_fu.id = USB_IN_FU_ID;
  1208			agdev->params.p_fu.mute_present = uac2_opts->p_mute_present;
  1209			agdev->params.p_fu.volume_present = uac2_opts->p_volume_present;
  1210			agdev->params.p_fu.volume_min = uac2_opts->p_volume_min;
  1211			agdev->params.p_fu.volume_max = uac2_opts->p_volume_max;
  1212			agdev->params.p_fu.volume_res = uac2_opts->p_volume_res;
  1213		}
  1214		agdev->params.c_chmask = uac2_opts->c_chmask;
  1215		agdev->params.c_srate = uac2_opts->c_srate;
  1216		agdev->params.c_ssize = uac2_opts->c_ssize;
  1217		if (FUOUT_EN(uac2_opts)) {
  1218			agdev->params.c_fu.id = USB_OUT_FU_ID;
  1219			agdev->params.c_fu.mute_present = uac2_opts->c_mute_present;
  1220			agdev->params.c_fu.volume_present = uac2_opts->c_volume_present;
  1221			agdev->params.c_fu.volume_min = uac2_opts->c_volume_min;
  1222			agdev->params.c_fu.volume_max = uac2_opts->c_volume_max;
  1223			agdev->params.c_fu.volume_res = uac2_opts->c_volume_res;
  1224		}
  1225		agdev->params.req_number = uac2_opts->req_number;
  1226		agdev->params.fb_max = uac2_opts->fb_max;
  1227	
  1228		if (FUOUT_EN(uac2_opts) || FUIN_EN(uac2_opts))
  1229	    agdev->notify = afunc_notify;
  1230	
  1231		ret = g_audio_setup(agdev, "UAC2 PCM", "UAC2_Gadget");
  1232		if (ret)
  1233			goto err_free_descs;
  1234	
  1235		return 0;
  1236	
  1237	err_free_descs:
  1238		usb_free_all_descriptors(fn);
  1239		agdev->gadget = NULL;
  1240	err_free_fu:
  1241		kfree(out_feature_unit_desc);
  1242		out_feature_unit_desc = NULL;
  1243		kfree(in_feature_unit_desc);
  1244		in_feature_unit_desc = NULL;
  1245		return ret;
  1246	}
  1247	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
Jack Pham Sept. 9, 2021, 5:40 p.m. UTC | #2
On Fri, Sep 10, 2021 at 01:08:02AM +0800, kernel test robot wrote:
> Hi Jack,
> 
> Thank you for the patch! Yet something to improve:
> 
> [auto build test ERROR on usb/usb-testing]
> [also build test ERROR on peter.chen-usb/for-usb-next linus/master next-20210909]
> [cannot apply to v5.14]
> [If your patch is applied to the wrong git tree, kindly drop us a note.
> And when submitting patch, we suggest to use '--base' as documented in
> https://git-scm.com/docs/git-format-patch]
> 
> url:    https://github.com/0day-ci/linux/commits/Jack-Pham/usb-gadget-f_uac2-Fixes-for-SuperSpeed/20210909-162955
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing
> config: i386-randconfig-a016-20210908 (attached as .config)
> compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 261cbe98c38f8c1ee1a482fe76511110e790f58a)
> reproduce (this is a W=1 build):
>         wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
>         chmod +x ~/bin/make.cross
>         # https://github.com/0day-ci/linux/commit/f262014b234c389fc10439b7c11aa10ea84270f6
>         git remote add linux-review https://github.com/0day-ci/linux
>         git fetch --no-tags linux-review Jack-Pham/usb-gadget-f_uac2-Fixes-for-SuperSpeed/20210909-162955
>         git checkout f262014b234c389fc10439b7c11aa10ea84270f6
>         # save the attached .config to linux build tree
>         mkdir build_dir
>         COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross O=build_dir ARCH=i386 SHELL=/bin/bash
> 
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@intel.com>
> 
> All errors (new ones prefixed by >>):
> 
> >> drivers/usb/gadget/function/f_uac2.c:1181:19: error: member reference type 'struct usb_ss_ep_comp_descriptor' is not a pointer; did you mean to use '.'?
>            ss_epin_desc_comp->wBytesPerInterval = ss_epin_desc->wMaxPacketSize;
>            ~~~~~~~~~~~~~~~~~^~
>                             .
> >> drivers/usb/gadget/function/f_uac2.c:1181:53: error: member reference type 'struct usb_endpoint_descriptor' is not a pointer; did you mean to use '.'?
>            ss_epin_desc_comp->wBytesPerInterval = ss_epin_desc->wMaxPacketSize;
>                                                   ~~~~~~~~~~~~^~
>                                                               .
> >> drivers/usb/gadget/function/f_uac2.c:1181:39: error: expression is not assignable
>            ss_epin_desc_comp->wBytesPerInterval = ss_epin_desc->wMaxPacketSize;
>            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^
>    drivers/usb/gadget/function/f_uac2.c:1182:20: error: member reference type 'struct usb_ss_ep_comp_descriptor' is not a pointer; did you mean to use '.'?
>            ss_epout_desc_comp->wBytesPerInterval = ss_epout_desc->wMaxPacketSize;
>            ~~~~~~~~~~~~~~~~~~^~
>                              .
>    drivers/usb/gadget/function/f_uac2.c:1182:55: error: member reference type 'struct usb_endpoint_descriptor' is not a pointer; did you mean to use '.'?
>            ss_epout_desc_comp->wBytesPerInterval = ss_epout_desc->wMaxPacketSize;
>                                                    ~~~~~~~~~~~~~^~
>                                                                 .
>    drivers/usb/gadget/function/f_uac2.c:1182:40: error: expression is not assignable
>            ss_epout_desc_comp->wBytesPerInterval = ss_epout_desc->wMaxPacketSize;
>            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^
>    6 errors generated.

DOH! Was wondering why this was working for me but failed to realize I
was still loading an older build that had previous changes.

Sorry for the noise!! V3 coming very soon.

Jack
diff mbox series

Patch

diff --git a/drivers/usb/gadget/function/f_uac2.c b/drivers/usb/gadget/function/f_uac2.c
index d89c1ebb07f4..33d60b926bae 100644
--- a/drivers/usb/gadget/function/f_uac2.c
+++ b/drivers/usb/gadget/function/f_uac2.c
@@ -1178,6 +1178,9 @@  afunc_bind(struct usb_configuration *cfg, struct usb_function *fn)
 	agdev->out_ep_maxpsize = max_t(u16, agdev->out_ep_maxpsize,
 				le16_to_cpu(ss_epout_desc.wMaxPacketSize));
 
+	ss_epin_desc_comp->wBytesPerInterval = ss_epin_desc->wMaxPacketSize;
+	ss_epout_desc_comp->wBytesPerInterval = ss_epout_desc->wMaxPacketSize;
+
 	// HS and SS endpoint addresses are copied from autoconfigured FS descriptors
 	hs_ep_int_desc.bEndpointAddress = fs_ep_int_desc.bEndpointAddress;
 	hs_epout_desc.bEndpointAddress = fs_epout_desc.bEndpointAddress;