lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <201804061737.Ugx3LMCf%fengguang.wu@intel.com>
Date:   Fri, 6 Apr 2018 17:52:39 +0800
From:   kbuild test robot <lkp@...el.com>
To:     Maciej Purski <m.purski@...sung.com>
Cc:     kbuild-all@...org, linux-kernel@...r.kernel.org,
        Chanwoo Choi <cw00.choi@...sung.com>,
        Andrzej Hajda <a.hajda@...sung.com>
Subject: drivers/gpu/drm/bridge/sil-sii8620.c:2405: undefined reference to
 `extcon_unregister_notifier'

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

Download attachment ".config.gz" of type "application/gzip" (29137 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ