@@ -42,7 +42,7 @@ struct gpiomm_gpio {
42
42
unsigned char out_state [6 ];
43
43
unsigned char control [2 ];
44
44
spinlock_t lock ;
45
- unsigned int base ;
45
+ void __iomem * base ;
46
46
};
47
47
48
48
static int gpiomm_gpio_get_direction (struct gpio_chip * chip ,
@@ -64,7 +64,6 @@ static int gpiomm_gpio_direction_input(struct gpio_chip *chip,
64
64
struct gpiomm_gpio * const gpiommgpio = gpiochip_get_data (chip );
65
65
const unsigned int io_port = offset / 8 ;
66
66
const unsigned int control_port = io_port / 3 ;
67
- const unsigned int control_addr = gpiommgpio -> base + 3 + control_port * 4 ;
68
67
unsigned long flags ;
69
68
unsigned int control ;
70
69
@@ -89,7 +88,7 @@ static int gpiomm_gpio_direction_input(struct gpio_chip *chip,
89
88
}
90
89
91
90
control = BIT (7 ) | gpiommgpio -> control [control_port ];
92
- outb (control , control_addr );
91
+ iowrite8 (control , gpiommgpio -> base + 3 + control_port * 4 );
93
92
94
93
spin_unlock_irqrestore (& gpiommgpio -> lock , flags );
95
94
@@ -103,7 +102,6 @@ static int gpiomm_gpio_direction_output(struct gpio_chip *chip,
103
102
const unsigned int io_port = offset / 8 ;
104
103
const unsigned int control_port = io_port / 3 ;
105
104
const unsigned int mask = BIT (offset % 8 );
106
- const unsigned int control_addr = gpiommgpio -> base + 3 + control_port * 4 ;
107
105
const unsigned int out_port = (io_port > 2 ) ? io_port + 1 : io_port ;
108
106
unsigned long flags ;
109
107
unsigned int control ;
@@ -134,9 +132,9 @@ static int gpiomm_gpio_direction_output(struct gpio_chip *chip,
134
132
gpiommgpio -> out_state [io_port ] &= ~mask ;
135
133
136
134
control = BIT (7 ) | gpiommgpio -> control [control_port ];
137
- outb (control , control_addr );
135
+ iowrite8 (control , gpiommgpio -> base + 3 + control_port * 4 );
138
136
139
- outb (gpiommgpio -> out_state [io_port ], gpiommgpio -> base + out_port );
137
+ iowrite8 (gpiommgpio -> out_state [io_port ], gpiommgpio -> base + out_port );
140
138
141
139
spin_unlock_irqrestore (& gpiommgpio -> lock , flags );
142
140
@@ -160,7 +158,7 @@ static int gpiomm_gpio_get(struct gpio_chip *chip, unsigned int offset)
160
158
return - EINVAL ;
161
159
}
162
160
163
- port_state = inb (gpiommgpio -> base + in_port );
161
+ port_state = ioread8 (gpiommgpio -> base + in_port );
164
162
165
163
spin_unlock_irqrestore (& gpiommgpio -> lock , flags );
166
164
@@ -175,15 +173,15 @@ static int gpiomm_gpio_get_multiple(struct gpio_chip *chip, unsigned long *mask,
175
173
struct gpiomm_gpio * const gpiommgpio = gpiochip_get_data (chip );
176
174
unsigned long offset ;
177
175
unsigned long gpio_mask ;
178
- unsigned int port_addr ;
176
+ void __iomem * port_addr ;
179
177
unsigned long port_state ;
180
178
181
179
/* clear bits array to a clean slate */
182
180
bitmap_zero (bits , chip -> ngpio );
183
181
184
182
for_each_set_clump8 (offset , gpio_mask , mask , ARRAY_SIZE (ports ) * 8 ) {
185
183
port_addr = gpiommgpio -> base + ports [offset / 8 ];
186
- port_state = inb (port_addr ) & gpio_mask ;
184
+ port_state = ioread8 (port_addr ) & gpio_mask ;
187
185
188
186
bitmap_set_value8 (bits , port_state , offset );
189
187
}
@@ -207,7 +205,7 @@ static void gpiomm_gpio_set(struct gpio_chip *chip, unsigned int offset,
207
205
else
208
206
gpiommgpio -> out_state [port ] &= ~mask ;
209
207
210
- outb (gpiommgpio -> out_state [port ], gpiommgpio -> base + out_port );
208
+ iowrite8 (gpiommgpio -> out_state [port ], gpiommgpio -> base + out_port );
211
209
212
210
spin_unlock_irqrestore (& gpiommgpio -> lock , flags );
213
211
}
@@ -219,7 +217,7 @@ static void gpiomm_gpio_set_multiple(struct gpio_chip *chip,
219
217
unsigned long offset ;
220
218
unsigned long gpio_mask ;
221
219
size_t index ;
222
- unsigned int port_addr ;
220
+ void __iomem * port_addr ;
223
221
unsigned long bitmask ;
224
222
unsigned long flags ;
225
223
@@ -234,7 +232,7 @@ static void gpiomm_gpio_set_multiple(struct gpio_chip *chip,
234
232
/* update output state data and set device gpio register */
235
233
gpiommgpio -> out_state [index ] &= ~gpio_mask ;
236
234
gpiommgpio -> out_state [index ] |= bitmask ;
237
- outb (gpiommgpio -> out_state [index ], port_addr );
235
+ iowrite8 (gpiommgpio -> out_state [index ], port_addr );
238
236
239
237
spin_unlock_irqrestore (& gpiommgpio -> lock , flags );
240
238
}
@@ -268,6 +266,10 @@ static int gpiomm_probe(struct device *dev, unsigned int id)
268
266
return - EBUSY ;
269
267
}
270
268
269
+ gpiommgpio -> base = devm_ioport_map (dev , base [id ], GPIOMM_EXTENT );
270
+ if (!gpiommgpio -> base )
271
+ return - ENOMEM ;
272
+
271
273
gpiommgpio -> chip .label = name ;
272
274
gpiommgpio -> chip .parent = dev ;
273
275
gpiommgpio -> chip .owner = THIS_MODULE ;
@@ -281,7 +283,6 @@ static int gpiomm_probe(struct device *dev, unsigned int id)
281
283
gpiommgpio -> chip .get_multiple = gpiomm_gpio_get_multiple ;
282
284
gpiommgpio -> chip .set = gpiomm_gpio_set ;
283
285
gpiommgpio -> chip .set_multiple = gpiomm_gpio_set_multiple ;
284
- gpiommgpio -> base = base [id ];
285
286
286
287
spin_lock_init (& gpiommgpio -> lock );
287
288
@@ -292,14 +293,14 @@ static int gpiomm_probe(struct device *dev, unsigned int id)
292
293
}
293
294
294
295
/* initialize all GPIO as output */
295
- outb (0x80 , base [ id ] + 3 );
296
- outb (0x00 , base [ id ] );
297
- outb (0x00 , base [ id ] + 1 );
298
- outb (0x00 , base [ id ] + 2 );
299
- outb (0x80 , base [ id ] + 7 );
300
- outb (0x00 , base [ id ] + 4 );
301
- outb (0x00 , base [ id ] + 5 );
302
- outb (0x00 , base [ id ] + 6 );
296
+ iowrite8 (0x80 , gpiommgpio -> base + 3 );
297
+ iowrite8 (0x00 , gpiommgpio -> base );
298
+ iowrite8 (0x00 , gpiommgpio -> base + 1 );
299
+ iowrite8 (0x00 , gpiommgpio -> base + 2 );
300
+ iowrite8 (0x80 , gpiommgpio -> base + 7 );
301
+ iowrite8 (0x00 , gpiommgpio -> base + 4 );
302
+ iowrite8 (0x00 , gpiommgpio -> base + 5 );
303
+ iowrite8 (0x00 , gpiommgpio -> base + 6 );
303
304
304
305
return 0 ;
305
306
}
0 commit comments