Skip to content

Commit

Permalink
basic_mmio_gpio: allow overriding number of gpio
Browse files Browse the repository at this point in the history
Some platforms may have a number of GPIO that is less than the register
width of the peripheral.

Signed-off-by: Jamie Iles <jamie@jamieiles.com>
Acked-by: Anton Vorontsov <cbouatmailru@gmail.com>
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
  • Loading branch information
Jamie Iles authored and Grant Likely committed May 20, 2011
1 parent 4ddb8ae commit 924e7a9
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 6 deletions.
18 changes: 12 additions & 6 deletions drivers/gpio/basic_mmio_gpio.c
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,7 @@ static int __devinit bgpio_probe(struct platform_device *pdev)
resource_size_t dat_sz;
int bits;
int ret;
int ngpio;

res_dat = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dat");
if (!res_dat)
Expand All @@ -249,6 +250,7 @@ static int __devinit bgpio_probe(struct platform_device *pdev)
return -EINVAL;

bits = dat_sz * 8;
ngpio = bits;
if (bits > BITS_PER_LONG)
return -EINVAL;

Expand Down Expand Up @@ -277,25 +279,29 @@ static int __devinit bgpio_probe(struct platform_device *pdev)

spin_lock_init(&bgc->lock);

if (pdata) {
bgc->gc.base = pdata->base;
if (pdata->ngpio > 0)
ngpio = pdata->ngpio;
} else {
bgc->gc.base = -1;
}

bgc->bits = bits;
ret = bgpio_setup_accessors(pdev, bgc);
if (ret)
return ret;

bgc->data = bgc->read_reg(bgc->reg_dat);
bgc->gc.ngpio = bits;

bgc->gc.ngpio = ngpio;
bgc->gc.direction_input = bgpio_dir_in;
bgc->gc.direction_output = bgpio_dir_out;
bgc->gc.get = bgpio_get;
bgc->gc.set = bgpio_set;
bgc->gc.dev = dev;
bgc->gc.label = dev_name(dev);

if (pdata)
bgc->gc.base = pdata->base;
else
bgc->gc.base = -1;

platform_set_drvdata(pdev, bgc);

ret = gpiochip_add(&bgc->gc);
Expand Down
1 change: 1 addition & 0 deletions include/linux/basic_mmio_gpio.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

struct bgpio_pdata {
int base;
int ngpio;
};

#endif /* __BASIC_MMIO_GPIO_H */

0 comments on commit 924e7a9

Please sign in to comment.