xc5000: Small amount of cleanup and commenting, just for clarification.
Signed-off-by: Steven Toth <stoth@hauppauge.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
#include <linux/module.h>
#include <linux/moduleparam.h>
-#include <linux/videodev2.h>
+#include <linux/videodev.h>
#include <linux/delay.h>
#include <linux/dvb/frontend.h>
#include <linux/i2c.h>
dprintk(1, "%s()\n", __FUNCTION__);
if (priv->cfg->tuner_callback) {
- ret = priv->cfg->tuner_callback(priv->cfg->video_dev,
+ ret = priv->cfg->tuner_callback(priv->cfg->priv,
XC5000_TUNER_RESET, 0);
if (ret)
printk(KERN_ERR "xc5000: reset failed\n");
struct xc5000_config {
u8 i2c_address;
u32 if_khz;
- void *video_dev;
- int (*tuner_callback) (void *dev, int command, int arg);
+
+ /* For each bridge framework, when it attaches either analog or digital,
+ * it has to store a reference back to its _core equivalent structure,
+ * so that it can service the hardware by steering gpio's etc.
+ * Each bridge implementation is different so cast priv accordingly.
+ * The xc5000 driver cares not for this value, other than ensuring
+ * it's passed back to a bridge during tuner_callback().
+ */
+ void *priv;
+ int (*tuner_callback) (void *priv, int command, int arg);
};
/* xc5000 callback command */
/* Tuner callback function for cx23885 boards. Currently only needed
* for HVR1500Q, which has an xc5000 tuner.
*/
-int cx23885_tuner_callback(void *i2c_bus, int command, int arg)
+int cx23885_tuner_callback(void *priv, int command, int arg)
{
- struct cx23885_i2c *bus = i2c_bus;
+ struct cx23885_i2c *bus = priv;
struct cx23885_dev *dev = bus->dev;
switch(dev->board) {
return 0; /* Should never be here */
}
-EXPORT_SYMBOL(cx23885_tuner_callback);
+
void cx23885_gpio_setup(struct cx23885_dev *dev)
{
switch(dev->board) {
static struct xc5000_config hauppauge_hvr1500q_tunerconfig = {
.i2c_address = 0x61,
.if_khz = 5380,
- /* cannot set .video_dev here, do it before attach. */
.tuner_callback = cx23885_tuner_callback
};
&hauppauge_hvr1500q_config,
&dev->i2c_bus[0].i2c_adap);
if (port->dvb.frontend != NULL) {
- /* tunerconfig.video_dev must point to
- * i2c_adap.algo_data
- */
- hauppauge_hvr1500q_tunerconfig.video_dev =
- i2c_bus->i2c_adap.algo_data;
+ hauppauge_hvr1500q_tunerconfig.priv = i2c_bus;
dvb_attach(xc5000_attach, port->dvb.frontend,
&i2c_bus->i2c_adap,
&hauppauge_hvr1500q_tunerconfig);
extern struct cx23885_subid cx23885_subids[];
extern const unsigned int cx23885_idcount;
-extern int cx23885_tuner_callback(void *i2c_bus, int command, int arg);
+extern int cx23885_tuner_callback(void *priv, int command, int arg);
extern void cx23885_card_list(struct cx23885_dev *dev);
extern int cx23885_ir_init(struct cx23885_dev *dev);
extern void cx23885_gpio_setup(struct cx23885_dev *dev);
* PCTV HD 800i with an xc5000 sillicon tuner. This is used for both *
* analog tuner attach (tuner-core.c) and dvb tuner attach (cx88-dvb.c) */
-int cx88_tuner_callback(void *i2c_algo, int command, int arg)
+int cx88_tuner_callback(void *priv, int command, int arg)
{
- struct i2c_algo_bit_data *algo = i2c_algo;
- struct cx88_core *core = algo->data;
+ struct i2c_algo_bit_data *i2c_algo = priv;
+ struct cx88_core *core = i2c_algo->data;
switch(core->boardnr) {
case CX88_BOARD_PINNACLE_PCTV_HD_800i:
cx_clear(MO_GP0_IO, 0x00000004);
mdelay(200);
cx_set(MO_GP0_IO, 0x00000004);
- printk(KERN_ERR "xc5000: in reset for xc5000\n");
mdelay(200);
return 0;
}
static struct xc5000_config pinnacle_pctv_hd_800i_tuner_config = {
.i2c_address = 0x64,
.if_khz = 5380,
- /* cannot set .video_dev here, do it right before attach */
.tuner_callback = cx88_tuner_callback,
};
/* tuner_config.video_dev must point to
* i2c_adap.algo_data
*/
- pinnacle_pctv_hd_800i_tuner_config.video_dev =
+ pinnacle_pctv_hd_800i_tuner_config.priv =
dev->core->i2c_adap.algo_data;
dvb_attach(xc5000_attach, dev->dvb.frontend,
&dev->core->i2c_adap,
case TUNER_XC5000:
xc5000_cfg.i2c_address = t->i2c->addr;
xc5000_cfg.if_khz = 5380;
- xc5000_cfg.video_dev = c->adapter->algo_data;
+ xc5000_cfg.priv = c->adapter->algo_data;
xc5000_cfg.tuner_callback = t->tuner_callback;
if (!xc5000_attach(&t->fe, t->i2c->adapter, &xc5000_cfg)) {
t->type = TUNER_ABSENT;