STR_AS_OUT_IF_ALT1,
STR_AS_IN_IF_ALT0,
STR_AS_IN_IF_ALT1,
+ NUM_STR_DESCRIPTORS,
};
-static struct usb_string strings_uac1[] = {
- /* [STR_AC_IF].s = DYNAMIC, */
- [STR_USB_OUT_IT].s = "Playback Input terminal",
- [STR_USB_OUT_IT_CH_NAMES].s = "Playback Channels",
- [STR_IO_OUT_OT].s = "Playback Output terminal",
- [STR_IO_IN_IT].s = "Capture Input terminal",
- [STR_IO_IN_IT_CH_NAMES].s = "Capture Channels",
- [STR_USB_IN_OT].s = "Capture Output terminal",
- [STR_FU_IN].s = "Capture Volume",
- [STR_FU_OUT].s = "Playback Volume",
- [STR_AS_OUT_IF_ALT0].s = "Playback Inactive",
- [STR_AS_OUT_IF_ALT1].s = "Playback Active",
- [STR_AS_IN_IF_ALT0].s = "Capture Inactive",
- [STR_AS_IN_IF_ALT1].s = "Capture Active",
- { },
-};
+static struct usb_string strings_uac1[NUM_STR_DESCRIPTORS + 1] = {};
static struct usb_gadget_strings str_uac1 = {
.language = 0x0409, /* en-us */
strings_uac1[STR_AC_IF].s = audio_opts->function_name;
+ strings_uac1[STR_USB_OUT_IT].s = audio_opts->p_it_name;
+ strings_uac1[STR_USB_OUT_IT_CH_NAMES].s = audio_opts->p_it_ch_name;
+ strings_uac1[STR_IO_OUT_OT].s = audio_opts->p_ot_name;
+ strings_uac1[STR_FU_OUT].s = audio_opts->p_fu_name;
+ strings_uac1[STR_AS_OUT_IF_ALT0].s = audio_opts->p_alt0_name;
+ strings_uac1[STR_AS_OUT_IF_ALT1].s = audio_opts->p_alt1_name;
+
+ strings_uac1[STR_IO_IN_IT].s = audio_opts->c_it_name;
+ strings_uac1[STR_IO_IN_IT_CH_NAMES].s = audio_opts->c_it_ch_name;
+ strings_uac1[STR_USB_IN_OT].s = audio_opts->c_ot_name;
+ strings_uac1[STR_FU_IN].s = audio_opts->c_fu_name;
+ strings_uac1[STR_AS_IN_IF_ALT0].s = audio_opts->c_alt0_name;
+ strings_uac1[STR_AS_IN_IF_ALT1].s = audio_opts->c_alt1_name;
+
us = usb_gstrings_attach(cdev, uac1_strings, ARRAY_SIZE(strings_uac1));
if (IS_ERR(us))
return PTR_ERR(us);
UAC1_ATTRIBUTE(s16, c_volume_min);
UAC1_ATTRIBUTE(s16, c_volume_max);
UAC1_ATTRIBUTE(s16, c_volume_res);
+
UAC1_ATTRIBUTE_STRING(function_name);
+UAC1_ATTRIBUTE_STRING(p_it_name);
+UAC1_ATTRIBUTE_STRING(p_it_ch_name);
+UAC1_ATTRIBUTE_STRING(p_ot_name);
+UAC1_ATTRIBUTE_STRING(p_fu_name);
+UAC1_ATTRIBUTE_STRING(p_alt0_name);
+UAC1_ATTRIBUTE_STRING(p_alt1_name);
+
+UAC1_ATTRIBUTE_STRING(c_it_name);
+UAC1_ATTRIBUTE_STRING(c_it_ch_name);
+UAC1_ATTRIBUTE_STRING(c_ot_name);
+UAC1_ATTRIBUTE_STRING(c_fu_name);
+UAC1_ATTRIBUTE_STRING(c_alt0_name);
+UAC1_ATTRIBUTE_STRING(c_alt1_name);
+
static struct configfs_attribute *f_uac1_attrs[] = {
&f_uac1_opts_attr_c_chmask,
&f_uac1_opts_attr_c_srate,
&f_uac1_opts_attr_function_name,
+ &f_uac1_opts_attr_p_it_name,
+ &f_uac1_opts_attr_p_it_ch_name,
+ &f_uac1_opts_attr_p_ot_name,
+ &f_uac1_opts_attr_p_fu_name,
+ &f_uac1_opts_attr_p_alt0_name,
+ &f_uac1_opts_attr_p_alt1_name,
+
+ &f_uac1_opts_attr_c_it_name,
+ &f_uac1_opts_attr_c_it_ch_name,
+ &f_uac1_opts_attr_c_ot_name,
+ &f_uac1_opts_attr_c_fu_name,
+ &f_uac1_opts_attr_c_alt0_name,
+ &f_uac1_opts_attr_c_alt1_name,
+
NULL,
};
scnprintf(opts->function_name, sizeof(opts->function_name), "AC Interface");
+ scnprintf(opts->p_it_name, sizeof(opts->p_it_name), "Playback Input terminal");
+ scnprintf(opts->p_it_ch_name, sizeof(opts->p_it_ch_name), "Playback Channels");
+ scnprintf(opts->p_ot_name, sizeof(opts->p_ot_name), "Playback Output terminal");
+ scnprintf(opts->p_fu_name, sizeof(opts->p_fu_name), "Playback Volume");
+ scnprintf(opts->p_alt0_name, sizeof(opts->p_alt0_name), "Playback Inactive");
+ scnprintf(opts->p_alt1_name, sizeof(opts->p_alt1_name), "Playback Active");
+
+ scnprintf(opts->c_it_name, sizeof(opts->c_it_name), "Capture Input terminal");
+ scnprintf(opts->c_it_ch_name, sizeof(opts->c_it_ch_name), "Capture Channels");
+ scnprintf(opts->c_ot_name, sizeof(opts->c_ot_name), "Capture Output terminal");
+ scnprintf(opts->c_fu_name, sizeof(opts->c_fu_name), "Capture Volume");
+ scnprintf(opts->c_alt0_name, sizeof(opts->c_alt0_name), "Capture Inactive");
+ scnprintf(opts->c_alt1_name, sizeof(opts->c_alt1_name), "Capture Active");
+
return &opts->func_inst;
}