|
@@ -1656,8 +1656,11 @@ static int chv_pinctrl_suspend(struct device *dev)
|
|
|
{
|
|
|
struct platform_device *pdev = to_platform_device(dev);
|
|
|
struct chv_pinctrl *pctrl = platform_get_drvdata(pdev);
|
|
|
+ unsigned long flags;
|
|
|
int i;
|
|
|
|
|
|
+ raw_spin_lock_irqsave(&chv_lock, flags);
|
|
|
+
|
|
|
pctrl->saved_intmask = readl(pctrl->regs + CHV_INTMASK);
|
|
|
|
|
|
for (i = 0; i < pctrl->community->npins; i++) {
|
|
@@ -1678,6 +1681,8 @@ static int chv_pinctrl_suspend(struct device *dev)
|
|
|
ctx->padctrl1 = readl(reg);
|
|
|
}
|
|
|
|
|
|
+ raw_spin_unlock_irqrestore(&chv_lock, flags);
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -1685,8 +1690,11 @@ static int chv_pinctrl_resume(struct device *dev)
|
|
|
{
|
|
|
struct platform_device *pdev = to_platform_device(dev);
|
|
|
struct chv_pinctrl *pctrl = platform_get_drvdata(pdev);
|
|
|
+ unsigned long flags;
|
|
|
int i;
|
|
|
|
|
|
+ raw_spin_lock_irqsave(&chv_lock, flags);
|
|
|
+
|
|
|
/*
|
|
|
* Mask all interrupts before restoring per-pin configuration
|
|
|
* registers because we don't know in which state BIOS left them
|
|
@@ -1731,6 +1739,8 @@ static int chv_pinctrl_resume(struct device *dev)
|
|
|
chv_writel(0xffff, pctrl->regs + CHV_INTSTAT);
|
|
|
chv_writel(pctrl->saved_intmask, pctrl->regs + CHV_INTMASK);
|
|
|
|
|
|
+ raw_spin_unlock_irqrestore(&chv_lock, flags);
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
#endif
|