@@ -68,6 +68,7 @@ static int com20020pci_probe(struct pci_dev *pdev,
68
68
const struct pci_device_id * id )
69
69
{
70
70
struct com20020_pci_card_info * ci ;
71
+ struct com20020_pci_channel_map * mm ;
71
72
struct net_device * dev ;
72
73
struct arcnet_local * lp ;
73
74
struct com20020_priv * priv ;
@@ -84,9 +85,22 @@ static int com20020pci_probe(struct pci_dev *pdev,
84
85
85
86
ci = (struct com20020_pci_card_info * )id -> driver_data ;
86
87
priv -> ci = ci ;
88
+ mm = & ci -> misc_map ;
87
89
88
90
INIT_LIST_HEAD (& priv -> list_dev );
89
91
92
+ if (mm -> size ) {
93
+ ioaddr = pci_resource_start (pdev , mm -> bar ) + mm -> offset ;
94
+ r = devm_request_region (& pdev -> dev , ioaddr , mm -> size ,
95
+ "com20020-pci" );
96
+ if (!r ) {
97
+ pr_err ("IO region %xh-%xh already allocated.\n" ,
98
+ ioaddr , ioaddr + mm -> size - 1 );
99
+ return - EBUSY ;
100
+ }
101
+ priv -> misc = ioaddr ;
102
+ }
103
+
90
104
for (i = 0 ; i < ci -> devcount ; i ++ ) {
91
105
struct com20020_pci_channel_map * cm = & ci -> chan_map_tbl [i ];
92
106
struct com20020_dev * card ;
@@ -132,6 +146,13 @@ static int com20020pci_probe(struct pci_dev *pdev,
132
146
lp -> timeout = timeout ;
133
147
lp -> hw .owner = THIS_MODULE ;
134
148
149
+ /* Get the dev_id from the PLX rotary coder */
150
+ if (!strncmp (ci -> name , "EAE PLX-PCI MA1" , 15 ))
151
+ dev -> dev_id = 0xc ;
152
+ dev -> dev_id ^= inb (priv -> misc + ci -> rotary ) >> 4 ;
153
+
154
+ snprintf (dev -> name , sizeof (dev -> name ), "arc%d-%d" , dev -> dev_id , i );
155
+
135
156
if (arcnet_inb (ioaddr , COM20020_REG_R_STATUS ) == 0xFF ) {
136
157
pr_err ("IO address %Xh is empty!\n" , ioaddr );
137
158
ret = - EIO ;
@@ -235,6 +256,12 @@ static struct com20020_pci_card_info card_info_eae_arc1 = {
235
256
.size = 0x08 ,
236
257
},
237
258
},
259
+ .misc_map = {
260
+ .bar = 2 ,
261
+ .offset = 0x10 ,
262
+ .size = 0x04 ,
263
+ },
264
+ .rotary = 0x0 ,
238
265
.flags = ARC_CAN_10MBIT ,
239
266
};
240
267
@@ -252,6 +279,12 @@ static struct com20020_pci_card_info card_info_eae_ma1 = {
252
279
.size = 0x08 ,
253
280
}
254
281
},
282
+ .misc_map = {
283
+ .bar = 2 ,
284
+ .offset = 0x10 ,
285
+ .size = 0x04 ,
286
+ },
287
+ .rotary = 0x0 ,
255
288
.flags = ARC_CAN_10MBIT ,
256
289
};
257
290
0 commit comments