blob: 99f5fa0a86e26f562a217ce9b641262d4ac699f4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
--- linux/drivers/pci/quirks.c 2008-09-08 20:33:16.000000000 +0200
+++ linux/drivers/pci/quirks.c 2008-10-06 16:37:35.000000000 +0200
@@ -1381,6 +1381,82 @@
PCI_DEVICE_ID_TOSHIBA_TC86C001_IDE,
quirk_tc86c001_ide);
+/*
+ * The Twinhad H12Y assign mmio (0xffbfe800-0xffbfecff)
+ * resources that seems to be used by an unknown device.
+ * This quirk reserve more than really used mmio space to
+ * force change the mmio area of the cardreader and the network chip.
+ * See http://bugzilla.kernel.org/show_bug.cgi?id=10231
+ * and http://bugzilla.kernel.org/show_bug.cgi?id=9905
+ * for more details
+ */
+static void __init quirk_h12y_1_mmio(struct pci_dev *dev)
+{
+/*
+ * Network Device: Realtek 8139C of Twinhead H12Y
+ * PCI VENDOR: 0x10EC PCI ID:0x8139
+ * SUB VENDOR: 0x14FF SUB ID:0xA003
+ */
+ struct resource *r = &dev->resource[1];
+ if ((dev->subsystem_vendor) == 0x14FF &&
+ (dev->subsystem_device) == 0xA003) {
+ r->start = 0;
+ r->end = 0x03ff;
+ }
+}
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_REALTEK,
+ PCI_DEVICE_ID_REALTEK_8139,
+ quirk_h12y_1_mmio);
+
+static void __init quirk_h12y_2_mmio(struct pci_dev *dev)
+{
+/*
+ * SD-Cardreader Device: O2 7120 of Twinhead H12Y
+ * PCI VENDOR: 0x1217 PCI ID:0x7120
+ * SUB VENDOR: 0x14FF SUB ID:0xA003
+ */
+ struct resource *r = &dev->resource[0];
+ if ((dev->subsystem_vendor) == 0x14FF &&
+ (dev->subsystem_device) == 0xA003) {
+ r->start = 0;
+ r->end = 0x03ff;
+ }
+}
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_O2,0x7120,quirk_h12y_2_mmio);
+
+static void __init quirk_h12y_3_mmio(struct pci_dev *dev)
+{
+/*
+ * Firewire Device: O2 00F7 of Twinhead H12Y
+ * PCI VENDOR: 0x1217 PCI ID:0x00F7
+ * SUB VENDOR: 0x14FF SUB ID:0xA003
+ */
+ struct resource *r = &dev->resource[1];
+ if ((dev->subsystem_vendor) == 0x14FF &&
+ (dev->subsystem_device) == 0xA003) {
+ r->start = 0;
+ r->end = 0x0fff;
+ }
+}
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_O2,0x00F7,quirk_h12y_3_mmio);
+
+static void __init quirk_h12y_4_mmio(struct pci_dev *dev)
+{
+/*
+ * MS-Cardreader Device: O2 7130 of Twinhead H12Y
+ * PCI VENDOR: 0x1217 PCI ID:0x7130
+ * SUB VENDOR: 0x14FF SUB ID:0xA003
+ */
+ struct resource *r = &dev->resource[0];
+ if ((dev->subsystem_vendor) == 0x14FF &&
+ (dev->subsystem_device) == 0xA003) {
+ r->start = 0;
+ r->end = 0x1fff;
+ }
+}
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_O2,0x7130,quirk_h12y_4_mmio);
+
+
static void __devinit quirk_netmos(struct pci_dev *dev)
{
unsigned int num_parallel = (dev->subsystem_device & 0xf0) >> 4;
|