aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorStefan Richter <stefanr@s5r6.in-berlin.de>2010-02-21 11:58:29 -0500
committerStefan Richter <stefanr@s5r6.in-berlin.de>2010-02-24 14:36:55 -0500
commit3e9cc2f3b7ddabbbfc9abd043887030c669380aa (patch)
tree1495ea0e7fa0861be914492d7bb7b5518fb34a34 /drivers
parent4a635593f447443459fb92a482b5cc6d1dd15199 (diff)
firewire: ohci: add module parameter to activate quirk fixes
This way, we can advise users of precompiled kernel packages to test existing quirk fixes on chips which have not been listed yet, without them having to build a kernel from source. Note, to use this feature on a machine with more than one controller, steps like these are necessary: # lspci | grep 1394 # ls /sys/bus/pci/drivers/firewire_ohci/ # echo -n "0000:03:02.0" > /sys/bus/pci/drivers/firewire_ohci/unbind # echo 2 > /sys/module/firewire_ohci/parameters/quirks # echo -n "0000:03:02.0" > /sys/bus/pci/drivers/firewire_ohci/bind # echo 0 > /sys/module/firewire_ohci/parameters/quirks The parameter can also be used to switch off quirk flags that were hardwired into firewire-ohci's quirks table. Simply specify a non-zero quirks value but without any known flags, e.g. 0x100. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/firewire/ohci.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c
index 3dc2e8529a42..9815137b7c7d 100644
--- a/drivers/firewire/ohci.c
+++ b/drivers/firewire/ohci.c
@@ -246,6 +246,15 @@ static const struct {
246 {PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_FW, QUIRK_BE_HEADERS}, 246 {PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_FW, QUIRK_BE_HEADERS},
247}; 247};
248 248
249/* This overrides anything that was found in ohci_quirks[]. */
250static int param_quirks;
251module_param_named(quirks, param_quirks, int, 0644);
252MODULE_PARM_DESC(quirks, "Chip quirks (default = 0"
253 ", nonatomic cycle timer = " __stringify(QUIRK_CYCLE_TIMER)
254 ", reset packet generation = " __stringify(QUIRK_RESET_PACKET)
255 ", AR/selfID endianess = " __stringify(QUIRK_BE_HEADERS)
256 ")");
257
249#ifdef CONFIG_FIREWIRE_OHCI_DEBUG 258#ifdef CONFIG_FIREWIRE_OHCI_DEBUG
250 259
251#define OHCI_PARAM_DEBUG_AT_AR 1 260#define OHCI_PARAM_DEBUG_AT_AR 1
@@ -2370,6 +2379,8 @@ static int __devinit pci_probe(struct pci_dev *dev,
2370 ohci->quirks = ohci_quirks[i].flags; 2379 ohci->quirks = ohci_quirks[i].flags;
2371 break; 2380 break;
2372 } 2381 }
2382 if (param_quirks)
2383 ohci->quirks = param_quirks;
2373 2384
2374 ar_context_init(&ohci->ar_request_ctx, ohci, 2385 ar_context_init(&ohci->ar_request_ctx, ohci,
2375 OHCI1394_AsReqRcvContextControlSet); 2386 OHCI1394_AsReqRcvContextControlSet);