unsigned int keycount;
        struct mt6397_chip *pmic_chip = dev_get_drvdata(pdev->dev.parent);
        struct device_node *node = pdev->dev.of_node, *child;
+       static const char *const irqnames[] = { "powerkey", "homekey" };
        struct mtk_pmic_keys *keys;
        const struct mtk_pmic_regs *mtk_pmic_regs;
        struct input_dev *input_dev;
        input_dev->id.version = 0x0001;
 
        keycount = of_get_available_child_count(node);
-       if (keycount > MTK_PMIC_MAX_KEY_COUNT) {
+       if (keycount > MTK_PMIC_MAX_KEY_COUNT ||
+           keycount > ARRAY_SIZE(irqnames)) {
                dev_err(keys->dev, "too many keys defined (%d)\n", keycount);
                return -EINVAL;
        }
        for_each_child_of_node(node, child) {
                keys->keys[index].regs = &mtk_pmic_regs->keys_regs[index];
 
-               keys->keys[index].irq = platform_get_irq(pdev, index);
+               keys->keys[index].irq =
+                       platform_get_irq_byname(pdev, irqnames[index]);
                if (keys->keys[index].irq < 0) {
                        of_node_put(child);
                        return keys->keys[index].irq;