Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 271165
b: refs/heads/master
c: 76c05c8
h: refs/heads/master
i:
  271163: 5088fc1
v: v3
  • Loading branch information
Rob Herring authored and Grant Likely committed Oct 26, 2011
1 parent 9ac3bd5 commit ae448e9
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 13 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: eb9ae7f2a38135761496d317c08c87f38c7cafe3
refs/heads/master: 76c05c8a0d56faf210cb9681786bb3e17cd59793
31 changes: 21 additions & 10 deletions trunk/drivers/gpio/gpio-pl061.c
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ static int pl061_to_irq(struct gpio_chip *gc, unsigned offset)
{
struct pl061_gpio *chip = container_of(gc, struct pl061_gpio, gc);

if (chip->irq_base == (unsigned) -1)
if (chip->irq_base == NO_IRQ)
return -EINVAL;

return chip->irq_base + offset;
Expand Down Expand Up @@ -246,6 +246,18 @@ static int pl061_probe(struct amba_device *dev, const struct amba_id *id)
if (chip == NULL)
return -ENOMEM;

pdata = dev->dev.platform_data;
if (pdata) {
chip->gc.base = pdata->gpio_base;
chip->irq_base = pdata->irq_base;
} else if (dev->dev.of_node) {
chip->gc.base = -1;
chip->irq_base = NO_IRQ;
} else {
ret = -ENODEV;
goto free_mem;
}

if (!request_mem_region(dev->res.start,
resource_size(&dev->res), "pl061")) {
ret = -EBUSY;
Expand All @@ -267,14 +279,11 @@ static int pl061_probe(struct amba_device *dev, const struct amba_id *id)
chip->gc.get = pl061_get_value;
chip->gc.set = pl061_set_value;
chip->gc.to_irq = pl061_to_irq;
chip->gc.base = pdata->gpio_base;
chip->gc.ngpio = PL061_GPIO_NR;
chip->gc.label = dev_name(&dev->dev);
chip->gc.dev = &dev->dev;
chip->gc.owner = THIS_MODULE;

chip->irq_base = pdata->irq_base;

ret = gpiochip_add(&chip->gc);
if (ret)
goto iounmap;
Expand All @@ -283,7 +292,7 @@ static int pl061_probe(struct amba_device *dev, const struct amba_id *id)
* irq_chip support
*/

if (chip->irq_base == (unsigned) -1)
if (chip->irq_base == NO_IRQ)
return 0;

writeb(0, chip->base + GPIOIE); /* disable irqs */
Expand All @@ -307,11 +316,13 @@ static int pl061_probe(struct amba_device *dev, const struct amba_id *id)
list_add(&chip->list, chip_list);

for (i = 0; i < PL061_GPIO_NR; i++) {
if (pdata->directions & (1 << i))
pl061_direction_output(&chip->gc, i,
pdata->values & (1 << i));
else
pl061_direction_input(&chip->gc, i);
if (pdata) {
if (pdata->directions & (1 << i))
pl061_direction_output(&chip->gc, i,
pdata->values & (1 << i));
else
pl061_direction_input(&chip->gc, i);
}

irq_set_chip_and_handler(i + chip->irq_base, &pl061_irqchip,
handle_simple_irq);
Expand Down
3 changes: 1 addition & 2 deletions trunk/include/linux/amba/pl061.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@ struct pl061_platform_data {
unsigned gpio_base;

/* number of the first IRQ.
* If the IRQ functionality in not desired this must be set to
* (unsigned) -1.
* If the IRQ functionality in not desired this must be set to NO_IRQ.
*/
unsigned irq_base;

Expand Down

0 comments on commit ae448e9

Please sign in to comment.