Exemple #1
0
static void pm8xxx_show_resume_irq(void)
{
	u8	root, blockbits, bits;
	int	ret, master, masters = 0;
	int i, j, block, pmirq;

	if (!msm_show_resume_irq_mask)
		return;

	ret = pm8xxx_read_root_irq(chip, &root);
	if (ret) {
		pr_err("Can't read root status ret=%d\n", ret);
		return;
	}

	/* on pm8xxx series masters start from bit 1 of the root */
	masters = root >> 1;

	/* Read allowed masters for blocks. */
	for (master = 0; master < chip->num_masters; master++) {
		if (masters & (1 << master)) {
			ret = pm8xxx_read_master_irq(chip, master, &blockbits);
			if (ret) {
				pr_err("Failed to read master %d ret=%d\n", master, ret);
				return;
			}
			if (!blockbits) {
				pr_err("master bit set in root but no blocks: %d", master);
				return;
			}

			for (i = 0; i < 8; i++) {
				if (blockbits & (1 << i)) {
					block = master * 8 + i;	/* block # */
					ret = pm8xxx_read_block_irq(chip, block, &bits);
					if (ret) {
						pr_err("Failed reading %d block ret=%d", block, ret);
						return;
					}
					if (!bits) {
						pr_err("block bit set in master but no irqs: %d", block);
						return;
					}

					/* Check IRQ bits */
					for (j = 0; j < 8; j++) {
						if (bits & (1 << j)) {
							pmirq = block * 8 + j;
							pr_warning(" %d (%d,%d) triggered", pmirq + chip->irq_base, block, j);
						}
					}
				}
			}
		}
	}
}
Exemple #2
0
static irqreturn_t pm8xxx_irq_handler(int irq, void *data)
{
	struct pm_irq_chip *chip = data;
	u8	root;
	int	i, ret, masters = 0;

	ret = pm8xxx_read_root_irq(chip, &root);
	if (ret) {
		pr_err("Can't read root status ret=%d\n", ret);
		return IRQ_HANDLED;
	}

	/* on pm8xxx series masters start from bit 1 of the root */
	masters = root >> 1;

	/* Read allowed masters for blocks. */
	for (i = 0; i < chip->num_masters; i++)
		if (masters & (1 << i))
			pm8xxx_irq_master_handler(chip, i);

	return IRQ_HANDLED;
}
Exemple #3
0
static irqreturn_t pm8xxx_irq_handler(int irq, void *data)
{
	struct pm_irq_chip *chip = data;
	u8	root;
	int	i, ret, masters = 0;

	ret = pm8xxx_read_root_irq(chip, &root);
	if (ret) {
		pr_err("Can't read root status ret=%d\n", ret);
		return IRQ_HANDLED;
	}

	
	masters = root >> 1;

	
	for (i = 0; i < chip->num_masters; i++)
		if (masters & (1 << i))
			pm8xxx_irq_master_handler(chip, i);

	return IRQ_HANDLED;
}
Exemple #4
0
static void pm8xxx_irq_handler(unsigned int irq, struct irq_desc *desc)
{
	struct pm_irq_chip *chip = irq_desc_get_handler_data(desc);
	struct irq_chip *irq_chip = irq_desc_get_chip(desc);
	u8	root;
	int	i, ret, masters = 0;

	ret = pm8xxx_read_root_irq(chip, &root);
	if (ret) {
		pr_err("Can't read root status ret=%d\n", ret);
		return;
	}

	/* on pm8xxx series masters start from bit 1 of the root */
	masters = root >> 1;

	/* Read allowed masters for blocks. */
	for (i = 0; i < chip->num_masters; i++)
		if (masters & (1 << i))
			pm8xxx_irq_master_handler(chip, i);

	irq_chip->irq_ack(&desc->irq_data);
}