From: kbuild test robot <lkp@intel.com>
To: Maciej Purski <m.purski@samsung.com>
Cc: kbuild-all@01.org, linux-kernel@vger.kernel.org,
Chanwoo Choi <cw00.choi@samsung.com>,
Andrzej Hajda <a.hajda@samsung.com>
Subject: drivers/gpu/drm/bridge/sil-sii8620.c:2405: undefined reference to `extcon_unregister_notifier'
Date: Sun, 29 Apr 2018 11:15:02 +0800 [thread overview]
Message-ID: <201804291100.alIrExlq%fengguang.wu@intel.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 7900 bytes --]
Hi Maciej,
FYI, the error/warning still remains.
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 19b9ad67310ed2f685062a00aec602bec33835f0
commit: 688838442147d9dd94c2ef7c2c31a35cf150c5fa drm/bridge/sii8620: use micro-USB cable detection logic to detect MHL
date: 7 weeks ago
config: x86_64-randconfig-s4-04290805 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-16) 7.3.0
reproduce:
git checkout 688838442147d9dd94c2ef7c2c31a35cf150c5fa
# save the attached .config to linux build tree
make ARCH=x86_64
All errors (new ones prefixed by >>):
drivers/gpu/drm/bridge/sil-sii8620.o: In function `sii8620_remove':
>> drivers/gpu/drm/bridge/sil-sii8620.c:2405: undefined reference to `extcon_unregister_notifier'
drivers/gpu/drm/bridge/sil-sii8620.o: In function `sii8620_extcon_init':
>> drivers/gpu/drm/bridge/sil-sii8620.c:2229: undefined reference to `extcon_find_edev_by_node'
>> drivers/gpu/drm/bridge/sil-sii8620.c:2241: undefined reference to `extcon_register_notifier'
drivers/gpu/drm/bridge/sil-sii8620.o: In function `sii8620_extcon_work':
>> drivers/gpu/drm/bridge/sil-sii8620.c:2189: undefined reference to `extcon_get_state'
vim +2405 drivers/gpu/drm/bridge/sil-sii8620.c
2212
2213 static int sii8620_extcon_init(struct sii8620 *ctx)
2214 {
2215 struct extcon_dev *edev;
2216 struct device_node *musb, *muic;
2217 int ret;
2218
2219 /* get micro-USB connector node */
2220 musb = of_graph_get_remote_node(ctx->dev->of_node, 1, -1);
2221 /* next get micro-USB Interface Controller node */
2222 muic = of_get_next_parent(musb);
2223
2224 if (!muic) {
2225 dev_info(ctx->dev, "no extcon found, switching to 'always on' mode\n");
2226 return 0;
2227 }
2228
> 2229 edev = extcon_find_edev_by_node(muic);
2230 of_node_put(muic);
2231 if (IS_ERR(edev)) {
2232 if (PTR_ERR(edev) == -EPROBE_DEFER)
2233 return -EPROBE_DEFER;
2234 dev_err(ctx->dev, "Invalid or missing extcon\n");
2235 return PTR_ERR(edev);
2236 }
2237
2238 ctx->extcon = edev;
2239 ctx->extcon_nb.notifier_call = sii8620_extcon_notifier;
2240 INIT_WORK(&ctx->extcon_wq, sii8620_extcon_work);
> 2241 ret = extcon_register_notifier(edev, EXTCON_DISP_MHL, &ctx->extcon_nb);
2242 if (ret) {
2243 dev_err(ctx->dev, "failed to register notifier for MHL\n");
2244 return ret;
2245 }
2246
2247 return 0;
2248 }
2249
2250 static inline struct sii8620 *bridge_to_sii8620(struct drm_bridge *bridge)
2251 {
2252 return container_of(bridge, struct sii8620, bridge);
2253 }
2254
2255 static int sii8620_attach(struct drm_bridge *bridge)
2256 {
2257 struct sii8620 *ctx = bridge_to_sii8620(bridge);
2258
2259 sii8620_init_rcp_input_dev(ctx);
2260
2261 return sii8620_clear_error(ctx);
2262 }
2263
2264 static void sii8620_detach(struct drm_bridge *bridge)
2265 {
2266 struct sii8620 *ctx = bridge_to_sii8620(bridge);
2267
2268 rc_unregister_device(ctx->rc_dev);
2269 }
2270
2271 static enum drm_mode_status sii8620_mode_valid(struct drm_bridge *bridge,
2272 const struct drm_display_mode *mode)
2273 {
2274 struct sii8620 *ctx = bridge_to_sii8620(bridge);
2275 bool can_pack = ctx->devcap[MHL_DCAP_VID_LINK_MODE] &
2276 MHL_DCAP_VID_LINK_PPIXEL;
2277 unsigned int max_pclk = sii8620_is_mhl3(ctx) ? MHL3_MAX_LCLK :
2278 MHL1_MAX_LCLK;
2279 max_pclk /= can_pack ? 2 : 3;
2280
2281 return (mode->clock > max_pclk) ? MODE_CLOCK_HIGH : MODE_OK;
2282 }
2283
2284 static bool sii8620_mode_fixup(struct drm_bridge *bridge,
2285 const struct drm_display_mode *mode,
2286 struct drm_display_mode *adjusted_mode)
2287 {
2288 struct sii8620 *ctx = bridge_to_sii8620(bridge);
2289 int max_lclk;
2290 bool ret = true;
2291
2292 mutex_lock(&ctx->lock);
2293
2294 max_lclk = sii8620_is_mhl3(ctx) ? MHL3_MAX_LCLK : MHL1_MAX_LCLK;
2295 if (max_lclk > 3 * adjusted_mode->clock) {
2296 ctx->use_packed_pixel = 0;
2297 goto end;
2298 }
2299 if ((ctx->devcap[MHL_DCAP_VID_LINK_MODE] & MHL_DCAP_VID_LINK_PPIXEL) &&
2300 max_lclk > 2 * adjusted_mode->clock) {
2301 ctx->use_packed_pixel = 1;
2302 goto end;
2303 }
2304 ret = false;
2305 end:
2306 if (ret) {
2307 u8 vic = drm_match_cea_mode(adjusted_mode);
2308
2309 if (!vic) {
2310 union hdmi_infoframe frm;
2311 u8 mhl_vic[] = { 0, 95, 94, 93, 98 };
2312
2313 /* FIXME: We need the connector here */
2314 drm_hdmi_vendor_infoframe_from_display_mode(
2315 &frm.vendor.hdmi, NULL, adjusted_mode);
2316 vic = frm.vendor.hdmi.vic;
2317 if (vic >= ARRAY_SIZE(mhl_vic))
2318 vic = 0;
2319 vic = mhl_vic[vic];
2320 }
2321 ctx->video_code = vic;
2322 ctx->pixel_clock = adjusted_mode->clock;
2323 }
2324 mutex_unlock(&ctx->lock);
2325 return ret;
2326 }
2327
2328 static const struct drm_bridge_funcs sii8620_bridge_funcs = {
2329 .attach = sii8620_attach,
2330 .detach = sii8620_detach,
2331 .mode_fixup = sii8620_mode_fixup,
2332 .mode_valid = sii8620_mode_valid,
2333 };
2334
2335 static int sii8620_probe(struct i2c_client *client,
2336 const struct i2c_device_id *id)
2337 {
2338 struct device *dev = &client->dev;
2339 struct sii8620 *ctx;
2340 int ret;
2341
2342 ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL);
2343 if (!ctx)
2344 return -ENOMEM;
2345
2346 ctx->dev = dev;
2347 mutex_init(&ctx->lock);
2348 INIT_LIST_HEAD(&ctx->mt_queue);
2349
2350 ctx->clk_xtal = devm_clk_get(dev, "xtal");
2351 if (IS_ERR(ctx->clk_xtal)) {
2352 dev_err(dev, "failed to get xtal clock from DT\n");
2353 return PTR_ERR(ctx->clk_xtal);
2354 }
2355
2356 if (!client->irq) {
2357 dev_err(dev, "no irq provided\n");
2358 return -EINVAL;
2359 }
2360 irq_set_status_flags(client->irq, IRQ_NOAUTOEN);
2361 ret = devm_request_threaded_irq(dev, client->irq, NULL,
2362 sii8620_irq_thread,
2363 IRQF_TRIGGER_HIGH | IRQF_ONESHOT,
2364 "sii8620", ctx);
2365 if (ret < 0) {
2366 dev_err(dev, "failed to install IRQ handler\n");
2367 return ret;
2368 }
2369
2370 ctx->gpio_reset = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH);
2371 if (IS_ERR(ctx->gpio_reset)) {
2372 dev_err(dev, "failed to get reset gpio from DT\n");
2373 return PTR_ERR(ctx->gpio_reset);
2374 }
2375
2376 ctx->supplies[0].supply = "cvcc10";
2377 ctx->supplies[1].supply = "iovcc18";
2378 ret = devm_regulator_bulk_get(dev, 2, ctx->supplies);
2379 if (ret)
2380 return ret;
2381
2382 ret = sii8620_extcon_init(ctx);
2383 if (ret < 0) {
2384 dev_err(ctx->dev, "failed to initialize EXTCON\n");
2385 return ret;
2386 }
2387
2388 i2c_set_clientdata(client, ctx);
2389
2390 ctx->bridge.funcs = &sii8620_bridge_funcs;
2391 ctx->bridge.of_node = dev->of_node;
2392 drm_bridge_add(&ctx->bridge);
2393
2394 if (!ctx->extcon)
2395 sii8620_cable_in(ctx);
2396
2397 return 0;
2398 }
2399
2400 static int sii8620_remove(struct i2c_client *client)
2401 {
2402 struct sii8620 *ctx = i2c_get_clientdata(client);
2403
2404 if (ctx->extcon) {
> 2405 extcon_unregister_notifier(ctx->extcon, EXTCON_DISP_MHL,
2406 &ctx->extcon_nb);
2407 flush_work(&ctx->extcon_wq);
2408 if (ctx->cable_state > 0)
2409 sii8620_cable_out(ctx);
2410 } else {
2411 sii8620_cable_out(ctx);
2412 }
2413 drm_bridge_remove(&ctx->bridge);
2414
2415 return 0;
2416 }
2417
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 31972 bytes --]
next reply other threads:[~2018-04-29 3:15 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-29 3:15 kbuild test robot [this message]
2018-04-30 18:23 ` drivers/gpu/drm/bridge/sil-sii8620.c:2405: undefined reference to `extcon_unregister_notifier' Randy Dunlap
-- strict thread matches above, loose matches on Subject: below --
2018-05-04 17:57 kbuild test robot
[not found] <CGME20180406095349epcas2p22b69ac92909aeddc04a4e7a4f3c64c3f@epcas2p2.samsung.com>
2018-04-06 9:52 ` kbuild test robot
2018-04-06 10:14 ` Andrzej Hajda
2018-04-06 10:34 ` Chanwoo Choi
2018-04-06 13:55 ` Andrzej Hajda
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=201804291100.alIrExlq%fengguang.wu@intel.com \
--to=lkp@intel.com \
--cc=a.hajda@samsung.com \
--cc=cw00.choi@samsung.com \
--cc=kbuild-all@01.org \
--cc=linux-kernel@vger.kernel.org \
--cc=m.purski@samsung.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.