V4L/DVB (10433): cx18: Defer A/V core initialization until a valid cx18_av_cmd arrives
authorAndy Walls <awalls@radix.net>
Sat, 31 Jan 2009 01:21:45 +0000 (22:21 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Mon, 30 Mar 2009 15:42:38 +0000 (12:42 -0300)
Signed-off-by: Andy Walls <awalls@radix.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/cx18/cx18-av-core.c

index 780125002cbc77fade5ddb5f72e21ff1f302f5d4..db887a00862657e48b9df2d571cd02658a9bd351 100644 (file)
@@ -680,19 +680,45 @@ static int set_v4lfmt(struct cx18 *cx, struct v4l2_format *fmt)
 
 /* ----------------------------------------------------------------------- */
 
+static int valid_av_cmd(unsigned int cmd)
+{
+       switch (cmd) {
+               /* All commands supported by cx18_av_cmd() */
+               case VIDIOC_INT_DECODE_VBI_LINE:
+               case VIDIOC_INT_AUDIO_CLOCK_FREQ:
+               case VIDIOC_STREAMON:
+               case VIDIOC_STREAMOFF:
+               case VIDIOC_LOG_STATUS:
+               case VIDIOC_G_CTRL:
+               case VIDIOC_S_CTRL:
+               case VIDIOC_QUERYCTRL:
+               case VIDIOC_G_STD:
+               case VIDIOC_S_STD:
+               case AUDC_SET_RADIO:
+               case VIDIOC_INT_G_VIDEO_ROUTING:
+               case VIDIOC_INT_S_VIDEO_ROUTING:
+               case VIDIOC_INT_G_AUDIO_ROUTING:
+               case VIDIOC_INT_S_AUDIO_ROUTING:
+               case VIDIOC_S_FREQUENCY:
+               case VIDIOC_G_TUNER:
+               case VIDIOC_S_TUNER:
+               case VIDIOC_G_FMT:
+               case VIDIOC_S_FMT:
+               case VIDIOC_INT_RESET:
+                       return 1;
+               default:
+                       return 0;
+       }
+       return 0;
+}
+
 int cx18_av_cmd(struct cx18 *cx, unsigned int cmd, void *arg)
 {
        struct cx18_av_state *state = &cx->av_state;
        struct v4l2_tuner *vt = arg;
        struct v4l2_routing *route = arg;
 
-       /* ignore these commands */
-       switch (cmd) {
-       case TUNER_SET_TYPE_ADDR:
-               return 0;
-       }
-
-       if (!state->is_initialized) {
+       if (!state->is_initialized && valid_av_cmd(cmd)) {
                CX18_DEBUG_INFO("cmd %08x triggered fw load\n", cmd);
                /* initialize on first use */
                state->is_initialized = 1;