Re: drivers/gpu/drm/bridge/sil-sii8620.c:2405: undefined reference to `extcon_unregister_notifier'

2018-04-30 Thread Randy Dunlap
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'

2018-04-06 Thread Andrzej Hajda
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'

2018-04-06 Thread Chanwoo Choi
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'

2018-04-06 Thread Andrzej Hajda
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