aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpio
diff options
context:
space:
mode:
authorJamie Iles <jamie@jamieiles.com>2011-05-20 02:40:16 -0400
committerGrant Likely <grant.likely@secretlab.ca>2011-05-20 02:40:16 -0400
commit364b5e871839fafffa851bbff9ecf64ac641023c (patch)
tree56eea04b83a0f84ba3199b64e894f1d9c9ae9fbb /drivers/gpio
parent924e7a9fc6da124588e27c611841d07047c157b4 (diff)
basic_mmio_gpio: request register regions
Make sure that we get the register regions with request_mem_region() before ioremap() to make sure we have exclusive access. Signed-off-by: Jamie Iles <jamie@jamieiles.com> Acked-by: Anton Vorontsov <cbouatmailru@gmail.com> Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Diffstat (limited to 'drivers/gpio')
-rw-r--r--drivers/gpio/basic_mmio_gpio.c16
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
195static 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
195static int bgpio_setup_accessors(struct platform_device *pdev, 205static 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) {