diff options
Diffstat (limited to 'drivers/media/video/saa7127.c')
-rw-r--r-- | drivers/media/video/saa7127.c | 43 |
1 files changed, 18 insertions, 25 deletions
diff --git a/drivers/media/video/saa7127.c b/drivers/media/video/saa7127.c index 992c71774f30..133f9e5252fe 100644 --- a/drivers/media/video/saa7127.c +++ b/drivers/media/video/saa7127.c | |||
@@ -54,6 +54,7 @@ | |||
54 | #include <linux/i2c.h> | 54 | #include <linux/i2c.h> |
55 | #include <linux/videodev2.h> | 55 | #include <linux/videodev2.h> |
56 | #include <media/v4l2-common.h> | 56 | #include <media/v4l2-common.h> |
57 | #include <media/saa7127.h> | ||
57 | 58 | ||
58 | static int debug = 0; | 59 | static int debug = 0; |
59 | static int test_image = 0; | 60 | static int test_image = 0; |
@@ -222,22 +223,6 @@ static struct i2c_reg_value saa7127_init_config_50hz[] = { | |||
222 | { 0, 0 } | 223 | { 0, 0 } |
223 | }; | 224 | }; |
224 | 225 | ||
225 | /* Enumeration for the Supported input types */ | ||
226 | enum saa7127_input_type { | ||
227 | SAA7127_INPUT_TYPE_NORMAL, | ||
228 | SAA7127_INPUT_TYPE_TEST_IMAGE | ||
229 | }; | ||
230 | |||
231 | /* Enumeration for the Supported Output signal types */ | ||
232 | enum saa7127_output_type { | ||
233 | SAA7127_OUTPUT_TYPE_BOTH, | ||
234 | SAA7127_OUTPUT_TYPE_COMPOSITE, | ||
235 | SAA7127_OUTPUT_TYPE_SVIDEO, | ||
236 | SAA7127_OUTPUT_TYPE_RGB, | ||
237 | SAA7127_OUTPUT_TYPE_YUV_C, | ||
238 | SAA7127_OUTPUT_TYPE_YUV_V | ||
239 | }; | ||
240 | |||
241 | /* | 226 | /* |
242 | ********************************************************************** | 227 | ********************************************************************** |
243 | * | 228 | * |
@@ -561,7 +546,7 @@ static int saa7127_command(struct i2c_client *client, | |||
561 | { | 546 | { |
562 | struct saa7127_state *state = i2c_get_clientdata(client); | 547 | struct saa7127_state *state = i2c_get_clientdata(client); |
563 | struct v4l2_format *fmt = arg; | 548 | struct v4l2_format *fmt = arg; |
564 | int *iarg = arg; | 549 | struct v4l2_routing *route = arg; |
565 | 550 | ||
566 | switch (cmd) { | 551 | switch (cmd) { |
567 | case VIDIOC_S_STD: | 552 | case VIDIOC_S_STD: |
@@ -573,15 +558,23 @@ static int saa7127_command(struct i2c_client *client, | |||
573 | *(v4l2_std_id *)arg = state->std; | 558 | *(v4l2_std_id *)arg = state->std; |
574 | break; | 559 | break; |
575 | 560 | ||
576 | case VIDIOC_S_INPUT: | 561 | case VIDIOC_INT_G_VIDEO_ROUTING: |
577 | if (state->input_type == *iarg) | 562 | route->input = state->input_type; |
578 | break; | 563 | route->output = state->output_type; |
579 | return saa7127_set_input_type(client, *iarg); | 564 | break; |
580 | 565 | ||
581 | case VIDIOC_S_OUTPUT: | 566 | case VIDIOC_INT_S_VIDEO_ROUTING: |
582 | if (state->output_type == *iarg) | 567 | { |
583 | break; | 568 | int rc = 0; |
584 | return saa7127_set_output_type(client, *iarg); | 569 | |
570 | if (state->input_type != route->input) { | ||
571 | rc = saa7127_set_input_type(client, route->input); | ||
572 | } | ||
573 | if (rc == 0 && state->output_type != route->output) { | ||
574 | rc = saa7127_set_output_type(client, route->output); | ||
575 | } | ||
576 | return rc; | ||
577 | } | ||
585 | 578 | ||
586 | case VIDIOC_STREAMON: | 579 | case VIDIOC_STREAMON: |
587 | case VIDIOC_STREAMOFF: | 580 | case VIDIOC_STREAMOFF: |