Skip to content

Commit 534e465

Browse files
Kornel Dulębalinusw
authored andcommitted
Revert "pinctrl: amd: Disable and mask interrupts on resume"
This reverts commit b26cd93. This patch introduces a regression on Lenovo Z13, which can't wake from the lid with it applied; and some unspecified AMD based Dell platforms are unable to wake from hitting the power button Signed-off-by: Kornel Dulęba <[email protected]> Reviewed-by: Mario Limonciello <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Linus Walleij <[email protected]>
1 parent 7e364e5 commit 534e465

File tree

1 file changed

+16
-20
lines changed

1 file changed

+16
-20
lines changed

drivers/pinctrl/pinctrl-amd.c

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -872,34 +872,32 @@ static const struct pinconf_ops amd_pinconf_ops = {
872872
.pin_config_group_set = amd_pinconf_group_set,
873873
};
874874

875-
static void amd_gpio_irq_init_pin(struct amd_gpio *gpio_dev, int pin)
875+
static void amd_gpio_irq_init(struct amd_gpio *gpio_dev)
876876
{
877-
const struct pin_desc *pd;
877+
struct pinctrl_desc *desc = gpio_dev->pctrl->desc;
878878
unsigned long flags;
879879
u32 pin_reg, mask;
880+
int i;
880881

881882
mask = BIT(WAKE_CNTRL_OFF_S0I3) | BIT(WAKE_CNTRL_OFF_S3) |
882883
BIT(INTERRUPT_MASK_OFF) | BIT(INTERRUPT_ENABLE_OFF) |
883884
BIT(WAKE_CNTRL_OFF_S4);
884885

885-
pd = pin_desc_get(gpio_dev->pctrl, pin);
886-
if (!pd)
887-
return;
886+
for (i = 0; i < desc->npins; i++) {
887+
int pin = desc->pins[i].number;
888+
const struct pin_desc *pd = pin_desc_get(gpio_dev->pctrl, pin);
888889

889-
raw_spin_lock_irqsave(&gpio_dev->lock, flags);
890-
pin_reg = readl(gpio_dev->base + pin * 4);
891-
pin_reg &= ~mask;
892-
writel(pin_reg, gpio_dev->base + pin * 4);
893-
raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
894-
}
890+
if (!pd)
891+
continue;
895892

896-
static void amd_gpio_irq_init(struct amd_gpio *gpio_dev)
897-
{
898-
struct pinctrl_desc *desc = gpio_dev->pctrl->desc;
899-
int i;
893+
raw_spin_lock_irqsave(&gpio_dev->lock, flags);
900894

901-
for (i = 0; i < desc->npins; i++)
902-
amd_gpio_irq_init_pin(gpio_dev, i);
895+
pin_reg = readl(gpio_dev->base + i * 4);
896+
pin_reg &= ~mask;
897+
writel(pin_reg, gpio_dev->base + i * 4);
898+
899+
raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
900+
}
903901
}
904902

905903
#ifdef CONFIG_PM_SLEEP
@@ -952,10 +950,8 @@ static int amd_gpio_resume(struct device *dev)
952950
for (i = 0; i < desc->npins; i++) {
953951
int pin = desc->pins[i].number;
954952

955-
if (!amd_gpio_should_save(gpio_dev, pin)) {
956-
amd_gpio_irq_init_pin(gpio_dev, pin);
953+
if (!amd_gpio_should_save(gpio_dev, pin))
957954
continue;
958-
}
959955

960956
raw_spin_lock_irqsave(&gpio_dev->lock, flags);
961957
gpio_dev->saved_regs[i] |= readl(gpio_dev->base + pin * 4) & PIN_IRQ_PENDING;

0 commit comments

Comments
 (0)