Re: drivers/gpu/drm/bridge/sil-sii8620.c:2405: undefined reference to `extcon_unregister_notifier'
On 04/28/2018 08:15 PM, kbuild test robot wrote: > 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' The correct fix for this IMO is: config DRM_SIL_SII8620 ... depends on EXTCON || !EXTCON but doing that causes kconfig-recursive-dependency-hell-messy-spaghetti. OTOH, doing: select EXTCON does not cause any kconfig recursive dependency issues and solves the build errors. -- ~Randy
Re: drivers/gpu/drm/bridge/sil-sii8620.c:2405: undefined reference to `extcon_unregister_notifier'
On 06.04.2018 12:34, Chanwoo Choi wrote: > 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? I wonder if 'imply EXTCON' wouldn't be better, I will prepare patch for it. Regards Andrzej > >> 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 */ >>> 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_pc
Re: drivers/gpu/drm/bridge/sil-sii8620.c:2405: undefined reference to `extcon_unregister_notifier'
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 */ >> 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 >>> 2229edev = 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); >>> 2241ret = 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, >> 2272const 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
Re: drivers/gpu/drm/bridge/sil-sii8620.c:2405: undefined reference to `extcon_unregister_notifier'
Hi Chanwoo, It looks like something went wrong, sii8620 patch was merged without extcon dependencies. Could you look at it? 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 > 2213static int sii8620_extcon_init(struct sii8620 *ctx) > 2214{ > 2215struct extcon_dev *edev; > 2216struct device_node *musb, *muic; > 2217int ret; > 2218 > 2219/* get micro-USB connector node */ > 2220musb = of_graph_get_remote_node(ctx->dev->of_node, 1, > -1); > 2221/* next get micro-USB Interface Controller node */ > muic = of_get_next_parent(musb); > 2223 > 2224if (!muic) { > 2225dev_info(ctx->dev, "no extcon found, switching > to 'always on' mode\n"); > 2226return 0; > 2227} > 2228 >> 2229 edev = extcon_find_edev_by_node(muic); > 2230of_node_put(muic); > 2231if (IS_ERR(edev)) { > 2232if (PTR_ERR(edev) == -EPROBE_DEFER) > 2233return -EPROBE_DEFER; > 2234dev_err(ctx->dev, "Invalid or missing > extcon\n"); > 2235return PTR_ERR(edev); > 2236} > 2237 > 2238ctx->extcon = edev; > 2239ctx->extcon_nb.notifier_call = sii8620_extcon_notifier; > 2240INIT_WORK(&ctx->extcon_wq, sii8620_extcon_work); >> 2241 ret = extcon_register_notifier(edev, EXTCON_DISP_MHL, >> &ctx->extcon_nb); > 2242if (ret) { > 2243dev_err(ctx->dev, "failed to register notifier > for MHL\n"); > 2244return ret; > 2245} > 2246 > 2247return 0; > 2248} > 2249 > 2250static inline struct sii8620 *bridge_to_sii8620(struct > drm_bridge *bridge) > 2251{ > 2252return container_of(bridge, struct sii8620, bridge); > 2253} > 2254 > 2255static int sii8620_attach(struct drm_bridge *bridge) > 2256{ > 2257struct sii8620 *ctx = bridge_to_sii8620(bridge); > 2258 > 2259sii8620_init_rcp_input_dev(ctx); > 2260 > 2261return sii8620_clear_error(ctx); > 2262} > 2263 > 2264static void sii8620_detach(struct drm_bridge *bridge) > 2265{ > 2266struct sii8620 *ctx = bridge_to_sii8620(bridge); > 2267 > 2268rc_unregister_device(ctx->rc_dev); > 2269} > 2270 > 2271static enum drm_mode_status sii8620_mode_valid(struct > drm_bridge *bridge, > 2272 const struct > drm_display_mode *mode) > 2273{ > 2274struct sii8620 *ctx = bridge_to_sii8620(bridge); > 2275bool can_pack = ctx->devcap[MHL_DCAP_VID_LINK_MODE] & > 2276MHL_DCAP_VID_LINK_PPIXEL; > 2277unsigned int max_pclk = sii8620_is_mhl3(ctx) ? > MHL3_MAX_LCLK : > 2278 > MHL1_MAX_LCLK; > 2279max_pclk /= can_pack ? 2 : 3; > 2280 > 2281return (mode->clock > max_pclk) ? MODE_CLOCK_HIGH : > MODE_OK; > 2282} > 2283 > 2284static bool sii8620_mode_fixup(struct drm_bridge *bridge, > 228