Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1640372 > unrolled thread

Re: [PATCH] [media] cec: improve MEDIA_CEC_RC dependencies

Started byArnd Bergmann <arnd@arndb.de>
First post2017-05-12 12:00 +0200
Last post2017-05-12 21:40 +0200
Articles 3 — 2 participants

Back to article view | Back to linux.kernel

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  Re: [PATCH] [media] cec: improve MEDIA_CEC_RC dependencies Arnd Bergmann <arnd@arndb.de> - 2017-05-12 12:00 +0200
    Re: [PATCH] [media] cec: improve MEDIA_CEC_RC dependencies Hans Verkuil <hverkuil@xs4all.nl> - 2017-05-12 12:10 +0200
      Re: [PATCH] [media] cec: improve MEDIA_CEC_RC dependencies Arnd Bergmann <arnd@arndb.de> - 2017-05-12 21:40 +0200

#1640372 — Re: [PATCH] [media] cec: improve MEDIA_CEC_RC dependencies

FromArnd Bergmann <arnd@arndb.de>
Date2017-05-12 12:00 +0200
SubjectRe: [PATCH] [media] cec: improve MEDIA_CEC_RC dependencies
Message-ID<tGfwC-2A6-13@gated-at.bofh.it>
On Fri, Apr 21, 2017 at 12:52 PM, Arnd Bergmann <arnd@arndb.de> wrote:
> Changing the IS_REACHABLE() into a plain #ifdef broke the case of
> CONFIG_MEDIA_RC=m && CONFIG_MEDIA_CEC=y:
>
> drivers/media/cec/cec-core.o: In function `cec_unregister_adapter':
> cec-core.c:(.text.cec_unregister_adapter+0x18): undefined reference to `rc_unregister_device'
> drivers/media/cec/cec-core.o: In function `cec_delete_adapter':
> cec-core.c:(.text.cec_delete_adapter+0x54): undefined reference to `rc_free_device'
> drivers/media/cec/cec-core.o: In function `cec_register_adapter':
> cec-core.c:(.text.cec_register_adapter+0x94): undefined reference to `rc_register_device'
> cec-core.c:(.text.cec_register_adapter+0xa4): undefined reference to `rc_free_device'
> cec-core.c:(.text.cec_register_adapter+0x110): undefined reference to `rc_unregister_device'
> drivers/media/cec/cec-core.o: In function `cec_allocate_adapter':
> cec-core.c:(.text.cec_allocate_adapter+0x234): undefined reference to `rc_allocate_device'
> drivers/media/cec/cec-adap.o: In function `cec_received_msg':
> cec-adap.c:(.text.cec_received_msg+0x734): undefined reference to `rc_keydown'
> cec-adap.c:(.text.cec_received_msg+0x768): undefined reference to `rc_keyup'
>
> This adds an additional dependency to explicitly forbid this combination.
>
> Fixes: 5f2c467c54f5 ("[media] cec: add MEDIA_CEC_RC config option")
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> ---

What is the status of this patch? According to
https://patchwork.linuxtv.org/patch/40934/ it is marked 'accepted',
but the patch that caused the problem has made it into mainline
in the merge window, and the fix is still needed on top.

On a related note, I've run into another link error now:

drivers/gpu/drm/sti/sti_hdmi.o: In function `sti_hdmi_remove':
sti_hdmi.c:(.text.sti_hdmi_remove+0x10): undefined reference to
`cec_notifier_set_phys_addr'
sti_hdmi.c:(.text.sti_hdmi_remove+0x34): undefined reference to
`cec_notifier_put'
drivers/gpu/drm/sti/sti_hdmi.o: In function `sti_hdmi_connector_get_modes':
sti_hdmi.c:(.text.sti_hdmi_connector_get_modes+0x4a): undefined
reference to `cec_notifier_set_phys_addr_from_edid'
drivers/gpu/drm/sti/sti_hdmi.o: In function `sti_hdmi_probe':
sti_hdmi.c:(.text.sti_hdmi_probe+0x204): undefined reference to
`cec_notifier_get'
drivers/gpu/drm/sti/sti_hdmi.o: In function `sti_hdmi_connector_detect':
sti_hdmi.c:(.text.sti_hdmi_connector_detect+0x36): undefined reference
to `cec_notifier_set_phys_addr'
drivers/gpu/drm/sti/sti_hdmi.o: In function `sti_hdmi_disable':
sti_hdmi.c:(.text.sti_hdmi_disable+0xc0): undefined reference to
`cec_notifier_set_phys_addr'

The config options leading to the second failure are:

CONFIG_MEDIA_CEC_SUPPORT=y
CONFIG_CEC_CORE=m
CONFIG_MEDIA_CEC_NOTIFIER=y
CONFIG_VIDEO_STI_HDMI_CEC=m
CONFIG_DRM_STI=y

I can probably come up with a workaround, but haven't completely thought
through all the combinations yet. Also, I assume the same fix will be needed
for exynos, though that has not come up in randconfig testing so far.

       Arnd

>  drivers/media/cec/Kconfig | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/drivers/media/cec/Kconfig b/drivers/media/cec/Kconfig
> index f944d93e3167..488fb908244d 100644
> --- a/drivers/media/cec/Kconfig
> +++ b/drivers/media/cec/Kconfig
> @@ -9,6 +9,7 @@ config MEDIA_CEC_NOTIFIER
>  config MEDIA_CEC_RC
>         bool "HDMI CEC RC integration"
>         depends on CEC_CORE && RC_CORE
> +       depends on CEC_CORE=m || RC_CORE=y
>         ---help---
>           Pass on CEC remote control messages to the RC framework.
>
> --
> 2.9.0
>

[toc] | [next] | [standalone]


#1640374

FromHans Verkuil <hverkuil@xs4all.nl>
Date2017-05-12 12:10 +0200
Message-ID<tGfGh-2Tv-5@gated-at.bofh.it>
In reply to#1640372
On 05/12/17 11:49, Arnd Bergmann wrote:
> On Fri, Apr 21, 2017 at 12:52 PM, Arnd Bergmann <arnd@arndb.de> wrote:
>> Changing the IS_REACHABLE() into a plain #ifdef broke the case of
>> CONFIG_MEDIA_RC=m && CONFIG_MEDIA_CEC=y:
>>
>> drivers/media/cec/cec-core.o: In function `cec_unregister_adapter':
>> cec-core.c:(.text.cec_unregister_adapter+0x18): undefined reference to `rc_unregister_device'
>> drivers/media/cec/cec-core.o: In function `cec_delete_adapter':
>> cec-core.c:(.text.cec_delete_adapter+0x54): undefined reference to `rc_free_device'
>> drivers/media/cec/cec-core.o: In function `cec_register_adapter':
>> cec-core.c:(.text.cec_register_adapter+0x94): undefined reference to `rc_register_device'
>> cec-core.c:(.text.cec_register_adapter+0xa4): undefined reference to `rc_free_device'
>> cec-core.c:(.text.cec_register_adapter+0x110): undefined reference to `rc_unregister_device'
>> drivers/media/cec/cec-core.o: In function `cec_allocate_adapter':
>> cec-core.c:(.text.cec_allocate_adapter+0x234): undefined reference to `rc_allocate_device'
>> drivers/media/cec/cec-adap.o: In function `cec_received_msg':
>> cec-adap.c:(.text.cec_received_msg+0x734): undefined reference to `rc_keydown'
>> cec-adap.c:(.text.cec_received_msg+0x768): undefined reference to `rc_keyup'
>>
>> This adds an additional dependency to explicitly forbid this combination.
>>
>> Fixes: 5f2c467c54f5 ("[media] cec: add MEDIA_CEC_RC config option")
>> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
>> ---
> 
> What is the status of this patch? According to
> https://patchwork.linuxtv.org/patch/40934/ it is marked 'accepted',
> but the patch that caused the problem has made it into mainline
> in the merge window, and the fix is still needed on top.

It's in a pull request for 4.12 that Mauro hasn't picked up yet. I
pinged him, but he seems to be very busy lately.

> 
> On a related note, I've run into another link error now:
> 
> drivers/gpu/drm/sti/sti_hdmi.o: In function `sti_hdmi_remove':
> sti_hdmi.c:(.text.sti_hdmi_remove+0x10): undefined reference to
> `cec_notifier_set_phys_addr'
> sti_hdmi.c:(.text.sti_hdmi_remove+0x34): undefined reference to
> `cec_notifier_put'
> drivers/gpu/drm/sti/sti_hdmi.o: In function `sti_hdmi_connector_get_modes':
> sti_hdmi.c:(.text.sti_hdmi_connector_get_modes+0x4a): undefined
> reference to `cec_notifier_set_phys_addr_from_edid'
> drivers/gpu/drm/sti/sti_hdmi.o: In function `sti_hdmi_probe':
> sti_hdmi.c:(.text.sti_hdmi_probe+0x204): undefined reference to
> `cec_notifier_get'
> drivers/gpu/drm/sti/sti_hdmi.o: In function `sti_hdmi_connector_detect':
> sti_hdmi.c:(.text.sti_hdmi_connector_detect+0x36): undefined reference
> to `cec_notifier_set_phys_addr'
> drivers/gpu/drm/sti/sti_hdmi.o: In function `sti_hdmi_disable':
> sti_hdmi.c:(.text.sti_hdmi_disable+0xc0): undefined reference to
> `cec_notifier_set_phys_addr'
> 
> The config options leading to the second failure are:
> 
> CONFIG_MEDIA_CEC_SUPPORT=y
> CONFIG_CEC_CORE=m
> CONFIG_MEDIA_CEC_NOTIFIER=y
> CONFIG_VIDEO_STI_HDMI_CEC=m
> CONFIG_DRM_STI=y
> 
> I can probably come up with a workaround, but haven't completely thought
> through all the combinations yet. Also, I assume the same fix will be needed
> for exynos, though that has not come up in randconfig testing so far.

Try this patch:

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
---
diff --git a/include/media/cec-notifier.h b/include/media/cec-notifier.h
index eb50ce54b759..da3528c8edb9 100644
--- a/include/media/cec-notifier.h
+++ b/include/media/cec-notifier.h
@@ -29,7 +29,7 @@ struct edid;
 struct cec_adapter;
 struct cec_notifier;

-#ifdef CONFIG_MEDIA_CEC_NOTIFIER
+#if IS_REACHABLE(CONFIG_MEDIA_CEC_NOTIFIER)

 /**
  * cec_notifier_get - find or create a new cec_notifier for the given device.

[toc] | [prev] | [next] | [standalone]


#1640712

FromArnd Bergmann <arnd@arndb.de>
Date2017-05-12 21:40 +0200
Message-ID<tGozU-Ud-23@gated-at.bofh.it>
In reply to#1640374
On Fri, May 12, 2017 at 12:00 PM, Hans Verkuil <hverkuil@xs4all.nl> wrote:
> On 05/12/17 11:49, Arnd Bergmann wrote:

>> I can probably come up with a workaround, but haven't completely thought
>> through all the combinations yet. Also, I assume the same fix will be needed
>> for exynos, though that has not come up in randconfig testing so far.
>
> Try this patch:
>
> Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
> ---
> diff --git a/include/media/cec-notifier.h b/include/media/cec-notifier.h
> index eb50ce54b759..da3528c8edb9 100644
> --- a/include/media/cec-notifier.h
> +++ b/include/media/cec-notifier.h
> @@ -29,7 +29,7 @@ struct edid;
>  struct cec_adapter;
>  struct cec_notifier;
>
> -#ifdef CONFIG_MEDIA_CEC_NOTIFIER
> +#if IS_REACHABLE(CONFIG_MEDIA_CEC_NOTIFIER)
>

This misses how CONFIG_MEDIA_CEC_NOTIFIER is just a
 'bool' option to the 'MEDIA_CEC_CORE' symbol that controls
whether the code is built-in or in a module, and it lacks helpers
for cec_notifier_{un,}register.

The version below seems to work, though I don't particularly
like the IS_REACHABLE() addition since that can be confusing
to users.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>

diff --git a/include/media/cec-notifier.h b/include/media/cec-notifier.h
index eb50ce54b759..69f7d8eed1b0 100644
--- a/include/media/cec-notifier.h
+++ b/include/media/cec-notifier.h
@@ -29,7 +29,7 @@ struct edid;
 struct cec_adapter;
 struct cec_notifier;

-#ifdef CONFIG_MEDIA_CEC_NOTIFIER
+#if IS_REACHABLE(CONFIG_CEC_CORE) && IS_ENABLED(CONFIG_MEDIA_CEC_NOTIFIER)

 /**
  * cec_notifier_get - find or create a new cec_notifier for the given device.
@@ -106,6 +106,17 @@ static inline void
cec_notifier_set_phys_addr_from_edid(struct cec_notifier *n,
 {
 }

+static inline void cec_notifier_register(struct cec_notifier *n,
+   struct cec_adapter *adap,
+   void (*callback)(struct cec_adapter *adap, u16 pa))
+{
+}
+
+static inline void cec_notifier_unregister(struct cec_notifier *n)
+{
+}
+
+
 #endif

 #endif

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web