Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b14667f3 authored by Devin Heitmueller's avatar Devin Heitmueller Committed by Mauro Carvalho Chehab
Browse files

V4L/DVB (11080): au0828: Convert to use v4l2_device/subdev framework



Convert over to using the new subdev framework for the au0828 bridge.  This
includes using the new i2c probing mechanism.

Signed-off-by: default avatarDevin Heitmueller <dheitmueller@linuxtv.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 2eaf3960
Loading
Loading
Loading
Loading
+11 −2
Original line number Original line Diff line number Diff line
@@ -173,6 +173,7 @@ void au0828_card_setup(struct au0828_dev *dev)
{
{
	static u8 eeprom[256];
	static u8 eeprom[256];
	struct tuner_setup tun_setup;
	struct tuner_setup tun_setup;
	struct v4l2_subdev *sd;
	unsigned int mode_mask = T_ANALOG_TV |
	unsigned int mode_mask = T_ANALOG_TV |
				 T_DIGITAL_TV;
				 T_DIGITAL_TV;


@@ -199,13 +200,21 @@ void au0828_card_setup(struct au0828_dev *dev)
		/* Load the analog demodulator driver (note this would need to
		/* Load the analog demodulator driver (note this would need to
		   be abstracted out if we ever need to support a different
		   be abstracted out if we ever need to support a different
		   demod) */
		   demod) */
		request_module("au8522");
		sd = v4l2_i2c_new_subdev(&dev->i2c_adap, "au8522", "au8522",
					 0x8e >> 1);
		if (sd == NULL) {
			printk("analog subdev registration failure\n");
		}
	}
	}


	/* Setup tuners */
	/* Setup tuners */
	if (dev->board.tuner_type != TUNER_ABSENT) {
	if (dev->board.tuner_type != TUNER_ABSENT) {
		/* Load the tuner module, which does the attach */
		/* Load the tuner module, which does the attach */
		request_module("tuner");
		sd = v4l2_i2c_new_subdev(&dev->i2c_adap, "tuner", "tuner",
					 dev->board.tuner_addr);
		if (sd == NULL) {
			printk("analog tuner subdev registration failure\n");
		}


		tun_setup.mode_mask      = mode_mask;
		tun_setup.mode_mask      = mode_mask;
		tun_setup.type           = dev->board.tuner_type;
		tun_setup.type           = dev->board.tuner_type;
+14 −1
Original line number Original line Diff line number Diff line
@@ -152,6 +152,8 @@ static void au0828_usb_disconnect(struct usb_interface *interface)
	/* I2C */
	/* I2C */
	au0828_i2c_unregister(dev);
	au0828_i2c_unregister(dev);


	v4l2_device_unregister(&dev->v4l2_dev);

	usb_set_intfdata(interface, NULL);
	usb_set_intfdata(interface, NULL);


	mutex_lock(&dev->mutex);
	mutex_lock(&dev->mutex);
@@ -165,7 +167,7 @@ static void au0828_usb_disconnect(struct usb_interface *interface)
static int au0828_usb_probe(struct usb_interface *interface,
static int au0828_usb_probe(struct usb_interface *interface,
	const struct usb_device_id *id)
	const struct usb_device_id *id)
{
{
	int ifnum;
	int ifnum, retval;
	struct au0828_dev *dev;
	struct au0828_dev *dev;
	struct usb_device *usbdev = interface_to_usbdev(interface);
	struct usb_device *usbdev = interface_to_usbdev(interface);


@@ -192,6 +194,17 @@ static int au0828_usb_probe(struct usb_interface *interface,


	usb_set_intfdata(interface, dev);
	usb_set_intfdata(interface, dev);


	/* Create the v4l2_device */
	snprintf(dev->v4l2_dev.name, sizeof(dev->v4l2_dev.name), "%s-%03d",
		 "au0828", 0);
	retval = v4l2_device_register(&dev->usbdev->dev, &dev->v4l2_dev);
	if (retval) {
		printk(KERN_ERR "%s() v4l2_device_register failed\n",
		       __func__);
		kfree(dev);
		return -EIO;
	}

	/* Power Up the bridge */
	/* Power Up the bridge */
	au0828_write(dev, REG_600, 1 << 4);
	au0828_write(dev, REG_600, 1 << 4);


+2 −3
Original line number Original line Diff line number Diff line
@@ -345,7 +345,6 @@ static struct i2c_adapter au0828_i2c_adap_template = {
	.owner             = THIS_MODULE,
	.owner             = THIS_MODULE,
	.id                = I2C_HW_B_AU0828,
	.id                = I2C_HW_B_AU0828,
	.algo              = &au0828_i2c_algo_template,
	.algo              = &au0828_i2c_algo_template,
	.class             = I2C_CLASS_TV_ANALOG,
	.client_register   = attach_inform,
	.client_register   = attach_inform,
	.client_unregister = detach_inform,
	.client_unregister = detach_inform,
};
};
@@ -392,9 +391,9 @@ int au0828_i2c_register(struct au0828_dev *dev)
	strlcpy(dev->i2c_adap.name, DRIVER_NAME,
	strlcpy(dev->i2c_adap.name, DRIVER_NAME,
		sizeof(dev->i2c_adap.name));
		sizeof(dev->i2c_adap.name));


	dev->i2c_algo.data = dev;
	dev->i2c_adap.algo = &dev->i2c_algo;
	dev->i2c_adap.algo_data = dev;
	dev->i2c_adap.algo_data = dev;
	i2c_set_adapdata(&dev->i2c_adap, dev);
	i2c_set_adapdata(&dev->i2c_adap, &dev->v4l2_dev);
	i2c_add_adapter(&dev->i2c_adap);
	i2c_add_adapter(&dev->i2c_adap);


	dev->i2c_client.adapter = &dev->i2c_adap;
	dev->i2c_client.adapter = &dev->i2c_adap;
+1 −1
Original line number Original line Diff line number Diff line
@@ -1021,7 +1021,7 @@ static int vidioc_querycap(struct file *file, void *priv,
	memset(cap, 0, sizeof(*cap));
	memset(cap, 0, sizeof(*cap));
	strlcpy(cap->driver, "au0828", sizeof(cap->driver));
	strlcpy(cap->driver, "au0828", sizeof(cap->driver));
	strlcpy(cap->card, dev->board.name, sizeof(cap->card));
	strlcpy(cap->card, dev->board.name, sizeof(cap->card));
	strlcpy(cap->bus_info, dev->usbdev->dev.bus_id, sizeof(cap->bus_info));
	strlcpy(cap->bus_info, dev->v4l2_dev.name, sizeof(cap->bus_info));


	cap->version = AU0828_VERSION_CODE;
	cap->version = AU0828_VERSION_CODE;


+3 −1
Original line number Original line Diff line number Diff line
@@ -27,6 +27,7 @@
/* Analog */
/* Analog */
#include <linux/videodev2.h>
#include <linux/videodev2.h>
#include <media/videobuf-vmalloc.h>
#include <media/videobuf-vmalloc.h>
#include <media/v4l2-device.h>


/* DVB */
/* DVB */
#include "demux.h"
#include "demux.h"
@@ -188,7 +189,7 @@ struct au0828_dev {


	/* I2C */
	/* I2C */
	struct i2c_adapter		i2c_adap;
	struct i2c_adapter		i2c_adap;
	struct i2c_algo_bit_data	i2c_algo;
	struct i2c_algorithm		i2c_algo;
	struct i2c_client		i2c_client;
	struct i2c_client		i2c_client;
	u32 				i2c_rc;
	u32 				i2c_rc;


@@ -197,6 +198,7 @@ struct au0828_dev {


	/* Analog */
	/* Analog */
	struct list_head au0828list;
	struct list_head au0828list;
	struct v4l2_device v4l2_dev;
	int users;
	int users;
	unsigned int stream_on:1;	/* Locks streams */
	unsigned int stream_on:1;	/* Locks streams */
	struct video_device *vdev;
	struct video_device *vdev;