#include <linux/platform_device.h>
 #include <linux/of.h>
 #include <linux/of_device.h>
+#include <linux/of_irq.h>
 #include <linux/pinctrl/pinctrl.h>
 
 #include "pinctrl-sunxi.h"
                  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 13)), /* PG_EINT13 */
 };
 
-static const struct sunxi_pinctrl_desc sun50i_h5_pinctrl_data = {
+static const struct sunxi_pinctrl_desc sun50i_h5_pinctrl_data_broken = {
        .pins = sun50i_h5_pins,
        .npins = ARRAY_SIZE(sun50i_h5_pins),
        .irq_banks = 2,
        .irq_read_needs_mux = true
 };
 
+static const struct sunxi_pinctrl_desc sun50i_h5_pinctrl_data = {
+       .pins = sun50i_h5_pins,
+       .npins = ARRAY_SIZE(sun50i_h5_pins),
+       .irq_banks = 3,
+       .irq_read_needs_mux = true
+};
+
 static int sun50i_h5_pinctrl_probe(struct platform_device *pdev)
 {
-       return sunxi_pinctrl_init(pdev,
-                                 &sun50i_h5_pinctrl_data);
+       switch (of_irq_count(pdev->dev.of_node)) {
+       case 2:
+               dev_warn(&pdev->dev,
+                        "Your device tree's pinctrl node is broken, which has no IRQ of PG bank routed.\n");
+               dev_warn(&pdev->dev,
+                        "Please update the device tree, otherwise PG bank IRQ won't work.\n");
+               return sunxi_pinctrl_init(pdev,
+                                         &sun50i_h5_pinctrl_data_broken);
+       case 3:
+               return sunxi_pinctrl_init(pdev,
+                                         &sun50i_h5_pinctrl_data);
+       default:
+               return -EINVAL;
+       }
 }
 
 static const struct of_device_id sun50i_h5_pinctrl_match[] = {