diff options
-rw-r--r-- | drivers/gpio/basic_mmio_gpio.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/drivers/gpio/basic_mmio_gpio.c b/drivers/gpio/basic_mmio_gpio.c index 2b2d38454463..90f7f8930d5b 100644 --- a/drivers/gpio/basic_mmio_gpio.c +++ b/drivers/gpio/basic_mmio_gpio.c | |||
@@ -192,6 +192,16 @@ static int bgpio_dir_out(struct gpio_chip *gc, unsigned int gpio, int val) | |||
192 | return 0; | 192 | return 0; |
193 | } | 193 | } |
194 | 194 | ||
195 | static void __iomem *bgpio_request_and_map(struct device *dev, | ||
196 | struct resource *res) | ||
197 | { | ||
198 | if (!devm_request_mem_region(dev, res->start, resource_size(res), | ||
199 | res->name ?: "mmio_gpio")) | ||
200 | return NULL; | ||
201 | |||
202 | return devm_ioremap(dev, res->start, resource_size(res)); | ||
203 | } | ||
204 | |||
195 | static int bgpio_setup_accessors(struct platform_device *pdev, | 205 | static int bgpio_setup_accessors(struct platform_device *pdev, |
196 | struct bgpio_chip *bgc) | 206 | struct bgpio_chip *bgc) |
197 | { | 207 | { |
@@ -258,7 +268,7 @@ static int __devinit bgpio_probe(struct platform_device *pdev) | |||
258 | if (!bgc) | 268 | if (!bgc) |
259 | return -ENOMEM; | 269 | return -ENOMEM; |
260 | 270 | ||
261 | bgc->reg_dat = devm_ioremap(dev, res_dat->start, dat_sz); | 271 | bgc->reg_dat = bgpio_request_and_map(dev, res_dat); |
262 | if (!bgc->reg_dat) | 272 | if (!bgc->reg_dat) |
263 | return -ENOMEM; | 273 | return -ENOMEM; |
264 | 274 | ||
@@ -269,8 +279,8 @@ static int __devinit bgpio_probe(struct platform_device *pdev) | |||
269 | resource_size(res_set) != dat_sz) | 279 | resource_size(res_set) != dat_sz) |
270 | return -EINVAL; | 280 | return -EINVAL; |
271 | 281 | ||
272 | bgc->reg_set = devm_ioremap(dev, res_set->start, dat_sz); | 282 | bgc->reg_set = bgpio_request_and_map(dev, res_set); |
273 | bgc->reg_clr = devm_ioremap(dev, res_clr->start, dat_sz); | 283 | bgc->reg_clr = bgpio_request_and_map(dev, res_clr); |
274 | if (!bgc->reg_set || !bgc->reg_clr) | 284 | if (!bgc->reg_set || !bgc->reg_clr) |
275 | return -ENOMEM; | 285 | return -ENOMEM; |
276 | } else if (res_set || res_clr) { | 286 | } else if (res_set || res_clr) { |