static int register_irq(struct platform_device *pdev,
                struct regulator_dev *rdev,
                const struct rt5033_pmic_irq_handler *irq_handler,
                int irq_handler_size)
{
    int irq;
    int i, j;
    int ret;
    const char *irq_name;
    for (i = 0; i < irq_handler_size; i++) {
        irq_name = rt5033_get_irq_name_by_index(irq_handler[i].irq_index);
        irq = platform_get_irq_byname(pdev, irq_name);
        ret = request_threaded_irq(irq, NULL, irq_handler[i].handler,
                       IRQF_ONESHOT, irq_name, rdev);
        if (ret < 0) {
            pr_err("Failed to request IRQ: #%d: %d\n", irq, ret);
            goto err_irq;
        }
    }

    return 0;
err_irq:
    for (j = 0; j < i; j++) {
        irq_name = rt5033_get_irq_name_by_index(irq_handler[i].irq_index);
        irq = platform_get_irq_byname(pdev, irq_name);
        free_irq(irq, rdev);
    }
    return ret;
}
Esempio n. 2
0
static int register_irq(struct platform_device *pdev,
			rt5033_fled_info_t *info)
{
	int irq;
	int i, j;
	int ret;
	const struct rt5033_fled_irq_handler *irq_handler = rt5033_fled_irq_handlers;
	const char *irq_name;
	for (i = 0; i < ARRAY_SIZE(rt5033_fled_irq_handlers); i++) {
		irq_name = rt5033_get_irq_name_by_index(irq_handler[i].irq_index);
		irq = platform_get_irq_byname(pdev, irq_name);
		ret = request_threaded_irq(irq, NULL, irq_handler[i].handler,
					   IRQF_ONESHOT | IRQF_TRIGGER_RISING |
					   IRQF_NO_SUSPEND, irq_name, info);
		if (ret < 0) {
			RT5033_FLED_ERR("Failed to request IRQ (%s): #%d: %d\n", irq_name, irq, ret);
			goto err_irq;
		}
	}

	return 0;
err_irq:
	for (j = 0; j < i; j++) {
		irq_name = rt5033_get_irq_name_by_index(irq_handler[j].irq_index);
		irq = platform_get_irq_byname(pdev, irq_name);
		free_irq(irq, info);
	}
	return ret;
}
Esempio n. 3
0
static void unregister_irq(struct platform_device *pdev,
			   rt5033_fled_info_t *info)
{
	int irq;
	int i;
	const char *irq_name;
	const struct rt5033_fled_irq_handler *irq_handler = rt5033_fled_irq_handlers;
	for (i = 0; i < ARRAY_SIZE(rt5033_fled_irq_handlers); i++) {
		irq_name = rt5033_get_irq_name_by_index(irq_handler[i].irq_index);
		irq = platform_get_irq_byname(pdev, irq_name);
		free_irq(irq, info);
	}
}
static void unregister_irq(struct platform_device *pdev,
                struct regulator_dev *rdev,
                const struct rt5033_pmic_irq_handler *irq_handler,
                int irq_handler_size)
{
    int irq;
    int i;
    const char *irq_name;
    for (i = 0; i < irq_handler_size; i++) {
        irq_name = rt5033_get_irq_name_by_index(irq_handler[i].irq_index);
        irq = platform_get_irq_byname(pdev, irq_name);
        free_irq(irq, rdev);
    }
}