diff options
Diffstat (limited to 'drivers/media/video')
-rw-r--r-- | drivers/media/video/cx23885/cx23885-417.c | 20 | ||||
-rw-r--r-- | drivers/media/video/cx23885/cx23885-cards.c | 4 | ||||
-rw-r--r-- | drivers/media/video/cx23885/cx23885-core.c | 2 | ||||
-rw-r--r-- | drivers/media/video/cx23885/cx23885-dvb.c | 2 | ||||
-rw-r--r-- | drivers/media/video/cx23885/cx23885-i2c.c | 67 | ||||
-rw-r--r-- | drivers/media/video/cx23885/cx23885-video.c | 41 | ||||
-rw-r--r-- | drivers/media/video/cx23885/cx23885.h | 6 |
7 files changed, 47 insertions, 95 deletions
diff --git a/drivers/media/video/cx23885/cx23885-417.c b/drivers/media/video/cx23885/cx23885-417.c index 9e57c33b5496..6f5df90af93e 100644 --- a/drivers/media/video/cx23885/cx23885-417.c +++ b/drivers/media/video/cx23885/cx23885-417.c | |||
@@ -1251,8 +1251,7 @@ static int vidioc_g_tuner(struct file *file, void *priv, | |||
1251 | if (0 != t->index) | 1251 | if (0 != t->index) |
1252 | return -EINVAL; | 1252 | return -EINVAL; |
1253 | strcpy(t->name, "Television"); | 1253 | strcpy(t->name, "Television"); |
1254 | cx23885_call_i2c_clients(&dev->i2c_bus[2], VIDIOC_G_TUNER, t); | 1254 | call_all(dev, tuner, g_tuner, t); |
1255 | cx23885_call_i2c_clients(&dev->i2c_bus[1], VIDIOC_G_TUNER, t); | ||
1256 | 1255 | ||
1257 | dprintk(1, "VIDIOC_G_TUNER: tuner type %d\n", t->type); | 1256 | dprintk(1, "VIDIOC_G_TUNER: tuner type %d\n", t->type); |
1258 | 1257 | ||
@@ -1269,7 +1268,7 @@ static int vidioc_s_tuner(struct file *file, void *priv, | |||
1269 | return -EINVAL; | 1268 | return -EINVAL; |
1270 | 1269 | ||
1271 | /* Update the A/V core */ | 1270 | /* Update the A/V core */ |
1272 | cx23885_call_i2c_clients(&dev->i2c_bus[2], VIDIOC_S_TUNER, t); | 1271 | call_all(dev, tuner, s_tuner, t); |
1273 | 1272 | ||
1274 | return 0; | 1273 | return 0; |
1275 | } | 1274 | } |
@@ -1285,8 +1284,7 @@ static int vidioc_g_frequency(struct file *file, void *priv, | |||
1285 | f->type = V4L2_TUNER_ANALOG_TV; | 1284 | f->type = V4L2_TUNER_ANALOG_TV; |
1286 | f->frequency = dev->freq; | 1285 | f->frequency = dev->freq; |
1287 | 1286 | ||
1288 | /* Assumption that tuner is always on bus 1 */ | 1287 | call_all(dev, tuner, g_frequency, f); |
1289 | cx23885_call_i2c_clients(&dev->i2c_bus[1], VIDIOC_G_FREQUENCY, f); | ||
1290 | 1288 | ||
1291 | return 0; | 1289 | return 0; |
1292 | } | 1290 | } |
@@ -1313,8 +1311,7 @@ static int vidioc_s_frequency(struct file *file, void *priv, | |||
1313 | return -EINVAL; | 1311 | return -EINVAL; |
1314 | dev->freq = f->frequency; | 1312 | dev->freq = f->frequency; |
1315 | 1313 | ||
1316 | /* Assumption that tuner is always on bus 1 */ | 1314 | call_all(dev, tuner, s_frequency, f); |
1317 | cx23885_call_i2c_clients(&dev->i2c_bus[1], VIDIOC_S_FREQUENCY, f); | ||
1318 | 1315 | ||
1319 | cx23885_initialize_codec(dev); | 1316 | cx23885_initialize_codec(dev); |
1320 | 1317 | ||
@@ -1328,7 +1325,7 @@ static int vidioc_s_ctrl(struct file *file, void *priv, | |||
1328 | struct cx23885_dev *dev = fh->dev; | 1325 | struct cx23885_dev *dev = fh->dev; |
1329 | 1326 | ||
1330 | /* Update the A/V core */ | 1327 | /* Update the A/V core */ |
1331 | cx23885_call_i2c_clients(&dev->i2c_bus[2], VIDIOC_S_CTRL, ctl); | 1328 | call_all(dev, core, s_ctrl, ctl); |
1332 | return 0; | 1329 | return 0; |
1333 | } | 1330 | } |
1334 | 1331 | ||
@@ -1524,12 +1521,7 @@ static int vidioc_log_status(struct file *file, void *priv) | |||
1524 | printk(KERN_INFO | 1521 | printk(KERN_INFO |
1525 | "%s/2: ============ START LOG STATUS ============\n", | 1522 | "%s/2: ============ START LOG STATUS ============\n", |
1526 | dev->name); | 1523 | dev->name); |
1527 | cx23885_call_i2c_clients(&dev->i2c_bus[0], VIDIOC_LOG_STATUS, | 1524 | call_all(dev, core, log_status); |
1528 | NULL); | ||
1529 | cx23885_call_i2c_clients(&dev->i2c_bus[1], VIDIOC_LOG_STATUS, | ||
1530 | NULL); | ||
1531 | cx23885_call_i2c_clients(&dev->i2c_bus[2], VIDIOC_LOG_STATUS, | ||
1532 | NULL); | ||
1533 | cx2341x_log_status(&dev->mpeg_params, name); | 1525 | cx2341x_log_status(&dev->mpeg_params, name); |
1534 | printk(KERN_INFO | 1526 | printk(KERN_INFO |
1535 | "%s/2: ============= END LOG STATUS =============\n", | 1527 | "%s/2: ============= END LOG STATUS =============\n", |
diff --git a/drivers/media/video/cx23885/cx23885-cards.c b/drivers/media/video/cx23885/cx23885-cards.c index 08cd793cd151..5e4b7e790d94 100644 --- a/drivers/media/video/cx23885/cx23885-cards.c +++ b/drivers/media/video/cx23885/cx23885-cards.c | |||
@@ -739,7 +739,9 @@ void cx23885_card_setup(struct cx23885_dev *dev) | |||
739 | case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H: | 739 | case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H: |
740 | case CX23885_BOARD_COMPRO_VIDEOMATE_E650F: | 740 | case CX23885_BOARD_COMPRO_VIDEOMATE_E650F: |
741 | case CX23885_BOARD_NETUP_DUAL_DVBS2_CI: | 741 | case CX23885_BOARD_NETUP_DUAL_DVBS2_CI: |
742 | request_module("cx25840"); | 742 | dev->sd_cx25840 = v4l2_i2c_new_subdev(&dev->i2c_bus[2].i2c_adap, |
743 | "cx25840", "cx25840", 0x88 >> 1); | ||
744 | v4l2_subdev_call(dev->sd_cx25840, core, init, 0); | ||
743 | break; | 745 | break; |
744 | } | 746 | } |
745 | 747 | ||
diff --git a/drivers/media/video/cx23885/cx23885-core.c b/drivers/media/video/cx23885/cx23885-core.c index 548279225d73..dc7fff22cfdd 100644 --- a/drivers/media/video/cx23885/cx23885-core.c +++ b/drivers/media/video/cx23885/cx23885-core.c | |||
@@ -875,7 +875,7 @@ static int cx23885_dev_setup(struct cx23885_dev *dev) | |||
875 | cx23885_i2c_register(&dev->i2c_bus[1]); | 875 | cx23885_i2c_register(&dev->i2c_bus[1]); |
876 | cx23885_i2c_register(&dev->i2c_bus[2]); | 876 | cx23885_i2c_register(&dev->i2c_bus[2]); |
877 | cx23885_card_setup(dev); | 877 | cx23885_card_setup(dev); |
878 | cx23885_call_i2c_clients(&dev->i2c_bus[0], TUNER_SET_STANDBY, NULL); | 878 | call_all(dev, core, s_standby, 0); |
879 | cx23885_ir_init(dev); | 879 | cx23885_ir_init(dev); |
880 | 880 | ||
881 | if (cx23885_boards[dev->board].porta == CX23885_ANALOG_VIDEO) { | 881 | if (cx23885_boards[dev->board].porta == CX23885_ANALOG_VIDEO) { |
diff --git a/drivers/media/video/cx23885/cx23885-dvb.c b/drivers/media/video/cx23885/cx23885-dvb.c index 8d731fffad58..d43c74396767 100644 --- a/drivers/media/video/cx23885/cx23885-dvb.c +++ b/drivers/media/video/cx23885/cx23885-dvb.c | |||
@@ -673,7 +673,7 @@ static int dvb_register(struct cx23885_tsport *port) | |||
673 | fe0->dvb.frontend->callback = cx23885_tuner_callback; | 673 | fe0->dvb.frontend->callback = cx23885_tuner_callback; |
674 | 674 | ||
675 | /* Put the analog decoder in standby to keep it quiet */ | 675 | /* Put the analog decoder in standby to keep it quiet */ |
676 | cx23885_call_i2c_clients(i2c_bus, TUNER_SET_STANDBY, NULL); | 676 | call_all(dev, core, s_standby, 0); |
677 | 677 | ||
678 | if (fe0->dvb.frontend->ops.analog_ops.standby) | 678 | if (fe0->dvb.frontend->ops.analog_ops.standby) |
679 | fe0->dvb.frontend->ops.analog_ops.standby(fe0->dvb.frontend); | 679 | fe0->dvb.frontend->ops.analog_ops.standby(fe0->dvb.frontend); |
diff --git a/drivers/media/video/cx23885/cx23885-i2c.c b/drivers/media/video/cx23885/cx23885-i2c.c index 969b7ebbc827..3421bd12056a 100644 --- a/drivers/media/video/cx23885/cx23885-i2c.c +++ b/drivers/media/video/cx23885/cx23885-i2c.c | |||
@@ -268,65 +268,6 @@ static int i2c_xfer(struct i2c_adapter *i2c_adap, | |||
268 | return retval; | 268 | return retval; |
269 | } | 269 | } |
270 | 270 | ||
271 | static int attach_inform(struct i2c_client *client) | ||
272 | { | ||
273 | struct v4l2_device *v4l2_dev = i2c_get_adapdata(client->adapter); | ||
274 | struct cx23885_dev *dev = to_cx23885(v4l2_dev); | ||
275 | struct tuner_setup tun_setup; | ||
276 | |||
277 | dprintk(1, "%s i2c attach [addr=0x%x,client=%s]\n", | ||
278 | client->driver->driver.name, client->addr, client->name); | ||
279 | |||
280 | if (!client->driver->command) | ||
281 | return 0; | ||
282 | |||
283 | if (dev->tuner_type != UNSET) { | ||
284 | |||
285 | dprintk(1, "%s (tuner) i2c attach [addr=0x%x,client=%s]\n", | ||
286 | client->driver->driver.name, client->addr, | ||
287 | client->name); | ||
288 | |||
289 | if ((dev->tuner_addr == ADDR_UNSET) || | ||
290 | (dev->tuner_addr == client->addr)) { | ||
291 | |||
292 | dprintk(1, "%s (tuner || addr UNSET)\n", | ||
293 | client->driver->driver.name); | ||
294 | |||
295 | dprintk(1, "%s i2c attach [addr=0x%x,client=%s]\n", | ||
296 | client->driver->driver.name, | ||
297 | client->addr, client->name); | ||
298 | |||
299 | tun_setup.mode_mask = T_ANALOG_TV; | ||
300 | tun_setup.type = dev->tuner_type; | ||
301 | tun_setup.addr = dev->tuner_addr; | ||
302 | |||
303 | client->driver->command(client, TUNER_SET_TYPE_ADDR, | ||
304 | &tun_setup); | ||
305 | } | ||
306 | } | ||
307 | |||
308 | return 0; | ||
309 | } | ||
310 | |||
311 | static int detach_inform(struct i2c_client *client) | ||
312 | { | ||
313 | struct v4l2_device *v4l2_dev = i2c_get_adapdata(client->adapter); | ||
314 | struct cx23885_dev *dev = to_cx23885(v4l2_dev); | ||
315 | |||
316 | dprintk(1, "i2c detach [client=%s]\n", client->name); | ||
317 | |||
318 | return 0; | ||
319 | } | ||
320 | |||
321 | void cx23885_call_i2c_clients(struct cx23885_i2c *bus, | ||
322 | unsigned int cmd, void *arg) | ||
323 | { | ||
324 | if (bus->i2c_rc != 0) | ||
325 | return; | ||
326 | |||
327 | i2c_clients_command(&bus->i2c_adap, cmd, arg); | ||
328 | } | ||
329 | |||
330 | static u32 cx23885_functionality(struct i2c_adapter *adap) | 271 | static u32 cx23885_functionality(struct i2c_adapter *adap) |
331 | { | 272 | { |
332 | return I2C_FUNC_SMBUS_EMUL | I2C_FUNC_I2C; | 273 | return I2C_FUNC_SMBUS_EMUL | I2C_FUNC_I2C; |
@@ -344,9 +285,6 @@ static struct i2c_adapter cx23885_i2c_adap_template = { | |||
344 | .owner = THIS_MODULE, | 285 | .owner = THIS_MODULE, |
345 | .id = I2C_HW_B_CX23885, | 286 | .id = I2C_HW_B_CX23885, |
346 | .algo = &cx23885_i2c_algo_template, | 287 | .algo = &cx23885_i2c_algo_template, |
347 | .class = I2C_CLASS_TV_ANALOG, | ||
348 | .client_register = attach_inform, | ||
349 | .client_unregister = detach_inform, | ||
350 | }; | 288 | }; |
351 | 289 | ||
352 | static struct i2c_client cx23885_i2c_client_template = { | 290 | static struct i2c_client cx23885_i2c_client_template = { |
@@ -410,8 +348,11 @@ int cx23885_i2c_register(struct cx23885_i2c *bus) | |||
410 | 348 | ||
411 | if (0 == bus->i2c_rc) { | 349 | if (0 == bus->i2c_rc) { |
412 | dprintk(1, "%s: i2c bus %d registered\n", dev->name, bus->nr); | 350 | dprintk(1, "%s: i2c bus %d registered\n", dev->name, bus->nr); |
413 | if (i2c_scan) | 351 | if (i2c_scan) { |
352 | printk(KERN_INFO "%s: scan bus %d:\n", | ||
353 | dev->name, bus->nr); | ||
414 | do_i2c_scan(dev->name, &bus->i2c_client); | 354 | do_i2c_scan(dev->name, &bus->i2c_client); |
355 | } | ||
415 | } else | 356 | } else |
416 | printk(KERN_WARNING "%s: i2c bus %d register FAILED\n", | 357 | printk(KERN_WARNING "%s: i2c bus %d register FAILED\n", |
417 | dev->name, bus->nr); | 358 | dev->name, bus->nr); |
diff --git a/drivers/media/video/cx23885/cx23885-video.c b/drivers/media/video/cx23885/cx23885-video.c index 1596f4ff3dfe..f0ac62c5dc83 100644 --- a/drivers/media/video/cx23885/cx23885-video.c +++ b/drivers/media/video/cx23885/cx23885-video.c | |||
@@ -299,11 +299,7 @@ static int cx23885_set_tvnorm(struct cx23885_dev *dev, v4l2_std_id norm) | |||
299 | 299 | ||
300 | dev->tvnorm = norm; | 300 | dev->tvnorm = norm; |
301 | 301 | ||
302 | /* Tell the analog tuner/demods */ | 302 | call_all(dev, tuner, s_std, norm); |
303 | cx23885_call_i2c_clients(&dev->i2c_bus[1], VIDIOC_S_STD, &norm); | ||
304 | |||
305 | /* Tell the internal A/V decoder */ | ||
306 | cx23885_call_i2c_clients(&dev->i2c_bus[2], VIDIOC_S_STD, &norm); | ||
307 | 303 | ||
308 | return 0; | 304 | return 0; |
309 | } | 305 | } |
@@ -410,8 +406,7 @@ static int cx23885_video_mux(struct cx23885_dev *dev, unsigned int input) | |||
410 | route.input = INPUT(input)->vmux; | 406 | route.input = INPUT(input)->vmux; |
411 | 407 | ||
412 | /* Tell the internal A/V decoder */ | 408 | /* Tell the internal A/V decoder */ |
413 | cx23885_call_i2c_clients(&dev->i2c_bus[2], | 409 | v4l2_subdev_call(dev->sd_cx25840, video, s_routing, &route); |
414 | VIDIOC_INT_S_VIDEO_ROUTING, &route); | ||
415 | 410 | ||
416 | return 0; | 411 | return 0; |
417 | } | 412 | } |
@@ -887,7 +882,7 @@ static int cx23885_get_control(struct cx23885_dev *dev, | |||
887 | struct v4l2_control *ctl) | 882 | struct v4l2_control *ctl) |
888 | { | 883 | { |
889 | dprintk(1, "%s() calling cx25840(VIDIOC_G_CTRL)\n", __func__); | 884 | dprintk(1, "%s() calling cx25840(VIDIOC_G_CTRL)\n", __func__); |
890 | cx23885_call_i2c_clients(&dev->i2c_bus[2], VIDIOC_G_CTRL, ctl); | 885 | call_all(dev, core, g_ctrl, ctl); |
891 | return 0; | 886 | return 0; |
892 | } | 887 | } |
893 | 888 | ||
@@ -1001,7 +996,7 @@ static int vidioc_s_fmt_vid_cap(struct file *file, void *priv, | |||
1001 | fh->vidq.field = f->fmt.pix.field; | 996 | fh->vidq.field = f->fmt.pix.field; |
1002 | dprintk(2, "%s() width=%d height=%d field=%d\n", __func__, | 997 | dprintk(2, "%s() width=%d height=%d field=%d\n", __func__, |
1003 | fh->width, fh->height, fh->vidq.field); | 998 | fh->width, fh->height, fh->vidq.field); |
1004 | cx23885_call_i2c_clients(&dev->i2c_bus[2], VIDIOC_S_FMT, f); | 999 | call_all(dev, video, s_fmt, f); |
1005 | return 0; | 1000 | return 0; |
1006 | } | 1001 | } |
1007 | 1002 | ||
@@ -1281,7 +1276,7 @@ static int vidioc_g_frequency(struct file *file, void *priv, | |||
1281 | f->type = fh->radio ? V4L2_TUNER_RADIO : V4L2_TUNER_ANALOG_TV; | 1276 | f->type = fh->radio ? V4L2_TUNER_RADIO : V4L2_TUNER_ANALOG_TV; |
1282 | f->frequency = dev->freq; | 1277 | f->frequency = dev->freq; |
1283 | 1278 | ||
1284 | cx23885_call_i2c_clients(&dev->i2c_bus[1], VIDIOC_G_FREQUENCY, f); | 1279 | call_all(dev, tuner, g_frequency, f); |
1285 | 1280 | ||
1286 | return 0; | 1281 | return 0; |
1287 | } | 1282 | } |
@@ -1296,7 +1291,7 @@ static int cx23885_set_freq(struct cx23885_dev *dev, struct v4l2_frequency *f) | |||
1296 | mutex_lock(&dev->lock); | 1291 | mutex_lock(&dev->lock); |
1297 | dev->freq = f->frequency; | 1292 | dev->freq = f->frequency; |
1298 | 1293 | ||
1299 | cx23885_call_i2c_clients(&dev->i2c_bus[1], VIDIOC_S_FREQUENCY, f); | 1294 | call_all(dev, tuner, s_frequency, f); |
1300 | 1295 | ||
1301 | /* When changing channels it is required to reset TVAUDIO */ | 1296 | /* When changing channels it is required to reset TVAUDIO */ |
1302 | msleep(10); | 1297 | msleep(10); |
@@ -1330,7 +1325,7 @@ static int vidioc_g_register(struct file *file, void *fh, | |||
1330 | if (!v4l2_chip_match_host(®->match)) | 1325 | if (!v4l2_chip_match_host(®->match)) |
1331 | return -EINVAL; | 1326 | return -EINVAL; |
1332 | 1327 | ||
1333 | cx23885_call_i2c_clients(&dev->i2c_bus[2], VIDIOC_DBG_G_REGISTER, reg); | 1328 | call_all(dev, core, g_register, reg); |
1334 | 1329 | ||
1335 | return 0; | 1330 | return 0; |
1336 | } | 1331 | } |
@@ -1343,7 +1338,7 @@ static int vidioc_s_register(struct file *file, void *fh, | |||
1343 | if (!v4l2_chip_match_host(®->match)) | 1338 | if (!v4l2_chip_match_host(®->match)) |
1344 | return -EINVAL; | 1339 | return -EINVAL; |
1345 | 1340 | ||
1346 | cx23885_call_i2c_clients(&dev->i2c_bus[2], VIDIOC_DBG_S_REGISTER, reg); | 1341 | call_all(dev, core, s_register, reg); |
1347 | 1342 | ||
1348 | return 0; | 1343 | return 0; |
1349 | } | 1344 | } |
@@ -1524,6 +1519,26 @@ int cx23885_video_register(struct cx23885_dev *dev) | |||
1524 | /* Don't enable VBI yet */ | 1519 | /* Don't enable VBI yet */ |
1525 | cx_set(PCI_INT_MSK, 1); | 1520 | cx_set(PCI_INT_MSK, 1); |
1526 | 1521 | ||
1522 | if (TUNER_ABSENT != dev->tuner_type) { | ||
1523 | struct v4l2_subdev *sd = NULL; | ||
1524 | |||
1525 | if (dev->tuner_addr) | ||
1526 | sd = v4l2_i2c_new_subdev(&dev->i2c_bus[1].i2c_adap, | ||
1527 | "tuner", "tuner", dev->tuner_addr); | ||
1528 | else | ||
1529 | sd = v4l2_i2c_new_probed_subdev(&dev->i2c_bus[1].i2c_adap, | ||
1530 | "tuner", "tuner", v4l2_i2c_tuner_addrs(ADDRS_TV)); | ||
1531 | if (sd) { | ||
1532 | struct tuner_setup tun_setup; | ||
1533 | |||
1534 | tun_setup.mode_mask = T_ANALOG_TV; | ||
1535 | tun_setup.type = dev->tuner_type; | ||
1536 | tun_setup.addr = v4l2_i2c_subdev_addr(sd); | ||
1537 | |||
1538 | v4l2_subdev_call(sd, tuner, s_type_addr, &tun_setup); | ||
1539 | } | ||
1540 | } | ||
1541 | |||
1527 | 1542 | ||
1528 | /* register v4l devices */ | 1543 | /* register v4l devices */ |
1529 | dev->video_dev = cx23885_vdev_init(dev, dev->pci, | 1544 | dev->video_dev = cx23885_vdev_init(dev, dev->pci, |
diff --git a/drivers/media/video/cx23885/cx23885.h b/drivers/media/video/cx23885/cx23885.h index ba57643f1198..02d980a29962 100644 --- a/drivers/media/video/cx23885/cx23885.h +++ b/drivers/media/video/cx23885/cx23885.h | |||
@@ -323,6 +323,7 @@ struct cx23885_dev { | |||
323 | unsigned int radio_type; | 323 | unsigned int radio_type; |
324 | unsigned char radio_addr; | 324 | unsigned char radio_addr; |
325 | unsigned int has_radio; | 325 | unsigned int has_radio; |
326 | struct v4l2_subdev *sd_cx25840; | ||
326 | 327 | ||
327 | /* V4l */ | 328 | /* V4l */ |
328 | u32 freq; | 329 | u32 freq; |
@@ -348,6 +349,9 @@ static inline struct cx23885_dev *to_cx23885(struct v4l2_device *v4l2_dev) | |||
348 | return container_of(v4l2_dev, struct cx23885_dev, v4l2_dev); | 349 | return container_of(v4l2_dev, struct cx23885_dev, v4l2_dev); |
349 | } | 350 | } |
350 | 351 | ||
352 | #define call_all(dev, o, f, args...) \ | ||
353 | v4l2_device_call_all(&dev->v4l2_dev, 0, o, f, ##args) | ||
354 | |||
351 | extern struct list_head cx23885_devlist; | 355 | extern struct list_head cx23885_devlist; |
352 | 356 | ||
353 | #define SRAM_CH01 0 /* Video A */ | 357 | #define SRAM_CH01 0 /* Video A */ |
@@ -464,8 +468,6 @@ extern struct videobuf_queue_ops cx23885_vbi_qops; | |||
464 | /* cx23885-i2c.c */ | 468 | /* cx23885-i2c.c */ |
465 | extern int cx23885_i2c_register(struct cx23885_i2c *bus); | 469 | extern int cx23885_i2c_register(struct cx23885_i2c *bus); |
466 | extern int cx23885_i2c_unregister(struct cx23885_i2c *bus); | 470 | extern int cx23885_i2c_unregister(struct cx23885_i2c *bus); |
467 | extern void cx23885_call_i2c_clients(struct cx23885_i2c *bus, unsigned int cmd, | ||
468 | void *arg); | ||
469 | extern void cx23885_av_clk(struct cx23885_dev *dev, int enable); | 471 | extern void cx23885_av_clk(struct cx23885_dev *dev, int enable); |
470 | 472 | ||
471 | /* ----------------------------------------------------------- */ | 473 | /* ----------------------------------------------------------- */ |