Commit 1cfef5ed authored by Linus Torvalds's avatar Linus Torvalds

Merge master.kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb

* master.kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb:
  V4L/DVB (4290): Add support for the TCL M2523_3DB_E tuner.
  V4L/DVB (4289): Missing statement in drivers/media/dvb/frontends/cx22700.c
  V4L/DVB (4288): Clean out a zillion sparse warnings in pvrusb2
  V4L/DVB (4287): Pvrusb2/: possible cleanups
  V4L/DVB (4285): Cx88: add support for Geniatech Digistar / Digiwave 103g
  V4L/DVB (4284): Cx24123: fix set_voltage function according to the specs
  V4L/DVB (4282): Fix: use swzigzag for swalgo
  V4L/DVB (4281): TDA9887_SET_CONFIG should only be handled by the tda9887.
  V4L/DVB (4277): Fix CI interface on PRO KNC1 cards
  V4L/DVB (4276): Fix CI on old KNC1 DVBC cards
  V4L/DVB (4275): The FE_SET_FRONTEND_TUNE_MODE ioctl always returns EOPNOTSUPP
  V4L/DVB (4274): Eliminate use of tda9887 from pvrusb2 driver
  V4L/DVB (4273): Always log pvrusb2 device register / unregister events
  V4L/DVB (4272): Fix tveeprom supported standards
  V4L/DVB (4270): Add tda9887-specific tuner configuration
  V4L/DVB (4269): Subject: videocodec: make 1-bit fields unsigned
  V4L/DVB (4267): Remove all instances of request_module("tda9887")
  V4L/DVB (4264): Cx88-blackbird: implement VIDIOC_QUERYCTRL and VIDIOC_QUERYMENU
parents 3e8d6ad9 00819f87
...@@ -50,3 +50,4 @@ ...@@ -50,3 +50,4 @@
49 -> PixelView PlayTV P7000 [1554:4813] 49 -> PixelView PlayTV P7000 [1554:4813]
50 -> NPG Tech Real TV FM Top 10 [14f1:0842] 50 -> NPG Tech Real TV FM Top 10 [14f1:0842]
51 -> WinFast DTV2000 H [107d:665e] 51 -> WinFast DTV2000 H [107d:665e]
52 -> Geniatech DVB-S [14f1:0084]
...@@ -570,7 +570,8 @@ static int dvb_frontend_thread(void *data) ...@@ -570,7 +570,8 @@ static int dvb_frontend_thread(void *data)
dvb_frontend_add_event(fe, s); dvb_frontend_add_event(fe, s);
fepriv->status = s; fepriv->status = s;
} }
} } else
dvb_frontend_swzigzag(fe);
} else } else
dvb_frontend_swzigzag(fe); dvb_frontend_swzigzag(fe);
} }
...@@ -975,6 +976,7 @@ static int dvb_frontend_ioctl(struct inode *inode, struct file *file, ...@@ -975,6 +976,7 @@ static int dvb_frontend_ioctl(struct inode *inode, struct file *file,
case FE_SET_FRONTEND_TUNE_MODE: case FE_SET_FRONTEND_TUNE_MODE:
fepriv->tune_mode_flags = (unsigned long) parg; fepriv->tune_mode_flags = (unsigned long) parg;
err = 0;
break; break;
}; };
......
...@@ -134,6 +134,7 @@ static int cx22700_set_tps (struct cx22700_state *state, struct dvb_ofdm_paramet ...@@ -134,6 +134,7 @@ static int cx22700_set_tps (struct cx22700_state *state, struct dvb_ofdm_paramet
return -EINVAL; return -EINVAL;
if (p->code_rate_LP < FEC_1_2 || p->code_rate_LP > FEC_7_8) if (p->code_rate_LP < FEC_1_2 || p->code_rate_LP > FEC_7_8)
return -EINVAL;
if (p->code_rate_HP == FEC_4_5 || p->code_rate_LP == FEC_4_5) if (p->code_rate_HP == FEC_4_5 || p->code_rate_LP == FEC_4_5)
return -EINVAL; return -EINVAL;
......
...@@ -670,10 +670,10 @@ static int cx24123_set_voltage(struct dvb_frontend* fe, fe_sec_voltage_t voltage ...@@ -670,10 +670,10 @@ static int cx24123_set_voltage(struct dvb_frontend* fe, fe_sec_voltage_t voltage
switch (voltage) { switch (voltage) {
case SEC_VOLTAGE_13: case SEC_VOLTAGE_13:
dprintk("%s: setting voltage 13V\n", __FUNCTION__); dprintk("%s: setting voltage 13V\n", __FUNCTION__);
return cx24123_writereg(state, 0x29, val | 0x80); return cx24123_writereg(state, 0x29, val & 0x7f);
case SEC_VOLTAGE_18: case SEC_VOLTAGE_18:
dprintk("%s: setting voltage 18V\n", __FUNCTION__); dprintk("%s: setting voltage 18V\n", __FUNCTION__);
return cx24123_writereg(state, 0x29, val & 0x7f); return cx24123_writereg(state, 0x29, val | 0x80);
default: default:
return -EINVAL; return -EINVAL;
}; };
......
...@@ -1141,6 +1141,15 @@ static void frontend_init(struct budget_av *budget_av) ...@@ -1141,6 +1141,15 @@ static void frontend_init(struct budget_av *budget_av)
break; break;
case SUBID_DVBC_KNC1: case SUBID_DVBC_KNC1:
budget_av->reinitialise_demod = 1;
fe = tda10021_attach(&philips_cu1216_config,
&budget_av->budget.i2c_adap,
read_pwm(budget_av));
if (fe) {
fe->ops.tuner_ops.set_params = philips_cu1216_tuner_set_params;
}
break;
case SUBID_DVBC_KNC1_PLUS: case SUBID_DVBC_KNC1_PLUS:
case SUBID_DVBC_CINERGY1200: case SUBID_DVBC_CINERGY1200:
budget_av->reinitialise_demod = 1; budget_av->reinitialise_demod = 1;
...@@ -1293,11 +1302,7 @@ static int budget_av_attach(struct saa7146_dev *dev, struct saa7146_pci_extensio ...@@ -1293,11 +1302,7 @@ static int budget_av_attach(struct saa7146_dev *dev, struct saa7146_pci_extensio
budget_av->budget.dvb_adapter.priv = budget_av; budget_av->budget.dvb_adapter.priv = budget_av;
frontend_init(budget_av); frontend_init(budget_av);
if (!budget_av->has_saa7113) {
ciintf_init(budget_av); ciintf_init(budget_av);
}
return 0; return 0;
} }
......
...@@ -3548,11 +3548,6 @@ void __devinit bttv_init_card2(struct bttv *btv) ...@@ -3548,11 +3548,6 @@ void __devinit bttv_init_card2(struct bttv *btv)
/* Hybrid DVB card, DOES have a tda9887 */ /* Hybrid DVB card, DOES have a tda9887 */
if (btv->c.type == BTTV_BOARD_DVICO_FUSIONHDTV_5_LITE) if (btv->c.type == BTTV_BOARD_DVICO_FUSIONHDTV_5_LITE)
tda9887 = 1; tda9887 = 1;
if((btv->tuner_type == TUNER_PHILIPS_FM1216ME_MK3) ||
(btv->tuner_type == TUNER_PHILIPS_FM1236_MK3) ||
(btv->tuner_type == TUNER_PHILIPS_FM1256_IH3) ||
tda9887)
request_module("tda9887");
if (btv->tuner_type != UNSET) if (btv->tuner_type != UNSET)
request_module("tuner"); request_module("tuner");
} }
......
...@@ -686,6 +686,39 @@ static struct videobuf_queue_ops blackbird_qops = { ...@@ -686,6 +686,39 @@ static struct videobuf_queue_ops blackbird_qops = {
/* ------------------------------------------------------------------ */ /* ------------------------------------------------------------------ */
static const u32 *ctrl_classes[] = {
cx88_user_ctrls,
cx2341x_mpeg_ctrls,
NULL
};
static int blackbird_queryctrl(struct cx8802_dev *dev, struct v4l2_queryctrl *qctrl)
{
qctrl->id = v4l2_ctrl_next(ctrl_classes, qctrl->id);
if (qctrl->id == 0)
return -EINVAL;
/* Standard V4L2 controls */
if (cx8800_ctrl_query(qctrl) == 0)
return 0;
/* MPEG V4L2 controls */
if (cx2341x_ctrl_query(&dev->params, qctrl))
qctrl->flags |= V4L2_CTRL_FLAG_DISABLED;
return 0;
}
static int blackbird_querymenu(struct cx8802_dev *dev, struct v4l2_querymenu *qmenu)
{
struct v4l2_queryctrl qctrl;
qctrl.id = qmenu->id;
blackbird_queryctrl(dev, &qctrl);
return v4l2_ctrl_query_menu(qmenu, &qctrl, cx2341x_ctrl_get_menu(qmenu->id));
}
/* ------------------------------------------------------------------ */
static int mpeg_do_ioctl(struct inode *inode, struct file *file, static int mpeg_do_ioctl(struct inode *inode, struct file *file,
unsigned int cmd, void *arg) unsigned int cmd, void *arg)
{ {
...@@ -866,6 +899,16 @@ static int mpeg_do_ioctl(struct inode *inode, struct file *file, ...@@ -866,6 +899,16 @@ static int mpeg_do_ioctl(struct inode *inode, struct file *file,
core->name); core->name);
return 0; return 0;
} }
case VIDIOC_QUERYMENU:
return blackbird_querymenu(dev, arg);
case VIDIOC_QUERYCTRL:
{
struct v4l2_queryctrl *c = arg;
if (blackbird_queryctrl(dev, c) == 0)
return 0;
return cx88_do_ioctl(inode, file, 0, dev->core, cmd, arg, mpeg_do_ioctl);
}
default: default:
return cx88_do_ioctl(inode, file, 0, dev->core, cmd, arg, mpeg_do_ioctl); return cx88_do_ioctl(inode, file, 0, dev->core, cmd, arg, mpeg_do_ioctl);
......
...@@ -1194,6 +1194,21 @@ struct cx88_board cx88_boards[] = { ...@@ -1194,6 +1194,21 @@ struct cx88_board cx88_boards[] = {
}}, }},
.dvb = 1, .dvb = 1,
}, },
[CX88_BOARD_GENIATECH_DVBS] = {
.name = "Geniatech DVB-S",
.tuner_type = TUNER_ABSENT,
.radio_type = UNSET,
.tuner_addr = ADDR_UNSET,
.radio_addr = ADDR_UNSET,
.input = {{
.type = CX88_VMUX_DVB,
.vmux = 0,
},{
.type = CX88_VMUX_COMPOSITE1,
.vmux = 1,
}},
.dvb = 1,
},
}; };
const unsigned int cx88_bcount = ARRAY_SIZE(cx88_boards); const unsigned int cx88_bcount = ARRAY_SIZE(cx88_boards);
...@@ -1439,6 +1454,10 @@ struct cx88_subid cx88_subids[] = { ...@@ -1439,6 +1454,10 @@ struct cx88_subid cx88_subids[] = {
.subvendor = 0x18ac, .subvendor = 0x18ac,
.subdevice = 0xd800, /* FusionHDTV 3 Gold (original revision) */ .subdevice = 0xd800, /* FusionHDTV 3 Gold (original revision) */
.card = CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q, .card = CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q,
},{
.subvendor = 0x14f1,
.subdevice = 0x0084,
.card = CX88_BOARD_GENIATECH_DVBS,
}, },
}; };
const unsigned int cx88_idcount = ARRAY_SIZE(cx88_subids); const unsigned int cx88_idcount = ARRAY_SIZE(cx88_subids);
......
...@@ -496,6 +496,26 @@ static int kworld_dvbs_100_set_voltage(struct dvb_frontend* fe, fe_sec_voltage_t ...@@ -496,6 +496,26 @@ static int kworld_dvbs_100_set_voltage(struct dvb_frontend* fe, fe_sec_voltage_t
return 0; return 0;
} }
static int geniatech_dvbs_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage)
{
struct cx8802_dev *dev= fe->dvb->priv;
struct cx88_core *core = dev->core;
if (voltage == SEC_VOLTAGE_OFF) {
dprintk(1,"LNB Voltage OFF\n");
cx_write(MO_GP0_IO, 0x0000efff);
}
if (core->prev_set_voltage)
return core->prev_set_voltage(fe, voltage);
return 0;
}
static struct cx24123_config geniatech_dvbs_config = {
.demod_address = 0x55,
.set_ts_params = cx24123_set_ts_param,
};
static struct cx24123_config hauppauge_novas_config = { static struct cx24123_config hauppauge_novas_config = {
.demod_address = 0x55, .demod_address = 0x55,
.set_ts_params = cx24123_set_ts_param, .set_ts_params = cx24123_set_ts_param,
...@@ -760,6 +780,14 @@ static int dvb_register(struct cx8802_dev *dev) ...@@ -760,6 +780,14 @@ static int dvb_register(struct cx8802_dev *dev)
dev->dvb.frontend->ops.set_voltage = kworld_dvbs_100_set_voltage; dev->dvb.frontend->ops.set_voltage = kworld_dvbs_100_set_voltage;
} }
break; break;
case CX88_BOARD_GENIATECH_DVBS:
dev->dvb.frontend = cx24123_attach(&geniatech_dvbs_config,
&dev->core->i2c_adap);
if (dev->dvb.frontend) {
dev->core->prev_set_voltage = dev->dvb.frontend->ops.set_voltage;
dev->dvb.frontend->ops.set_voltage = geniatech_dvbs_set_voltage;
}
break;
#endif #endif
default: default:
printk("%s: The frontend of your DVB/ATSC card isn't supported yet\n", printk("%s: The frontend of your DVB/ATSC card isn't supported yet\n",
......
...@@ -327,6 +327,51 @@ static struct cx88_ctrl cx8800_ctls[] = { ...@@ -327,6 +327,51 @@ static struct cx88_ctrl cx8800_ctls[] = {
}; };
static const int CX8800_CTLS = ARRAY_SIZE(cx8800_ctls); static const int CX8800_CTLS = ARRAY_SIZE(cx8800_ctls);
const u32 cx88_user_ctrls[] = {
V4L2_CID_USER_CLASS,
V4L2_CID_BRIGHTNESS,
V4L2_CID_CONTRAST,
V4L2_CID_SATURATION,
V4L2_CID_HUE,
V4L2_CID_AUDIO_VOLUME,
V4L2_CID_AUDIO_BALANCE,
V4L2_CID_AUDIO_MUTE,
0
};
EXPORT_SYMBOL(cx88_user_ctrls);
static const u32 *ctrl_classes[] = {
cx88_user_ctrls,
NULL
};
int cx8800_ctrl_query(struct v4l2_queryctrl *qctrl)
{
int i;
if (qctrl->id < V4L2_CID_BASE ||
qctrl->id >= V4L2_CID_LASTP1)
return -EINVAL;
for (i = 0; i < CX8800_CTLS; i++)
if (cx8800_ctls[i].v.id == qctrl->id)
break;
if (i == CX8800_CTLS) {
*qctrl = no_ctl;
return 0;
}
*qctrl = cx8800_ctls[i].v;
return 0;
}
EXPORT_SYMBOL(cx8800_ctrl_query);
static int cx88_queryctrl(struct v4l2_queryctrl *qctrl)
{
qctrl->id = v4l2_ctrl_next(ctrl_classes, qctrl->id);
if (qctrl->id == 0)
return -EINVAL;
return cx8800_ctrl_query(qctrl);
}
/* ------------------------------------------------------------------- */ /* ------------------------------------------------------------------- */
/* resource management */ /* resource management */
...@@ -1362,20 +1407,8 @@ int cx88_do_ioctl(struct inode *inode, struct file *file, int radio, ...@@ -1362,20 +1407,8 @@ int cx88_do_ioctl(struct inode *inode, struct file *file, int radio,
case VIDIOC_QUERYCTRL: case VIDIOC_QUERYCTRL:
{ {
struct v4l2_queryctrl *c = arg; struct v4l2_queryctrl *c = arg;
int i;
if (c->id < V4L2_CID_BASE || return cx88_queryctrl(c);
c->id >= V4L2_CID_LASTP1)
return -EINVAL;
for (i = 0; i < CX8800_CTLS; i++)
if (cx8800_ctls[i].v.id == c->id)
break;
if (i == CX8800_CTLS) {
*c = no_ctl;
return 0;
}
*c = cx8800_ctls[i].v;
return 0;
} }
case VIDIOC_G_CTRL: case VIDIOC_G_CTRL:
return get_control(core,arg); return get_control(core,arg);
...@@ -1893,8 +1926,6 @@ static int __devinit cx8800_initdev(struct pci_dev *pci_dev, ...@@ -1893,8 +1926,6 @@ static int __devinit cx8800_initdev(struct pci_dev *pci_dev,
/* load and configure helper modules */ /* load and configure helper modules */
if (TUNER_ABSENT != core->tuner_type) if (TUNER_ABSENT != core->tuner_type)
request_module("tuner"); request_module("tuner");
if (core->tda9887_conf)
request_module("tda9887");
/* register v4l devices */ /* register v4l devices */
dev->video_dev = cx88_vdev_init(core,dev->pci, dev->video_dev = cx88_vdev_init(core,dev->pci,
......
...@@ -196,6 +196,7 @@ extern struct sram_channel cx88_sram_channels[]; ...@@ -196,6 +196,7 @@ extern struct sram_channel cx88_sram_channels[];
#define CX88_BOARD_PIXELVIEW_PLAYTV_P7000 49 #define CX88_BOARD_PIXELVIEW_PLAYTV_P7000 49
#define CX88_BOARD_NPGTECH_REALTV_TOP10FM 50 #define CX88_BOARD_NPGTECH_REALTV_TOP10FM 50
#define CX88_BOARD_WINFAST_DTV2000H 51 #define CX88_BOARD_WINFAST_DTV2000H 51
#define CX88_BOARD_GENIATECH_DVBS 52
enum cx88_itype { enum cx88_itype {
CX88_VMUX_COMPOSITE1 = 1, CX88_VMUX_COMPOSITE1 = 1,
...@@ -590,6 +591,8 @@ int cx8802_resume_common(struct pci_dev *pci_dev); ...@@ -590,6 +591,8 @@ int cx8802_resume_common(struct pci_dev *pci_dev);
extern int cx88_do_ioctl(struct inode *inode, struct file *file, int radio, extern int cx88_do_ioctl(struct inode *inode, struct file *file, int radio,
struct cx88_core *core, unsigned int cmd, struct cx88_core *core, unsigned int cmd,
void *arg, v4l2_kioctl driver_ioctl); void *arg, v4l2_kioctl driver_ioctl);
extern const u32 cx88_user_ctrls[];
extern int cx8800_ctrl_query(struct v4l2_queryctrl *qctrl);
/* /*
* Local variables: * Local variables:
......
...@@ -1574,8 +1574,6 @@ static int em28xx_init_dev(struct em28xx **devhandle, struct usb_device *udev, ...@@ -1574,8 +1574,6 @@ static int em28xx_init_dev(struct em28xx **devhandle, struct usb_device *udev,
request_module("tvp5150"); request_module("tvp5150");
if (dev->has_tuner) if (dev->has_tuner)
request_module("tuner"); request_module("tuner");
if (dev->tda9887_conf)
request_module("tda9887");
#endif #endif
errCode = em28xx_config(dev); errCode = em28xx_config(dev);
if (errCode) { if (errCode) {
......
...@@ -90,8 +90,8 @@ struct msp_state { ...@@ -90,8 +90,8 @@ struct msp_state {
/* thread */ /* thread */
struct task_struct *kthread; struct task_struct *kthread;
wait_queue_head_t wq; wait_queue_head_t wq;
int restart:1; unsigned int restart:1;
int watch_stereo:1; unsigned int watch_stereo:1;
}; };
/* msp3400-driver.c */ /* msp3400-driver.c */
......
...@@ -8,7 +8,7 @@ obj-pvrusb2-24xxx-$(CONFIG_VIDEO_PVRUSB2_24XXX) := \ ...@@ -8,7 +8,7 @@ obj-pvrusb2-24xxx-$(CONFIG_VIDEO_PVRUSB2_24XXX) := \
pvrusb2-objs := pvrusb2-i2c-core.o pvrusb2-i2c-cmd-v4l2.o \ pvrusb2-objs := pvrusb2-i2c-core.o pvrusb2-i2c-cmd-v4l2.o \
pvrusb2-audio.o pvrusb2-i2c-chips-v4l2.o \ pvrusb2-audio.o pvrusb2-i2c-chips-v4l2.o \
pvrusb2-encoder.o pvrusb2-video-v4l.o \ pvrusb2-encoder.o pvrusb2-video-v4l.o \
pvrusb2-eeprom.o pvrusb2-tuner.o pvrusb2-demod.o \ pvrusb2-eeprom.o pvrusb2-tuner.o \
pvrusb2-main.o pvrusb2-hdw.o pvrusb2-v4l2.o \ pvrusb2-main.o pvrusb2-hdw.o pvrusb2-v4l2.o \
pvrusb2-ctrl.o pvrusb2-std.o \ pvrusb2-ctrl.o pvrusb2-std.o \
pvrusb2-context.o pvrusb2-io.o pvrusb2-ioread.o \ pvrusb2-context.o pvrusb2-io.o pvrusb2-ioread.o \
......
...@@ -145,8 +145,8 @@ static int get_audio_status(struct pvr2_msp3400_handler *ctxt) ...@@ -145,8 +145,8 @@ static int get_audio_status(struct pvr2_msp3400_handler *ctxt)
static void pvr2_msp3400_detach(struct pvr2_msp3400_handler *ctxt) static void pvr2_msp3400_detach(struct pvr2_msp3400_handler *ctxt)
{ {
ctxt->client->handler = 0; ctxt->client->handler = NULL;
ctxt->hdw->audio_stat = 0; ctxt->hdw->audio_stat = NULL;
kfree(ctxt); kfree(ctxt);
} }
......
...@@ -77,7 +77,7 @@ struct pvr2_context *pvr2_context_create( ...@@ -77,7 +77,7 @@ struct pvr2_context *pvr2_context_create(
const struct usb_device_id *devid, const struct usb_device_id *devid,
void (*setup_func)(struct pvr2_context *)) void (*setup_func)(struct pvr2_context *))
{ {
struct pvr2_context *mp = 0; struct pvr2_context *mp = NULL;
mp = kmalloc(sizeof(*mp),GFP_KERNEL); mp = kmalloc(sizeof(*mp),GFP_KERNEL);
if (!mp) goto done; if (!mp) goto done;
memset(mp,0,sizeof(*mp)); memset(mp,0,sizeof(*mp));
...@@ -87,7 +87,7 @@ struct pvr2_context *pvr2_context_create( ...@@ -87,7 +87,7 @@ struct pvr2_context *pvr2_context_create(
mp->hdw = pvr2_hdw_create(intf,devid); mp->hdw = pvr2_hdw_create(intf,devid);
if (!mp->hdw) { if (!mp->hdw) {
pvr2_context_destroy(mp); pvr2_context_destroy(mp);
mp = 0; mp = NULL;
goto done; goto done;
} }
...@@ -145,7 +145,7 @@ void pvr2_channel_init(struct pvr2_channel *cp,struct pvr2_context *mp) ...@@ -145,7 +145,7 @@ void pvr2_channel_init(struct pvr2_channel *cp,struct pvr2_context *mp)
{ {
cp->hdw = mp->hdw; cp->hdw = mp->hdw;
cp->mc_head = mp; cp->mc_head = mp;
cp->mc_next = 0; cp->mc_next = NULL;
cp->mc_prev = mp->mc_last; cp->mc_prev = mp->mc_last;
if (mp->mc_last) { if (mp->mc_last) {
mp->mc_last->mc_next = cp; mp->mc_last->mc_next = cp;
...@@ -160,8 +160,8 @@ static void pvr2_channel_disclaim_stream(struct pvr2_channel *cp) ...@@ -160,8 +160,8 @@ static void pvr2_channel_disclaim_stream(struct pvr2_channel *cp)
{ {
if (!cp->stream) return; if (!cp->stream) return;
pvr2_stream_kill(cp->stream->stream); pvr2_stream_kill(cp->stream->stream);
cp->stream->user = 0; cp->stream->user = NULL;
cp->stream = 0; cp->stream = NULL;
} }
...@@ -179,7 +179,7 @@ void pvr2_channel_done(struct pvr2_channel *cp) ...@@ -179,7 +179,7 @@ void pvr2_channel_done(struct pvr2_channel *cp)
} else { } else {
mp->mc_first = cp->mc_next; mp->mc_first = cp->mc_next;
} }
cp->hdw = 0; cp->hdw = NULL;
} }
...@@ -212,7 +212,7 @@ struct pvr2_ioread *pvr2_channel_create_mpeg_stream( ...@@ -212,7 +212,7 @@ struct pvr2_ioread *pvr2_channel_create_mpeg_stream(
{ {
struct pvr2_ioread *cp; struct pvr2_ioread *cp;
cp = pvr2_ioread_create(); cp = pvr2_ioread_create();
if (!cp) return 0; if (!cp) return NULL;
pvr2_ioread_setup(cp,sp->stream); pvr2_ioread_setup(cp,sp->stream);
pvr2_ioread_set_sync_key(cp,stream_sync_key,sizeof(stream_sync_key)); pvr2_ioread_set_sync_key(cp,stream_sync_key,sizeof(stream_sync_key));
return cp; return cp;
......
...@@ -158,7 +158,7 @@ int pvr2_ctrl_get_mask(struct pvr2_ctrl *cptr) ...@@ -158,7 +158,7 @@ int pvr2_ctrl_get_mask(struct pvr2_ctrl *cptr)
/* Retrieve the control's name */ /* Retrieve the control's name */
const char *pvr2_ctrl_get_name(struct pvr2_ctrl *cptr) const char *pvr2_ctrl_get_name(struct pvr2_ctrl *cptr)
{ {
if (!cptr) return 0; if (!cptr) return NULL;
return cptr->info->name; return cptr->info->name;
} }
...@@ -166,7 +166,7 @@ const char *pvr2_ctrl_get_name(struct pvr2_ctrl *cptr) ...@@ -166,7 +166,7 @@ const char *pvr2_ctrl_get_name(struct pvr2_ctrl *cptr)
/* Retrieve the control's desc */ /* Retrieve the control's desc */
const char *pvr2_ctrl_get_desc(struct pvr2_ctrl *cptr) const char *pvr2_ctrl_get_desc(struct pvr2_ctrl *cptr)
{ {
if (!cptr) return 0; if (!cptr) return NULL;
return cptr->info->desc; return cptr->info->desc;
} }
...@@ -488,7 +488,7 @@ int pvr2_ctrl_sym_to_value(struct pvr2_ctrl *cptr, ...@@ -488,7 +488,7 @@ int pvr2_ctrl_sym_to_value(struct pvr2_ctrl *cptr,
LOCK_TAKE(cptr->hdw->big_lock); do { LOCK_TAKE(cptr->hdw->big_lock); do {
if (cptr->info->type == pvr2_ctl_int) { if (cptr->info->type == pvr2_ctl_int) {
ret = parse_token(ptr,len,valptr,0,0); ret = parse_token(ptr,len,valptr,NULL,0);
if ((ret >= 0) && if ((ret >= 0) &&
((*valptr < cptr->info->def.type_int.min_value) || ((*valptr < cptr->info->def.type_int.min_value) ||
(*valptr > cptr->info->def.type_int.max_value))) { (*valptr > cptr->info->def.type_int.max_value))) {
......
...@@ -139,8 +139,8 @@ static const struct pvr2_v4l_cx2584x_ops decoder_ops[] = { ...@@ -139,8 +139,8 @@ static const struct pvr2_v4l_cx2584x_ops decoder_ops[] = {
static void decoder_detach(struct pvr2_v4l_cx2584x *ctxt) static void decoder_detach(struct pvr2_v4l_cx2584x *ctxt)
{ {
ctxt->client->handler = 0; ctxt->client->handler = NULL;
ctxt->hdw->decoder_ctrl = 0; ctxt->hdw->decoder_ctrl = NULL;
kfree(ctxt); kfree(ctxt);
} }
...@@ -221,7 +221,7 @@ static unsigned int decoder_describe(struct pvr2_v4l_cx2584x *ctxt, ...@@ -221,7 +221,7 @@ static unsigned int decoder_describe(struct pvr2_v4l_cx2584x *ctxt,
static void decoder_reset(struct pvr2_v4l_cx2584x *ctxt) static void decoder_reset(struct pvr2_v4l_cx2584x *ctxt)
{ {
int ret; int ret;
ret = pvr2_i2c_client_cmd(ctxt->client,VIDIOC_INT_RESET,0); ret = pvr2_i2c_client_cmd(ctxt->client,VIDIOC_INT_RESET,NULL);
pvr2_trace(PVR2_TRACE_CHIPS,"i2c cx25840 decoder_reset (ret=%d)",ret); pvr2_trace(PVR2_TRACE_CHIPS,"i2c cx25840 decoder_reset (ret=%d)",ret);
} }
......
...@@ -82,7 +82,7 @@ static unsigned int debugifc_isolate_word(const char *buf,unsigned int count, ...@@ -82,7 +82,7 @@ static unsigned int debugifc_isolate_word(const char *buf,unsigned int count,
unsigned int wlen; unsigned int wlen;
unsigned int scnt; unsigned int scnt;
wptr = 0; wptr = NULL;
wlen = 0; wlen = 0;
scnt = debugifc_count_whitespace(buf,count); scnt = debugifc_count_whitespace(buf,count);
consume_cnt += scnt; count -= scnt; buf += scnt; consume_cnt += scnt; count -= scnt; buf += scnt;
...@@ -337,7 +337,7 @@ int pvr2_debugifc_print_status(struct pvr2_hdw *hdw, ...@@ -337,7 +337,7 @@ int pvr2_debugifc_print_status(struct pvr2_hdw *hdw,
} }
int pvr2_debugifc_do1cmd(struct pvr2_hdw *hdw,const char *buf, static int pvr2_debugifc_do1cmd(struct pvr2_hdw *hdw,const char *buf,
unsigned int count) unsigned int count)
{ {
const char *wptr; const char *wptr;
......
/*
*
* $Id$
*
* Copyright (C) 2005 Mike Isely <isely@pobox.com>
* Copyright (C) 2004 Aurelien Alleaume <slts@free.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#include "pvrusb2.h"
#include "pvrusb2-util.h"
#include "pvrusb2-demod.h"
#include "pvrusb2-hdw-internal.h"
#include "pvrusb2-debug.h"
#include <linux/videodev2.h>
#include <media/tuner.h>
#include <media/v4l2-common.h>
struct pvr2_demod_handler {
struct pvr2_hdw *hdw;
struct pvr2_i2c_client *client;
struct pvr2_i2c_handler i2c_handler;
int type_update_fl;
};
static void set_config(struct pvr2_demod_handler *ctxt)
{
struct pvr2_hdw *hdw = ctxt->hdw;
int cfg = 0;
switch (hdw->tuner_type) {
case TUNER_PHILIPS_FM1216ME_MK3:
case TUNER_PHILIPS_FM1236_MK3:
cfg = TDA9887_PORT1_ACTIVE|TDA9887_PORT2_ACTIVE;
break;
default:
break;
}
pvr2_trace(PVR2_TRACE_CHIPS,"i2c demod set_config(0x%x)",cfg);
pvr2_i2c_client_cmd(ctxt->client,TDA9887_SET_CONFIG,&cfg);
ctxt->type_update_fl = 0;
}
static int demod_check(struct pvr2_demod_handler *ctxt)
{
struct pvr2_hdw *hdw = ctxt->hdw;
if (hdw->tuner_updated) ctxt->type_update_fl = !0;
return ctxt->type_update_fl != 0;
}
static void demod_update(struct pvr2_demod_handler *ctxt)
{
if (ctxt->type_update_fl) set_config(ctxt);
}
static void demod_detach(struct pvr2_demod_handler *ctxt)
{
ctxt->client->handler = 0;
kfree(ctxt);
}
static unsigned int demod_describe(struct pvr2_demod_handler *ctxt,char *buf,unsigned int cnt)
{
return scnprintf(buf,cnt,"handler: pvrusb2-demod");
}
const static struct pvr2_i2c_handler_functions tuner_funcs = {
.detach = (void (*)(void *))demod_detach,
.check = (int (*)(void *))demod_check,
.update = (void (*)(void *))demod_update,
.describe = (unsigned int (*)(void *,char *,unsigned int))demod_describe,
};
int pvr2_i2c_demod_setup(struct pvr2_hdw *hdw,struct pvr2_i2c_client *cp)
{
struct pvr2_demod_handler *ctxt;
if (cp->handler) return 0;
ctxt = kmalloc(sizeof(*ctxt),GFP_KERNEL);
if (!ctxt) return 0;
memset(ctxt,0,sizeof(*ctxt));
ctxt->i2c_handler.func_data = ctxt;
ctxt->i2c_handler.func_table = &tuner_funcs;
ctxt->type_update_fl = !0;
ctxt->client = cp;
ctxt->hdw = hdw;
cp->handler = &ctxt->i2c_handler;
pvr2_trace(PVR2_TRACE_CHIPS,"i2c 0x%x tda9887 V4L2 handler set up",
cp->client->addr);
return !0;
}
/*
Stuff for Emacs to see, in order to encourage consistent editing style:
*** Local Variables: ***
*** mode: c ***
*** fill-column: 70 ***
*** tab-width: 8 ***
*** c-basic-offset: 8 ***
*** End: ***
*/
/*
*
* $Id$
*
* Copyright (C) 2005 Mike Isely <isely@pobox.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#ifndef __PVRUSB2_DEMOD_H
#define __PVRUSB2_DEMOD_H
#include "pvrusb2-i2c-core.h"
int pvr2_i2c_demod_setup(struct pvr2_hdw *,struct pvr2_i2c_client *);
#endif /* __PVRUSB2_DEMOD_H */
/*
Stuff for Emacs to see, in order to encourage consistent editing style:
*** Local Variables: ***
*** mode: c ***
*** fill-column: 70 ***
*** tab-width: 8 ***
*** c-basic-offset: 8 ***
*** End: ***
*/
...@@ -58,7 +58,7 @@ static u8 *pvr2_eeprom_fetch(struct pvr2_hdw *hdw) ...@@ -58,7 +58,7 @@ static u8 *pvr2_eeprom_fetch(struct pvr2_hdw *hdw)
pvr2_trace(PVR2_TRACE_ERROR_LEGS, pvr2_trace(PVR2_TRACE_ERROR_LEGS,
"Failed to allocate memory" "Failed to allocate memory"
" required to read eeprom"); " required to read eeprom");
return 0; return NULL;
} }
trace_eeprom("Value for eeprom addr from controller was 0x%x", trace_eeprom("Value for eeprom addr from controller was 0x%x",
...@@ -108,7 +108,7 @@ static u8 *pvr2_eeprom_fetch(struct pvr2_hdw *hdw) ...@@ -108,7 +108,7 @@ static u8 *pvr2_eeprom_fetch(struct pvr2_hdw *hdw)
pvr2_trace(PVR2_TRACE_ERROR_LEGS, pvr2_trace(PVR2_TRACE_ERROR_LEGS,
"eeprom fetch set offs err=%d",ret); "eeprom fetch set offs err=%d",ret);
kfree(eeprom); kfree(eeprom);
return 0; return NULL;
} }
} }
return eeprom; return eeprom;
......
...@@ -65,7 +65,7 @@ static int pvr2_encoder_write_words(struct pvr2_hdw *hdw, ...@@ -65,7 +65,7 @@ static int pvr2_encoder_write_words(struct pvr2_hdw *hdw,
} }
ret = pvr2_send_request(hdw, ret = pvr2_send_request(hdw,
hdw->cmd_buffer,1+(chunkCnt*7), hdw->cmd_buffer,1+(chunkCnt*7),
0,0); NULL,0);
if (ret) return ret; if (ret) return ret;
data += chunkCnt; data += chunkCnt;
dlen -= chunkCnt; dlen -= chunkCnt;
...@@ -322,7 +322,7 @@ int pvr2_encoder_configure(struct pvr2_hdw *hdw) ...@@ -322,7 +322,7 @@ int pvr2_encoder_configure(struct pvr2_hdw *hdw)
} }
ret = cx2341x_update(hdw,pvr2_encoder_cmd, ret = cx2341x_update(hdw,pvr2_encoder_cmd,
(hdw->enc_cur_valid ? &hdw->enc_cur_state : 0), (hdw->enc_cur_valid ? &hdw->enc_cur_state : NULL),
&hdw->enc_ctl_state); &hdw->enc_ctl_state);
if (ret) { if (ret) {
pvr2_trace(PVR2_TRACE_ERROR_LEGS, pvr2_trace(PVR2_TRACE_ERROR_LEGS,
......
...@@ -354,23 +354,6 @@ struct pvr2_hdw { ...@@ -354,23 +354,6 @@ struct pvr2_hdw {
unsigned int control_cnt; unsigned int control_cnt;
}; };
int pvr2_hdw_commit_ctl_internal(struct pvr2_hdw *hdw);
unsigned int pvr2_hdw_get_signal_status_internal(struct pvr2_hdw *);
void pvr2_hdw_subsys_bit_chg_no_lock(struct pvr2_hdw *hdw,
unsigned long msk,unsigned long val);
void pvr2_hdw_subsys_stream_bit_chg_no_lock(struct pvr2_hdw *hdw,
unsigned long msk,
unsigned long val);
void pvr2_hdw_internal_find_stdenum(struct pvr2_hdw *hdw);
void pvr2_hdw_internal_set_std_avail(struct pvr2_hdw *hdw);
int pvr2_i2c_basic_op(struct pvr2_hdw *,u8 i2c_addr,
u8 *wdata,u16 wlen,
u8 *rdata,u16 rlen);
#endif /* __PVRUSB2_HDW_INTERNAL_H */ #endif /* __PVRUSB2_HDW_INTERNAL_H */
/* /*
......
This diff is collapsed.
...@@ -91,7 +91,6 @@ struct pvr2_hdw *pvr2_hdw_create(struct usb_interface *intf, ...@@ -91,7 +91,6 @@ struct pvr2_hdw *pvr2_hdw_create(struct usb_interface *intf,
void pvr2_hdw_poll(struct pvr2_hdw *); void pvr2_hdw_poll(struct pvr2_hdw *);
/* Trigger a poll to take place later at a convenient time */ /* Trigger a poll to take place later at a convenient time */
void pvr2_hdw_poll_trigger(struct pvr2_hdw *);
void pvr2_hdw_poll_trigger_unlocked(struct pvr2_hdw *); void pvr2_hdw_poll_trigger_unlocked(struct pvr2_hdw *);
/* Register a callback used to trigger a future poll */ /* Register a callback used to trigger a future poll */
...@@ -99,9 +98,6 @@ void pvr2_hdw_setup_poll_trigger(struct pvr2_hdw *, ...@@ -99,9 +98,6 @@ void pvr2_hdw_setup_poll_trigger(struct pvr2_hdw *,
void (*func)(void *), void (*func)(void *),
void *data); void *data);
/* Get pointer to structure given unit number */
struct pvr2_hdw *pvr2_hdw_find(int unit_number);
/* Destroy hardware interaction structure */ /* Destroy hardware interaction structure */
void pvr2_hdw_destroy(struct pvr2_hdw *); void pvr2_hdw_destroy(struct pvr2_hdw *);
...@@ -180,12 +176,6 @@ int pvr2_hdw_get_stdenum_value(struct pvr2_hdw *hdw,struct v4l2_standard *std, ...@@ -180,12 +176,6 @@ int pvr2_hdw_get_stdenum_value(struct pvr2_hdw *hdw,struct v4l2_standard *std,
void pvr2_hdw_subsys_bit_chg(struct pvr2_hdw *hdw, void pvr2_hdw_subsys_bit_chg(struct pvr2_hdw *hdw,
unsigned long msk,unsigned long val); unsigned long msk,unsigned long val);
/* Shortcut for pvr2_hdw_subsys_bit_chg(hdw,msk,msk) */
void pvr2_hdw_subsys_bit_set(struct pvr2_hdw *hdw,unsigned long msk);
/* Shortcut for pvr2_hdw_subsys_bit_chg(hdw,msk,0) */
void pvr2_hdw_subsys_bit_clr(struct pvr2_hdw *hdw,unsigned long msk);
/* Retrieve mask indicating which pieces of hardware are currently enabled /* Retrieve mask indicating which pieces of hardware are currently enabled
/ configured. */ / configured. */
unsigned long pvr2_hdw_subsys_get(struct pvr2_hdw *); unsigned long pvr2_hdw_subsys_get(struct pvr2_hdw *);
...@@ -225,34 +215,18 @@ void pvr2_hdw_v4l_store_minor_number(struct pvr2_hdw *,int); ...@@ -225,34 +215,18 @@ void pvr2_hdw_v4l_store_minor_number(struct pvr2_hdw *,int);
/* The following entry points are all lower level things you normally don't /* The following entry points are all lower level things you normally don't
want to worry about. */ want to worry about. */
/* Attempt to recover from a USB foul-up (in practice I find that if you
have to do this, then it's already too late). */
void pvr2_reset_ctl_endpoints(struct pvr2_hdw *hdw);
/* Issue a command and get a response from the device. LOTS of higher /* Issue a command and get a response from the device. LOTS of higher
level stuff is built on this. */ level stuff is built on this. */
int pvr2_send_request(struct pvr2_hdw *, int pvr2_send_request(struct pvr2_hdw *,
void *write_ptr,unsigned int write_len, void *write_ptr,unsigned int write_len,
void *read_ptr,unsigned int read_len); void *read_ptr,unsigned int read_len);
/* Issue a command and get a response from the device. This extended
version includes a probe flag (which if set means that device errors
should not be logged or treated as fatal) and a timeout in jiffies.
This can be used to non-lethally probe the health of endpoint 1. */
int pvr2_send_request_ex(struct pvr2_hdw *,unsigned int timeout,int probe_fl,
void *write_ptr,unsigned int write_len,
void *read_ptr,unsigned int read_len);
/* Slightly higher level device communication functions. */ /* Slightly higher level device communication functions. */
int pvr2_write_register(struct pvr2_hdw *, u16, u32); int pvr2_write_register(struct pvr2_hdw *, u16, u32);
int pvr2_read_register(struct pvr2_hdw *, u16, u32 *);
int pvr2_write_u16(struct pvr2_hdw *, u16, int);
int pvr2_write_u8(struct pvr2_hdw *, u8, int);
/* Call if for any reason we can't talk to the hardware anymore - this will /* Call if for any reason we can't talk to the hardware anymore - this will
cause the driver to stop flailing on the device. */ cause the driver to stop flailing on the device. */
void pvr2_hdw_render_useless(struct pvr2_hdw *); void pvr2_hdw_render_useless(struct pvr2_hdw *);
void pvr2_hdw_render_useless_unlocked(struct pvr2_hdw *);
/* Set / clear 8051's reset bit */ /* Set / clear 8051's reset bit */
void pvr2_hdw_cpureset_assert(struct pvr2_hdw *,int); void pvr2_hdw_cpureset_assert(struct pvr2_hdw *,int);
...@@ -271,12 +245,6 @@ int pvr2_hdw_cmd_powerup(struct pvr2_hdw *); ...@@ -271,12 +245,6 @@ int pvr2_hdw_cmd_powerup(struct pvr2_hdw *);
/* Order decoder to reset */ /* Order decoder to reset */
int pvr2_hdw_cmd_decoder_reset(struct pvr2_hdw *); int pvr2_hdw_cmd_decoder_reset(struct pvr2_hdw *);
/* Stop / start video stream transport */
int pvr2_hdw_cmd_usbstream(struct pvr2_hdw *hdw,int runFl);
/* Find I2C address of eeprom */
int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw *);
/* Direct manipulation of GPIO bits */ /* Direct manipulation of GPIO bits */
int pvr2_hdw_gpio_get_dir(struct pvr2_hdw *hdw,u32 *); int pvr2_hdw_gpio_get_dir(struct pvr2_hdw *hdw,u32 *);
int pvr2_hdw_gpio_get_out(struct pvr2_hdw *hdw,u32 *); int pvr2_hdw_gpio_get_out(struct pvr2_hdw *hdw,u32 *);
......
...@@ -25,7 +25,6 @@ ...@@ -25,7 +25,6 @@
#include "pvrusb2-i2c-cmd-v4l2.h" #include "pvrusb2-i2c-cmd-v4l2.h"
#include "pvrusb2-audio.h" #include "pvrusb2-audio.h"
#include "pvrusb2-tuner.h" #include "pvrusb2-tuner.h"
#include "pvrusb2-demod.h"
#include "pvrusb2-video-v4l.h" #include "pvrusb2-video-v4l.h"
#ifdef CONFIG_VIDEO_PVRUSB2_24XXX #ifdef CONFIG_VIDEO_PVRUSB2_24XXX
#include "pvrusb2-cx2584x-v4l.h" #include "pvrusb2-cx2584x-v4l.h"
...@@ -89,11 +88,6 @@ void pvr2_i2c_probe(struct pvr2_hdw *hdw,struct pvr2_i2c_client *cp) ...@@ -89,11 +88,6 @@ void pvr2_i2c_probe(struct pvr2_hdw *hdw,struct pvr2_i2c_client *cp)
return; return;
} }
} }
if (id == I2C_DRIVERID_TDA9887) {
if (pvr2_i2c_demod_setup(hdw,cp)) {
return;
}
}
} }
......
...@@ -196,7 +196,7 @@ const struct pvr2_i2c_op pvr2_i2c_op_v4l2_size = { ...@@ -196,7 +196,7 @@ const struct pvr2_i2c_op pvr2_i2c_op_v4l2_size = {
static void do_log(struct pvr2_hdw *hdw) static void do_log(struct pvr2_hdw *hdw)
{ {
pvr2_trace(PVR2_TRACE_CHIPS,"i2c v4l2 do_log()"); pvr2_trace(PVR2_TRACE_CHIPS,"i2c v4l2 do_log()");
pvr2_i2c_core_cmd(hdw,VIDIOC_LOG_STATUS,0); pvr2_i2c_core_cmd(hdw,VIDIOC_LOG_STATUS,NULL);
} }
...@@ -217,7 +217,7 @@ const struct pvr2_i2c_op pvr2_i2c_op_v4l2_log = { ...@@ -217,7 +217,7 @@ const struct pvr2_i2c_op pvr2_i2c_op_v4l2_log = {
void pvr2_v4l2_cmd_stream(struct pvr2_i2c_client *cp,int fl) void pvr2_v4l2_cmd_stream(struct pvr2_i2c_client *cp,int fl)
{ {
pvr2_i2c_client_cmd(cp, pvr2_i2c_client_cmd(cp,
(fl ? VIDIOC_STREAMON : VIDIOC_STREAMOFF),0); (fl ? VIDIOC_STREAMON : VIDIOC_STREAMOFF),NULL);
} }
......
...@@ -37,6 +37,10 @@ static unsigned int i2c_scan = 0; ...@@ -37,6 +37,10 @@ static unsigned int i2c_scan = 0;
module_param(i2c_scan, int, S_IRUGO|S_IWUSR); module_param(i2c_scan, int, S_IRUGO|S_IWUSR);
MODULE_PARM_DESC(i2c_scan,"scan i2c bus at insmod time"); MODULE_PARM_DESC(i2c_scan,"scan i2c bus at insmod time");
static unsigned int pvr2_i2c_client_describe(struct pvr2_i2c_client *cp,
unsigned int detail,
char *buf,unsigned int maxlen);
static int pvr2_i2c_write(struct pvr2_hdw *hdw, /* Context */ static int pvr2_i2c_write(struct pvr2_hdw *hdw, /* Context */
u8 i2c_addr, /* I2C address we're talking to */ u8 i2c_addr, /* I2C address we're talking to */
u8 *data, /* Data to write */ u8 *data, /* Data to write */
...@@ -165,7 +169,7 @@ static int pvr2_i2c_read(struct pvr2_hdw *hdw, /* Context */ ...@@ -165,7 +169,7 @@ static int pvr2_i2c_read(struct pvr2_hdw *hdw, /* Context */
/* This is the common low level entry point for doing I2C operations to the /* This is the common low level entry point for doing I2C operations to the
hardware. */ hardware. */
int pvr2_i2c_basic_op(struct pvr2_hdw *hdw, static int pvr2_i2c_basic_op(struct pvr2_hdw *hdw,
u8 i2c_addr, u8 i2c_addr,
u8 *wdata, u8 *wdata,
u16 wlen, u16 wlen,
...@@ -267,7 +271,7 @@ static int i2c_hack_cx25840(struct pvr2_hdw *hdw, ...@@ -267,7 +271,7 @@ static int i2c_hack_cx25840(struct pvr2_hdw *hdw,
"WARNING: Disabling further access to the device" "WARNING: Disabling further access to the device"
" to prevent other foul-ups."); " to prevent other foul-ups.");
// This blocks all further communication with the part. // This blocks all further communication with the part.
hdw->i2c_func[0x44] = 0; hdw->i2c_func[0x44] = NULL;
pvr2_hdw_render_useless(hdw); pvr2_hdw_render_useless(hdw);
goto fail; goto fail;
} }
...@@ -294,7 +298,7 @@ static int pvr2_i2c_xfer(struct i2c_adapter *i2c_adap, ...@@ -294,7 +298,7 @@ static int pvr2_i2c_xfer(struct i2c_adapter *i2c_adap,
int num) int num)
{ {
int ret = -ENOTSUPP; int ret = -ENOTSUPP;
pvr2_i2c_func funcp = 0; pvr2_i2c_func funcp = NULL;
struct pvr2_hdw *hdw = (struct pvr2_hdw *)(i2c_adap->algo_data); struct pvr2_hdw *hdw = (struct pvr2_hdw *)(i2c_adap->algo_data);
if (!num) { if (!num) {
...@@ -319,7 +323,7 @@ static int pvr2_i2c_xfer(struct i2c_adapter *i2c_adap, ...@@ -319,7 +323,7 @@ static int pvr2_i2c_xfer(struct i2c_adapter *i2c_adap,
u16 tcnt,bcnt,offs; u16 tcnt,bcnt,offs;
if (!msgs[0].len) { if (!msgs[0].len) {
/* Length == 0 read. This is a probe. */ /* Length == 0 read. This is a probe. */
if (funcp(hdw,msgs[0].addr,0,0,0,0)) { if (funcp(hdw,msgs[0].addr,NULL,0,NULL,0)) {
ret = -EIO; ret = -EIO;
goto done; goto done;
} }
...@@ -336,7 +340,7 @@ static int pvr2_i2c_xfer(struct i2c_adapter *i2c_adap, ...@@ -336,7 +340,7 @@ static int pvr2_i2c_xfer(struct i2c_adapter *i2c_adap,
if (bcnt > sizeof(hdw->cmd_buffer)-1) { if (bcnt > sizeof(hdw->cmd_buffer)-1) {
bcnt = sizeof(hdw->cmd_buffer)-1; bcnt = sizeof(hdw->cmd_buffer)-1;
} }
if (funcp(hdw,msgs[0].addr,0,0, if (funcp(hdw,msgs[0].addr,NULL,0,
msgs[0].buf+offs,bcnt)) { msgs[0].buf+offs,bcnt)) {
ret = -EIO; ret = -EIO;
goto done; goto done;
...@@ -350,7 +354,7 @@ static int pvr2_i2c_xfer(struct i2c_adapter *i2c_adap, ...@@ -350,7 +354,7 @@ static int pvr2_i2c_xfer(struct i2c_adapter *i2c_adap,
/* Simple write */ /* Simple write */
ret = 1; ret = 1;
if (funcp(hdw,msgs[0].addr, if (funcp(hdw,msgs[0].addr,
msgs[0].buf,msgs[0].len,0,0)) { msgs[0].buf,msgs[0].len,NULL,0)) {
ret = -EIO; ret = -EIO;
} }
goto done; goto done;
...@@ -705,7 +709,7 @@ int pvr2_i2c_core_check_stale(struct pvr2_hdw *hdw) ...@@ -705,7 +709,7 @@ int pvr2_i2c_core_check_stale(struct pvr2_hdw *hdw)
return (hdw->i2c_pend_types & PVR2_I2C_PEND_ALL) != 0; return (hdw->i2c_pend_types & PVR2_I2C_PEND_ALL) != 0;
} }
unsigned int pvr2_i2c_client_describe(struct pvr2_i2c_client *cp, static unsigned int pvr2_i2c_client_describe(struct pvr2_i2c_client *cp,
unsigned int detail, unsigned int detail,
char *buf,unsigned int maxlen) char *buf,unsigned int maxlen)
{ {
...@@ -871,7 +875,7 @@ static void do_i2c_scan(struct pvr2_hdw *hdw) ...@@ -871,7 +875,7 @@ static void do_i2c_scan(struct pvr2_hdw *hdw)
msg[0].addr = 0; msg[0].addr = 0;
msg[0].flags = I2C_M_RD; msg[0].flags = I2C_M_RD;
msg[0].len = 0; msg[0].len = 0;
msg[0].buf = 0; msg[0].buf = NULL;
printk("%s: i2c scan beginning\n",hdw->name); printk("%s: i2c scan beginning\n",hdw->name);
for (i = 0; i < 128; i++) { for (i = 0; i < 128; i++) {
msg[0].addr = i; msg[0].addr = i;
......
...@@ -75,9 +75,6 @@ unsigned int pvr2_i2c_report(struct pvr2_hdw *,char *buf,unsigned int maxlen); ...@@ -75,9 +75,6 @@ unsigned int pvr2_i2c_report(struct pvr2_hdw *,char *buf,unsigned int maxlen);
PVR2_I2C_DETAIL_DEBUG |\ PVR2_I2C_DETAIL_DEBUG |\
PVR2_I2C_DETAIL_HANDLER |\ PVR2_I2C_DETAIL_HANDLER |\
PVR2_I2C_DETAIL_CTLMASK) PVR2_I2C_DETAIL_CTLMASK)
unsigned int pvr2_i2c_client_describe(struct pvr2_i2c_client *,
unsigned int detail_mask,
char *buf,unsigned int maxlen);
void pvr2_i2c_probe(struct pvr2_hdw *,struct pvr2_i2c_client *); void pvr2_i2c_probe(struct pvr2_hdw *,struct pvr2_i2c_client *);
const struct pvr2_i2c_op *pvr2_i2c_get_op(unsigned int idx); const struct pvr2_i2c_op *pvr2_i2c_get_op(unsigned int idx);
......
...@@ -93,7 +93,7 @@ struct pvr2_buffer { ...@@ -93,7 +93,7 @@ struct pvr2_buffer {
struct urb *purb; struct urb *purb;
}; };
const char *pvr2_buffer_state_decode(enum pvr2_buffer_state st) static const char *pvr2_buffer_state_decode(enum pvr2_buffer_state st)
{ {
switch (st) { switch (st) {
case pvr2_buffer_state_none: return "none"; case pvr2_buffer_state_none: return "none";
...@@ -104,7 +104,8 @@ const char *pvr2_buffer_state_decode(enum pvr2_buffer_state st) ...@@ -104,7 +104,8 @@ const char *pvr2_buffer_state_decode(enum pvr2_buffer_state st)
return "unknown"; return "unknown";
} }
void pvr2_buffer_describe(struct pvr2_buffer *bp,const char *msg) #ifdef SANITY_CHECK_BUFFERS
static void pvr2_buffer_describe(struct pvr2_buffer *bp,const char *msg)
{ {
pvr2_trace(PVR2_TRACE_INFO, pvr2_trace(PVR2_TRACE_INFO,
"buffer%s%s %p state=%s id=%d status=%d" "buffer%s%s %p state=%s id=%d status=%d"
...@@ -115,10 +116,11 @@ void pvr2_buffer_describe(struct pvr2_buffer *bp,const char *msg) ...@@ -115,10 +116,11 @@ void pvr2_buffer_describe(struct pvr2_buffer *bp,const char *msg)
(bp ? pvr2_buffer_state_decode(bp->state) : "(invalid)"), (bp ? pvr2_buffer_state_decode(bp->state) : "(invalid)"),
(bp ? bp->id : 0), (bp ? bp->id : 0),
(bp ? bp->status : 0), (bp ? bp->status : 0),
(bp ? bp->stream : 0), (bp ? bp->stream : NULL),
(bp ? bp->purb : 0), (bp ? bp->purb : NULL),
(bp ? bp->signature : 0)); (bp ? bp->signature : 0));
} }
#endif /* SANITY_CHECK_BUFFERS */
static void pvr2_buffer_remove(struct pvr2_buffer *bp) static void pvr2_buffer_remove(struct pvr2_buffer *bp)
{ {
...@@ -284,7 +286,7 @@ static void pvr2_buffer_done(struct pvr2_buffer *bp) ...@@ -284,7 +286,7 @@ static void pvr2_buffer_done(struct pvr2_buffer *bp)
pvr2_buffer_wipe(bp); pvr2_buffer_wipe(bp);
pvr2_buffer_set_none(bp); pvr2_buffer_set_none(bp);
bp->signature = 0; bp->signature = 0;
bp->stream = 0; bp->stream = NULL;
if (bp->purb) usb_free_urb(bp->purb); if (bp->purb) usb_free_urb(bp->purb);
pvr2_trace(PVR2_TRACE_BUF_POOL,"/*---TRACE_FLOW---*/" pvr2_trace(PVR2_TRACE_BUF_POOL,"/*---TRACE_FLOW---*/"
" bufferDone %p",bp); " bufferDone %p",bp);
...@@ -339,13 +341,13 @@ static int pvr2_stream_buffer_count(struct pvr2_stream *sp,unsigned int cnt) ...@@ -339,13 +341,13 @@ static int pvr2_stream_buffer_count(struct pvr2_stream *sp,unsigned int cnt)
struct pvr2_buffer *bp; struct pvr2_buffer *bp;
bp = sp->buffers[sp->buffer_total_count - 1]; bp = sp->buffers[sp->buffer_total_count - 1];
/* Paranoia */ /* Paranoia */
sp->buffers[sp->buffer_total_count - 1] = 0; sp->buffers[sp->buffer_total_count - 1] = NULL;
(sp->buffer_total_count)--; (sp->buffer_total_count)--;
pvr2_buffer_done(bp); pvr2_buffer_done(bp);
kfree(bp); kfree(bp);
} }
if (scnt < sp->buffer_slot_count) { if (scnt < sp->buffer_slot_count) {
struct pvr2_buffer **nb = 0; struct pvr2_buffer **nb = NULL;
if (scnt) { if (scnt) {
nb = kmalloc(scnt * sizeof(*nb),GFP_KERNEL); nb = kmalloc(scnt * sizeof(*nb),GFP_KERNEL);
if (!nb) return -ENOMEM; if (!nb) return -ENOMEM;
...@@ -513,10 +515,6 @@ void pvr2_stream_set_callback(struct pvr2_stream *sp, ...@@ -513,10 +515,6 @@ void pvr2_stream_set_callback(struct pvr2_stream *sp,
} }
/* Query / set the nominal buffer count */ /* Query / set the nominal buffer count */
int pvr2_stream_get_buffer_count(struct pvr2_stream *sp)
{
return sp->buffer_target_count;
}
int pvr2_stream_set_buffer_count(struct pvr2_stream *sp,unsigned int cnt) int pvr2_stream_set_buffer_count(struct pvr2_stream *sp,unsigned int cnt)
{ {
...@@ -532,21 +530,21 @@ int pvr2_stream_set_buffer_count(struct pvr2_stream *sp,unsigned int cnt) ...@@ -532,21 +530,21 @@ int pvr2_stream_set_buffer_count(struct pvr2_stream *sp,unsigned int cnt)
struct pvr2_buffer *pvr2_stream_get_idle_buffer(struct pvr2_stream *sp) struct pvr2_buffer *pvr2_stream_get_idle_buffer(struct pvr2_stream *sp)
{ {
struct list_head *lp = sp->idle_list.next; struct list_head *lp = sp->idle_list.next;
if (lp == &sp->idle_list) return 0; if (lp == &sp->idle_list) return NULL;
return list_entry(lp,struct pvr2_buffer,list_overhead); return list_entry(lp,struct pvr2_buffer,list_overhead);
} }
struct pvr2_buffer *pvr2_stream_get_ready_buffer(struct pvr2_stream *sp) struct pvr2_buffer *pvr2_stream_get_ready_buffer(struct pvr2_stream *sp)
{ {
struct list_head *lp = sp->ready_list.next; struct list_head *lp = sp->ready_list.next;
if (lp == &sp->ready_list) return 0; if (lp == &sp->ready_list) return NULL;
return list_entry(lp,struct pvr2_buffer,list_overhead); return list_entry(lp,struct pvr2_buffer,list_overhead);
} }
struct pvr2_buffer *pvr2_stream_get_buffer(struct pvr2_stream *sp,int id) struct pvr2_buffer *pvr2_stream_get_buffer(struct pvr2_stream *sp,int id)
{ {
if (id < 0) return 0; if (id < 0) return NULL;
if (id >= sp->buffer_total_count) return 0; if (id >= sp->buffer_total_count) return NULL;
return sp->buffers[id]; return sp->buffers[id];
} }
...@@ -555,17 +553,6 @@ int pvr2_stream_get_ready_count(struct pvr2_stream *sp) ...@@ -555,17 +553,6 @@ int pvr2_stream_get_ready_count(struct pvr2_stream *sp)
return sp->r_count; return sp->r_count;
} }
int pvr2_stream_get_idle_count(struct pvr2_stream *sp)
{
return sp->i_count;
}
void pvr2_stream_flush(struct pvr2_stream *sp)
{
mutex_lock(&sp->mutex); do {
pvr2_stream_internal_flush(sp);
} while(0); mutex_unlock(&sp->mutex);
}
void pvr2_stream_kill(struct pvr2_stream *sp) void pvr2_stream_kill(struct pvr2_stream *sp)
{ {
...@@ -620,20 +607,6 @@ int pvr2_buffer_queue(struct pvr2_buffer *bp) ...@@ -620,20 +607,6 @@ int pvr2_buffer_queue(struct pvr2_buffer *bp)
return ret; return ret;
} }
int pvr2_buffer_idle(struct pvr2_buffer *bp)
{
struct pvr2_stream *sp;
if (!bp) return -EINVAL;
sp = bp->stream;
mutex_lock(&sp->mutex); do {
pvr2_buffer_wipe(bp);
pvr2_buffer_set_idle(bp);
if (sp->buffer_total_count != sp->buffer_target_count) {
pvr2_stream_achieve_buffer_count(sp);
}
} while(0); mutex_unlock(&sp->mutex);
return 0;
}
int pvr2_buffer_set_buffer(struct pvr2_buffer *bp,void *ptr,unsigned int cnt) int pvr2_buffer_set_buffer(struct pvr2_buffer *bp,void *ptr,unsigned int cnt)
{ {
...@@ -673,10 +646,6 @@ int pvr2_buffer_get_status(struct pvr2_buffer *bp) ...@@ -673,10 +646,6 @@ int pvr2_buffer_get_status(struct pvr2_buffer *bp)
return bp->status; return bp->status;
} }
enum pvr2_buffer_state pvr2_buffer_get_state(struct pvr2_buffer *bp)
{
return bp->state;
}
int pvr2_buffer_get_id(struct pvr2_buffer *bp) int pvr2_buffer_get_id(struct pvr2_buffer *bp)
{ {
......
...@@ -36,8 +36,6 @@ enum pvr2_buffer_state { ...@@ -36,8 +36,6 @@ enum pvr2_buffer_state {
struct pvr2_stream; struct pvr2_stream;
struct pvr2_buffer; struct pvr2_buffer;
const char *pvr2_buffer_state_decode(enum pvr2_buffer_state);
/* Initialize / tear down stream structure */ /* Initialize / tear down stream structure */
struct pvr2_stream *pvr2_stream_create(void); struct pvr2_stream *pvr2_stream_create(void);
void pvr2_stream_destroy(struct pvr2_stream *); void pvr2_stream_destroy(struct pvr2_stream *);
...@@ -49,7 +47,6 @@ void pvr2_stream_set_callback(struct pvr2_stream *, ...@@ -49,7 +47,6 @@ void pvr2_stream_set_callback(struct pvr2_stream *,
void *data); void *data);
/* Query / set the nominal buffer count */ /* Query / set the nominal buffer count */
int pvr2_stream_get_buffer_count(struct pvr2_stream *);
int pvr2_stream_set_buffer_count(struct pvr2_stream *,unsigned int); int pvr2_stream_set_buffer_count(struct pvr2_stream *,unsigned int);
/* Get a pointer to a buffer that is either idle, ready, or is specified /* Get a pointer to a buffer that is either idle, ready, or is specified
...@@ -59,12 +56,8 @@ struct pvr2_buffer *pvr2_stream_get_ready_buffer(struct pvr2_stream *); ...@@ -59,12 +56,8 @@ struct pvr2_buffer *pvr2_stream_get_ready_buffer(struct pvr2_stream *);
struct pvr2_buffer *pvr2_stream_get_buffer(struct pvr2_stream *sp,int id); struct pvr2_buffer *pvr2_stream_get_buffer(struct pvr2_stream *sp,int id);
/* Find out how many buffers are idle or ready */ /* Find out how many buffers are idle or ready */
int pvr2_stream_get_idle_count(struct pvr2_stream *);
int pvr2_stream_get_ready_count(struct pvr2_stream *); int pvr2_stream_get_ready_count(struct pvr2_stream *);
/* Kill all pending operations */
void pvr2_stream_flush(struct pvr2_stream *);
/* Kill all pending buffers and throw away any ready buffers as well */ /* Kill all pending buffers and throw away any ready buffers as well */
void pvr2_stream_kill(struct pvr2_stream *); void pvr2_stream_kill(struct pvr2_stream *);
...@@ -77,18 +70,12 @@ unsigned int pvr2_buffer_get_count(struct pvr2_buffer *); ...@@ -77,18 +70,12 @@ unsigned int pvr2_buffer_get_count(struct pvr2_buffer *);
/* Retrieve completion code for given ready buffer */ /* Retrieve completion code for given ready buffer */
int pvr2_buffer_get_status(struct pvr2_buffer *); int pvr2_buffer_get_status(struct pvr2_buffer *);
/* Retrieve state of given buffer */
enum pvr2_buffer_state pvr2_buffer_get_state(struct pvr2_buffer *);
/* Retrieve ID of given buffer */ /* Retrieve ID of given buffer */
int pvr2_buffer_get_id(struct pvr2_buffer *); int pvr2_buffer_get_id(struct pvr2_buffer *);
/* Start reading into given buffer (kill it if needed) */ /* Start reading into given buffer (kill it if needed) */
int pvr2_buffer_queue(struct pvr2_buffer *); int pvr2_buffer_queue(struct pvr2_buffer *);
/* Move buffer back to idle pool (kill it if needed) */
int pvr2_buffer_idle(struct pvr2_buffer *);
#endif /* __PVRUSB2_IO_H */ #endif /* __PVRUSB2_IO_H */
/* /*
......
...@@ -54,7 +54,7 @@ static int pvr2_ioread_init(struct pvr2_ioread *cp) ...@@ -54,7 +54,7 @@ static int pvr2_ioread_init(struct pvr2_ioread *cp)
{ {
unsigned int idx; unsigned int idx;
cp->stream = 0; cp->stream = NULL;
mutex_init(&cp->mutex); mutex_init(&cp->mutex);
for (idx = 0; idx < BUFFER_COUNT; idx++) { for (idx = 0; idx < BUFFER_COUNT; idx++) {
...@@ -77,7 +77,7 @@ static void pvr2_ioread_done(struct pvr2_ioread *cp) ...@@ -77,7 +77,7 @@ static void pvr2_ioread_done(struct pvr2_ioread *cp)
{ {
unsigned int idx; unsigned int idx;
pvr2_ioread_setup(cp,0); pvr2_ioread_setup(cp,NULL);
for (idx = 0; idx < BUFFER_COUNT; idx++) { for (idx = 0; idx < BUFFER_COUNT; idx++) {
if (!(cp->buffer_storage[idx])) continue; if (!(cp->buffer_storage[idx])) continue;
kfree(cp->buffer_storage[idx]); kfree(cp->buffer_storage[idx]);
...@@ -88,12 +88,12 @@ struct pvr2_ioread *pvr2_ioread_create(void) ...@@ -88,12 +88,12 @@ struct pvr2_ioread *pvr2_ioread_create(void)
{ {
struct pvr2_ioread *cp; struct pvr2_ioread *cp;
cp = kmalloc(sizeof(*cp),GFP_KERNEL); cp = kmalloc(sizeof(*cp),GFP_KERNEL);
if (!cp) return 0; if (!cp) return NULL;
pvr2_trace(PVR2_TRACE_STRUCT,"pvr2_ioread_create id=%p",cp); pvr2_trace(PVR2_TRACE_STRUCT,"pvr2_ioread_create id=%p",cp);
memset(cp,0,sizeof(*cp)); memset(cp,0,sizeof(*cp));
if (pvr2_ioread_init(cp) < 0) { if (pvr2_ioread_init(cp) < 0) {
kfree(cp); kfree(cp);
return 0; return NULL;
} }
return cp; return cp;
} }
...@@ -105,7 +105,7 @@ void pvr2_ioread_destroy(struct pvr2_ioread *cp) ...@@ -105,7 +105,7 @@ void pvr2_ioread_destroy(struct pvr2_ioread *cp)
pvr2_trace(PVR2_TRACE_STRUCT,"pvr2_ioread_destroy id=%p",cp); pvr2_trace(PVR2_TRACE_STRUCT,"pvr2_ioread_destroy id=%p",cp);
if (cp->sync_key_ptr) { if (cp->sync_key_ptr) {
kfree(cp->sync_key_ptr); kfree(cp->sync_key_ptr);
cp->sync_key_ptr = 0; cp->sync_key_ptr = NULL;
} }
kfree(cp); kfree(cp);
} }
...@@ -124,7 +124,7 @@ void pvr2_ioread_set_sync_key(struct pvr2_ioread *cp, ...@@ -124,7 +124,7 @@ void pvr2_ioread_set_sync_key(struct pvr2_ioread *cp,
if (sync_key_len != cp->sync_key_len) { if (sync_key_len != cp->sync_key_len) {
if (cp->sync_key_ptr) { if (cp->sync_key_ptr) {
kfree(cp->sync_key_ptr); kfree(cp->sync_key_ptr);
cp->sync_key_ptr = 0; cp->sync_key_ptr = NULL;
} }
cp->sync_key_len = 0; cp->sync_key_len = 0;
if (sync_key_len) { if (sync_key_len) {
...@@ -144,8 +144,8 @@ static void pvr2_ioread_stop(struct pvr2_ioread *cp) ...@@ -144,8 +144,8 @@ static void pvr2_ioread_stop(struct pvr2_ioread *cp)
pvr2_trace(PVR2_TRACE_START_STOP, pvr2_trace(PVR2_TRACE_START_STOP,
"/*---TRACE_READ---*/ pvr2_ioread_stop id=%p",cp); "/*---TRACE_READ---*/ pvr2_ioread_stop id=%p",cp);
pvr2_stream_kill(cp->stream); pvr2_stream_kill(cp->stream);
cp->c_buf = 0; cp->c_buf = NULL;
cp->c_data_ptr = 0; cp->c_data_ptr = NULL;
cp->c_data_len = 0; cp->c_data_len = 0;
cp->c_data_offs = 0; cp->c_data_offs = 0;
cp->enabled = 0; cp->enabled = 0;
...@@ -179,8 +179,8 @@ static int pvr2_ioread_start(struct pvr2_ioread *cp) ...@@ -179,8 +179,8 @@ static int pvr2_ioread_start(struct pvr2_ioread *cp)
} }
} }
cp->enabled = !0; cp->enabled = !0;
cp->c_buf = 0; cp->c_buf = NULL;
cp->c_data_ptr = 0; cp->c_data_ptr = NULL;
cp->c_data_len = 0; cp->c_data_len = 0;
cp->c_data_offs = 0; cp->c_data_offs = 0;
cp->stream_running = 0; cp->stream_running = 0;
...@@ -214,7 +214,7 @@ int pvr2_ioread_setup(struct pvr2_ioread *cp,struct pvr2_stream *sp) ...@@ -214,7 +214,7 @@ int pvr2_ioread_setup(struct pvr2_ioread *cp,struct pvr2_stream *sp)
pvr2_ioread_stop(cp); pvr2_ioread_stop(cp);
pvr2_stream_kill(cp->stream); pvr2_stream_kill(cp->stream);
pvr2_stream_set_buffer_count(cp->stream,0); pvr2_stream_set_buffer_count(cp->stream,0);
cp->stream = 0; cp->stream = NULL;
} }
if (sp) { if (sp) {
pvr2_trace(PVR2_TRACE_START_STOP, pvr2_trace(PVR2_TRACE_START_STOP,
...@@ -251,12 +251,8 @@ int pvr2_ioread_set_enabled(struct pvr2_ioread *cp,int fl) ...@@ -251,12 +251,8 @@ int pvr2_ioread_set_enabled(struct pvr2_ioread *cp,int fl)
return ret; return ret;
} }
int pvr2_ioread_get_enabled(struct pvr2_ioread *cp)
{
return cp->enabled != 0;
}
int pvr2_ioread_get_buffer(struct pvr2_ioread *cp) static int pvr2_ioread_get_buffer(struct pvr2_ioread *cp)
{ {
int stat; int stat;
...@@ -274,8 +270,8 @@ int pvr2_ioread_get_buffer(struct pvr2_ioread *cp) ...@@ -274,8 +270,8 @@ int pvr2_ioread_get_buffer(struct pvr2_ioread *cp)
pvr2_ioread_stop(cp); pvr2_ioread_stop(cp);
return 0; return 0;
} }
cp->c_buf = 0; cp->c_buf = NULL;
cp->c_data_ptr = 0; cp->c_data_ptr = NULL;
cp->c_data_len = 0; cp->c_data_len = 0;
cp->c_data_offs = 0; cp->c_data_offs = 0;
} }
...@@ -307,7 +303,7 @@ int pvr2_ioread_get_buffer(struct pvr2_ioread *cp) ...@@ -307,7 +303,7 @@ int pvr2_ioread_get_buffer(struct pvr2_ioread *cp)
return !0; return !0;
} }
void pvr2_ioread_filter(struct pvr2_ioread *cp) static void pvr2_ioread_filter(struct pvr2_ioread *cp)
{ {
unsigned int idx; unsigned int idx;
if (!cp->enabled) return; if (!cp->enabled) return;
......
...@@ -33,7 +33,6 @@ void pvr2_ioread_set_sync_key(struct pvr2_ioread *, ...@@ -33,7 +33,6 @@ void pvr2_ioread_set_sync_key(struct pvr2_ioread *,
const char *sync_key_ptr, const char *sync_key_ptr,
unsigned int sync_key_len); unsigned int sync_key_len);
int pvr2_ioread_set_enabled(struct pvr2_ioread *,int fl); int pvr2_ioread_set_enabled(struct pvr2_ioread *,int fl);
int pvr2_ioread_get_enabled(struct pvr2_ioread *);
int pvr2_ioread_read(struct pvr2_ioread *,void __user *buf,unsigned int cnt); int pvr2_ioread_read(struct pvr2_ioread *,void __user *buf,unsigned int cnt);
int pvr2_ioread_avail(struct pvr2_ioread *); int pvr2_ioread_avail(struct pvr2_ioread *);
......
...@@ -54,7 +54,7 @@ module_param_named(debug,pvrusb2_debug,int,S_IRUGO|S_IWUSR); ...@@ -54,7 +54,7 @@ module_param_named(debug,pvrusb2_debug,int,S_IRUGO|S_IWUSR);
MODULE_PARM_DESC(debug, "Debug trace mask"); MODULE_PARM_DESC(debug, "Debug trace mask");
#ifdef CONFIG_VIDEO_PVRUSB2_SYSFS #ifdef CONFIG_VIDEO_PVRUSB2_SYSFS
static struct pvr2_sysfs_class *class_ptr = 0; static struct pvr2_sysfs_class *class_ptr = NULL;
#endif /* CONFIG_VIDEO_PVRUSB2_SYSFS */ #endif /* CONFIG_VIDEO_PVRUSB2_SYSFS */
static void pvr_setup_attach(struct pvr2_context *pvr) static void pvr_setup_attach(struct pvr2_context *pvr)
...@@ -104,10 +104,10 @@ static void pvr_disconnect(struct usb_interface *intf) ...@@ -104,10 +104,10 @@ static void pvr_disconnect(struct usb_interface *intf)
} }
static struct usb_driver pvr_driver = { static struct usb_driver pvr_driver = {
name: "pvrusb2", .name = "pvrusb2",
id_table: pvr2_device_table, .id_table = pvr2_device_table,
probe: pvr_probe, .probe = pvr_probe,
disconnect: pvr_disconnect .disconnect = pvr_disconnect
}; };
/* /*
......
...@@ -121,7 +121,7 @@ static const struct std_name *find_std_name(const struct std_name *arrPtr, ...@@ -121,7 +121,7 @@ static const struct std_name *find_std_name(const struct std_name *arrPtr,
if (strlen(p->name) != bufSize) continue; if (strlen(p->name) != bufSize) continue;
if (!memcmp(bufPtr,p->name,bufSize)) return p; if (!memcmp(bufPtr,p->name,bufSize)) return p;
} }
return 0; return NULL;
} }
...@@ -289,7 +289,7 @@ static struct v4l2_standard *match_std(v4l2_std_id id) ...@@ -289,7 +289,7 @@ static struct v4l2_standard *match_std(v4l2_std_id id)
return generic_standards + idx; return generic_standards + idx;
} }
} }
return 0; return NULL;
} }
static int pvr2_std_fill(struct v4l2_standard *std,v4l2_std_id id) static int pvr2_std_fill(struct v4l2_standard *std,v4l2_std_id id)
...@@ -364,7 +364,7 @@ struct v4l2_standard *pvr2_std_create_enum(unsigned int *countptr, ...@@ -364,7 +364,7 @@ struct v4l2_standard *pvr2_std_create_enum(unsigned int *countptr,
pvr2_trace(PVR2_TRACE_INIT,"Setting up %u unique standard(s)", pvr2_trace(PVR2_TRACE_INIT,"Setting up %u unique standard(s)",
std_cnt); std_cnt);
if (!std_cnt) return 0; // paranoia if (!std_cnt) return NULL; // paranoia
stddefs = kmalloc(sizeof(struct v4l2_standard) * std_cnt, stddefs = kmalloc(sizeof(struct v4l2_standard) * std_cnt,
GFP_KERNEL); GFP_KERNEL);
......
...@@ -504,7 +504,7 @@ static void pvr2_sysfs_add_control(struct pvr2_sysfs *sfp,int ctl_id) ...@@ -504,7 +504,7 @@ static void pvr2_sysfs_add_control(struct pvr2_sysfs *sfp,int ctl_id)
cip->cptr = cptr; cip->cptr = cptr;
cip->chptr = sfp; cip->chptr = sfp;
cip->item_next = 0; cip->item_next = NULL;
if (sfp->item_last) { if (sfp->item_last) {
sfp->item_last->item_next = cip; sfp->item_last->item_next = cip;
} else { } else {
...@@ -625,7 +625,7 @@ static void pvr2_sysfs_tear_down_debugifc(struct pvr2_sysfs *sfp) ...@@ -625,7 +625,7 @@ static void pvr2_sysfs_tear_down_debugifc(struct pvr2_sysfs *sfp)
&sfp->debugifc->attr_debuginfo); &sfp->debugifc->attr_debuginfo);
class_device_remove_file(sfp->class_dev,&sfp->debugifc->attr_debugcmd); class_device_remove_file(sfp->class_dev,&sfp->debugifc->attr_debugcmd);
kfree(sfp->debugifc); kfree(sfp->debugifc);
sfp->debugifc = 0; sfp->debugifc = NULL;
} }
#endif /* CONFIG_VIDEO_PVRUSB2_DEBUGIFC */ #endif /* CONFIG_VIDEO_PVRUSB2_DEBUGIFC */
...@@ -678,9 +678,9 @@ static void class_dev_destroy(struct pvr2_sysfs *sfp) ...@@ -678,9 +678,9 @@ static void class_dev_destroy(struct pvr2_sysfs *sfp)
class_device_remove_file(sfp->class_dev,&sfp->attr_v4l_minor_number); class_device_remove_file(sfp->class_dev,&sfp->attr_v4l_minor_number);
class_device_remove_file(sfp->class_dev,&sfp->attr_unit_number); class_device_remove_file(sfp->class_dev,&sfp->attr_unit_number);
pvr2_sysfs_trace("Destroying class_dev id=%p",sfp->class_dev); pvr2_sysfs_trace("Destroying class_dev id=%p",sfp->class_dev);
sfp->class_dev->class_data = 0; sfp->class_dev->class_data = NULL;
class_device_unregister(sfp->class_dev); class_device_unregister(sfp->class_dev);
sfp->class_dev = 0; sfp->class_dev = NULL;
} }
...@@ -739,13 +739,13 @@ static void class_dev_create(struct pvr2_sysfs *sfp, ...@@ -739,13 +739,13 @@ static void class_dev_create(struct pvr2_sysfs *sfp,
sfp->attr_v4l_minor_number.attr.name = "v4l_minor_number"; sfp->attr_v4l_minor_number.attr.name = "v4l_minor_number";
sfp->attr_v4l_minor_number.attr.mode = S_IRUGO; sfp->attr_v4l_minor_number.attr.mode = S_IRUGO;
sfp->attr_v4l_minor_number.show = v4l_minor_number_show; sfp->attr_v4l_minor_number.show = v4l_minor_number_show;
sfp->attr_v4l_minor_number.store = 0; sfp->attr_v4l_minor_number.store = NULL;
class_device_create_file(sfp->class_dev,&sfp->attr_v4l_minor_number); class_device_create_file(sfp->class_dev,&sfp->attr_v4l_minor_number);
sfp->attr_unit_number.attr.owner = THIS_MODULE; sfp->attr_unit_number.attr.owner = THIS_MODULE;
sfp->attr_unit_number.attr.name = "unit_number"; sfp->attr_unit_number.attr.name = "unit_number";
sfp->attr_unit_number.attr.mode = S_IRUGO; sfp->attr_unit_number.attr.mode = S_IRUGO;
sfp->attr_unit_number.show = unit_number_show; sfp->attr_unit_number.show = unit_number_show;
sfp->attr_unit_number.store = 0; sfp->attr_unit_number.store = NULL;
class_device_create_file(sfp->class_dev,&sfp->attr_unit_number); class_device_create_file(sfp->class_dev,&sfp->attr_unit_number);
pvr2_sysfs_add_controls(sfp); pvr2_sysfs_add_controls(sfp);
...@@ -806,7 +806,7 @@ struct pvr2_sysfs_class *pvr2_sysfs_class_create(void) ...@@ -806,7 +806,7 @@ struct pvr2_sysfs_class *pvr2_sysfs_class_create(void)
pvr2_sysfs_trace( pvr2_sysfs_trace(
"Registration failed for pvr2_sysfs_class id=%p",clp); "Registration failed for pvr2_sysfs_class id=%p",clp);
kfree(clp); kfree(clp);
clp = 0; clp = NULL;
} }
return clp; return clp;
} }
......
...@@ -69,7 +69,7 @@ static void tuner_update(struct pvr2_tuner_handler *ctxt) ...@@ -69,7 +69,7 @@ static void tuner_update(struct pvr2_tuner_handler *ctxt)
static void pvr2_tuner_detach(struct pvr2_tuner_handler *ctxt) static void pvr2_tuner_detach(struct pvr2_tuner_handler *ctxt)
{ {
ctxt->client->handler = 0; ctxt->client->handler = NULL;
kfree(ctxt); kfree(ctxt);
} }
......
...@@ -81,7 +81,7 @@ static int video_nr[PVR_NUM] = {[0 ... PVR_NUM-1] = -1}; ...@@ -81,7 +81,7 @@ static int video_nr[PVR_NUM] = {[0 ... PVR_NUM-1] = -1};
module_param_array(video_nr, int, NULL, 0444); module_param_array(video_nr, int, NULL, 0444);
MODULE_PARM_DESC(video_nr, "Offset for device's minor"); MODULE_PARM_DESC(video_nr, "Offset for device's minor");
struct v4l2_capability pvr_capability ={ static struct v4l2_capability pvr_capability ={
.driver = "pvrusb2", .driver = "pvrusb2",
.card = "Hauppauge WinTV pvr-usb2", .card = "Hauppauge WinTV pvr-usb2",
.bus_info = "usb", .bus_info = "usb",
...@@ -111,7 +111,7 @@ static struct v4l2_tuner pvr_v4l2_tuners[]= { ...@@ -111,7 +111,7 @@ static struct v4l2_tuner pvr_v4l2_tuners[]= {
} }
}; };
struct v4l2_fmtdesc pvr_fmtdesc [] = { static struct v4l2_fmtdesc pvr_fmtdesc [] = {
{ {
.index = 0, .index = 0,
.type = V4L2_BUF_TYPE_VIDEO_CAPTURE, .type = V4L2_BUF_TYPE_VIDEO_CAPTURE,
...@@ -127,7 +127,7 @@ struct v4l2_fmtdesc pvr_fmtdesc [] = { ...@@ -127,7 +127,7 @@ struct v4l2_fmtdesc pvr_fmtdesc [] = {
#define PVR_FORMAT_PIX 0 #define PVR_FORMAT_PIX 0
#define PVR_FORMAT_VBI 1 #define PVR_FORMAT_VBI 1
struct v4l2_format pvr_format [] = { static struct v4l2_format pvr_format [] = {
[PVR_FORMAT_PIX] = { [PVR_FORMAT_PIX] = {
.type = V4L2_BUF_TYPE_VIDEO_CAPTURE, .type = V4L2_BUF_TYPE_VIDEO_CAPTURE,
.fmt = { .fmt = {
...@@ -701,8 +701,7 @@ static int pvr2_v4l2_do_ioctl(struct inode *inode, struct file *file, ...@@ -701,8 +701,7 @@ static int pvr2_v4l2_do_ioctl(struct inode *inode, struct file *file,
static void pvr2_v4l2_dev_destroy(struct pvr2_v4l2_dev *dip) static void pvr2_v4l2_dev_destroy(struct pvr2_v4l2_dev *dip)
{ {
pvr2_trace(PVR2_TRACE_INIT, printk(KERN_INFO "pvrusb2: unregistering device video%d [%s]\n",
"unregistering device video%d [%s]",
dip->vdev->minor,pvr2_config_get_name(dip->config)); dip->vdev->minor,pvr2_config_get_name(dip->config));
if (dip->ctxt_idx >= 0) { if (dip->ctxt_idx >= 0) {
mutex_lock(&device_lock); mutex_lock(&device_lock);
...@@ -725,7 +724,7 @@ static void pvr2_v4l2_destroy_no_lock(struct pvr2_v4l2 *vp) ...@@ -725,7 +724,7 @@ static void pvr2_v4l2_destroy_no_lock(struct pvr2_v4l2 *vp)
} }
void pvr2_v4l2_internal_check(struct pvr2_channel *chp) static void pvr2_v4l2_internal_check(struct pvr2_channel *chp)
{ {
struct pvr2_v4l2 *vp; struct pvr2_v4l2 *vp;
vp = container_of(chp,struct pvr2_v4l2,channel); vp = container_of(chp,struct pvr2_v4l2,channel);
...@@ -735,7 +734,7 @@ void pvr2_v4l2_internal_check(struct pvr2_channel *chp) ...@@ -735,7 +734,7 @@ void pvr2_v4l2_internal_check(struct pvr2_channel *chp)
} }
int pvr2_v4l2_ioctl(struct inode *inode, struct file *file, static int pvr2_v4l2_ioctl(struct inode *inode, struct file *file,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
...@@ -747,7 +746,7 @@ int pvr2_v4l2_ioctl(struct inode *inode, struct file *file, ...@@ -747,7 +746,7 @@ int pvr2_v4l2_ioctl(struct inode *inode, struct file *file,
} }
int pvr2_v4l2_release(struct inode *inode, struct file *file) static int pvr2_v4l2_release(struct inode *inode, struct file *file)
{ {
struct pvr2_v4l2_fh *fhp = file->private_data; struct pvr2_v4l2_fh *fhp = file->private_data;
struct pvr2_v4l2 *vp = fhp->vhead; struct pvr2_v4l2 *vp = fhp->vhead;
...@@ -761,9 +760,9 @@ int pvr2_v4l2_release(struct inode *inode, struct file *file) ...@@ -761,9 +760,9 @@ int pvr2_v4l2_release(struct inode *inode, struct file *file)
hdw = fhp->channel.mc_head->hdw; hdw = fhp->channel.mc_head->hdw;
pvr2_hdw_set_streaming(hdw,0); pvr2_hdw_set_streaming(hdw,0);
sp = pvr2_ioread_get_stream(fhp->rhp); sp = pvr2_ioread_get_stream(fhp->rhp);
if (sp) pvr2_stream_set_callback(sp,0,0); if (sp) pvr2_stream_set_callback(sp,NULL,NULL);
pvr2_ioread_destroy(fhp->rhp); pvr2_ioread_destroy(fhp->rhp);
fhp->rhp = 0; fhp->rhp = NULL;
} }
v4l2_prio_close(&vp->prio, &fhp->prio); v4l2_prio_close(&vp->prio, &fhp->prio);
file->private_data = NULL; file->private_data = NULL;
...@@ -779,9 +778,9 @@ int pvr2_v4l2_release(struct inode *inode, struct file *file) ...@@ -779,9 +778,9 @@ int pvr2_v4l2_release(struct inode *inode, struct file *file)
} else { } else {
vp->vfirst = fhp->vnext; vp->vfirst = fhp->vnext;
} }
fhp->vnext = 0; fhp->vnext = NULL;
fhp->vprev = 0; fhp->vprev = NULL;
fhp->vhead = 0; fhp->vhead = NULL;
pvr2_channel_done(&fhp->channel); pvr2_channel_done(&fhp->channel);
pvr2_trace(PVR2_TRACE_STRUCT, pvr2_trace(PVR2_TRACE_STRUCT,
"Destroying pvr_v4l2_fh id=%p",fhp); "Destroying pvr_v4l2_fh id=%p",fhp);
...@@ -794,9 +793,9 @@ int pvr2_v4l2_release(struct inode *inode, struct file *file) ...@@ -794,9 +793,9 @@ int pvr2_v4l2_release(struct inode *inode, struct file *file)
} }
int pvr2_v4l2_open(struct inode *inode, struct file *file) static int pvr2_v4l2_open(struct inode *inode, struct file *file)
{ {
struct pvr2_v4l2_dev *dip = 0; /* Our own context pointer */ struct pvr2_v4l2_dev *dip = NULL; /* Our own context pointer */
struct pvr2_v4l2_fh *fhp; struct pvr2_v4l2_fh *fhp;
struct pvr2_v4l2 *vp; struct pvr2_v4l2 *vp;
struct pvr2_hdw *hdw; struct pvr2_hdw *hdw;
...@@ -854,7 +853,7 @@ int pvr2_v4l2_open(struct inode *inode, struct file *file) ...@@ -854,7 +853,7 @@ int pvr2_v4l2_open(struct inode *inode, struct file *file)
pvr2_context_enter(vp->channel.mc_head); do { pvr2_context_enter(vp->channel.mc_head); do {
pvr2_trace(PVR2_TRACE_STRUCT,"Creating pvr_v4l2_fh id=%p",fhp); pvr2_trace(PVR2_TRACE_STRUCT,"Creating pvr_v4l2_fh id=%p",fhp);
pvr2_channel_init(&fhp->channel,vp->channel.mc_head); pvr2_channel_init(&fhp->channel,vp->channel.mc_head);
fhp->vnext = 0; fhp->vnext = NULL;
fhp->vprev = vp->vlast; fhp->vprev = vp->vlast;
if (vp->vlast) { if (vp->vlast) {
vp->vlast->vnext = fhp; vp->vlast->vnext = fhp;
...@@ -897,7 +896,7 @@ static int pvr2_v4l2_iosetup(struct pvr2_v4l2_fh *fh) ...@@ -897,7 +896,7 @@ static int pvr2_v4l2_iosetup(struct pvr2_v4l2_fh *fh)
fh->rhp = pvr2_channel_create_mpeg_stream(fh->dev_info->stream); fh->rhp = pvr2_channel_create_mpeg_stream(fh->dev_info->stream);
if (!fh->rhp) { if (!fh->rhp) {
pvr2_channel_claim_stream(&fh->channel,0); pvr2_channel_claim_stream(&fh->channel,NULL);
return -ENOMEM; return -ENOMEM;
} }
...@@ -1078,8 +1077,7 @@ static void pvr2_v4l2_dev_init(struct pvr2_v4l2_dev *dip, ...@@ -1078,8 +1077,7 @@ static void pvr2_v4l2_dev_init(struct pvr2_v4l2_dev *dip,
(video_register_device(dip->vdev, v4l_type, -1) < 0)) { (video_register_device(dip->vdev, v4l_type, -1) < 0)) {
err("Failed to register pvrusb2 v4l video device"); err("Failed to register pvrusb2 v4l video device");
} else { } else {
pvr2_trace(PVR2_TRACE_INIT, printk(KERN_INFO "pvrusb2: registered device video%d [%s]\n",
"registered device video%d [%s]",
dip->vdev->minor,pvr2_config_get_name(dip->config)); dip->vdev->minor,pvr2_config_get_name(dip->config));
} }
......
...@@ -126,8 +126,8 @@ static const struct pvr2_v4l_decoder_ops decoder_ops[] = { ...@@ -126,8 +126,8 @@ static const struct pvr2_v4l_decoder_ops decoder_ops[] = {
static void decoder_detach(struct pvr2_v4l_decoder *ctxt) static void decoder_detach(struct pvr2_v4l_decoder *ctxt)
{ {
ctxt->client->handler = 0; ctxt->client->handler = NULL;
ctxt->hdw->decoder_ctrl = 0; ctxt->hdw->decoder_ctrl = NULL;
kfree(ctxt); kfree(ctxt);
} }
......
...@@ -89,7 +89,7 @@ static unsigned int wm8775_describe(struct pvr2_v4l_wm8775 *ctxt, ...@@ -89,7 +89,7 @@ static unsigned int wm8775_describe(struct pvr2_v4l_wm8775 *ctxt,
static void wm8775_detach(struct pvr2_v4l_wm8775 *ctxt) static void wm8775_detach(struct pvr2_v4l_wm8775 *ctxt)
{ {
ctxt->client->handler = 0; ctxt->client->handler = NULL;
kfree(ctxt); kfree(ctxt);
} }
......
...@@ -942,8 +942,6 @@ static int __devinit saa7134_initdev(struct pci_dev *pci_dev, ...@@ -942,8 +942,6 @@ static int __devinit saa7134_initdev(struct pci_dev *pci_dev,
/* load i2c helpers */ /* load i2c helpers */
if (TUNER_ABSENT != dev->tuner_type) if (TUNER_ABSENT != dev->tuner_type)
request_module("tuner"); request_module("tuner");
if (dev->tda9887_conf)
request_module("tda9887");
if (card_is_empress(dev)) { if (card_is_empress(dev)) {
request_module("saa6752hs"); request_module("saa6752hs");
request_module_depend("saa7134-empress",&need_empress); request_module_depend("saa7134-empress",&need_empress);
......
...@@ -590,8 +590,8 @@ int tda9887_tuner_init(struct i2c_client *c) ...@@ -590,8 +590,8 @@ int tda9887_tuner_init(struct i2c_client *c)
t->set_tv_freq = tda9887_set_freq; t->set_tv_freq = tda9887_set_freq;
t->set_radio_freq = tda9887_set_freq; t->set_radio_freq = tda9887_set_freq;
t->standby = tda9887_standby; t->standby = tda9887_standby;
t->tuner_status=tda9887_tuner_status; t->tuner_status = tda9887_tuner_status;
t->get_afc=tda9887_get_afc; t->get_afc = tda9887_get_afc;
return 0; return 0;
} }
......
...@@ -416,7 +416,7 @@ static void tuner_status(struct i2c_client *client) ...@@ -416,7 +416,7 @@ static void tuner_status(struct i2c_client *client)
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */
/* static var Used only in tuner_attach and tuner_probe */ /* static vars: used only in tuner_attach and tuner_probe */
static unsigned default_mode_mask; static unsigned default_mode_mask;
/* During client attach, set_type is called by adapter's attach_inform callback. /* During client attach, set_type is called by adapter's attach_inform callback.
...@@ -608,13 +608,13 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg) ...@@ -608,13 +608,13 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg)
tuner_dbg("VIDIOCSAUDIO not implemented.\n"); tuner_dbg("VIDIOCSAUDIO not implemented.\n");
break; break;
case TDA9887_SET_CONFIG: case TDA9887_SET_CONFIG:
{ if (t->type == TUNER_TDA9887) {
int *i = arg; int *i = arg;
t->tda9887_config = *i; t->tda9887_config = *i;
set_freq(client, t->tv_freq); set_freq(client, t->tv_freq);
break;
} }
break;
/* --- v4l ioctls --- */ /* --- v4l ioctls --- */
/* take care: bttv does userspace copying, we'll get a /* take care: bttv does userspace copying, we'll get a
kernel pointer here... */ kernel pointer here... */
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/videodev.h> #include <linux/videodev.h>
#include <media/tuner.h> #include <media/tuner.h>
#include <media/v4l2-common.h>
static int offset = 0; static int offset = 0;
module_param(offset, int, 0666); module_param(offset, int, 0666);
...@@ -128,6 +129,7 @@ static void default_set_tv_freq(struct i2c_client *c, unsigned int freq) ...@@ -128,6 +129,7 @@ static void default_set_tv_freq(struct i2c_client *c, unsigned int freq)
u8 buffer[4]; u8 buffer[4];
int rc, IFPCoff, i, j; int rc, IFPCoff, i, j;
enum param_type desired_type; enum param_type desired_type;
struct tuner_params *params;
tun = &tuners[t->type]; tun = &tuners[t->type];
...@@ -169,19 +171,20 @@ static void default_set_tv_freq(struct i2c_client *c, unsigned int freq) ...@@ -169,19 +171,20 @@ static void default_set_tv_freq(struct i2c_client *c, unsigned int freq)
IFPCoff,t->type); IFPCoff,t->type);
j = 0; j = 0;
} }
params = &tun->params[j];
for (i = 0; i < tun->params[j].count; i++) { for (i = 0; i < params->count; i++) {
if (freq > tun->params[j].ranges[i].limit) if (freq > params->ranges[i].limit)
continue; continue;
break; break;
} }
if (i == tun->params[j].count) { if (i == params->count) {
tuner_dbg("TV frequency out of range (%d > %d)", tuner_dbg("TV frequency out of range (%d > %d)",
freq, tun->params[j].ranges[i - 1].limit); freq, params->ranges[i - 1].limit);
freq = tun->params[j].ranges[--i].limit; freq = params->ranges[--i].limit;
} }
config = tun->params[j].ranges[i].config; config = params->ranges[i].config;
cb = tun->params[j].ranges[i].cb; cb = params->ranges[i].cb;
/* i == 0 -> VHF_LO /* i == 0 -> VHF_LO
* i == 1 -> VHF_HI * i == 1 -> VHF_HI
* i == 2 -> UHF */ * i == 2 -> UHF */
...@@ -281,7 +284,7 @@ static void default_set_tv_freq(struct i2c_client *c, unsigned int freq) ...@@ -281,7 +284,7 @@ static void default_set_tv_freq(struct i2c_client *c, unsigned int freq)
break; break;
} }
if (tuners[t->type].params->cb_first_if_lower_freq && div < t->last_div) { if (params->cb_first_if_lower_freq && div < t->last_div) {
buffer[0] = config; buffer[0] = config;
buffer[1] = cb; buffer[1] = cb;
buffer[2] = (div>>8) & 0x7f; buffer[2] = (div>>8) & 0x7f;
...@@ -293,6 +296,43 @@ static void default_set_tv_freq(struct i2c_client *c, unsigned int freq) ...@@ -293,6 +296,43 @@ static void default_set_tv_freq(struct i2c_client *c, unsigned int freq)
buffer[3] = cb; buffer[3] = cb;
} }
t->last_div = div; t->last_div = div;
if (params->has_tda9887) {
int config = 0;
int is_secam_l = (t->std & (V4L2_STD_SECAM_L | V4L2_STD_SECAM_LC)) &&
!(t->std & ~(V4L2_STD_SECAM_L | V4L2_STD_SECAM_LC));
if (t->std == V4L2_STD_SECAM_LC) {
if (params->port1_active ^ params->port1_invert_for_secam_lc)
config |= TDA9887_PORT1_ACTIVE;
if (params->port2_active ^ params->port2_invert_for_secam_lc)
config |= TDA9887_PORT2_ACTIVE;
}
else {
if (params->port1_active)
config |= TDA9887_PORT1_ACTIVE;
if (params->port2_active)
config |= TDA9887_PORT2_ACTIVE;
}
if (params->intercarrier_mode)
config |= TDA9887_INTERCARRIER;
if (is_secam_l) {
if (i == 0 && params->default_top_secam_low)
config |= TDA9887_TOP(params->default_top_secam_low);
else if (i == 1 && params->default_top_secam_mid)
config |= TDA9887_TOP(params->default_top_secam_mid);
else if (params->default_top_secam_high)
config |= TDA9887_TOP(params->default_top_secam_high);
}
else {
if (i == 0 && params->default_top_low)
config |= TDA9887_TOP(params->default_top_low);
else if (i == 1 && params->default_top_mid)
config |= TDA9887_TOP(params->default_top_mid);
else if (params->default_top_high)
config |= TDA9887_TOP(params->default_top_high);
}
i2c_clients_command(c->adapter, TDA9887_SET_CONFIG, &config);
}
tuner_dbg("tv 0x%02x 0x%02x 0x%02x 0x%02x\n", tuner_dbg("tv 0x%02x 0x%02x 0x%02x 0x%02x\n",
buffer[0],buffer[1],buffer[2],buffer[3]); buffer[0],buffer[1],buffer[2],buffer[3]);
...@@ -339,6 +379,7 @@ static void default_set_radio_freq(struct i2c_client *c, unsigned int freq) ...@@ -339,6 +379,7 @@ static void default_set_radio_freq(struct i2c_client *c, unsigned int freq)
u16 div; u16 div;
int rc, j; int rc, j;
enum param_type desired_type = TUNER_PARAM_TYPE_RADIO; enum param_type desired_type = TUNER_PARAM_TYPE_RADIO;
struct tuner_params *params;
tun = &tuners[t->type]; tun = &tuners[t->type];
...@@ -352,7 +393,8 @@ static void default_set_radio_freq(struct i2c_client *c, unsigned int freq) ...@@ -352,7 +393,8 @@ static void default_set_radio_freq(struct i2c_client *c, unsigned int freq)
j = 0; j = 0;
div = (20 * freq / 16000) + (int)(20*10.7); /* IF 10.7 MHz */ div = (20 * freq / 16000) + (int)(20*10.7); /* IF 10.7 MHz */
buffer[2] = (tun->params[j].ranges[0].config & ~TUNER_RATIO_MASK) | TUNER_RATIO_SELECT_50; /* 50 kHz step */ params = &tun->params[j];
buffer[2] = (params->ranges[0].config & ~TUNER_RATIO_MASK) | TUNER_RATIO_SELECT_50; /* 50 kHz step */
switch (t->type) { switch (t->type) {
case TUNER_TENA_9533_DI: case TUNER_TENA_9533_DI:
...@@ -384,7 +426,7 @@ static void default_set_radio_freq(struct i2c_client *c, unsigned int freq) ...@@ -384,7 +426,7 @@ static void default_set_radio_freq(struct i2c_client *c, unsigned int freq)
} }
buffer[0] = (div>>8) & 0x7f; buffer[0] = (div>>8) & 0x7f;
buffer[1] = div & 0xff; buffer[1] = div & 0xff;
if (tuners[t->type].params->cb_first_if_lower_freq && div < t->last_div) { if (params->cb_first_if_lower_freq && div < t->last_div) {
buffer[0] = buffer[2]; buffer[0] = buffer[2];
buffer[1] = buffer[3]; buffer[1] = buffer[3];
buffer[2] = (div>>8) & 0x7f; buffer[2] = (div>>8) & 0x7f;
...@@ -398,6 +440,18 @@ static void default_set_radio_freq(struct i2c_client *c, unsigned int freq) ...@@ -398,6 +440,18 @@ static void default_set_radio_freq(struct i2c_client *c, unsigned int freq)
buffer[0],buffer[1],buffer[2],buffer[3]); buffer[0],buffer[1],buffer[2],buffer[3]);
t->last_div = div; t->last_div = div;
if (params->has_tda9887) {
int config = 0;
if (params->port1_active && !params->port1_fm_high_sensitivity)
config |= TDA9887_PORT1_ACTIVE;
if (params->port2_active && !params->port2_fm_high_sensitivity)
config |= TDA9887_PORT2_ACTIVE;
if (params->intercarrier_mode)
config |= TDA9887_INTERCARRIER;
/* if (params->port1_set_for_fm_mono)
config &= ~TDA9887_PORT1_ACTIVE;*/
i2c_clients_command(c->adapter, TDA9887_SET_CONFIG, &config);
}
if (4 != (rc = i2c_master_send(c,buffer,4))) if (4 != (rc = i2c_master_send(c,buffer,4)))
tuner_warn("i2c i/o error: rc == %d (should be 4)\n",rc); tuner_warn("i2c i/o error: rc == %d (should be 4)\n",rc);
} }
......
...@@ -380,6 +380,10 @@ static struct tuner_params tuner_philips_fq1216me_params[] = { ...@@ -380,6 +380,10 @@ static struct tuner_params tuner_philips_fq1216me_params[] = {
.type = TUNER_PARAM_TYPE_PAL, .type = TUNER_PARAM_TYPE_PAL,
.ranges = tuner_lg_pal_ranges, .ranges = tuner_lg_pal_ranges,
.count = ARRAY_SIZE(tuner_lg_pal_ranges), .count = ARRAY_SIZE(tuner_lg_pal_ranges),
.has_tda9887 = 1,
.port1_active = 1,
.port2_active = 1,
.port2_invert_for_secam_lc = 1,
}, },
}; };
...@@ -542,6 +546,14 @@ static struct tuner_params tuner_fm1216me_mk3_params[] = { ...@@ -542,6 +546,14 @@ static struct tuner_params tuner_fm1216me_mk3_params[] = {
.ranges = tuner_fm1216me_mk3_pal_ranges, .ranges = tuner_fm1216me_mk3_pal_ranges,
.count = ARRAY_SIZE(tuner_fm1216me_mk3_pal_ranges), .count = ARRAY_SIZE(tuner_fm1216me_mk3_pal_ranges),
.cb_first_if_lower_freq = 1, .cb_first_if_lower_freq = 1,
.has_tda9887 = 1,
.port1_active = 1,
.port2_active = 1,
.port2_invert_for_secam_lc = 1,
.port1_fm_high_sensitivity = 1,
.default_top_mid = -2,
.default_top_secam_mid = -2,
.default_top_secam_high = -2,
}, },
}; };
...@@ -612,6 +624,10 @@ static struct tuner_params tuner_fm1236_mk3_params[] = { ...@@ -612,6 +624,10 @@ static struct tuner_params tuner_fm1236_mk3_params[] = {
.ranges = tuner_fm1236_mk3_ntsc_ranges, .ranges = tuner_fm1236_mk3_ntsc_ranges,
.count = ARRAY_SIZE(tuner_fm1236_mk3_ntsc_ranges), .count = ARRAY_SIZE(tuner_fm1236_mk3_ntsc_ranges),
.cb_first_if_lower_freq = 1, .cb_first_if_lower_freq = 1,
.has_tda9887 = 1,
.port1_active = 1,
.port2_active = 1,
.port1_fm_high_sensitivity = 1,
}, },
}; };
...@@ -632,6 +648,8 @@ static struct tuner_params tuner_microtune_4049_fm5_params[] = { ...@@ -632,6 +648,8 @@ static struct tuner_params tuner_microtune_4049_fm5_params[] = {
.type = TUNER_PARAM_TYPE_PAL, .type = TUNER_PARAM_TYPE_PAL,
.ranges = tuner_temic_4009f_5_pal_ranges, .ranges = tuner_temic_4009f_5_pal_ranges,
.count = ARRAY_SIZE(tuner_temic_4009f_5_pal_ranges), .count = ARRAY_SIZE(tuner_temic_4009f_5_pal_ranges),
.has_tda9887 = 1,
.port1_invert_for_secam_lc = 1,
}, },
}; };
...@@ -648,6 +666,8 @@ static struct tuner_params tuner_panasonic_vp27_params[] = { ...@@ -648,6 +666,8 @@ static struct tuner_params tuner_panasonic_vp27_params[] = {
.type = TUNER_PARAM_TYPE_NTSC, .type = TUNER_PARAM_TYPE_NTSC,
.ranges = tuner_panasonic_vp27_ntsc_ranges, .ranges = tuner_panasonic_vp27_ntsc_ranges,
.count = ARRAY_SIZE(tuner_panasonic_vp27_ntsc_ranges), .count = ARRAY_SIZE(tuner_panasonic_vp27_ntsc_ranges),
.has_tda9887 = 1,
.intercarrier_mode = 1,
}, },
}; };
...@@ -782,6 +802,13 @@ static struct tuner_params tuner_philips_fq1216ame_mk4_params[] = { ...@@ -782,6 +802,13 @@ static struct tuner_params tuner_philips_fq1216ame_mk4_params[] = {
.type = TUNER_PARAM_TYPE_PAL, .type = TUNER_PARAM_TYPE_PAL,
.ranges = tuner_philips_fq12_6a___mk4_pal_ranges, .ranges = tuner_philips_fq12_6a___mk4_pal_ranges,
.count = ARRAY_SIZE(tuner_philips_fq12_6a___mk4_pal_ranges), .count = ARRAY_SIZE(tuner_philips_fq12_6a___mk4_pal_ranges),
.has_tda9887 = 1,
.port1_active = 1,
.port2_invert_for_secam_lc = 1,
.default_top_mid = -2,
.default_top_secam_low = -2,
.default_top_secam_mid = -2,
.default_top_secam_high = -2,
}, },
}; };
...@@ -870,6 +897,12 @@ static struct tuner_params tuner_philips_fmd1216me_mk3_params[] = { ...@@ -870,6 +897,12 @@ static struct tuner_params tuner_philips_fmd1216me_mk3_params[] = {
.type = TUNER_PARAM_TYPE_PAL, .type = TUNER_PARAM_TYPE_PAL,
.ranges = tuner_philips_fmd1216me_mk3_pal_ranges, .ranges = tuner_philips_fmd1216me_mk3_pal_ranges,
.count = ARRAY_SIZE(tuner_philips_fmd1216me_mk3_pal_ranges), .count = ARRAY_SIZE(tuner_philips_fmd1216me_mk3_pal_ranges),
.has_tda9887 = 1,
.port1_active = 1,
.port2_active = 1,
.port2_fm_high_sensitivity = 1,
.port2_invert_for_secam_lc = 1,
.port1_set_for_fm_mono = 1,
}, },
}; };
...@@ -1005,6 +1038,7 @@ static struct tuner_params tuner_samsung_tcpn_2121p30a_params[] = { ...@@ -1005,6 +1038,7 @@ static struct tuner_params tuner_samsung_tcpn_2121p30a_params[] = {
.type = TUNER_PARAM_TYPE_NTSC, .type = TUNER_PARAM_TYPE_NTSC,
.ranges = tuner_samsung_tcpn_2121p30a_ntsc_ranges, .ranges = tuner_samsung_tcpn_2121p30a_ntsc_ranges,
.count = ARRAY_SIZE(tuner_samsung_tcpn_2121p30a_ntsc_ranges), .count = ARRAY_SIZE(tuner_samsung_tcpn_2121p30a_ntsc_ranges),
.has_tda9887 = 1,
}, },
}; };
...@@ -1037,6 +1071,10 @@ static struct tuner_params tuner_samsung_tcpg_6121p30a_params[] = { ...@@ -1037,6 +1071,10 @@ static struct tuner_params tuner_samsung_tcpg_6121p30a_params[] = {
.type = TUNER_PARAM_TYPE_PAL, .type = TUNER_PARAM_TYPE_PAL,
.ranges = tuner_samsung_tcpg_6121p30a_pal_ranges, .ranges = tuner_samsung_tcpg_6121p30a_pal_ranges,
.count = ARRAY_SIZE(tuner_samsung_tcpg_6121p30a_pal_ranges), .count = ARRAY_SIZE(tuner_samsung_tcpg_6121p30a_pal_ranges),
.has_tda9887 = 1,
.port1_active = 1,
.port2_active = 1,
.port2_invert_for_secam_lc = 1,
}, },
}; };
......
...@@ -73,13 +73,13 @@ static struct HAUPPAUGE_TUNER_FMT ...@@ -73,13 +73,13 @@ static struct HAUPPAUGE_TUNER_FMT
} }
hauppauge_tuner_fmt[] = hauppauge_tuner_fmt[] =
{ {
{ V4L2_STD_UNKNOWN," UNKNOWN" }, { V4L2_STD_UNKNOWN, " UNKNOWN" },
{ V4L2_STD_UNKNOWN," FM" }, { V4L2_STD_UNKNOWN, " FM" },
{ V4L2_STD_PAL_BG, " PAL(B/G)" }, { V4L2_STD_B|V4L2_STD_GH, " PAL(B/G)" },
{ V4L2_STD_NTSC_M, " NTSC(M)" }, { V4L2_STD_MN, " NTSC(M)" },
{ V4L2_STD_PAL_I, " PAL(I)" }, { V4L2_STD_PAL_I, " PAL(I)" },
{ V4L2_STD_SECAM_L," SECAM(L/L')" }, { V4L2_STD_SECAM_L|V4L2_STD_SECAM_LC, " SECAM(L/L')" },
{ V4L2_STD_PAL_DK, " PAL(D/D1/K)" }, { V4L2_STD_DK, " PAL(D/D1/K)" },
{ V4L2_STD_ATSC, " ATSC/DVB Digital" }, { V4L2_STD_ATSC, " ATSC/DVB Digital" },
}; };
...@@ -219,7 +219,7 @@ hauppauge_tuner[] = ...@@ -219,7 +219,7 @@ hauppauge_tuner[] =
{ TUNER_ABSENT, "Thompson DTT75105"}, { TUNER_ABSENT, "Thompson DTT75105"},
{ TUNER_ABSENT, "Conexant_CX24109"}, { TUNER_ABSENT, "Conexant_CX24109"},
{ TUNER_TCL_2002N, "TCL M2523_5N_E"}, { TUNER_TCL_2002N, "TCL M2523_5N_E"},
{ TUNER_ABSENT, "TCL M2523_3DB_E"}, { TUNER_TCL_2002MB, "TCL M2523_3DB_E"},
{ TUNER_ABSENT, "Philips 8275A"}, { TUNER_ABSENT, "Philips 8275A"},
{ TUNER_ABSENT, "Microtune MT2060"}, { TUNER_ABSENT, "Microtune MT2060"},
{ TUNER_ABSENT, "Philips FM1236 MK5"}, { TUNER_ABSENT, "Philips FM1236 MK5"},
......
...@@ -222,14 +222,14 @@ M zr36055[1] 0001 0000c001 00000000 (zr36050[1]) ...@@ -222,14 +222,14 @@ M zr36055[1] 0001 0000c001 00000000 (zr36050[1])
/* ========================= */ /* ========================= */
struct vfe_polarity { struct vfe_polarity {
int vsync_pol:1; unsigned int vsync_pol:1;
int hsync_pol:1; unsigned int hsync_pol:1;
int field_pol:1; unsigned int field_pol:1;
int blank_pol:1; unsigned int blank_pol:1;
int subimg_pol:1; unsigned int subimg_pol:1;
int poe_pol:1; unsigned int poe_pol:1;
int pvalid_pol:1; unsigned int pvalid_pol:1;
int vclk_pol:1; unsigned int vclk_pol:1;
}; };
struct vfe_settings { struct vfe_settings {
......
...@@ -20,6 +20,7 @@ struct tuner_range { ...@@ -20,6 +20,7 @@ struct tuner_range {
struct tuner_params { struct tuner_params {
enum param_type type; enum param_type type;
/* Many Philips based tuners have a comment like this in their /* Many Philips based tuners have a comment like this in their
* datasheet: * datasheet:
* *
...@@ -39,6 +40,60 @@ struct tuner_params { ...@@ -39,6 +40,60 @@ struct tuner_params {
* static unless the control byte was sent first. * static unless the control byte was sent first.
*/ */
unsigned int cb_first_if_lower_freq:1; unsigned int cb_first_if_lower_freq:1;
/* Set to 1 if this tuner uses a tda9887 */
unsigned int has_tda9887:1;
/* Many Philips tuners use tda9887 PORT1 to select the FM radio
sensitivity. If this setting is 1, then set PORT1 to 1 to
get proper FM reception. */
unsigned int port1_fm_high_sensitivity:1;
/* Some Philips tuners use tda9887 PORT2 to select the FM radio
sensitivity. If this setting is 1, then set PORT2 to 1 to
get proper FM reception. */
unsigned int port2_fm_high_sensitivity:1;
/* Most tuners with a tda9887 use QSS mode. Some (cheaper) tuners
use Intercarrier mode. If this setting is 1, then the tuner
needs to be set to intercarrier mode. */
unsigned int intercarrier_mode:1;
/* This setting sets the default value for PORT1.
0 means inactive, 1 means active. Note: the actual bit
value written to the tda9887 is inverted. So a 0 here
means a 1 in the B6 bit. */
unsigned int port1_active:1;
/* This setting sets the default value for PORT2.
0 means inactive, 1 means active. Note: the actual bit
value written to the tda9887 is inverted. So a 0 here
means a 1 in the B7 bit. */
unsigned int port2_active:1;
/* Sometimes PORT1 is inverted when the SECAM-L' standard is selected.
Set this bit to 1 if this is needed. */
unsigned int port1_invert_for_secam_lc:1;
/* Sometimes PORT2 is inverted when the SECAM-L' standard is selected.
Set this bit to 1 if this is needed. */
unsigned int port2_invert_for_secam_lc:1;
/* Some cards require PORT1 to be 1 for mono Radio FM and 0 for stereo. */
unsigned int port1_set_for_fm_mono:1;
/* Default tda9887 TOP value in dB for the low band. Default is 0.
Range: -16:+15 */
signed int default_top_low:5;
/* Default tda9887 TOP value in dB for the mid band. Default is 0.
Range: -16:+15 */
signed int default_top_mid:5;
/* Default tda9887 TOP value in dB for the high band. Default is 0.
Range: -16:+15 */
signed int default_top_high:5;
/* Default tda9887 TOP value in dB for SECAM-L/L' for the low band.
Default is 0. Several tuners require a different TOP value for
the SECAM-L/L' standards. Range: -16:+15 */
signed int default_top_secam_low:5;
/* Default tda9887 TOP value in dB for SECAM-L/L' for the mid band.
Default is 0. Several tuners require a different TOP value for
the SECAM-L/L' standards. Range: -16:+15 */
signed int default_top_secam_mid:5;
/* Default tda9887 TOP value in dB for SECAM-L/L' for the high band.
Default is 0. Several tuners require a different TOP value for
the SECAM-L/L' standards. Range: -16:+15 */
signed int default_top_secam_high:5;
unsigned int count; unsigned int count;
struct tuner_range *ranges; struct tuner_range *ranges;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment