]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/media/video/cx88/cx88-video.c
V4L/DVB (11300): cx88: convert to v4l2_subdev.
[linux-2.6-omap-h63xx.git] / drivers / media / video / cx88 / cx88-video.c
index 5b0fbc602f3efe9bc774debfb6a341fc3ad4b4f2..434237af5184ec99632b454a195affc62a2ce78d 100644 (file)
@@ -431,8 +431,7 @@ int cx88_video_mux(struct cx88_core *core, unsigned int input)
                        struct v4l2_routing route;
 
                        route.input = INPUT(input).audioroute;
-                       cx88_call_i2c_clients(core,
-                               VIDIOC_INT_S_AUDIO_ROUTING, &route);
+                       call_all(core, audio, s_routing, &route);
                }
                /* cx2388's C-ADC is connected to the tuner only.
                   When used with S-Video, that ADC is busy dealing with
@@ -827,8 +826,7 @@ static int video_open(struct file *file)
                                struct v4l2_routing route;
 
                                route.input = core->board.radio.audioroute;
-                               cx88_call_i2c_clients(core,
-                                       VIDIOC_INT_S_AUDIO_ROUTING, &route);
+                               call_all(core, audio, s_routing, &route);
                        }
                        /* "I2S ADC mode" */
                        core->tvaudio = WW_I2SADC;
@@ -839,7 +837,7 @@ static int video_open(struct file *file)
                        cx88_set_tvaudio(core);
                        cx88_set_stereo(core,V4L2_TUNER_MODE_STEREO,1);
                }
-               cx88_call_i2c_clients(core,AUDC_SET_RADIO,NULL);
+               call_all(core, tuner, s_radio);
        }
        unlock_kernel();
 
@@ -933,7 +931,7 @@ static int video_release(struct file *file)
        kfree(fh);
 
        if(atomic_dec_and_test(&dev->core->users))
-               cx88_call_i2c_clients (dev->core, TUNER_SET_STANDBY, NULL);
+               call_all(dev->core, core, s_standby, 0);
 
        return 0;
 }
@@ -1395,7 +1393,7 @@ static int vidioc_g_frequency (struct file *file, void *priv,
        f->type = fh->radio ? V4L2_TUNER_RADIO : V4L2_TUNER_ANALOG_TV;
        f->frequency = core->freq;
 
-       cx88_call_i2c_clients(core,VIDIOC_G_FREQUENCY,f);
+       call_all(core, tuner, g_frequency, f);
 
        return 0;
 }
@@ -1411,7 +1409,7 @@ int cx88_set_freq (struct cx88_core  *core,
        mutex_lock(&core->lock);
        core->freq = f->frequency;
        cx88_newstation(core);
-       cx88_call_i2c_clients(core,VIDIOC_S_FREQUENCY,f);
+       call_all(core, tuner, s_frequency, f);
 
        /* When changing channels it is required to reset TVAUDIO */
        msleep (10);
@@ -1493,7 +1491,7 @@ static int radio_g_tuner (struct file *file, void *priv,
        strcpy(t->name, "Radio");
        t->type = V4L2_TUNER_RADIO;
 
-       cx88_call_i2c_clients(core,VIDIOC_G_TUNER,t);
+       call_all(core, tuner, g_tuner, t);
        return 0;
 }
 
@@ -1527,7 +1525,7 @@ static int radio_s_tuner (struct file *file, void *priv,
        if (0 != t->index)
                return -EINVAL;
 
-       cx88_call_i2c_clients(core,VIDIOC_S_TUNER,t);
+       call_all(core, tuner, s_tuner, t);
 
        return 0;
 }
@@ -1884,12 +1882,30 @@ static int __devinit cx8800_initdev(struct pci_dev *pci_dev,
        /* load and configure helper modules */
 
        if (core->board.audio_chip == V4L2_IDENT_WM8775)
-               request_module("wm8775");
+               v4l2_i2c_new_subdev(&core->i2c_adap,
+                               "wm8775", "wm8775", 0x36 >> 1);
+
+       if (core->board.audio_chip == V4L2_IDENT_TVAUDIO) {
+               /* This probes for a tda9874 as is used on some
+                  Pixelview Ultra boards. */
+               static const unsigned short i2c_addr[] = {
+                       0xb0 >> 1, I2C_CLIENT_END
+               };
+
+               v4l2_i2c_new_probed_subdev(&core->i2c_adap,
+                               "tvaudio", "tvaudio", i2c_addr);
+       }
 
        switch (core->boardnr) {
        case CX88_BOARD_DVICO_FUSIONHDTV_5_GOLD:
-       case CX88_BOARD_DVICO_FUSIONHDTV_7_GOLD:
+       case CX88_BOARD_DVICO_FUSIONHDTV_7_GOLD: {
+               static struct i2c_board_info rtc_info = {
+                       I2C_BOARD_INFO("isl1208", 0x6f)
+               };
+
                request_module("rtc-isl1208");
+               core->i2c_rtc = i2c_new_device(&core->i2c_adap, &rtc_info);
+       }
                /* break intentionally omitted */
        case CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO:
                request_module("ir-kbd-i2c");