1. 12 10月, 2016 1 次提交
  2. 09 4月, 2015 1 次提交
    • A
      [media] Add and use IS_REACHABLE macro · 9b174527
      Arnd Bergmann 提交于
      In the media drivers, the v4l2 core knows about all submodules
      and calls into them from a common function. However this cannot
      work if the modules that get called are loadable and the
      core is built-in. In that case we get
      
      drivers/built-in.o: In function `set_type':
      drivers/media/v4l2-core/tuner-core.c:301: undefined reference to `tea5767_attach'
      drivers/media/v4l2-core/tuner-core.c:307: undefined reference to `tea5761_attach'
      drivers/media/v4l2-core/tuner-core.c:349: undefined reference to `tda9887_attach'
      drivers/media/v4l2-core/tuner-core.c:405: undefined reference to `xc4000_attach'
      
      This was working previously, until the IS_ENABLED() macro was used
      to replace the construct like
      
       #if defined(CONFIG_DVB_CX24110) || (defined(CONFIG_DVB_CX24110_MODULE) && defined(MODULE))
      
      with the difference that the new code no longer checks whether it is being
      built as a loadable module itself.
      
      To fix this, this new patch adds an 'IS_REACHABLE' macro, which evaluates
      true in exactly the condition that was used previously. The downside
      of this is that this trades an obvious link error for a more subtle
      runtime failure, but it is clear that the change that introduced the
      link error was unintentional and it seems better to revert it for
      now. Also, a similar change was originally created by Trent Piepho
      and then reverted by teh change to the IS_ENABLED macro.
      
      Ideally Kconfig would be used to avoid the case of a broken dependency,
      or the code restructured in a way to turn around the dependency, but either
      way would require much larger changes here.
      
      Fixes: 7b34be71 ("[media] use IS_ENABLED() macro")
      See-also: c5dec9fb ("V4L/DVB (4751): Fix DBV_FE_CUSTOMISE for card drivers compiled into kernel")
      Signed-off-by: NArnd Bergmann <arnd@arndb.de>
      Signed-off-by: NMauro Carvalho Chehab <mchehab@osg.samsung.com>
      9b174527
  3. 17 6月, 2014 2 次提交
    • M
      [media] dib7000: export just one symbol · 8abe4a0a
      Mauro Carvalho Chehab 提交于
      Exporting multiple symbols don't work as it causes compilation
      breakages, due to the way dvb_attach() works.
      
      This were reported several times, like:
      
         drivers/built-in.o: In function `cxusb_dualdig4_rev2_tuner_attach':
      >> cxusb.c:(.text+0x27d4b5): undefined reference to `dib7000p_get_i2c_master'
         drivers/built-in.o: In function `dib7070_set_param_override':
         cxusb.c:(.text+0x27d5a5): undefined reference to `dib0070_wbd_offset'
      >> cxusb.c:(.text+0x27d5be): undefined reference to `dib7000p_set_wbd_ref'
         drivers/built-in.o: In function `dib7070_tuner_reset':
      >> cxusb.c:(.text+0x27d5f9): undefined reference to `dib7000p_set_gpio'
         drivers/built-in.o: In function `cxusb_dualdig4_rev2_frontend_attach':
      >> cxusb.c:(.text+0x27df5c): undefined reference to `dib7000p_i2c_enumeration'
      
      In this specific report:
      	CONFIG_DVB_USB_CXUSB=y
      	CONFIG_DVB_DIB7000P=m
      
      But the same type of bug can happen if:
      	CONFIG_DVB_DIB7000P=m
      and one of the bridge drivers is compiled builtin (cxusb, cx23885-dvb
      and/or dib0700).
      
      As a bonus, dib7000p won't be loaded anymore if the device uses
      a different frontend, reducing the memory footprint.
      
      Tested with Hauppauge Nova-TD (2 frontends).
      Reported-by: NFengguang Wu <fengguang.wu@intel.com>
      Signed-off-by: NMauro Carvalho Chehab <m.chehab@samsung.com>
      8abe4a0a
    • M
      [media] dib7000p: rename dib7000p_attach to dib7000p_init · 7f67d96a
      Mauro Carvalho Chehab 提交于
      Well, what we call as "foo_attach" is the method that should
      be called by the dvb_attach() macro.
      
      It should be noticed that the name "dvb_attach" is really a
      bad name and don't express what it does.
      
      dvb_attach() basically does three things, if the frontend is
      compiled as a module:
      - It lookups for the module that it is known to have the
        given symbol name and requests such module;
      - It increments the module usage (anonymously - so lsmod
        doesn't print who loaded the module);
      - after loading the module, it runs the function associated
        with the dynamic symbol.
      
      When compiled as builtin, it just calls the function given to it.
      
      As dvb_attach() increments refcount, it can't be (easily)
      called more than once for the same module, or the kernel
      will deny to remove the module, because refcount will never
      be zeroed.
      
      In other words, the function name given to dvb_attach()
      should be one single symbol that will always be called
      before any other function on that module to be used.
      
      For almost all DVB frontends, there's just one function.
      
      However, the dib7000p initialization can require up to 3
      functions to be called:
      	- dib7000p_get_i2c_master;
      	- dib7000p_i2c_enumeration;
      	- dib7000p_init (before this patch dib7000_attach).
      
      (plus a bunch of other functions that the bridge driver will
      need to call).
      
      As we need to get rid of all those direct calls, because they
      cause compilation breakages when bridge is builtin and
      frontend is module, we'll need to add a new function that
      will be the first one to be called, whatever initialization
      is needed.
      
      So, let's rename the function that probes and init the hardware
      to dib7000p_init.
      
      A latter patch will add a new dib7000p_attach that will be
      used as originally conceived by dvb_attach() way.
      Signed-off-by: NMauro Carvalho Chehab <m.chehab@samsung.com>
      7f67d96a
  4. 23 4月, 2013 1 次提交
  5. 23 3月, 2013 1 次提交
  6. 14 8月, 2012 1 次提交
  7. 25 11月, 2011 2 次提交
  8. 22 3月, 2011 2 次提交
  9. 28 9月, 2010 2 次提交
  10. 06 12月, 2009 2 次提交
  11. 30 3月, 2009 2 次提交
  12. 30 12月, 2008 1 次提交
    • M
      V4L/DVB (9977): Kbuild: fix compilation when dib7000p is not defined · 71050814
      Mauro Carvalho Chehab 提交于
      dib7000p.h defines a few extern symbols when CONFIG_DVB_DIB7000P is not set. since the
      header is used on more than one driver, this causes symbol duplication, as pointed by
      Ingo Molnar <mingo@elte.hu>:
      
      drivers/media/dvb/built-in.o: In function `dib7000p_set_gpio':
      (.text+0x3f242): multiple definition of `dib7000p_set_gpio'
      drivers/media/video/built-in.o:(.text+0xb8c1e): first defined here
      drivers/media/dvb/built-in.o: In function `dib7000p_i2c_enumeration':
      (.text+0x3f282): multiple definition of `dib7000p_i2c_enumeration'
      drivers/media/video/built-in.o:(.text+0xb8c3e): first defined here
      drivers/media/dvb/built-in.o: In function `dib7000p_set_wbd_ref':
      (.text+0x3f1c1): multiple definition of `dib7000p_set_wbd_ref'
      drivers/media/video/built-in.o:(.text+0xb8bfe): first defined here
        LD      drivers/net/built-in.o
      make[2]: *** [drivers/media/built-in.o] Error 1
      
      Cc: Patrick Boettcher <patrick.boettcher@desy.de>
      Signed-off-by: NMauro Carvalho Chehab <mchehab@redhat.com>
      71050814
  13. 12 10月, 2008 1 次提交
  14. 05 6月, 2008 1 次提交
  15. 25 4月, 2008 1 次提交
  16. 10 10月, 2007 3 次提交
  17. 10 12月, 2006 1 次提交