@@ -47,7 +47,7 @@ struct idi_48_gpio {
47
47
raw_spinlock_t lock ;
48
48
spinlock_t ack_lock ;
49
49
unsigned char irq_mask [6 ];
50
- unsigned base ;
50
+ void __iomem * base ;
51
51
unsigned char cos_enb ;
52
52
};
53
53
@@ -66,15 +66,15 @@ static int idi_48_gpio_get(struct gpio_chip *chip, unsigned offset)
66
66
struct idi_48_gpio * const idi48gpio = gpiochip_get_data (chip );
67
67
unsigned i ;
68
68
static const unsigned int register_offset [6 ] = { 0 , 1 , 2 , 4 , 5 , 6 };
69
- unsigned base_offset ;
69
+ void __iomem * port_addr ;
70
70
unsigned mask ;
71
71
72
72
for (i = 0 ; i < 48 ; i += 8 )
73
73
if (offset < i + 8 ) {
74
- base_offset = register_offset [i / 8 ];
74
+ port_addr = idi48gpio -> base + register_offset [i / 8 ];
75
75
mask = BIT (offset - i );
76
76
77
- return !!(inb ( idi48gpio -> base + base_offset ) & mask );
77
+ return !!(ioread8 ( port_addr ) & mask );
78
78
}
79
79
80
80
/* The following line should never execute since offset < 48 */
@@ -88,15 +88,15 @@ static int idi_48_gpio_get_multiple(struct gpio_chip *chip, unsigned long *mask,
88
88
unsigned long offset ;
89
89
unsigned long gpio_mask ;
90
90
static const size_t ports [] = { 0 , 1 , 2 , 4 , 5 , 6 };
91
- unsigned int port_addr ;
91
+ void __iomem * port_addr ;
92
92
unsigned long port_state ;
93
93
94
94
/* clear bits array to a clean slate */
95
95
bitmap_zero (bits , chip -> ngpio );
96
96
97
97
for_each_set_clump8 (offset , gpio_mask , mask , ARRAY_SIZE (ports ) * 8 ) {
98
98
port_addr = idi48gpio -> base + ports [offset / 8 ];
99
- port_state = inb (port_addr ) & gpio_mask ;
99
+ port_state = ioread8 (port_addr ) & gpio_mask ;
100
100
101
101
bitmap_set_value8 (bits , port_state , offset );
102
102
}
@@ -130,7 +130,7 @@ static void idi_48_irq_mask(struct irq_data *data)
130
130
131
131
raw_spin_lock_irqsave (& idi48gpio -> lock , flags );
132
132
133
- outb (idi48gpio -> cos_enb , idi48gpio -> base + 7 );
133
+ iowrite8 (idi48gpio -> cos_enb , idi48gpio -> base + 7 );
134
134
135
135
raw_spin_unlock_irqrestore (& idi48gpio -> lock , flags );
136
136
}
@@ -163,7 +163,7 @@ static void idi_48_irq_unmask(struct irq_data *data)
163
163
164
164
raw_spin_lock_irqsave (& idi48gpio -> lock , flags );
165
165
166
- outb (idi48gpio -> cos_enb , idi48gpio -> base + 7 );
166
+ iowrite8 (idi48gpio -> cos_enb , idi48gpio -> base + 7 );
167
167
168
168
raw_spin_unlock_irqrestore (& idi48gpio -> lock , flags );
169
169
}
@@ -204,7 +204,7 @@ static irqreturn_t idi_48_irq_handler(int irq, void *dev_id)
204
204
205
205
raw_spin_lock (& idi48gpio -> lock );
206
206
207
- cos_status = inb (idi48gpio -> base + 7 );
207
+ cos_status = ioread8 (idi48gpio -> base + 7 );
208
208
209
209
raw_spin_unlock (& idi48gpio -> lock );
210
210
@@ -250,8 +250,8 @@ static int idi_48_irq_init_hw(struct gpio_chip *gc)
250
250
struct idi_48_gpio * const idi48gpio = gpiochip_get_data (gc );
251
251
252
252
/* Disable IRQ by default */
253
- outb (0 , idi48gpio -> base + 7 );
254
- inb (idi48gpio -> base + 7 );
253
+ iowrite8 (0 , idi48gpio -> base + 7 );
254
+ ioread8 (idi48gpio -> base + 7 );
255
255
256
256
return 0 ;
257
257
}
@@ -273,6 +273,10 @@ static int idi_48_probe(struct device *dev, unsigned int id)
273
273
return - EBUSY ;
274
274
}
275
275
276
+ idi48gpio -> base = devm_ioport_map (dev , base [id ], IDI_48_EXTENT );
277
+ if (!idi48gpio -> base )
278
+ return - ENOMEM ;
279
+
276
280
idi48gpio -> chip .label = name ;
277
281
idi48gpio -> chip .parent = dev ;
278
282
idi48gpio -> chip .owner = THIS_MODULE ;
@@ -283,7 +287,6 @@ static int idi_48_probe(struct device *dev, unsigned int id)
283
287
idi48gpio -> chip .direction_input = idi_48_gpio_direction_input ;
284
288
idi48gpio -> chip .get = idi_48_gpio_get ;
285
289
idi48gpio -> chip .get_multiple = idi_48_gpio_get_multiple ;
286
- idi48gpio -> base = base [id ];
287
290
288
291
girq = & idi48gpio -> chip .irq ;
289
292
girq -> chip = & idi_48_irqchip ;
0 commit comments