diff --git a/src/tuxedo_keyboard.c b/src/tuxedo_keyboard.c index fb1d097..cbb23c3 100644 --- a/src/tuxedo_keyboard.c +++ b/src/tuxedo_keyboard.c @@ -22,6 +22,9 @@ #include "clevo_keyboard.h" #include "uniwill_keyboard.h" #include +#include +#include +#include MODULE_AUTHOR("TUXEDO Computers GmbH "); MODULE_DESCRIPTION("TUXEDO Computers keyboard & keyboard backlight Driver"); @@ -158,9 +161,115 @@ void tuxedo_keyboard_remove_driver(struct tuxedo_keyboard_driver *tk_driver) } EXPORT_SYMBOL(tuxedo_keyboard_remove_driver); +static const struct x86_cpu_id skip_tuxedo_dmi_string_check_match[] __initconst = { + X86_MATCH_INTEL_FAM6_MODEL(CORE_YONAH, NULL), + X86_MATCH_INTEL_FAM6_MODEL(CORE2_MEROM, NULL), + X86_MATCH_INTEL_FAM6_MODEL(CORE2_MEROM_L, NULL), + X86_MATCH_INTEL_FAM6_MODEL(CORE2_PENRYN, NULL), + X86_MATCH_INTEL_FAM6_MODEL(CORE2_DUNNINGTON, NULL), + X86_MATCH_INTEL_FAM6_MODEL(NEHALEM, NULL), + X86_MATCH_INTEL_FAM6_MODEL(NEHALEM_G, NULL), + X86_MATCH_INTEL_FAM6_MODEL(NEHALEM_EP, NULL), + X86_MATCH_INTEL_FAM6_MODEL(NEHALEM_EX, NULL), + X86_MATCH_INTEL_FAM6_MODEL(WESTMERE, NULL), + X86_MATCH_INTEL_FAM6_MODEL(WESTMERE_EP, NULL), + X86_MATCH_INTEL_FAM6_MODEL(WESTMERE_EX, NULL), + X86_MATCH_INTEL_FAM6_MODEL(SANDYBRIDGE, NULL), + X86_MATCH_INTEL_FAM6_MODEL(SANDYBRIDGE_X, NULL), + X86_MATCH_INTEL_FAM6_MODEL(IVYBRIDGE, NULL), + X86_MATCH_INTEL_FAM6_MODEL(IVYBRIDGE_X, NULL), + X86_MATCH_INTEL_FAM6_MODEL(HASWELL, NULL), + X86_MATCH_INTEL_FAM6_MODEL(HASWELL_X, NULL), + X86_MATCH_INTEL_FAM6_MODEL(HASWELL_L, NULL), + X86_MATCH_INTEL_FAM6_MODEL(HASWELL_G, NULL), + X86_MATCH_INTEL_FAM6_MODEL(BROADWELL, NULL), + X86_MATCH_INTEL_FAM6_MODEL(BROADWELL_G, NULL), + X86_MATCH_INTEL_FAM6_MODEL(BROADWELL_X, NULL), + X86_MATCH_INTEL_FAM6_MODEL(BROADWELL_D, NULL), + X86_MATCH_INTEL_FAM6_MODEL(SKYLAKE_L, NULL), + X86_MATCH_INTEL_FAM6_MODEL(SKYLAKE, NULL), + X86_MATCH_INTEL_FAM6_MODEL(SKYLAKE_X, NULL), + X86_MATCH_INTEL_FAM6_MODEL(KABYLAKE_L, NULL), + X86_MATCH_INTEL_FAM6_MODEL(KABYLAKE, NULL), + X86_MATCH_INTEL_FAM6_MODEL(COMETLAKE, NULL), + X86_MATCH_INTEL_FAM6_MODEL(COMETLAKE_L, NULL), + X86_MATCH_INTEL_FAM6_MODEL(CANNONLAKE_L, NULL), + X86_MATCH_INTEL_FAM6_MODEL(ICELAKE_X, NULL), + X86_MATCH_INTEL_FAM6_MODEL(ICELAKE_D, NULL), + X86_MATCH_INTEL_FAM6_MODEL(ICELAKE, NULL), + X86_MATCH_INTEL_FAM6_MODEL(ICELAKE_L, NULL), + X86_MATCH_INTEL_FAM6_MODEL(ICELAKE_NNPI, NULL), + X86_MATCH_INTEL_FAM6_MODEL(LAKEFIELD, NULL), + X86_MATCH_INTEL_FAM6_MODEL(ROCKETLAKE, NULL), + X86_MATCH_INTEL_FAM6_MODEL(TIGERLAKE_L, NULL), + X86_MATCH_INTEL_FAM6_MODEL(TIGERLAKE, NULL), + X86_MATCH_INTEL_FAM6_MODEL(SAPPHIRERAPIDS_X, NULL), // 12th Gen Xeon + //X86_MATCH_INTEL_FAM6_MODEL(EMERALDRAPIDS_X, NULL), // 13th Gen Xeon + X86_MATCH_INTEL_FAM6_MODEL(ALDERLAKE, NULL), // 12th Gen + X86_MATCH_INTEL_FAM6_MODEL(ALDERLAKE_L, NULL), // 12th Gen + X86_MATCH_INTEL_FAM6_MODEL(ALDERLAKE_N, NULL), // 12th Gen Atom + //X86_MATCH_INTEL_FAM6_MODEL(RAPTORLAKE, NULL), // 13th Gen + //X86_MATCH_INTEL_FAM6_MODEL(RAPTORLAKE_P, NULL), // 13th Gen + //X86_MATCH_INTEL_FAM6_MODEL(RAPTORLAKE_S, NULL), // 13th Gen + X86_MATCH_INTEL_FAM6_MODEL(ATOM_BONNELL, NULL), + X86_MATCH_INTEL_FAM6_MODEL(ATOM_BONNELL_MID, NULL), + X86_MATCH_INTEL_FAM6_MODEL(ATOM_SALTWELL, NULL), + X86_MATCH_INTEL_FAM6_MODEL(ATOM_SALTWELL_MID, NULL), + X86_MATCH_INTEL_FAM6_MODEL(ATOM_SALTWELL_TABLET, NULL), + X86_MATCH_INTEL_FAM6_MODEL(ATOM_SILVERMONT, NULL), + X86_MATCH_INTEL_FAM6_MODEL(ATOM_SILVERMONT_D, NULL), + X86_MATCH_INTEL_FAM6_MODEL(ATOM_SILVERMONT_MID, NULL), + X86_MATCH_INTEL_FAM6_MODEL(ATOM_AIRMONT, NULL), + X86_MATCH_INTEL_FAM6_MODEL(ATOM_AIRMONT_MID, NULL), + X86_MATCH_INTEL_FAM6_MODEL(ATOM_AIRMONT_NP, NULL), + X86_MATCH_INTEL_FAM6_MODEL(ATOM_GOLDMONT, NULL), + X86_MATCH_INTEL_FAM6_MODEL(ATOM_GOLDMONT_D, NULL), + X86_MATCH_INTEL_FAM6_MODEL(ATOM_GOLDMONT_PLUS, NULL), + X86_MATCH_INTEL_FAM6_MODEL(ATOM_TREMONT_D, NULL), + X86_MATCH_INTEL_FAM6_MODEL(ATOM_TREMONT, NULL), + X86_MATCH_INTEL_FAM6_MODEL(ATOM_TREMONT_L, NULL), + X86_MATCH_INTEL_FAM6_MODEL(XEON_PHI_KNL, NULL), + X86_MATCH_INTEL_FAM6_MODEL(XEON_PHI_KNM, NULL), + X86_MATCH_VENDOR_FAM_MODEL(INTEL, 5, INTEL_FAM5_QUARK_X1000, NULL), + X86_MATCH_VENDOR_FAM(AMD, 5, NULL), + X86_MATCH_VENDOR_FAM(AMD, 6, NULL), + X86_MATCH_VENDOR_FAM(AMD, 15, NULL), + X86_MATCH_VENDOR_FAM(AMD, 16, NULL), + X86_MATCH_VENDOR_FAM(AMD, 17, NULL), + X86_MATCH_VENDOR_FAM(AMD, 18, NULL), + X86_MATCH_VENDOR_FAM(AMD, 19, NULL), + X86_MATCH_VENDOR_FAM(AMD, 20, NULL), + X86_MATCH_VENDOR_FAM(AMD, 21, NULL), + X86_MATCH_VENDOR_FAM(AMD, 22, NULL), + X86_MATCH_VENDOR_FAM(AMD, 23, NULL), // Zen, Zen+, Zen 2 + X86_MATCH_VENDOR_FAM(AMD, 24, NULL), // Zen + //X86_MATCH_VENDOR_FAM(AMD, 25, NULL), // Zen 3, Zen 4 + { } +}; + +static const struct dmi_system_id tuxedo_dmi_string_match[] __initconst = { + { + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"), + }, + }, + { + .matches = { + DMI_MATCH(DMI_BOARD_VENDOR, "TUXEDO"), + }, + }, + { } +}; + static int __init tuxedo_keyboard_init(void) { TUXEDO_INFO("module init\n"); + + if (!x86_match_cpu(skip_tuxedo_dmi_string_check_match) + && !dmi_check_system(tuxedo_dmi_string_match)) { + return -EINVAL; + } + return 0; }