]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
karo: fdt: convert tx6qdl_fixup_flexcan() to global function karo_fdt_fixup_flexcan()
authorLothar Waßmann <LW@KARO-electronics.de>
Mon, 21 Oct 2013 13:53:36 +0000 (15:53 +0200)
committerLothar Waßmann <LW@KARO-electronics.de>
Mon, 21 Oct 2013 13:53:36 +0000 (15:53 +0200)
board/karo/common/fdt.c
board/karo/common/karo.h
board/karo/tx48/tx48.c
board/karo/tx6/tx6qdl.c

index 31435e4cf9ceb0fa89907dc5267083e02e50c991..f308bb65d22a79b1d22b01dadd26233fa6b7734a 100644 (file)
@@ -237,6 +237,81 @@ out:
        karo_set_fdtsize(blob);
 }
 
+static int karo_fdt_flexcan_enabled(void *blob)
+{
+       const char *can_ifs[] = {
+               "can0",
+               "can1",
+       };
+       size_t i;
+
+       for (i = 0; i < ARRAY_SIZE(can_ifs); i++) {
+               const char *status;
+               int off = fdt_path_offset(blob, can_ifs[i]);
+
+               if (off < 0) {
+                       debug("node '%s' not found\n", can_ifs[i]);
+                       continue;
+               }
+               status = fdt_getprop(blob, off, "status", NULL);
+               if (strcmp(status, "okay") == 0) {
+                       debug("%s is enabled\n", can_ifs[i]);
+                       return 1;
+               }
+       }
+       debug("can driver is disabled\n");
+       return 0;
+}
+
+static void karo_fdt_set_lcd_pins(void *blob, const char *name)
+{
+       int off = fdt_path_offset(blob, name);
+       u32 ph;
+       const struct fdt_property *pc;
+       int len;
+
+       if (off < 0)
+               return;
+
+       ph = fdt_create_phandle(blob, off);
+       if (!ph)
+               return;
+
+       off = fdt_path_offset(blob, "display");
+       if (off < 0)
+               return;
+
+       pc = fdt_get_property(blob, off, "pinctrl-0", &len);
+       if (!pc || len < sizeof(ph))
+               return;
+
+       memcpy((void *)pc->data, &ph, sizeof(ph));
+       fdt_setprop_cell(blob, off, "pinctrl-0", ph);
+}
+
+void karo_fdt_fixup_flexcan(void *blob, int xcvr_present)
+{
+       const char *xcvr_status = "disabled";
+
+       if (xcvr_present) {
+               if (karo_fdt_flexcan_enabled(blob)) {
+                       karo_fdt_set_lcd_pins(blob, "lcdif_23bit_pins_a");
+                       xcvr_status = "okay";
+               } else {
+                       karo_fdt_set_lcd_pins(blob, "lcdif_24bit_pins_a");
+               }
+       } else {
+               const char *otg_mode = getenv("otg_mode");
+
+               if (otg_mode && (strcmp(otg_mode, "host") == 0))
+                       karo_fdt_enable_node(blob, "can1", 0);
+
+               karo_fdt_set_lcd_pins(blob, "lcdif_24bit_pins_a");
+       }
+       fdt_find_and_setprop(blob, "/regulators/can-xcvr", "status",
+                       xcvr_status, strlen(xcvr_status) + 1, 1);
+}
+
 void karo_fdt_del_prop(void *blob, const char *compat, phys_addr_t offs,
                        const char *prop)
 {
index dbfa58e56649431e531a2be725e7bb170edeff89..ba4ef467edcee8e416a7d53d4392415c40044aab 100644 (file)
@@ -21,6 +21,7 @@ void karo_fdt_remove_node(void *blob, const char *node);
 void karo_fdt_move_fdt(void);
 void karo_fdt_fixup_touchpanel(void *blob);
 void karo_fdt_fixup_usb_otg(void *blob, const char *node, const char *phy);
+void karo_fdt_fixup_flexcan(void *blob, int xcvr_present);
 void karo_fdt_del_prop(void *blob, const char *compat, phys_addr_t offs,
                const char *prop);
 void karo_fdt_enable_node(void *blob, const char *node, int enable);
@@ -44,6 +45,9 @@ static inline void karo_fdt_fixup_usb_otg(void *blob, const char *node,
                                        const char *phy)
 {
 }
+static inline void karo_fdt_fixup_flexcan(void *blob, int xcvr_present)
+{
+}
 static inline void karo_fdt_del_prop(void *blob, const char *compat,
                                phys_addr_t offs, const char *prop)
 {
index 9bf75f8962cc726e3d33a3a92663c3d7cadcefb0..58566b77eaf7fa818edfb30ea3ea9fc903fc87cc 100644 (file)
@@ -830,24 +830,16 @@ struct node_info nodes[] = {
 #define fdt_fixup_mtdparts(b,n,c) do { } while (0)
 #endif /* CONFIG_FDT_FIXUP_PARTITIONS */
 
-static void tx48_fixup_flexcan(void *blob)
+void ft_board_setup(void *blob, bd_t *bd)
 {
        const char *baseboard = getenv("baseboard");
+       int stk5_v5 = baseboard != NULL && (strcmp(baseboard, "stk5-v5") == 0);
 
-       if (baseboard && strcmp(baseboard, "stk5-v5") == 0)
-               return;
-
-       karo_fdt_del_prop(blob, "ti,dcan", 0x481cc000, "can-xcvr-enable");
-       karo_fdt_del_prop(blob, "ti,dcan", 0x481d0000, "can-xcvr-enable");
-}
-
-void ft_board_setup(void *blob, bd_t *bd)
-{
        fdt_fixup_mtdparts(blob, nodes, ARRAY_SIZE(nodes));
        fdt_fixup_ethernet(blob);
 
        karo_fdt_fixup_touchpanel(blob);
-       tx48_fixup_flexcan(blob);
+       karo_fdt_fixup_flexcan(blob, stk5_v5);
 
        tx48_disable_watchdog();
 }
index 15324068d4c412c82287b5f2242b89da8071bf0a..3cd37d7a3aa0de99aff69713eb979c305da65455 100644 (file)
@@ -1140,81 +1140,6 @@ struct node_info nodes[] = {
 #define fdt_fixup_mtdparts(b,n,c) do { } while (0)
 #endif
 
-static int flexcan_enabled(void *blob)
-{
-       const char *can_ifs[] = {
-               "can0",
-               "can1",
-       };
-       size_t i;
-
-       for (i = 0; i < ARRAY_SIZE(can_ifs); i++) {
-               const char *status;
-               int off = fdt_path_offset(blob, can_ifs[i]);
-
-               if (off < 0) {
-                       debug("node '%s' not found\n", can_ifs[i]);
-                       continue;
-               }
-               status = fdt_getprop(blob, off, "status", NULL);
-               if (strcmp(status, "okay") == 0) {
-                       debug("%s is enabled\n", can_ifs[i]);
-                       return 1;
-               }
-       }
-       debug("can driver is disabled\n");
-       return 0;
-}
-
-static void tx6qdl_set_lcd_pins(void *blob, const char *name)
-{
-       int off = fdt_path_offset(blob, name);
-       u32 ph;
-       const struct fdt_property *pc;
-       int len;
-
-       if (off < 0)
-               return;
-
-       ph = fdt_create_phandle(blob, off);
-       if (!ph)
-               return;
-
-       off = fdt_path_offset(blob, "display");
-       if (off < 0)
-               return;
-
-       pc = fdt_get_property(blob, off, "pinctrl-0", &len);
-       if (!pc || len < sizeof(ph))
-               return;
-
-       memcpy((void *)pc->data, &ph, sizeof(ph));
-       fdt_setprop_cell(blob, off, "pinctrl-0", ph);
-}
-
-static void tx6qdl_fixup_flexcan(void *blob, int stk5_v5)
-{
-       const char *xcvr_status = "disabled";
-
-       if (stk5_v5) {
-               if (flexcan_enabled(blob)) {
-                       tx6qdl_set_lcd_pins(blob, "lcdif_23bit_pins_a");
-                       xcvr_status = "okay";
-               } else {
-                       tx6qdl_set_lcd_pins(blob, "lcdif_24bit_pins_a");
-               }
-       } else {
-               const char *otg_mode = getenv("otg_mode");
-
-               if (otg_mode && (strcmp(otg_mode, "host") == 0))
-                       karo_fdt_enable_node(blob, "can1", 0);
-
-               tx6qdl_set_lcd_pins(blob, "lcdif_24bit_pins_a");
-       }
-       fdt_find_and_setprop(blob, "/regulators/can-xcvr", "status",
-                       xcvr_status, strlen(xcvr_status) + 1, 1);
-}
-
 void ft_board_setup(void *blob, bd_t *bd)
 {
        const char *baseboard = getenv("baseboard");
@@ -1227,7 +1152,7 @@ void ft_board_setup(void *blob, bd_t *bd)
 
        karo_fdt_fixup_touchpanel(blob);
        karo_fdt_fixup_usb_otg(blob, "usbotg", "fsl,usbphy");
-       tx6qdl_fixup_flexcan(blob, stk5_v5);
+       karo_fdt_fixup_flexcan(blob, stk5_v5);
        karo_fdt_update_fb_mode(blob, getenv("video_mode"));
 }
-#endif
+#endif /* CONFIG_OF_BOARD_SETUP */