lkml.org 
[lkml]   [2020]   [Nov]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    Subjectdrivers/gpu/drm/bridge/sil-sii8620.c:2355: undefined reference to `extcon_unregister_notifier'
    Hi Masahiro,

    FYI, the error/warning still remains.

    tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
    head: f8394f232b1eab649ce2df5c5f15b0e528c92091
    commit: def2fbffe62c00c330c7f41584a356001179c59c kconfig: allow symbols implied by y to become m
    date: 8 months ago
    config: i386-randconfig-r022-20201106 (attached as .config)
    compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
    reproduce (this is a W=1 build):
    # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=def2fbffe62c00c330c7f41584a356001179c59c
    git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
    git fetch --no-tags linus master
    git checkout def2fbffe62c00c330c7f41584a356001179c59c
    # save the attached .config to linux build tree
    make W=1 ARCH=i386

    If you fix the issue, kindly add following tag as appropriate
    Reported-by: kernel test robot <lkp@intel.com>

    All errors (new ones prefixed by >>):

    ld: drivers/gpu/drm/bridge/sil-sii8620.o: in function `sii8620_remove':
    >> drivers/gpu/drm/bridge/sil-sii8620.c:2355: undefined reference to `extcon_unregister_notifier'
    ld: drivers/gpu/drm/bridge/sil-sii8620.o: in function `sii8620_extcon_init':
    >> drivers/gpu/drm/bridge/sil-sii8620.c:2179: undefined reference to `extcon_find_edev_by_node'
    ld: drivers/gpu/drm/bridge/sil-sii8620.c:2191: undefined reference to `extcon_register_notifier'
    ld: drivers/gpu/drm/bridge/sil-sii8620.o: in function `sii8620_extcon_work':
    >> drivers/gpu/drm/bridge/sil-sii8620.c:2139: undefined reference to `extcon_get_state'

    vim +2355 drivers/gpu/drm/bridge/sil-sii8620.c

    688838442147d9d Maciej Purski 2018-02-27 2162
    688838442147d9d Maciej Purski 2018-02-27 2163 static int sii8620_extcon_init(struct sii8620 *ctx)
    688838442147d9d Maciej Purski 2018-02-27 2164 {
    688838442147d9d Maciej Purski 2018-02-27 2165 struct extcon_dev *edev;
    688838442147d9d Maciej Purski 2018-02-27 2166 struct device_node *musb, *muic;
    688838442147d9d Maciej Purski 2018-02-27 2167 int ret;
    688838442147d9d Maciej Purski 2018-02-27 2168
    688838442147d9d Maciej Purski 2018-02-27 2169 /* get micro-USB connector node */
    688838442147d9d Maciej Purski 2018-02-27 2170 musb = of_graph_get_remote_node(ctx->dev->of_node, 1, -1);
    688838442147d9d Maciej Purski 2018-02-27 2171 /* next get micro-USB Interface Controller node */
    688838442147d9d Maciej Purski 2018-02-27 2172 muic = of_get_next_parent(musb);
    688838442147d9d Maciej Purski 2018-02-27 2173
    688838442147d9d Maciej Purski 2018-02-27 2174 if (!muic) {
    688838442147d9d Maciej Purski 2018-02-27 2175 dev_info(ctx->dev, "no extcon found, switching to 'always on' mode\n");
    688838442147d9d Maciej Purski 2018-02-27 2176 return 0;
    688838442147d9d Maciej Purski 2018-02-27 2177 }
    688838442147d9d Maciej Purski 2018-02-27 2178
    688838442147d9d Maciej Purski 2018-02-27 @2179 edev = extcon_find_edev_by_node(muic);
    688838442147d9d Maciej Purski 2018-02-27 2180 of_node_put(muic);
    688838442147d9d Maciej Purski 2018-02-27 2181 if (IS_ERR(edev)) {
    688838442147d9d Maciej Purski 2018-02-27 2182 if (PTR_ERR(edev) == -EPROBE_DEFER)
    688838442147d9d Maciej Purski 2018-02-27 2183 return -EPROBE_DEFER;
    688838442147d9d Maciej Purski 2018-02-27 2184 dev_err(ctx->dev, "Invalid or missing extcon\n");
    688838442147d9d Maciej Purski 2018-02-27 2185 return PTR_ERR(edev);
    688838442147d9d Maciej Purski 2018-02-27 2186 }
    688838442147d9d Maciej Purski 2018-02-27 2187
    688838442147d9d Maciej Purski 2018-02-27 2188 ctx->extcon = edev;
    688838442147d9d Maciej Purski 2018-02-27 2189 ctx->extcon_nb.notifier_call = sii8620_extcon_notifier;
    688838442147d9d Maciej Purski 2018-02-27 2190 INIT_WORK(&ctx->extcon_wq, sii8620_extcon_work);
    688838442147d9d Maciej Purski 2018-02-27 2191 ret = extcon_register_notifier(edev, EXTCON_DISP_MHL, &ctx->extcon_nb);
    688838442147d9d Maciej Purski 2018-02-27 2192 if (ret) {
    688838442147d9d Maciej Purski 2018-02-27 2193 dev_err(ctx->dev, "failed to register notifier for MHL\n");
    688838442147d9d Maciej Purski 2018-02-27 2194 return ret;
    688838442147d9d Maciej Purski 2018-02-27 2195 }
    688838442147d9d Maciej Purski 2018-02-27 2196
    688838442147d9d Maciej Purski 2018-02-27 2197 return 0;
    688838442147d9d Maciej Purski 2018-02-27 2198 }
    688838442147d9d Maciej Purski 2018-02-27 2199
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2200 static inline struct sii8620 *bridge_to_sii8620(struct drm_bridge *bridge)
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2201 {
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2202 return container_of(bridge, struct sii8620, bridge);
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2203 }
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2204
    e25f1f7c94e16d4 Maciej Purski 2017-08-24 2205 static int sii8620_attach(struct drm_bridge *bridge)
    e25f1f7c94e16d4 Maciej Purski 2017-08-24 2206 {
    e25f1f7c94e16d4 Maciej Purski 2017-08-24 2207 struct sii8620 *ctx = bridge_to_sii8620(bridge);
    e25f1f7c94e16d4 Maciej Purski 2017-08-24 2208
    e25f1f7c94e16d4 Maciej Purski 2017-08-24 2209 sii8620_init_rcp_input_dev(ctx);
    e25f1f7c94e16d4 Maciej Purski 2017-08-24 2210
    e25f1f7c94e16d4 Maciej Purski 2017-08-24 2211 return sii8620_clear_error(ctx);
    e25f1f7c94e16d4 Maciej Purski 2017-08-24 2212 }
    e25f1f7c94e16d4 Maciej Purski 2017-08-24 2213
    e25f1f7c94e16d4 Maciej Purski 2017-08-24 2214 static void sii8620_detach(struct drm_bridge *bridge)
    e25f1f7c94e16d4 Maciej Purski 2017-08-24 2215 {
    e25f1f7c94e16d4 Maciej Purski 2017-08-24 2216 struct sii8620 *ctx = bridge_to_sii8620(bridge);
    e25f1f7c94e16d4 Maciej Purski 2017-08-24 2217
    710abfe8ead2477 Ronald Tschalär 2019-04-19 2218 if (!IS_ENABLED(CONFIG_RC_CORE))
    710abfe8ead2477 Ronald Tschalär 2019-04-19 2219 return;
    710abfe8ead2477 Ronald Tschalär 2019-04-19 2220
    e25f1f7c94e16d4 Maciej Purski 2017-08-24 2221 rc_unregister_device(ctx->rc_dev);
    e25f1f7c94e16d4 Maciej Purski 2017-08-24 2222 }
    e25f1f7c94e16d4 Maciej Purski 2017-08-24 2223
    ecba7cfa3afbe48 Maciej Purski 2018-02-02 2224 static int sii8620_is_packing_required(struct sii8620 *ctx,
    ecba7cfa3afbe48 Maciej Purski 2018-02-02 2225 const struct drm_display_mode *mode)
    ecba7cfa3afbe48 Maciej Purski 2018-02-02 2226 {
    ecba7cfa3afbe48 Maciej Purski 2018-02-02 2227 int max_pclk, max_pclk_pp_mode;
    ecba7cfa3afbe48 Maciej Purski 2018-02-02 2228
    ecba7cfa3afbe48 Maciej Purski 2018-02-02 2229 if (sii8620_is_mhl3(ctx)) {
    ecba7cfa3afbe48 Maciej Purski 2018-02-02 2230 max_pclk = MHL3_MAX_PCLK;
    ecba7cfa3afbe48 Maciej Purski 2018-02-02 2231 max_pclk_pp_mode = MHL3_MAX_PCLK_PP_MODE;
    ecba7cfa3afbe48 Maciej Purski 2018-02-02 2232 } else {
    ecba7cfa3afbe48 Maciej Purski 2018-02-02 2233 max_pclk = MHL1_MAX_PCLK;
    ecba7cfa3afbe48 Maciej Purski 2018-02-02 2234 max_pclk_pp_mode = MHL1_MAX_PCLK_PP_MODE;
    ecba7cfa3afbe48 Maciej Purski 2018-02-02 2235 }
    ecba7cfa3afbe48 Maciej Purski 2018-02-02 2236
    ecba7cfa3afbe48 Maciej Purski 2018-02-02 2237 if (mode->clock < max_pclk)
    ecba7cfa3afbe48 Maciej Purski 2018-02-02 2238 return 0;
    ecba7cfa3afbe48 Maciej Purski 2018-02-02 2239 else if (mode->clock < max_pclk_pp_mode)
    ecba7cfa3afbe48 Maciej Purski 2018-02-02 2240 return 1;
    ecba7cfa3afbe48 Maciej Purski 2018-02-02 2241 else
    ecba7cfa3afbe48 Maciej Purski 2018-02-02 2242 return -1;
    ecba7cfa3afbe48 Maciej Purski 2018-02-02 2243 }
    ecba7cfa3afbe48 Maciej Purski 2018-02-02 2244
    e7c2e4d368e2efc Marek Szyprowski 2017-11-09 2245 static enum drm_mode_status sii8620_mode_valid(struct drm_bridge *bridge,
    e7c2e4d368e2efc Marek Szyprowski 2017-11-09 2246 const struct drm_display_mode *mode)
    e7c2e4d368e2efc Marek Szyprowski 2017-11-09 2247 {
    e7c2e4d368e2efc Marek Szyprowski 2017-11-09 2248 struct sii8620 *ctx = bridge_to_sii8620(bridge);
    ecba7cfa3afbe48 Maciej Purski 2018-02-02 2249 int pack_required = sii8620_is_packing_required(ctx, mode);
    e7c2e4d368e2efc Marek Szyprowski 2017-11-09 2250 bool can_pack = ctx->devcap[MHL_DCAP_VID_LINK_MODE] &
    e7c2e4d368e2efc Marek Szyprowski 2017-11-09 2251 MHL_DCAP_VID_LINK_PPIXEL;
    e7c2e4d368e2efc Marek Szyprowski 2017-11-09 2252
    ecba7cfa3afbe48 Maciej Purski 2018-02-02 2253 switch (pack_required) {
    ecba7cfa3afbe48 Maciej Purski 2018-02-02 2254 case 0:
    ecba7cfa3afbe48 Maciej Purski 2018-02-02 2255 return MODE_OK;
    ecba7cfa3afbe48 Maciej Purski 2018-02-02 2256 case 1:
    ecba7cfa3afbe48 Maciej Purski 2018-02-02 2257 return (can_pack) ? MODE_OK : MODE_CLOCK_HIGH;
    ecba7cfa3afbe48 Maciej Purski 2018-02-02 2258 default:
    ecba7cfa3afbe48 Maciej Purski 2018-02-02 2259 return MODE_CLOCK_HIGH;
    ecba7cfa3afbe48 Maciej Purski 2018-02-02 2260 }
    e7c2e4d368e2efc Marek Szyprowski 2017-11-09 2261 }
    e7c2e4d368e2efc Marek Szyprowski 2017-11-09 2262
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2263 static bool sii8620_mode_fixup(struct drm_bridge *bridge,
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2264 const struct drm_display_mode *mode,
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2265 struct drm_display_mode *adjusted_mode)
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2266 {
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2267 struct sii8620 *ctx = bridge_to_sii8620(bridge);
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2268
    bf1722cab55a32a Andrzej Hajda 2017-02-01 2269 mutex_lock(&ctx->lock);
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2270
    ecba7cfa3afbe48 Maciej Purski 2018-02-02 2271 ctx->use_packed_pixel = sii8620_is_packing_required(ctx, adjusted_mode);
    ecba7cfa3afbe48 Maciej Purski 2018-02-02 2272
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2273 mutex_unlock(&ctx->lock);
    ecba7cfa3afbe48 Maciej Purski 2018-02-02 2274
    ecba7cfa3afbe48 Maciej Purski 2018-02-02 2275 return true;
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2276 }
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2277
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2278 static const struct drm_bridge_funcs sii8620_bridge_funcs = {
    e25f1f7c94e16d4 Maciej Purski 2017-08-24 2279 .attach = sii8620_attach,
    e25f1f7c94e16d4 Maciej Purski 2017-08-24 2280 .detach = sii8620_detach,
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2281 .mode_fixup = sii8620_mode_fixup,
    e7c2e4d368e2efc Marek Szyprowski 2017-11-09 2282 .mode_valid = sii8620_mode_valid,
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2283 };
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2284
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2285 static int sii8620_probe(struct i2c_client *client,
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2286 const struct i2c_device_id *id)
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2287 {
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2288 struct device *dev = &client->dev;
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2289 struct sii8620 *ctx;
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2290 int ret;
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2291
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2292 ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL);
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2293 if (!ctx)
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2294 return -ENOMEM;
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2295
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2296 ctx->dev = dev;
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2297 mutex_init(&ctx->lock);
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2298 INIT_LIST_HEAD(&ctx->mt_queue);
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2299
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2300 ctx->clk_xtal = devm_clk_get(dev, "xtal");
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2301 if (IS_ERR(ctx->clk_xtal)) {
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2302 dev_err(dev, "failed to get xtal clock from DT\n");
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2303 return PTR_ERR(ctx->clk_xtal);
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2304 }
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2305
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2306 if (!client->irq) {
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2307 dev_err(dev, "no irq provided\n");
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2308 return -EINVAL;
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2309 }
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2310 irq_set_status_flags(client->irq, IRQ_NOAUTOEN);
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2311 ret = devm_request_threaded_irq(dev, client->irq, NULL,
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2312 sii8620_irq_thread,
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2313 IRQF_TRIGGER_HIGH | IRQF_ONESHOT,
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2314 "sii8620", ctx);
    e0ba12ea5e1329b Andrzej Hajda 2017-02-22 2315 if (ret < 0) {
    e0ba12ea5e1329b Andrzej Hajda 2017-02-22 2316 dev_err(dev, "failed to install IRQ handler\n");
    e0ba12ea5e1329b Andrzej Hajda 2017-02-22 2317 return ret;
    e0ba12ea5e1329b Andrzej Hajda 2017-02-22 2318 }
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2319
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2320 ctx->gpio_reset = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH);
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2321 if (IS_ERR(ctx->gpio_reset)) {
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2322 dev_err(dev, "failed to get reset gpio from DT\n");
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2323 return PTR_ERR(ctx->gpio_reset);
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2324 }
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2325
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2326 ctx->supplies[0].supply = "cvcc10";
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2327 ctx->supplies[1].supply = "iovcc18";
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2328 ret = devm_regulator_bulk_get(dev, 2, ctx->supplies);
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2329 if (ret)
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2330 return ret;
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2331
    688838442147d9d Maciej Purski 2018-02-27 2332 ret = sii8620_extcon_init(ctx);
    688838442147d9d Maciej Purski 2018-02-27 2333 if (ret < 0) {
    688838442147d9d Maciej Purski 2018-02-27 2334 dev_err(ctx->dev, "failed to initialize EXTCON\n");
    688838442147d9d Maciej Purski 2018-02-27 2335 return ret;
    688838442147d9d Maciej Purski 2018-02-27 2336 }
    688838442147d9d Maciej Purski 2018-02-27 2337
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2338 i2c_set_clientdata(client, ctx);
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2339
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2340 ctx->bridge.funcs = &sii8620_bridge_funcs;
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2341 ctx->bridge.of_node = dev->of_node;
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2342 drm_bridge_add(&ctx->bridge);
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2343
    688838442147d9d Maciej Purski 2018-02-27 2344 if (!ctx->extcon)
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2345 sii8620_cable_in(ctx);
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2346
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2347 return 0;
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2348 }
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2349
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2350 static int sii8620_remove(struct i2c_client *client)
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2351 {
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2352 struct sii8620 *ctx = i2c_get_clientdata(client);
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2353
    688838442147d9d Maciej Purski 2018-02-27 2354 if (ctx->extcon) {
    688838442147d9d Maciej Purski 2018-02-27 @2355 extcon_unregister_notifier(ctx->extcon, EXTCON_DISP_MHL,
    688838442147d9d Maciej Purski 2018-02-27 2356 &ctx->extcon_nb);
    688838442147d9d Maciej Purski 2018-02-27 2357 flush_work(&ctx->extcon_wq);
    688838442147d9d Maciej Purski 2018-02-27 2358 if (ctx->cable_state > 0)
    688838442147d9d Maciej Purski 2018-02-27 2359 sii8620_cable_out(ctx);
    688838442147d9d Maciej Purski 2018-02-27 2360 } else {
    688838442147d9d Maciej Purski 2018-02-27 2361 sii8620_cable_out(ctx);
    688838442147d9d Maciej Purski 2018-02-27 2362 }
    e25f1f7c94e16d4 Maciej Purski 2017-08-24 2363 drm_bridge_remove(&ctx->bridge);
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2364
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2365 return 0;
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2366 }
    ce6e153f414a73a Andrzej Hajda 2016-10-10 2367

    :::::: The code at line 2355 was first introduced by commit
    :::::: 688838442147d9dd94c2ef7c2c31a35cf150c5fa drm/bridge/sii8620: use micro-USB cable detection logic to detect MHL

    :::::: TO: Maciej Purski <m.purski@samsung.com>
    :::::: CC: Chanwoo Choi <cw00.choi@samsung.com>

    ---
    0-DAY CI Kernel Test Service, Intel Corporation
    https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
    [unhandled content-type:application/gzip]
    \
     
     \ /
      Last update: 2020-11-09 07:10    [W:3.089 / U:0.544 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site