root/arch/arm/plat-samsung/wakeup-mask.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. samsung_sync_wakemask

   1 // SPDX-License-Identifier: GPL-2.0
   2 //
   3 // Copyright 2010 Ben Dooks <ben-linux@fluff.org>
   4 //
   5 // Support for wakeup mask interrupts on newer SoCs
   6 
   7 #include <linux/kernel.h>
   8 #include <linux/spinlock.h>
   9 #include <linux/device.h>
  10 #include <linux/types.h>
  11 #include <linux/irq.h>
  12 #include <linux/io.h>
  13 
  14 #include <plat/wakeup-mask.h>
  15 #include <plat/pm.h>
  16 
  17 void samsung_sync_wakemask(void __iomem *reg,
  18                            const struct samsung_wakeup_mask *mask, int nr_mask)
  19 {
  20         struct irq_data *data;
  21         u32 val;
  22 
  23         val = __raw_readl(reg);
  24 
  25         for (; nr_mask > 0; nr_mask--, mask++) {
  26                 if (mask->irq == NO_WAKEUP_IRQ) {
  27                         val |= mask->bit;
  28                         continue;
  29                 }
  30 
  31                 data = irq_get_irq_data(mask->irq);
  32 
  33                 /* bit of a liberty to read this directly from irq_data. */
  34                 if (irqd_is_wakeup_set(data))
  35                         val &= ~mask->bit;
  36                 else
  37                         val |= mask->bit;
  38         }
  39 
  40         printk(KERN_INFO "wakemask %08x => %08x\n", __raw_readl(reg), val);
  41         __raw_writel(val, reg);
  42 }

/* [<][>][^][v][top][bottom][index][help] */