You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge master.kernel.org:/home/rmk/linux-2.6-arm
* master.kernel.org:/home/rmk/linux-2.6-arm: ARM: 6061/1: PL061 GPIO: Bug fix - setting gpio for HIGH_LEVEL interrupt is not working. ARM: 5957/1: ARM: RealView SD/MMC Card detection and write-protect using GPIOLIB ARM: 6030/1: KS8695: enable console ARM: 6060/1: PL061 GPIO: Setting gpio val after changing direction to OUT. ARM: 6059/1: PL061 GPIO: Changing *_irq_chip_data with *_irq_data for real irqs. ARM: 6023/1: update bcmring_defconfig to latest version and fix build error ARM: fix build error in arch/arm/kernel/process.c
This commit is contained in:
+10
-4
@@ -91,6 +91,12 @@ static int pl061_direction_output(struct gpio_chip *gc, unsigned offset,
|
||||
gpiodir = readb(chip->base + GPIODIR);
|
||||
gpiodir |= 1 << offset;
|
||||
writeb(gpiodir, chip->base + GPIODIR);
|
||||
|
||||
/*
|
||||
* gpio value is set again, because pl061 doesn't allow to set value of
|
||||
* a gpio pin before configuring it in OUT mode.
|
||||
*/
|
||||
writeb(!!value << offset, chip->base + (1 << (offset + 2)));
|
||||
spin_unlock_irqrestore(&chip->lock, flags);
|
||||
|
||||
return 0;
|
||||
@@ -183,7 +189,7 @@ static int pl061_irq_type(unsigned irq, unsigned trigger)
|
||||
gpioibe &= ~(1 << offset);
|
||||
if (trigger & IRQ_TYPE_EDGE_RISING)
|
||||
gpioiev |= 1 << offset;
|
||||
else
|
||||
else if (trigger & IRQ_TYPE_EDGE_FALLING)
|
||||
gpioiev &= ~(1 << offset);
|
||||
}
|
||||
writeb(gpioibe, chip->base + GPIOIBE);
|
||||
@@ -204,7 +210,7 @@ static struct irq_chip pl061_irqchip = {
|
||||
|
||||
static void pl061_irq_handler(unsigned irq, struct irq_desc *desc)
|
||||
{
|
||||
struct list_head *chip_list = get_irq_chip_data(irq);
|
||||
struct list_head *chip_list = get_irq_data(irq);
|
||||
struct list_head *ptr;
|
||||
struct pl061_gpio *chip;
|
||||
|
||||
@@ -297,9 +303,9 @@ static int __init pl061_probe(struct amba_device *dev, struct amba_id *id)
|
||||
goto iounmap;
|
||||
}
|
||||
INIT_LIST_HEAD(chip_list);
|
||||
set_irq_chip_data(irq, chip_list);
|
||||
set_irq_data(irq, chip_list);
|
||||
} else
|
||||
chip_list = get_irq_chip_data(irq);
|
||||
chip_list = get_irq_data(irq);
|
||||
list_add(&chip->list, chip_list);
|
||||
|
||||
for (i = 0; i < PL061_GPIO_NR; i++) {
|
||||
|
||||
Reference in New Issue
Block a user