pinctrl: samsung: Match pin banks with their device nodes
authorTomasz Figa <t.figa@samsung.com>
Thu, 11 Oct 2012 08:11:13 +0000 (10:11 +0200)
committerLinus Walleij <linus.walleij@linaro.org>
Mon, 15 Oct 2012 07:10:11 +0000 (09:10 +0200)
This patch is a preparation for converting the pinctrl-samsung driver to
one GPIO chip and IRQ domain per bank. It binds banks defined by
internal driver data with bank nodes in device tree.

Signed-off-by: Tomasz Figa <t.figa@samsung.com>
Reviewed-by: Kyungmin Park <kyungmin.park@samsung.com>
Acked-by: Thomas Abraham <thomas.abraham@linaro.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/pinctrl-samsung.c
drivers/pinctrl/pinctrl-samsung.h

index 94e13780a6a6a77ddba8ee0758e032df16b2572c..f266710a1b04f562fe3d7faad08f4e1b24959d81 100644 (file)
@@ -794,6 +794,7 @@ static struct samsung_pin_ctrl *samsung_pinctrl_get_soc_data(
        int id;
        const struct of_device_id *match;
        const struct device_node *node = pdev->dev.of_node;
+       struct device_node *np;
        struct samsung_pin_ctrl *ctrl;
        struct samsung_pin_bank *bank;
        int i;
@@ -816,6 +817,18 @@ static struct samsung_pin_ctrl *samsung_pinctrl_get_soc_data(
                }
        }
 
+       for_each_child_of_node(node, np) {
+               if (!of_find_property(np, "gpio-controller", NULL))
+                       continue;
+               bank = ctrl->pin_banks;
+               for (i = 0; i < ctrl->nr_banks; ++i, ++bank) {
+                       if (!strcmp(bank->name, np->name)) {
+                               bank->of_node = np;
+                               break;
+                       }
+               }
+       }
+
        ctrl->base = pin_base;
        pin_base += ctrl->nr_pins;
 
index b8956934cda683c8ecc99f8c8a64b1b0a27bf546..5c53f32cca06ea300db335824578cb443a935f0a 100644 (file)
@@ -111,6 +111,7 @@ struct samsung_pinctrl_drv_data;
  * @eint_type: type of the external interrupt supported by the bank.
  * @irq_base: starting controller local irq number of the bank.
  * @name: name to be prefixed for each pin in this pin bank.
+ * @of_node: OF node of the bank.
  */
 struct samsung_pin_bank {
        u32             pctl_offset;
@@ -124,6 +125,7 @@ struct samsung_pin_bank {
        enum eint_type  eint_type;
        u32             irq_base;
        char            *name;
+       struct device_node *of_node;
 };
 
 /**