@@ -44,7 +44,7 @@ struct idio_16_gpio {
44
44
struct gpio_chip chip ;
45
45
raw_spinlock_t lock ;
46
46
unsigned long irq_mask ;
47
- unsigned int base ;
47
+ void __iomem * base ;
48
48
unsigned int out_state ;
49
49
};
50
50
@@ -79,9 +79,9 @@ static int idio_16_gpio_get(struct gpio_chip *chip, unsigned int offset)
79
79
return - EINVAL ;
80
80
81
81
if (offset < 24 )
82
- return !!(inb (idio16gpio -> base + 1 ) & mask );
82
+ return !!(ioread8 (idio16gpio -> base + 1 ) & mask );
83
83
84
- return !!(inb (idio16gpio -> base + 5 ) & (mask >>8 ));
84
+ return !!(ioread8 (idio16gpio -> base + 5 ) & (mask >>8 ));
85
85
}
86
86
87
87
static int idio_16_gpio_get_multiple (struct gpio_chip * chip ,
@@ -91,9 +91,9 @@ static int idio_16_gpio_get_multiple(struct gpio_chip *chip,
91
91
92
92
* bits = 0 ;
93
93
if (* mask & GENMASK (23 , 16 ))
94
- * bits |= (unsigned long )inb (idio16gpio -> base + 1 ) << 16 ;
94
+ * bits |= (unsigned long )ioread8 (idio16gpio -> base + 1 ) << 16 ;
95
95
if (* mask & GENMASK (31 , 24 ))
96
- * bits |= (unsigned long )inb (idio16gpio -> base + 5 ) << 24 ;
96
+ * bits |= (unsigned long )ioread8 (idio16gpio -> base + 5 ) << 24 ;
97
97
98
98
return 0 ;
99
99
}
@@ -116,9 +116,9 @@ static void idio_16_gpio_set(struct gpio_chip *chip, unsigned int offset,
116
116
idio16gpio -> out_state &= ~mask ;
117
117
118
118
if (offset > 7 )
119
- outb (idio16gpio -> out_state >> 8 , idio16gpio -> base + 4 );
119
+ iowrite8 (idio16gpio -> out_state >> 8 , idio16gpio -> base + 4 );
120
120
else
121
- outb (idio16gpio -> out_state , idio16gpio -> base );
121
+ iowrite8 (idio16gpio -> out_state , idio16gpio -> base );
122
122
123
123
raw_spin_unlock_irqrestore (& idio16gpio -> lock , flags );
124
124
}
@@ -135,9 +135,9 @@ static void idio_16_gpio_set_multiple(struct gpio_chip *chip,
135
135
idio16gpio -> out_state |= * mask & * bits ;
136
136
137
137
if (* mask & 0xFF )
138
- outb (idio16gpio -> out_state , idio16gpio -> base );
138
+ iowrite8 (idio16gpio -> out_state , idio16gpio -> base );
139
139
if ((* mask >> 8 ) & 0xFF )
140
- outb (idio16gpio -> out_state >> 8 , idio16gpio -> base + 4 );
140
+ iowrite8 (idio16gpio -> out_state >> 8 , idio16gpio -> base + 4 );
141
141
142
142
raw_spin_unlock_irqrestore (& idio16gpio -> lock , flags );
143
143
}
@@ -158,7 +158,7 @@ static void idio_16_irq_mask(struct irq_data *data)
158
158
if (!idio16gpio -> irq_mask ) {
159
159
raw_spin_lock_irqsave (& idio16gpio -> lock , flags );
160
160
161
- outb (0 , idio16gpio -> base + 2 );
161
+ iowrite8 (0 , idio16gpio -> base + 2 );
162
162
163
163
raw_spin_unlock_irqrestore (& idio16gpio -> lock , flags );
164
164
}
@@ -177,7 +177,7 @@ static void idio_16_irq_unmask(struct irq_data *data)
177
177
if (!prev_irq_mask ) {
178
178
raw_spin_lock_irqsave (& idio16gpio -> lock , flags );
179
179
180
- inb (idio16gpio -> base + 2 );
180
+ ioread8 (idio16gpio -> base + 2 );
181
181
182
182
raw_spin_unlock_irqrestore (& idio16gpio -> lock , flags );
183
183
}
@@ -212,7 +212,7 @@ static irqreturn_t idio_16_irq_handler(int irq, void *dev_id)
212
212
213
213
raw_spin_lock (& idio16gpio -> lock );
214
214
215
- outb (0 , idio16gpio -> base + 1 );
215
+ iowrite8 (0 , idio16gpio -> base + 1 );
216
216
217
217
raw_spin_unlock (& idio16gpio -> lock );
218
218
@@ -232,8 +232,8 @@ static int idio_16_irq_init_hw(struct gpio_chip *gc)
232
232
struct idio_16_gpio * const idio16gpio = gpiochip_get_data (gc );
233
233
234
234
/* Disable IRQ by default */
235
- outb (0 , idio16gpio -> base + 2 );
236
- outb (0 , idio16gpio -> base + 1 );
235
+ iowrite8 (0 , idio16gpio -> base + 2 );
236
+ iowrite8 (0 , idio16gpio -> base + 1 );
237
237
238
238
return 0 ;
239
239
}
@@ -255,6 +255,10 @@ static int idio_16_probe(struct device *dev, unsigned int id)
255
255
return - EBUSY ;
256
256
}
257
257
258
+ idio16gpio -> base = devm_ioport_map (dev , base [id ], IDIO_16_EXTENT );
259
+ if (!idio16gpio -> base )
260
+ return - ENOMEM ;
261
+
258
262
idio16gpio -> chip .label = name ;
259
263
idio16gpio -> chip .parent = dev ;
260
264
idio16gpio -> chip .owner = THIS_MODULE ;
@@ -268,7 +272,6 @@ static int idio_16_probe(struct device *dev, unsigned int id)
268
272
idio16gpio -> chip .get_multiple = idio_16_gpio_get_multiple ;
269
273
idio16gpio -> chip .set = idio_16_gpio_set ;
270
274
idio16gpio -> chip .set_multiple = idio_16_gpio_set_multiple ;
271
- idio16gpio -> base = base [id ];
272
275
idio16gpio -> out_state = 0xFFFF ;
273
276
274
277
girq = & idio16gpio -> chip .irq ;
0 commit comments