mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-11 23:23:52 +08:00
platform/x86: intel_int0002_vgpio: Only implement irq_set_wake on Bay Trail
Commitc3b8e884de
("platform/x86: intel_int0002_vgpio: Implement irq_set_wake"), was written to fix some wakeup issues on Bay Trail (BYT) devices. We've received a bug report that this causes a suspend regression on some Cherry Trail (CHT) based devices. To fix the issues this causes on CHT devices, this commit modifies the irq_set_wake support so that we only implement irq_set_wake on BYT devices, Fixes:c3b8e884de
("platform/x86: intel_int0002_vgpio: ... irq_set_wake") Reported-and-tested-by: Maxim Mikityanskiy <maxtram95@gmail.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
This commit is contained in:
parent
0bbbe97f2f
commit
871f1f2bcb
@ -51,11 +51,14 @@
|
|||||||
#define GPE0A_STS_PORT 0x420
|
#define GPE0A_STS_PORT 0x420
|
||||||
#define GPE0A_EN_PORT 0x428
|
#define GPE0A_EN_PORT 0x428
|
||||||
|
|
||||||
#define ICPU(model) { X86_VENDOR_INTEL, 6, model, X86_FEATURE_ANY, }
|
#define BAYTRAIL 0x01
|
||||||
|
#define CHERRYTRAIL 0x02
|
||||||
|
|
||||||
|
#define ICPU(model, data) { X86_VENDOR_INTEL, 6, model, X86_FEATURE_ANY, data }
|
||||||
|
|
||||||
static const struct x86_cpu_id int0002_cpu_ids[] = {
|
static const struct x86_cpu_id int0002_cpu_ids[] = {
|
||||||
ICPU(INTEL_FAM6_ATOM_SILVERMONT), /* Valleyview, Bay Trail */
|
ICPU(INTEL_FAM6_ATOM_SILVERMONT, BAYTRAIL), /* Valleyview, Bay Trail */
|
||||||
ICPU(INTEL_FAM6_ATOM_AIRMONT), /* Braswell, Cherry Trail */
|
ICPU(INTEL_FAM6_ATOM_AIRMONT, CHERRYTRAIL), /* Braswell, Cherry Trail */
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -135,7 +138,7 @@ static irqreturn_t int0002_irq(int irq, void *data)
|
|||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct irq_chip int0002_irqchip = {
|
static struct irq_chip int0002_byt_irqchip = {
|
||||||
.name = DRV_NAME,
|
.name = DRV_NAME,
|
||||||
.irq_ack = int0002_irq_ack,
|
.irq_ack = int0002_irq_ack,
|
||||||
.irq_mask = int0002_irq_mask,
|
.irq_mask = int0002_irq_mask,
|
||||||
@ -143,10 +146,22 @@ static struct irq_chip int0002_irqchip = {
|
|||||||
.irq_set_wake = int0002_irq_set_wake,
|
.irq_set_wake = int0002_irq_set_wake,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct irq_chip int0002_cht_irqchip = {
|
||||||
|
.name = DRV_NAME,
|
||||||
|
.irq_ack = int0002_irq_ack,
|
||||||
|
.irq_mask = int0002_irq_mask,
|
||||||
|
.irq_unmask = int0002_irq_unmask,
|
||||||
|
/*
|
||||||
|
* No set_wake, on CHT the IRQ is typically shared with the ACPI SCI
|
||||||
|
* and we don't want to mess with the ACPI SCI irq settings.
|
||||||
|
*/
|
||||||
|
};
|
||||||
|
|
||||||
static int int0002_probe(struct platform_device *pdev)
|
static int int0002_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct device *dev = &pdev->dev;
|
struct device *dev = &pdev->dev;
|
||||||
const struct x86_cpu_id *cpu_id;
|
const struct x86_cpu_id *cpu_id;
|
||||||
|
struct irq_chip *irq_chip;
|
||||||
struct gpio_chip *chip;
|
struct gpio_chip *chip;
|
||||||
int irq, ret;
|
int irq, ret;
|
||||||
|
|
||||||
@ -195,14 +210,19 @@ static int int0002_probe(struct platform_device *pdev)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = gpiochip_irqchip_add(chip, &int0002_irqchip, 0, handle_edge_irq,
|
if (cpu_id->driver_data == BAYTRAIL)
|
||||||
|
irq_chip = &int0002_byt_irqchip;
|
||||||
|
else
|
||||||
|
irq_chip = &int0002_cht_irqchip;
|
||||||
|
|
||||||
|
ret = gpiochip_irqchip_add(chip, irq_chip, 0, handle_edge_irq,
|
||||||
IRQ_TYPE_NONE);
|
IRQ_TYPE_NONE);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(dev, "Error adding irqchip: %d\n", ret);
|
dev_err(dev, "Error adding irqchip: %d\n", ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
gpiochip_set_chained_irqchip(chip, &int0002_irqchip, irq, NULL);
|
gpiochip_set_chained_irqchip(chip, irq_chip, irq, NULL);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user