static int pm8901_suspend(struct i2c_client *client, pm_message_t mesg) { struct pm8901_chip *chip; int i; unsigned long irqsave; chip = i2c_get_clientdata(client); for (i = 0; i < MAX_PM_IRQ; i++) { spin_lock_irqsave(&chip->pm_lock, irqsave); if (chip->config[i] && !chip->wake_enable[i]) { if (!((chip->config[i] & PM8901_IRQF_MASK_ALL) == PM8901_IRQF_MASK_ALL)) pm8901_irq_mask(i + chip->pdata.irq_base); } spin_unlock_irqrestore(&chip->pm_lock, irqsave); } if (!chip->count_wakeable) disable_irq(chip->dev->irq); return 0; }
static int pm8901_suspend(struct platform_device *pdev, pm_message_t mesg) { struct pm8901_chip *chip; int i; unsigned long irqsave; chip = platform_get_drvdata(pdev); for (i = 0; i < MAX_PM_IRQ; i++) { spin_lock_irqsave(&chip->pm_lock, irqsave); if (chip->config[i] && !chip->wake_enable[i]) { if (!((chip->config[i] & PM8901_IRQF_MASK_ALL) == PM8901_IRQF_MASK_ALL)) pm8901_irq_mask(irq_get_irq_data(i + chip->pdata.irq_base)); } spin_unlock_irqrestore(&chip->pm_lock, irqsave); } if (!chip->count_wakeable) disable_irq(chip->pdata.irq); return 0; }