diff options
Diffstat (limited to 'arch/powerpc/sysdev/fsl_soc.c')
-rw-r--r-- | arch/powerpc/sysdev/fsl_soc.c | 541 |
1 files changed, 0 insertions, 541 deletions
diff --git a/arch/powerpc/sysdev/fsl_soc.c b/arch/powerpc/sysdev/fsl_soc.c index 2c5388ce902a..642e45e1f160 100644 --- a/arch/powerpc/sysdev/fsl_soc.c +++ b/arch/powerpc/sysdev/fsl_soc.c | |||
@@ -735,547 +735,6 @@ err: | |||
735 | 735 | ||
736 | arch_initcall(fsl_usb_of_init); | 736 | arch_initcall(fsl_usb_of_init); |
737 | 737 | ||
738 | #ifndef CONFIG_PPC_CPM_NEW_BINDING | ||
739 | #ifdef CONFIG_CPM2 | ||
740 | |||
741 | extern void init_scc_ioports(struct fs_uart_platform_info*); | ||
742 | |||
743 | static const char fcc_regs[] = "fcc_regs"; | ||
744 | static const char fcc_regs_c[] = "fcc_regs_c"; | ||
745 | static const char fcc_pram[] = "fcc_pram"; | ||
746 | static char bus_id[9][BUS_ID_SIZE]; | ||
747 | |||
748 | static int __init fs_enet_of_init(void) | ||
749 | { | ||
750 | struct device_node *np; | ||
751 | unsigned int i; | ||
752 | struct platform_device *fs_enet_dev; | ||
753 | struct resource res; | ||
754 | int ret; | ||
755 | |||
756 | for (np = NULL, i = 0; | ||
757 | (np = of_find_compatible_node(np, "network", "fs_enet")) != NULL; | ||
758 | i++) { | ||
759 | struct resource r[4]; | ||
760 | struct device_node *phy, *mdio; | ||
761 | struct fs_platform_info fs_enet_data; | ||
762 | const unsigned int *id, *phy_addr, *phy_irq; | ||
763 | const void *mac_addr; | ||
764 | const phandle *ph; | ||
765 | const char *model; | ||
766 | |||
767 | memset(r, 0, sizeof(r)); | ||
768 | memset(&fs_enet_data, 0, sizeof(fs_enet_data)); | ||
769 | |||
770 | ret = of_address_to_resource(np, 0, &r[0]); | ||
771 | if (ret) | ||
772 | goto err; | ||
773 | r[0].name = fcc_regs; | ||
774 | |||
775 | ret = of_address_to_resource(np, 1, &r[1]); | ||
776 | if (ret) | ||
777 | goto err; | ||
778 | r[1].name = fcc_pram; | ||
779 | |||
780 | ret = of_address_to_resource(np, 2, &r[2]); | ||
781 | if (ret) | ||
782 | goto err; | ||
783 | r[2].name = fcc_regs_c; | ||
784 | fs_enet_data.fcc_regs_c = r[2].start; | ||
785 | |||
786 | of_irq_to_resource(np, 0, &r[3]); | ||
787 | |||
788 | fs_enet_dev = | ||
789 | platform_device_register_simple("fsl-cpm-fcc", i, &r[0], 4); | ||
790 | |||
791 | if (IS_ERR(fs_enet_dev)) { | ||
792 | ret = PTR_ERR(fs_enet_dev); | ||
793 | goto err; | ||
794 | } | ||
795 | |||
796 | model = of_get_property(np, "model", NULL); | ||
797 | if (model == NULL) { | ||
798 | ret = -ENODEV; | ||
799 | goto unreg; | ||
800 | } | ||
801 | |||
802 | mac_addr = of_get_mac_address(np); | ||
803 | if (mac_addr) | ||
804 | memcpy(fs_enet_data.macaddr, mac_addr, 6); | ||
805 | |||
806 | ph = of_get_property(np, "phy-handle", NULL); | ||
807 | phy = of_find_node_by_phandle(*ph); | ||
808 | |||
809 | if (phy == NULL) { | ||
810 | ret = -ENODEV; | ||
811 | goto unreg; | ||
812 | } | ||
813 | |||
814 | phy_addr = of_get_property(phy, "reg", NULL); | ||
815 | fs_enet_data.phy_addr = *phy_addr; | ||
816 | |||
817 | phy_irq = of_get_property(phy, "interrupts", NULL); | ||
818 | |||
819 | id = of_get_property(np, "device-id", NULL); | ||
820 | fs_enet_data.fs_no = *id; | ||
821 | strcpy(fs_enet_data.fs_type, model); | ||
822 | |||
823 | mdio = of_get_parent(phy); | ||
824 | ret = of_address_to_resource(mdio, 0, &res); | ||
825 | if (ret) { | ||
826 | of_node_put(phy); | ||
827 | of_node_put(mdio); | ||
828 | goto unreg; | ||
829 | } | ||
830 | |||
831 | fs_enet_data.clk_rx = *((u32 *)of_get_property(np, | ||
832 | "rx-clock", NULL)); | ||
833 | fs_enet_data.clk_tx = *((u32 *)of_get_property(np, | ||
834 | "tx-clock", NULL)); | ||
835 | |||
836 | if (strstr(model, "FCC")) { | ||
837 | int fcc_index = *id - 1; | ||
838 | const unsigned char *mdio_bb_prop; | ||
839 | |||
840 | fs_enet_data.dpram_offset = (u32)cpm_dpram_addr(0); | ||
841 | fs_enet_data.rx_ring = 32; | ||
842 | fs_enet_data.tx_ring = 32; | ||
843 | fs_enet_data.rx_copybreak = 240; | ||
844 | fs_enet_data.use_napi = 0; | ||
845 | fs_enet_data.napi_weight = 17; | ||
846 | fs_enet_data.mem_offset = FCC_MEM_OFFSET(fcc_index); | ||
847 | fs_enet_data.cp_page = CPM_CR_FCC_PAGE(fcc_index); | ||
848 | fs_enet_data.cp_block = CPM_CR_FCC_SBLOCK(fcc_index); | ||
849 | |||
850 | snprintf((char*)&bus_id[(*id)], BUS_ID_SIZE, "%x:%02x", | ||
851 | (u32)res.start, fs_enet_data.phy_addr); | ||
852 | fs_enet_data.bus_id = (char*)&bus_id[(*id)]; | ||
853 | fs_enet_data.init_ioports = init_fcc_ioports; | ||
854 | |||
855 | mdio_bb_prop = of_get_property(phy, "bitbang", NULL); | ||
856 | if (mdio_bb_prop) { | ||
857 | struct platform_device *fs_enet_mdio_bb_dev; | ||
858 | struct fs_mii_bb_platform_info fs_enet_mdio_bb_data; | ||
859 | |||
860 | fs_enet_mdio_bb_dev = | ||
861 | platform_device_register_simple("fsl-bb-mdio", | ||
862 | i, NULL, 0); | ||
863 | memset(&fs_enet_mdio_bb_data, 0, | ||
864 | sizeof(struct fs_mii_bb_platform_info)); | ||
865 | fs_enet_mdio_bb_data.mdio_dat.bit = | ||
866 | mdio_bb_prop[0]; | ||
867 | fs_enet_mdio_bb_data.mdio_dir.bit = | ||
868 | mdio_bb_prop[1]; | ||
869 | fs_enet_mdio_bb_data.mdc_dat.bit = | ||
870 | mdio_bb_prop[2]; | ||
871 | fs_enet_mdio_bb_data.mdio_port = | ||
872 | mdio_bb_prop[3]; | ||
873 | fs_enet_mdio_bb_data.mdc_port = | ||
874 | mdio_bb_prop[4]; | ||
875 | fs_enet_mdio_bb_data.delay = | ||
876 | mdio_bb_prop[5]; | ||
877 | |||
878 | fs_enet_mdio_bb_data.irq[0] = phy_irq[0]; | ||
879 | fs_enet_mdio_bb_data.irq[1] = -1; | ||
880 | fs_enet_mdio_bb_data.irq[2] = -1; | ||
881 | fs_enet_mdio_bb_data.irq[3] = phy_irq[0]; | ||
882 | fs_enet_mdio_bb_data.irq[31] = -1; | ||
883 | |||
884 | fs_enet_mdio_bb_data.mdio_dat.offset = | ||
885 | (u32)&cpm2_immr->im_ioport.iop_pdatc; | ||
886 | fs_enet_mdio_bb_data.mdio_dir.offset = | ||
887 | (u32)&cpm2_immr->im_ioport.iop_pdirc; | ||
888 | fs_enet_mdio_bb_data.mdc_dat.offset = | ||
889 | (u32)&cpm2_immr->im_ioport.iop_pdatc; | ||
890 | |||
891 | ret = platform_device_add_data( | ||
892 | fs_enet_mdio_bb_dev, | ||
893 | &fs_enet_mdio_bb_data, | ||
894 | sizeof(struct fs_mii_bb_platform_info)); | ||
895 | if (ret) | ||
896 | goto unreg; | ||
897 | } | ||
898 | |||
899 | of_node_put(phy); | ||
900 | of_node_put(mdio); | ||
901 | |||
902 | ret = platform_device_add_data(fs_enet_dev, &fs_enet_data, | ||
903 | sizeof(struct | ||
904 | fs_platform_info)); | ||
905 | if (ret) | ||
906 | goto unreg; | ||
907 | } | ||
908 | } | ||
909 | return 0; | ||
910 | |||
911 | unreg: | ||
912 | platform_device_unregister(fs_enet_dev); | ||
913 | err: | ||
914 | return ret; | ||
915 | } | ||
916 | |||
917 | arch_initcall(fs_enet_of_init); | ||
918 | |||
919 | static const char scc_regs[] = "regs"; | ||
920 | static const char scc_pram[] = "pram"; | ||
921 | |||
922 | static int __init cpm_uart_of_init(void) | ||
923 | { | ||
924 | struct device_node *np; | ||
925 | unsigned int i; | ||
926 | struct platform_device *cpm_uart_dev; | ||
927 | int ret; | ||
928 | |||
929 | for (np = NULL, i = 0; | ||
930 | (np = of_find_compatible_node(np, "serial", "cpm_uart")) != NULL; | ||
931 | i++) { | ||
932 | struct resource r[3]; | ||
933 | struct fs_uart_platform_info cpm_uart_data; | ||
934 | const int *id; | ||
935 | const char *model; | ||
936 | |||
937 | memset(r, 0, sizeof(r)); | ||
938 | memset(&cpm_uart_data, 0, sizeof(cpm_uart_data)); | ||
939 | |||
940 | ret = of_address_to_resource(np, 0, &r[0]); | ||
941 | if (ret) | ||
942 | goto err; | ||
943 | |||
944 | r[0].name = scc_regs; | ||
945 | |||
946 | ret = of_address_to_resource(np, 1, &r[1]); | ||
947 | if (ret) | ||
948 | goto err; | ||
949 | r[1].name = scc_pram; | ||
950 | |||
951 | of_irq_to_resource(np, 0, &r[2]); | ||
952 | |||
953 | cpm_uart_dev = | ||
954 | platform_device_register_simple("fsl-cpm-scc:uart", i, &r[0], 3); | ||
955 | |||
956 | if (IS_ERR(cpm_uart_dev)) { | ||
957 | ret = PTR_ERR(cpm_uart_dev); | ||
958 | goto err; | ||
959 | } | ||
960 | |||
961 | id = of_get_property(np, "device-id", NULL); | ||
962 | cpm_uart_data.fs_no = *id; | ||
963 | |||
964 | model = of_get_property(np, "model", NULL); | ||
965 | strcpy(cpm_uart_data.fs_type, model); | ||
966 | |||
967 | cpm_uart_data.uart_clk = ppc_proc_freq; | ||
968 | |||
969 | cpm_uart_data.tx_num_fifo = 4; | ||
970 | cpm_uart_data.tx_buf_size = 32; | ||
971 | cpm_uart_data.rx_num_fifo = 4; | ||
972 | cpm_uart_data.rx_buf_size = 32; | ||
973 | cpm_uart_data.clk_rx = *((u32 *)of_get_property(np, | ||
974 | "rx-clock", NULL)); | ||
975 | cpm_uart_data.clk_tx = *((u32 *)of_get_property(np, | ||
976 | "tx-clock", NULL)); | ||
977 | |||
978 | ret = | ||
979 | platform_device_add_data(cpm_uart_dev, &cpm_uart_data, | ||
980 | sizeof(struct | ||
981 | fs_uart_platform_info)); | ||
982 | if (ret) | ||
983 | goto unreg; | ||
984 | } | ||
985 | |||
986 | return 0; | ||
987 | |||
988 | unreg: | ||
989 | platform_device_unregister(cpm_uart_dev); | ||
990 | err: | ||
991 | return ret; | ||
992 | } | ||
993 | |||
994 | arch_initcall(cpm_uart_of_init); | ||
995 | #endif /* CONFIG_CPM2 */ | ||
996 | |||
997 | #ifdef CONFIG_8xx | ||
998 | |||
999 | extern void init_scc_ioports(struct fs_platform_info*); | ||
1000 | extern int platform_device_skip(const char *model, int id); | ||
1001 | |||
1002 | static int __init fs_enet_mdio_of_init(void) | ||
1003 | { | ||
1004 | struct device_node *np; | ||
1005 | unsigned int i; | ||
1006 | struct platform_device *mdio_dev; | ||
1007 | struct resource res; | ||
1008 | int ret; | ||
1009 | |||
1010 | for (np = NULL, i = 0; | ||
1011 | (np = of_find_compatible_node(np, "mdio", "fs_enet")) != NULL; | ||
1012 | i++) { | ||
1013 | struct fs_mii_fec_platform_info mdio_data; | ||
1014 | |||
1015 | memset(&res, 0, sizeof(res)); | ||
1016 | memset(&mdio_data, 0, sizeof(mdio_data)); | ||
1017 | |||
1018 | ret = of_address_to_resource(np, 0, &res); | ||
1019 | if (ret) | ||
1020 | goto err; | ||
1021 | |||
1022 | mdio_dev = | ||
1023 | platform_device_register_simple("fsl-cpm-fec-mdio", | ||
1024 | res.start, &res, 1); | ||
1025 | if (IS_ERR(mdio_dev)) { | ||
1026 | ret = PTR_ERR(mdio_dev); | ||
1027 | goto err; | ||
1028 | } | ||
1029 | |||
1030 | mdio_data.mii_speed = ((((ppc_proc_freq + 4999999) / 2500000) / 2) & 0x3F) << 1; | ||
1031 | |||
1032 | ret = | ||
1033 | platform_device_add_data(mdio_dev, &mdio_data, | ||
1034 | sizeof(struct fs_mii_fec_platform_info)); | ||
1035 | if (ret) | ||
1036 | goto unreg; | ||
1037 | } | ||
1038 | return 0; | ||
1039 | |||
1040 | unreg: | ||
1041 | platform_device_unregister(mdio_dev); | ||
1042 | err: | ||
1043 | return ret; | ||
1044 | } | ||
1045 | |||
1046 | arch_initcall(fs_enet_mdio_of_init); | ||
1047 | |||
1048 | static const char *enet_regs = "regs"; | ||
1049 | static const char *enet_pram = "pram"; | ||
1050 | static const char *enet_irq = "interrupt"; | ||
1051 | static char bus_id[9][BUS_ID_SIZE]; | ||
1052 | |||
1053 | static int __init fs_enet_of_init(void) | ||
1054 | { | ||
1055 | struct device_node *np; | ||
1056 | unsigned int i; | ||
1057 | struct platform_device *fs_enet_dev = NULL; | ||
1058 | struct resource res; | ||
1059 | int ret; | ||
1060 | |||
1061 | for (np = NULL, i = 0; | ||
1062 | (np = of_find_compatible_node(np, "network", "fs_enet")) != NULL; | ||
1063 | i++) { | ||
1064 | struct resource r[4]; | ||
1065 | struct device_node *phy = NULL, *mdio = NULL; | ||
1066 | struct fs_platform_info fs_enet_data; | ||
1067 | const unsigned int *id; | ||
1068 | const unsigned int *phy_addr; | ||
1069 | const void *mac_addr; | ||
1070 | const phandle *ph; | ||
1071 | const char *model; | ||
1072 | |||
1073 | memset(r, 0, sizeof(r)); | ||
1074 | memset(&fs_enet_data, 0, sizeof(fs_enet_data)); | ||
1075 | |||
1076 | model = of_get_property(np, "model", NULL); | ||
1077 | if (model == NULL) { | ||
1078 | ret = -ENODEV; | ||
1079 | goto unreg; | ||
1080 | } | ||
1081 | |||
1082 | id = of_get_property(np, "device-id", NULL); | ||
1083 | fs_enet_data.fs_no = *id; | ||
1084 | |||
1085 | if (platform_device_skip(model, *id)) | ||
1086 | continue; | ||
1087 | |||
1088 | ret = of_address_to_resource(np, 0, &r[0]); | ||
1089 | if (ret) | ||
1090 | goto err; | ||
1091 | r[0].name = enet_regs; | ||
1092 | |||
1093 | mac_addr = of_get_mac_address(np); | ||
1094 | if (mac_addr) | ||
1095 | memcpy(fs_enet_data.macaddr, mac_addr, 6); | ||
1096 | |||
1097 | ph = of_get_property(np, "phy-handle", NULL); | ||
1098 | if (ph != NULL) | ||
1099 | phy = of_find_node_by_phandle(*ph); | ||
1100 | |||
1101 | if (phy != NULL) { | ||
1102 | phy_addr = of_get_property(phy, "reg", NULL); | ||
1103 | fs_enet_data.phy_addr = *phy_addr; | ||
1104 | fs_enet_data.has_phy = 1; | ||
1105 | |||
1106 | mdio = of_get_parent(phy); | ||
1107 | ret = of_address_to_resource(mdio, 0, &res); | ||
1108 | if (ret) { | ||
1109 | of_node_put(phy); | ||
1110 | of_node_put(mdio); | ||
1111 | goto unreg; | ||
1112 | } | ||
1113 | } | ||
1114 | |||
1115 | model = of_get_property(np, "model", NULL); | ||
1116 | strcpy(fs_enet_data.fs_type, model); | ||
1117 | |||
1118 | if (strstr(model, "FEC")) { | ||
1119 | r[1].start = r[1].end = irq_of_parse_and_map(np, 0); | ||
1120 | r[1].flags = IORESOURCE_IRQ; | ||
1121 | r[1].name = enet_irq; | ||
1122 | |||
1123 | fs_enet_dev = | ||
1124 | platform_device_register_simple("fsl-cpm-fec", i, &r[0], 2); | ||
1125 | |||
1126 | if (IS_ERR(fs_enet_dev)) { | ||
1127 | ret = PTR_ERR(fs_enet_dev); | ||
1128 | goto err; | ||
1129 | } | ||
1130 | |||
1131 | fs_enet_data.rx_ring = 128; | ||
1132 | fs_enet_data.tx_ring = 16; | ||
1133 | fs_enet_data.rx_copybreak = 240; | ||
1134 | fs_enet_data.use_napi = 1; | ||
1135 | fs_enet_data.napi_weight = 17; | ||
1136 | |||
1137 | snprintf((char*)&bus_id[i], BUS_ID_SIZE, "%x:%02x", | ||
1138 | (u32)res.start, fs_enet_data.phy_addr); | ||
1139 | fs_enet_data.bus_id = (char*)&bus_id[i]; | ||
1140 | fs_enet_data.init_ioports = init_fec_ioports; | ||
1141 | } | ||
1142 | if (strstr(model, "SCC")) { | ||
1143 | ret = of_address_to_resource(np, 1, &r[1]); | ||
1144 | if (ret) | ||
1145 | goto err; | ||
1146 | r[1].name = enet_pram; | ||
1147 | |||
1148 | r[2].start = r[2].end = irq_of_parse_and_map(np, 0); | ||
1149 | r[2].flags = IORESOURCE_IRQ; | ||
1150 | r[2].name = enet_irq; | ||
1151 | |||
1152 | fs_enet_dev = | ||
1153 | platform_device_register_simple("fsl-cpm-scc", i, &r[0], 3); | ||
1154 | |||
1155 | if (IS_ERR(fs_enet_dev)) { | ||
1156 | ret = PTR_ERR(fs_enet_dev); | ||
1157 | goto err; | ||
1158 | } | ||
1159 | |||
1160 | fs_enet_data.rx_ring = 64; | ||
1161 | fs_enet_data.tx_ring = 8; | ||
1162 | fs_enet_data.rx_copybreak = 240; | ||
1163 | fs_enet_data.use_napi = 1; | ||
1164 | fs_enet_data.napi_weight = 17; | ||
1165 | |||
1166 | snprintf((char*)&bus_id[i], BUS_ID_SIZE, "%s", "fixed@10:1"); | ||
1167 | fs_enet_data.bus_id = (char*)&bus_id[i]; | ||
1168 | fs_enet_data.init_ioports = init_scc_ioports; | ||
1169 | } | ||
1170 | |||
1171 | of_node_put(phy); | ||
1172 | of_node_put(mdio); | ||
1173 | |||
1174 | ret = platform_device_add_data(fs_enet_dev, &fs_enet_data, | ||
1175 | sizeof(struct | ||
1176 | fs_platform_info)); | ||
1177 | if (ret) | ||
1178 | goto unreg; | ||
1179 | } | ||
1180 | return 0; | ||
1181 | |||
1182 | unreg: | ||
1183 | platform_device_unregister(fs_enet_dev); | ||
1184 | err: | ||
1185 | return ret; | ||
1186 | } | ||
1187 | |||
1188 | arch_initcall(fs_enet_of_init); | ||
1189 | |||
1190 | static int __init fsl_pcmcia_of_init(void) | ||
1191 | { | ||
1192 | struct device_node *np; | ||
1193 | /* | ||
1194 | * Register all the devices which type is "pcmcia" | ||
1195 | */ | ||
1196 | for_each_compatible_node(np, "pcmcia", "fsl,pq-pcmcia") | ||
1197 | of_platform_device_create(np, "m8xx-pcmcia", NULL); | ||
1198 | return 0; | ||
1199 | } | ||
1200 | |||
1201 | arch_initcall(fsl_pcmcia_of_init); | ||
1202 | |||
1203 | static const char *smc_regs = "regs"; | ||
1204 | static const char *smc_pram = "pram"; | ||
1205 | |||
1206 | static int __init cpm_smc_uart_of_init(void) | ||
1207 | { | ||
1208 | struct device_node *np; | ||
1209 | unsigned int i; | ||
1210 | struct platform_device *cpm_uart_dev; | ||
1211 | int ret; | ||
1212 | |||
1213 | for (np = NULL, i = 0; | ||
1214 | (np = of_find_compatible_node(np, "serial", "cpm_uart")) != NULL; | ||
1215 | i++) { | ||
1216 | struct resource r[3]; | ||
1217 | struct fs_uart_platform_info cpm_uart_data; | ||
1218 | const int *id; | ||
1219 | const char *model; | ||
1220 | |||
1221 | memset(r, 0, sizeof(r)); | ||
1222 | memset(&cpm_uart_data, 0, sizeof(cpm_uart_data)); | ||
1223 | |||
1224 | ret = of_address_to_resource(np, 0, &r[0]); | ||
1225 | if (ret) | ||
1226 | goto err; | ||
1227 | |||
1228 | r[0].name = smc_regs; | ||
1229 | |||
1230 | ret = of_address_to_resource(np, 1, &r[1]); | ||
1231 | if (ret) | ||
1232 | goto err; | ||
1233 | r[1].name = smc_pram; | ||
1234 | |||
1235 | r[2].start = r[2].end = irq_of_parse_and_map(np, 0); | ||
1236 | r[2].flags = IORESOURCE_IRQ; | ||
1237 | |||
1238 | cpm_uart_dev = | ||
1239 | platform_device_register_simple("fsl-cpm-smc:uart", i, &r[0], 3); | ||
1240 | |||
1241 | if (IS_ERR(cpm_uart_dev)) { | ||
1242 | ret = PTR_ERR(cpm_uart_dev); | ||
1243 | goto err; | ||
1244 | } | ||
1245 | |||
1246 | model = of_get_property(np, "model", NULL); | ||
1247 | strcpy(cpm_uart_data.fs_type, model); | ||
1248 | |||
1249 | id = of_get_property(np, "device-id", NULL); | ||
1250 | cpm_uart_data.fs_no = *id; | ||
1251 | cpm_uart_data.uart_clk = ppc_proc_freq; | ||
1252 | |||
1253 | cpm_uart_data.tx_num_fifo = 4; | ||
1254 | cpm_uart_data.tx_buf_size = 32; | ||
1255 | cpm_uart_data.rx_num_fifo = 4; | ||
1256 | cpm_uart_data.rx_buf_size = 32; | ||
1257 | |||
1258 | ret = | ||
1259 | platform_device_add_data(cpm_uart_dev, &cpm_uart_data, | ||
1260 | sizeof(struct | ||
1261 | fs_uart_platform_info)); | ||
1262 | if (ret) | ||
1263 | goto unreg; | ||
1264 | } | ||
1265 | |||
1266 | return 0; | ||
1267 | |||
1268 | unreg: | ||
1269 | platform_device_unregister(cpm_uart_dev); | ||
1270 | err: | ||
1271 | return ret; | ||
1272 | } | ||
1273 | |||
1274 | arch_initcall(cpm_smc_uart_of_init); | ||
1275 | |||
1276 | #endif /* CONFIG_8xx */ | ||
1277 | #endif /* CONFIG_PPC_CPM_NEW_BINDING */ | ||
1278 | |||
1279 | static int __init of_fsl_spi_probe(char *type, char *compatible, u32 sysclk, | 738 | static int __init of_fsl_spi_probe(char *type, char *compatible, u32 sysclk, |
1280 | struct spi_board_info *board_infos, | 739 | struct spi_board_info *board_infos, |
1281 | unsigned int num_board_infos, | 740 | unsigned int num_board_infos, |