tree: https://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap.git droid4-pending-mdm-v5.0 head: 6695f4ec8a19f6fbfcfdccb9928ad31a614fab40 commit: c4ec0e060c3f106099f24b4c978269d429c523b3 [5/12] mfd: motmdm: Add Motorola TS 27.010 serdev driver for devices like droid4 config: x86_64-randconfig-s3-03071354 (attached as .config) compiler: gcc-8 (Debian 8.3.0-2) 8.3.0 reproduce: git checkout c4ec0e060c3f106099f24b4c978269d429c523b3 # save the attached .config to linux build tree make ARCH=x86_64 All errors (new ones prefixed by >>): ld: drivers/mfd/motorola-mdm.o: in function `motmdm_remove': >> drivers/mfd/motorola-mdm.c:1186: undefined reference to `gsm_serdev_unregister_device' ld: drivers/mfd/motorola-mdm.o: in function `motmdm_probe': >> drivers/mfd/motorola-mdm.c:1098: undefined reference to `gsm_serdev_register_device' >> ld: drivers/mfd/motorola-mdm.c:1164: undefined reference to `gsm_serdev_unregister_device' vim +1186 drivers/mfd/motorola-mdm.c 1056 1057 static int motmdm_probe(struct serdev_device *serdev) 1058 { 1059 struct device *dev = &serdev->dev; 1060 const struct of_device_id *match; 1061 struct gsm_serdev *gsd; 1062 struct motmdm *ddata; 1063 int err; 1064 1065 match = of_match_device(of_match_ptr(motmdm_id_table), dev); 1066 if (!match) 1067 return -ENODEV; 1068 1069 ddata = devm_kzalloc(dev, sizeof(*ddata), GFP_KERNEL); 1070 if (!ddata) 1071 return -ENOMEM; 1072 1073 ddata->dev = dev; 1074 ddata->cfg = match->data; 1075 1076 INIT_LIST_HEAD(&ddata->dlcis); 1077 INIT_LIST_HEAD(&ddata->cdevs); 1078 gsd = &ddata->gsd; 1079 gsd->serdev = serdev; 1080 gsd->output = motmdm_output; 1081 serdev_device_set_drvdata(serdev, gsd); 1082 gsm_serdev_set_drvdata(dev, ddata); 1083 1084 err = motmdm_init_phy(dev); 1085 if (err) 1086 return err; 1087 1088 pm_runtime_set_autosuspend_delay(dev, 50); 1089 pm_runtime_use_autosuspend(dev); 1090 pm_runtime_enable(dev); 1091 err = pm_runtime_get_sync(dev); 1092 if (err < 0) { 1093 pm_runtime_put_noidle(dev); 1094 1095 return err; 1096 } 1097 > 1098 err = gsm_serdev_register_device(gsd); 1099 if (err) 1100 goto disable; 1101 1102 err = serdev_device_open(gsd->serdev); 1103 if (err) 1104 goto disable; 1105 1106 serdev_device_set_baudrate(gsd->serdev, 115200); 1107 serdev_device_set_rts(gsd->serdev, true); 1108 serdev_device_set_flow_control(gsd->serdev, true); 1109 1110 /* 1111 * Getting dlci0 connected quirk: We set initial retransmissions 1112 * value high to get n_gsm to send SABM packets. Then after about 1113 * three seconds we'll get a "reassembly overrun" error from firmware 1114 * on dlci0 followed by DM(P) packets and then we're connected in ADM 1115 * mode. Note we will set the retransmissions back to default value 1116 * later on. 1117 */ 1118 err = motmdm_set_config(dev, MOTMDM_C_N2 * 10); 1119 if (err) 1120 goto close; 1121 1122 msleep(3000); 1123 1124 err = motmdm_check_revision(dev); 1125 if (err) 1126 goto close; 1127 1128 msleep(500); 1129 1130 err = motmdm_cdev_init(dev); 1131 if (err) 1132 goto close; 1133 1134 pm_runtime_put_sync(dev); 1135 1136 err = devm_mfd_add_devices(dev, 0, motmdm_mfd_devices, 1137 ARRAY_SIZE(motmdm_mfd_devices), 1138 NULL, 0, NULL); 1139 if (err) 1140 goto cdev_cleanup; 1141 1142 /* Set initial retransmissions back to default value */ 1143 err = motmdm_set_config(dev, MOTMDM_C_N2); 1144 if (err) 1145 goto cdev_cleanup; 1146 1147 if (ddata->cfg->aggressive_pm) { 1148 pm_runtime_set_autosuspend_delay(&serdev->ctrl->dev, 50); 1149 pm_runtime_put(&serdev->ctrl->dev); 1150 } 1151 1152 return 0; 1153 1154 cdev_cleanup: 1155 motmdm_cdev_cleanup(dev); 1156 1157 close: 1158 serdev_device_close(serdev); 1159 1160 disable: 1161 pm_runtime_put_sync(dev); 1162 pm_runtime_disable(dev); 1163 pm_runtime_dont_use_autosuspend(dev); > 1164 gsm_serdev_unregister_device(gsd); 1165 1166 return err; 1167 } 1168 1169 static void motmdm_remove(struct serdev_device *serdev) 1170 { 1171 struct gsm_serdev *gsd = serdev_device_get_drvdata(serdev); 1172 struct device *dev = &serdev->dev; 1173 struct motmdm *ddata = gsm_serdev_get_drvdata(dev); 1174 int err; 1175 1176 /* Balance the put done in probe for UART */ 1177 if (ddata->cfg->aggressive_pm) 1178 pm_runtime_get(&serdev->ctrl->dev); 1179 1180 err = pm_runtime_get_sync(dev); 1181 if (err < 0) 1182 dev_warn(dev, "%s: PM runtime: %i\n", __func__, err); 1183 1184 motmdm_cdev_cleanup(dev); 1185 serdev_device_close(serdev); > 1186 gsm_serdev_unregister_device(gsd); 1187 1188 pm_runtime_put_sync(dev); 1189 pm_runtime_disable(dev); 1190 pm_runtime_dont_use_autosuspend(dev); 1191 } 1192 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
Attachment:
.config.gz
Description: application/gzip