All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chanwoo Choi <cw00.choi@samsung.com>
To: Andrzej Hajda <a.hajda@samsung.com>,
	kbuild test robot <lkp@intel.com>,
	Maciej Purski <m.purski@samsung.com>
Cc: kbuild-all@01.org, linux-kernel@vger.kernel.org
Subject: Re: drivers/gpu/drm/bridge/sil-sii8620.c:2405: undefined reference to `extcon_unregister_notifier'
Date: Fri, 06 Apr 2018 19:34:48 +0900	[thread overview]
Message-ID: <5AC74D48.4070604@samsung.com> (raw)
In-Reply-To: <3920d41a-01aa-70b4-6dfc-f495cd93d453@samsung.com>

Hi Andrzej,

On 2018년 04월 06일 19:14, Andrzej Hajda wrote:
> Hi Chanwoo,
> 
> It looks like something went wrong, sii8620 patch was merged without
> extcon dependencies.
> Could you look at it?

If add the 'select EXTCON' to sii8620's Kconfig, it will be solved.
Is there other solution?

> 
> Regards
> Andrzej
> 
> On 06.04.2018 11:52, kbuild test robot wrote:
>> tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
>> head:   38c23685b273cfb4ccf31a199feccce3bdcb5d83
>> commit: 688838442147d9dd94c2ef7c2c31a35cf150c5fa drm/bridge/sii8620: use micro-USB cable detection logic to detect MHL
>> date:   4 weeks ago
>> config: i386-randconfig-x0-04061534 (attached as .config)
>> compiler: gcc-5 (Debian 5.5.0-3) 5.4.1 20171010
>> reproduce:
>>         git checkout 688838442147d9dd94c2ef7c2c31a35cf150c5fa
>>         # save the attached .config to linux build tree
>>         make ARCH=i386 
>>
>> 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
> 
> 
> 
> 

-- 
Best Regards,
Chanwoo Choi
Samsung Electronics

  reply	other threads:[~2018-04-06 10:34 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20180406095349epcas2p22b69ac92909aeddc04a4e7a4f3c64c3f@epcas2p2.samsung.com>
2018-04-06  9:52 ` drivers/gpu/drm/bridge/sil-sii8620.c:2405: undefined reference to `extcon_unregister_notifier' kbuild test robot
2018-04-06 10:14   ` Andrzej Hajda
2018-04-06 10:34     ` Chanwoo Choi [this message]
2018-04-06 13:55       ` Andrzej Hajda
2018-04-29  3:15 kbuild test robot
2018-04-30 18:23 ` Randy Dunlap
  -- strict thread matches above, loose matches on Subject: below --
2018-05-04 17:57 kbuild test robot

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=5AC74D48.4070604@samsung.com \
    --to=cw00.choi@samsung.com \
    --cc=a.hajda@samsung.com \
    --cc=kbuild-all@01.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lkp@intel.com \
    --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.