int sapphire_init_gpio(void) { int i; if (!machine_is_sapphire()) return 0; DBG("%d,%d\r\n",SAPPHIRE_INT_START, SAPPHIRE_INT_END); DBG("NR_MSM_IRQS=%d, NR_GPIO_IRQS=%d\r\n", NR_MSM_IRQS, NR_GPIO_IRQS); for(i = SAPPHIRE_INT_START; i <= SAPPHIRE_INT_END; i++) { set_irq_chip(i, &sapphire_gpio_irq_chip); set_irq_handler(i, handle_edge_irq); set_irq_flags(i, IRQF_VALID); } register_gpio_chip(&sapphire_gpio_chip); register_gpio_chip(&sapphire_h2w_gpio_chip); /*setup CPLD INT connecting to SOC's gpio 17 */ set_irq_type(MSM_GPIO_TO_INT(17), IRQF_TRIGGER_HIGH); set_irq_chained_handler(MSM_GPIO_TO_INT(17), sapphire_gpio_irq_handler); set_irq_wake(MSM_GPIO_TO_INT(17), 1); if(sysdev_class_register(&sapphire_sysdev_class) == 0) sysdev_register(&sapphire_irq_device); return 0; }
static int __init msm_init_gpio(void) { int i, j = 0; for (i = FIRST_GPIO_IRQ; i < FIRST_GPIO_IRQ + NR_GPIO_IRQS; i++) { if (i - FIRST_GPIO_IRQ > msm_gpio_chips[j].chip.end) { if (j < ARRAY_SIZE(msm_gpio_chips) - 1) j++; } set_irq_chip_data(i, &msm_gpio_chips[j]); set_irq_chip(i, &msm_gpio_irq_chip); set_irq_handler(i, handle_edge_irq); set_irq_flags(i, IRQF_VALID); } for (i = 0; i < ARRAY_SIZE(msm_gpio_chips); i++) { writel(0, msm_gpio_chips[i].regs.int_en); register_gpio_chip(&msm_gpio_chips[i].chip); } set_irq_chained_handler(INT_GPIO_GROUP1, msm_gpio_irq_handler); set_irq_chained_handler(INT_GPIO_GROUP2, msm_gpio_irq_handler); set_irq_wake(INT_GPIO_GROUP1, 1); set_irq_wake(INT_GPIO_GROUP2, 2); return 0; }
static int __devinit pm8058_mpp_probe(struct platform_device *pdev) { int rc; struct pm8058_gpio_platform_data *pdata = pdev->dev.platform_data; pm8058_mpp_chip.chip.dev = &pdev->dev; pm8058_mpp_chip.chip.start = pdata->gpio_base; pm8058_mpp_chip.chip.end = pdata->gpio_base + PM8058_MPPS - 1; rc = register_gpio_chip(&pm8058_mpp_chip.chip); pr_info("%s: register_gpio_chip(): rc=%d\n", __func__, rc); return rc; }
/* Public functions */ void stm32_gpio_init(void) { int i; if (stm32_gpio_chip_initalized) { lldbg("%s: already initialized, exiting\n", __func__); return; } /* Init internal data: default edge triggering and ISR */ for (i = 0; i < (STM32_NGPIO + 1); i++) { stm32_gpio[i].isr = NULL; stm32_gpio[i].flags = 0; } /* Register to gpio_chip */ register_gpio_chip(&stm32_gpio_ops, STM32_GPIO_CHIP_BASE, &stm32_gpio_ops); stm32_gpio_chip_initalized = true; }
static int __init msm_init_gpio(void) { int i; for (i = NR_MSM_IRQS; i < NR_MSM_IRQS + NR_GPIO_IRQS; i++) { set_irq_chip(i, &msm_gpio_irq_chip); set_irq_handler(i, handle_edge_irq); set_irq_flags(i, IRQF_VALID); } for (i = 0; i < ARRAY_SIZE(msm_gpio_chips); i++) { writel(0, msm_gpio_chips[i].regs.int_en); register_gpio_chip(&msm_gpio_chips[i].chip); } set_irq_chained_handler(INT_GPIO_GROUP1, msm_gpio_irq_handler); set_irq_chained_handler(INT_GPIO_GROUP2, msm_gpio_irq_handler); set_irq_wake(INT_GPIO_GROUP1, 1); set_irq_wake(INT_GPIO_GROUP2, 2); return 0; }
void latte_init_h2w_power_gpio(void) { register_gpio_chip(&latte_h2w_gpio_chip); }
void bahamas_init_h2w_power_gpio(void) { register_gpio_chip(&bahamas_h2w_gpio_chip); }