static int add_jack_kctl(struct hda_codec *codec, hda_nid_t nid, const struct auto_pin_cfg *cfg, const char *base_name) { unsigned int def_conf, conn; char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; int idx, err; bool phantom_jack; if (!nid) return 0; def_conf = snd_hda_codec_get_pincfg(codec, nid); conn = get_defcfg_connect(def_conf); if (conn == AC_JACK_PORT_NONE) return 0; phantom_jack = (conn != AC_JACK_PORT_COMPLEX) || !is_jack_detectable(codec, nid); if (base_name) { strlcpy(name, base_name, sizeof(name)); idx = 0; } else snd_hda_get_pin_label(codec, nid, cfg, name, sizeof(name), &idx); if (phantom_jack) /* Example final name: "Internal Mic Phantom Jack" */ strncat(name, " Phantom", sizeof(name) - strlen(name) - 1); idx = get_unique_index(codec, name, idx); err = __snd_hda_jack_add_kctl(codec, nid, name, idx, phantom_jack); if (err < 0) return err; if (!phantom_jack) return snd_hda_jack_detect_enable(codec, nid); return 0; }
static void append_driver_list_table(const char *header, std::string &dirname, util::core_file &indexfile, const summary_file *listhead, std::string &tempheader, std::string &tempfooter) { const summary_file *curfile, *prevfile; int width = 100 / (2 + list_count); int listnum; /* output a header */ indexfile.printf("\t<h2>%s</h2>\n", header); /* start the table */ indexfile.printf("\t<p><table width=\"90%%\">\n"); indexfile.printf("\t\t<tr>\n\t\t\t<th width=\"%d%%\">Source</th><th width=\"%d%%\">Driver</th>", width, width); for (listnum = 0; listnum < list_count; listnum++) indexfile.printf("<th width=\"%d%%\">%s</th>", width, lists[listnum].version); indexfile.printf("\n\t\t</tr>\n"); /* if nothing, print a default message */ if (listhead == nullptr) { indexfile.printf("\t\t<tr>\n\t\t\t"); indexfile.printf("<td colspan=\"%d\" align=\"center\">(No regressions detected)</td>", list_count + 2); indexfile.printf("\n\t\t</tr>\n"); } /* iterate over files */ for (prevfile = nullptr, curfile = listhead; curfile != nullptr; prevfile = curfile, curfile = curfile->next) { int rowspan = 0, uniqueshots = 0; char pngdiffname[40]; /* if this is the first entry in this source file, count how many rows we need to span */ if (prevfile == nullptr || strcmp(prevfile->source, curfile->source) != 0) { const summary_file *cur; for (cur = curfile; cur != nullptr; cur = cur->next) if (strcmp(cur->source, curfile->source) == 0) rowspan++; else break; } /* create screenshots if necessary */ pngdiffname[0] = 0; for (listnum = 0; listnum < list_count; listnum++) if (curfile->matchbitmap[listnum] == listnum) uniqueshots++; if (uniqueshots > 1) { sprintf(pngdiffname, "compare_%s.png", curfile->name); if (generate_png_diff(curfile, dirname, pngdiffname) != 0) pngdiffname[0] = 0; } /* create a linked file */ create_linked_file(dirname, curfile, prevfile, curfile->next, (pngdiffname[0] == 0) ? nullptr : pngdiffname, tempheader, tempfooter); /* create a row */ indexfile.printf("\t\t<tr>\n\t\t\t"); if (rowspan > 0) indexfile.printf("<td rowspan=\"%d\">%s</td>", rowspan, curfile->source); indexfile.printf("<td><a href=\"%s.html\">%s</a></td>", curfile->name, curfile->name); for (listnum = 0; listnum < list_count; listnum++) { int unique_index = -1; if (pngdiffname[0] != 0) unique_index = get_unique_index(curfile, listnum); if (unique_index != -1) indexfile.printf("<td><span style=\"%s\"> </span> %s [<a href=\"%s\" target=\"blank\">%d</a>]</td>", status_color[curfile->status[listnum]], status_text[curfile->status[listnum]], pngdiffname, unique_index); else indexfile.printf("<td><span style=\"%s\"> </span> %s</td>", status_color[curfile->status[listnum]], status_text[curfile->status[listnum]]); } indexfile.printf("\n\t\t</tr>\n"); /* also print the name and source file */ printf("%s %s\n", curfile->name, curfile->source); } /* end of table */ indexfile.printf("</table></p>\n"); }
static void create_linked_file(std::string &dirname, const summary_file *curfile, const summary_file *prevfile, const summary_file *nextfile, const char *pngfile, std::string &tempheader, std::string &tempfooter) { std::string linkname; std::string filename; std::string title; util::core_file::ptr linkfile; int listnum; /* create the filename */ filename = string_format("%s.html", curfile->name); /* output header */ title = string_format("%s Regressions (%s)", curfile->name, curfile->source); linkname = string_format("%s" PATH_SEPARATOR "%s", dirname.c_str(), filename.c_str()); linkfile = create_file_and_output_header(linkname, tempheader, title); if (linkfile == nullptr) { fprintf(stderr, "Error creating file '%s'\n", filename.c_str()); return; } /* link to the previous/next entries */ linkfile->printf("\t<p>\n"); linkfile->printf("\t<table width=\"100%%\">\n"); linkfile->printf("\t\t<td align=\"left\" width=\"40%%\" style=\"border:none\">"); if (prevfile != nullptr) linkfile->printf("<a href=\"%s.html\"><< %s (%s)</a>", prevfile->name, prevfile->name, prevfile->source); linkfile->printf("</td>\n"); linkfile->printf("\t\t<td align=\"center\" width=\"20%%\" style=\"border:none\"><a href=\"index.html\">Home</a></td>\n"); linkfile->printf("\t\t<td align=\"right\" width=\"40%%\" style=\"border:none\">"); if (nextfile != nullptr) linkfile->printf("<a href=\"%s.html\">%s (%s) >></a>", nextfile->name, nextfile->name, nextfile->source); linkfile->printf("</td>\n"); linkfile->printf("\t</table>\n"); linkfile->printf("\t</p>\n"); /* output data for each one */ for (listnum = 0; listnum < list_count; listnum++) { int imageindex = -1; /* generate the HTML */ linkfile->printf("\n\t<h2>%s</h2>\n", lists[listnum].version); linkfile->printf("\t<p>\n"); linkfile->printf("\t<b>Status:</b> %s\n", status_text[curfile->status[listnum]]); if (pngfile != nullptr) imageindex = get_unique_index(curfile, listnum); if (imageindex != -1) linkfile->printf(" [%d]", imageindex); linkfile->printf("\t</p>\n"); if (curfile->text[listnum].length() != 0) { linkfile->printf("\t<p>\n"); linkfile->printf("\t<b>Errors:</b>\n"); linkfile->printf("\t<pre>%s</pre>\n", curfile->text[listnum].c_str()); linkfile->printf("\t</p>\n"); } } /* output link to the image */ if (pngfile != nullptr) { linkfile->printf("\n\t<h2>Screenshot Comparisons</h2>\n"); linkfile->printf("\t<p>\n"); linkfile->printf("\t<img src=\"%s\" />\n", pngfile); linkfile->printf("\t</p>\n"); } /* output footer */ output_footer_and_close_file(std::move(linkfile), tempfooter, title); }
static void create_linked_file(const astring *dirname, const summary_file *curfile, const summary_file *prevfile, const summary_file *nextfile, const char *pngfile, const astring *tempheader, const astring *tempfooter) { astring *linkname = astring_alloc(); astring *filename = astring_alloc(); astring *title = astring_alloc(); core_file *linkfile; int listnum; /* create the filename */ astring_printf(filename, "%s.html", curfile->name); /* output header */ astring_printf(title, "%s Regressions (%s)", curfile->name, curfile->source); astring_printf(linkname, "%s" PATH_SEPARATOR "%s", astring_c(dirname), astring_c(filename)); linkfile = create_file_and_output_header(linkname, tempheader, title); if (linkfile == NULL) { fprintf(stderr, "Error creating file '%s'\n", astring_c(filename)); astring_free(title); astring_free(filename); astring_free(linkname); return; } /* link to the previous/next entries */ core_fprintf(linkfile, "\t<p>\n"); core_fprintf(linkfile, "\t<table width=\"100%%\">\n"); core_fprintf(linkfile, "\t\t<td align=\"left\" width=\"40%%\" style=\"border:none\">"); if (prevfile != NULL) core_fprintf(linkfile, "<a href=\"%s.html\"><< %s (%s)</a>", prevfile->name, prevfile->name, prevfile->source); core_fprintf(linkfile, "</td>\n"); core_fprintf(linkfile, "\t\t<td align=\"center\" width=\"20%%\" style=\"border:none\"><a href=\"index.html\">Home</a></td>\n"); core_fprintf(linkfile, "\t\t<td align=\"right\" width=\"40%%\" style=\"border:none\">"); if (nextfile != NULL) core_fprintf(linkfile, "<a href=\"%s.html\">%s (%s) >></a>", nextfile->name, nextfile->name, nextfile->source); core_fprintf(linkfile, "</td>\n"); core_fprintf(linkfile, "\t</table>\n"); core_fprintf(linkfile, "\t</p>\n"); /* output data for each one */ for (listnum = 0; listnum < list_count; listnum++) { int imageindex = -1; /* generate the HTML */ core_fprintf(linkfile, "\n\t<h2>%s</h2>\n", lists[listnum].version); core_fprintf(linkfile, "\t<p>\n"); core_fprintf(linkfile, "\t<b>Status:</b> %s\n", status_text[curfile->status[listnum]]); if (pngfile != NULL) imageindex = get_unique_index(curfile, listnum); if (imageindex != -1) core_fprintf(linkfile, " [%d]", imageindex); core_fprintf(linkfile, "\t</p>\n"); if (curfile->text[listnum] != NULL) { core_fprintf(linkfile, "\t<p>\n"); core_fprintf(linkfile, "\t<b>Errors:</b>\n"); core_fprintf(linkfile, "\t<pre>%s</pre>\n", curfile->text[listnum]); core_fprintf(linkfile, "\t</p>\n"); } } /* output link to the image */ if (pngfile != NULL) { core_fprintf(linkfile, "\n\t<h2>Screenshot Comparisons</h2>\n"); core_fprintf(linkfile, "\t<p>\n"); core_fprintf(linkfile, "\t<img src=\"%s\" />\n", pngfile); core_fprintf(linkfile, "\t</p>\n"); } /* output footer */ output_footer_and_close_file(linkfile, tempfooter, title); astring_free(title); astring_free(filename); astring_free(linkname); }