[media] au0828: remove forced dependency of VIDEO_AU0828 on VIDEO_V4L2
authorMichael Krufky <mkrufky@linuxtv.org>
Tue, 4 Dec 2012 14:30:00 +0000 (11:30 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Mon, 17 Dec 2012 16:31:26 +0000 (14:31 -0200)
This patch removes the dependendency of VIDEO_AU0828 on VIDEO_V4L2 by
creating a new Kconfig option, VIDEO_AU0828_V4L2, which enables analog
video capture support and depends on VIDEO_V4L2 itself.
With VIDEO_AU0828_V4L2 disabled, the driver will only support digital
television and will not depend on the v4l2-core. With VIDEO_AU0828_V4L2
enabled, the driver will be built with the analog v4l2 support included.
By default, the VIDEO_AU0828_V4L2 option will be set to Y, so as to
preserve the original behavior.

Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/usb/Kconfig
drivers/media/usb/au0828/Kconfig
drivers/media/usb/au0828/Makefile
drivers/media/usb/au0828/au0828-cards.c
drivers/media/usb/au0828/au0828-core.c
drivers/media/usb/au0828/au0828-i2c.c
drivers/media/usb/au0828/au0828.h

index 6746994d03fe2fce10cdb9c1b59429919d56c50c..0a7d520636a9a5a2ac2017ec5243c65b6b1c5841 100644 (file)
@@ -21,7 +21,6 @@ endif
 
 if MEDIA_ANALOG_TV_SUPPORT
        comment "Analog TV USB devices"
-source "drivers/media/usb/au0828/Kconfig"
 source "drivers/media/usb/pvrusb2/Kconfig"
 source "drivers/media/usb/hdpvr/Kconfig"
 source "drivers/media/usb/tlg2300/Kconfig"
@@ -31,6 +30,7 @@ endif
 
 if (MEDIA_ANALOG_TV_SUPPORT || MEDIA_DIGITAL_TV_SUPPORT)
        comment "Analog/digital TV USB devices"
+source "drivers/media/usb/au0828/Kconfig"
 source "drivers/media/usb/cx231xx/Kconfig"
 source "drivers/media/usb/tm6000/Kconfig"
 endif
index 1766c0ce93be3736bd50c6b2991a622961cfa9d0..953a37c613b146883d70567c9f30d73c39e09700 100644 (file)
@@ -1,17 +1,28 @@
 
 config VIDEO_AU0828
        tristate "Auvitek AU0828 support"
-       depends on I2C && INPUT && DVB_CORE && USB && VIDEO_V4L2
+       depends on I2C && INPUT && DVB_CORE && USB
        select I2C_ALGOBIT
        select VIDEO_TVEEPROM
        select VIDEOBUF_VMALLOC
        select DVB_AU8522_DTV if MEDIA_SUBDRV_AUTOSELECT
-       select DVB_AU8522_V4L if MEDIA_SUBDRV_AUTOSELECT
        select MEDIA_TUNER_XC5000 if MEDIA_SUBDRV_AUTOSELECT
        select MEDIA_TUNER_MXL5007T if MEDIA_SUBDRV_AUTOSELECT
        select MEDIA_TUNER_TDA18271 if MEDIA_SUBDRV_AUTOSELECT
        ---help---
-         This is a video4linux driver for Auvitek's USB device.
+         This is a hybrid analog/digital tv capture driver for
+         Auvitek's AU0828 USB device.
 
          To compile this driver as a module, choose M here: the
          module will be called au0828
+
+config VIDEO_AU0828_V4L2
+       bool "Auvitek AU0828 v4l2 analog video support"
+       depends on VIDEO_AU0828 && VIDEO_V4L2
+       select DVB_AU8522_V4L if MEDIA_SUBDRV_AUTOSELECT
+       default y
+       ---help---
+         This is a video4linux driver for Auvitek's USB device.
+
+         Choose Y here to include support for v4l2 analog video
+         capture within the au0828 driver.
index 98cc20cc0ffb2538cd025899e51931f9535715c2..be3bdf698022858eafa2121f2982f72e05dc1662 100644 (file)
@@ -1,4 +1,8 @@
-au0828-objs    := au0828-core.o au0828-i2c.o au0828-cards.o au0828-dvb.o au0828-video.o au0828-vbi.o
+au0828-objs    := au0828-core.o au0828-i2c.o au0828-cards.o au0828-dvb.o
+
+ifeq ($(CONFIG_VIDEO_AU0828_V4L2),y)
+  au0828-objs   += au0828-video.o au0828-vbi.o
+endif
 
 obj-$(CONFIG_VIDEO_AU0828) += au0828.o
 
index cf309d8102c0b19182966af11d3cddddb10a3e9b..7b5b7420066db153db5f666c3991a46a8f9263fb 100644 (file)
@@ -188,9 +188,11 @@ static void hauppauge_eeprom(struct au0828_dev *dev, u8 *eeprom_data)
 void au0828_card_setup(struct au0828_dev *dev)
 {
        static u8 eeprom[256];
+#ifdef CONFIG_VIDEO_AU0828_V4L2
        struct tuner_setup tun_setup;
        struct v4l2_subdev *sd;
        unsigned int mode_mask = T_ANALOG_TV;
+#endif
 
        dprintk(1, "%s()\n", __func__);
 
@@ -211,6 +213,7 @@ void au0828_card_setup(struct au0828_dev *dev)
                break;
        }
 
+#ifdef CONFIG_VIDEO_AU0828_V4L2
        if (AUVI_INPUT(0).type != AU0828_VMUX_UNDEFINED) {
                /* Load the analog demodulator driver (note this would need to
                   be abstracted out if we ever need to support a different
@@ -236,6 +239,7 @@ void au0828_card_setup(struct au0828_dev *dev)
                v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_type_addr,
                                     &tun_setup);
        }
+#endif
 }
 
 /*
index 745a80a798c8b034f76401c43ce9935b71ce5569..1e6f40ef1c6b604e18e44e98fdca3f51284bb0c2 100644 (file)
@@ -134,13 +134,17 @@ static void au0828_usb_disconnect(struct usb_interface *interface)
        /* Digital TV */
        au0828_dvb_unregister(dev);
 
+#ifdef CONFIG_VIDEO_AU0828_V4L2
        if (AUVI_INPUT(0).type != AU0828_VMUX_UNDEFINED)
                au0828_analog_unregister(dev);
+#endif
 
        /* I2C */
        au0828_i2c_unregister(dev);
 
+#ifdef CONFIG_VIDEO_AU0828_V4L2
        v4l2_device_unregister(&dev->v4l2_dev);
+#endif
 
        usb_set_intfdata(interface, NULL);
 
@@ -155,7 +159,10 @@ static void au0828_usb_disconnect(struct usb_interface *interface)
 static int au0828_usb_probe(struct usb_interface *interface,
        const struct usb_device_id *id)
 {
-       int ifnum, retval;
+       int ifnum;
+#ifdef CONFIG_VIDEO_AU0828_V4L2
+       int retval;
+#endif
        struct au0828_dev *dev;
        struct usb_device *usbdev = interface_to_usbdev(interface);
 
@@ -194,6 +201,7 @@ static int au0828_usb_probe(struct usb_interface *interface,
        dev->usbdev = usbdev;
        dev->boardnr = id->driver_info;
 
+#ifdef CONFIG_VIDEO_AU0828_V4L2
        /* Create the v4l2_device */
        retval = v4l2_device_register(&interface->dev, &dev->v4l2_dev);
        if (retval) {
@@ -203,6 +211,7 @@ static int au0828_usb_probe(struct usb_interface *interface,
                kfree(dev);
                return -EIO;
        }
+#endif
 
        /* Power Up the bridge */
        au0828_write(dev, REG_600, 1 << 4);
@@ -216,9 +225,11 @@ static int au0828_usb_probe(struct usb_interface *interface,
        /* Setup */
        au0828_card_setup(dev);
 
+#ifdef CONFIG_VIDEO_AU0828_V4L2
        /* Analog TV */
        if (AUVI_INPUT(0).type != AU0828_VMUX_UNDEFINED)
                au0828_analog_register(dev, interface);
+#endif
 
        /* Digital TV */
        au0828_dvb_register(dev);
index 4ded17fe195792d53158e7936048213376c40e6b..20d69b5652552fd6a0dab9ee1e2e3a81d5ab2f62 100644 (file)
@@ -378,7 +378,11 @@ int au0828_i2c_register(struct au0828_dev *dev)
 
        dev->i2c_adap.algo = &dev->i2c_algo;
        dev->i2c_adap.algo_data = dev;
+#ifdef CONFIG_VIDEO_AU0828_V4L2
        i2c_set_adapdata(&dev->i2c_adap, &dev->v4l2_dev);
+#else
+       i2c_set_adapdata(&dev->i2c_adap, dev);
+#endif
        i2c_add_adapter(&dev->i2c_adap);
 
        dev->i2c_client.adapter = &dev->i2c_adap;
index 66a56ef7bbe4f4921a9ebc1af6911a293693573f..e579ff69ca4a692121b27a5a43d34eaf9d9767d6 100644 (file)
@@ -199,8 +199,10 @@ struct au0828_dev {
        struct au0828_dvb               dvb;
        struct work_struct              restart_streaming;
 
+#ifdef CONFIG_VIDEO_AU0828_V4L2
        /* Analog */
        struct v4l2_device v4l2_dev;
+#endif
        int users;
        unsigned int resources; /* resources in use */
        struct video_device *vdev;