1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Thunderbolt driver - quirks 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright (c) 2020 Mario Limonciello <mario.limonciello@dell.com> 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #include "tb.h" 9*4882a593Smuzhiyun quirk_force_power_link(struct tb_switch * sw)10*4882a593Smuzhiyunstatic void quirk_force_power_link(struct tb_switch *sw) 11*4882a593Smuzhiyun { 12*4882a593Smuzhiyun sw->quirks |= QUIRK_FORCE_POWER_LINK_CONTROLLER; 13*4882a593Smuzhiyun } 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun struct tb_quirk { 16*4882a593Smuzhiyun u16 vendor; 17*4882a593Smuzhiyun u16 device; 18*4882a593Smuzhiyun void (*hook)(struct tb_switch *sw); 19*4882a593Smuzhiyun }; 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun static const struct tb_quirk tb_quirks[] = { 22*4882a593Smuzhiyun /* Dell WD19TB supports self-authentication on unplug */ 23*4882a593Smuzhiyun { 0x00d4, 0xb070, quirk_force_power_link }, 24*4882a593Smuzhiyun }; 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun /** 27*4882a593Smuzhiyun * tb_check_quirks() - Check for quirks to apply 28*4882a593Smuzhiyun * @sw: Thunderbolt switch 29*4882a593Smuzhiyun * 30*4882a593Smuzhiyun * Apply any quirks for the Thunderbolt controller. 31*4882a593Smuzhiyun */ tb_check_quirks(struct tb_switch * sw)32*4882a593Smuzhiyunvoid tb_check_quirks(struct tb_switch *sw) 33*4882a593Smuzhiyun { 34*4882a593Smuzhiyun int i; 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun for (i = 0; i < ARRAY_SIZE(tb_quirks); i++) { 37*4882a593Smuzhiyun const struct tb_quirk *q = &tb_quirks[i]; 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun if (sw->device == q->device && sw->vendor == q->vendor) 40*4882a593Smuzhiyun q->hook(sw); 41*4882a593Smuzhiyun } 42*4882a593Smuzhiyun } 43