diff options
author | Mike Isely <isely@pobox.com> | 2006-12-27 21:14:54 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@infradead.org> | 2007-02-21 10:34:24 -0500 |
commit | f5156b06acaad13b74f72bf62025de7b76b1b8a4 (patch) | |
tree | 0fafb526df9a1d3f3a982b04aa1538ae9992104a /drivers/media/video/pvrusb2 | |
parent | 98752102dccfd3f1bb3eac3d7833c9b38ac22fef (diff) |
V4L/DVB (5043): Pvrusb2: video standard broadcast fix for radio mode
Ensure we don't accidentally broadcast the standard while in radio mode.
Signed-off-by: Mike Isely <isely@pobox.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media/video/pvrusb2')
-rw-r--r-- | drivers/media/video/pvrusb2/pvrusb2-i2c-chips-v4l2.c | 5 | ||||
-rw-r--r-- | drivers/media/video/pvrusb2/pvrusb2-i2c-cmd-v4l2.c | 41 |
2 files changed, 10 insertions, 36 deletions
diff --git a/drivers/media/video/pvrusb2/pvrusb2-i2c-chips-v4l2.c b/drivers/media/video/pvrusb2/pvrusb2-i2c-chips-v4l2.c index 93b8d077c11e..05121666b9ba 100644 --- a/drivers/media/video/pvrusb2/pvrusb2-i2c-chips-v4l2.c +++ b/drivers/media/video/pvrusb2/pvrusb2-i2c-chips-v4l2.c | |||
@@ -39,7 +39,6 @@ | |||
39 | #define OP_AUDIORATE 4 | 39 | #define OP_AUDIORATE 4 |
40 | #define OP_SIZE 5 | 40 | #define OP_SIZE 5 |
41 | #define OP_LOG 6 | 41 | #define OP_LOG 6 |
42 | #define OP_RADIO 7 | ||
43 | 42 | ||
44 | static const struct pvr2_i2c_op * const ops[] = { | 43 | static const struct pvr2_i2c_op * const ops[] = { |
45 | [OP_STANDARD] = &pvr2_i2c_op_v4l2_standard, | 44 | [OP_STANDARD] = &pvr2_i2c_op_v4l2_standard, |
@@ -48,7 +47,6 @@ static const struct pvr2_i2c_op * const ops[] = { | |||
48 | [OP_FREQ] = &pvr2_i2c_op_v4l2_frequency, | 47 | [OP_FREQ] = &pvr2_i2c_op_v4l2_frequency, |
49 | [OP_SIZE] = &pvr2_i2c_op_v4l2_size, | 48 | [OP_SIZE] = &pvr2_i2c_op_v4l2_size, |
50 | [OP_LOG] = &pvr2_i2c_op_v4l2_log, | 49 | [OP_LOG] = &pvr2_i2c_op_v4l2_log, |
51 | [OP_RADIO] = &pvr2_i2c_op_v4l2_radio, | ||
52 | }; | 50 | }; |
53 | 51 | ||
54 | void pvr2_i2c_probe(struct pvr2_hdw *hdw,struct pvr2_i2c_client *cp) | 52 | void pvr2_i2c_probe(struct pvr2_hdw *hdw,struct pvr2_i2c_client *cp) |
@@ -60,8 +58,7 @@ void pvr2_i2c_probe(struct pvr2_hdw *hdw,struct pvr2_i2c_client *cp) | |||
60 | (1 << OP_VOLUME) | | 58 | (1 << OP_VOLUME) | |
61 | (1 << OP_FREQ) | | 59 | (1 << OP_FREQ) | |
62 | (1 << OP_SIZE) | | 60 | (1 << OP_SIZE) | |
63 | (1 << OP_LOG) | | 61 | (1 << OP_LOG)); |
64 | (1 << OP_RADIO)); | ||
65 | 62 | ||
66 | if (id == I2C_DRIVERID_MSP3400) { | 63 | if (id == I2C_DRIVERID_MSP3400) { |
67 | if (pvr2_i2c_msp3400_setup(hdw,cp)) { | 64 | if (pvr2_i2c_msp3400_setup(hdw,cp)) { |
diff --git a/drivers/media/video/pvrusb2/pvrusb2-i2c-cmd-v4l2.c b/drivers/media/video/pvrusb2/pvrusb2-i2c-cmd-v4l2.c index 98731c4f7df4..8d66ab144281 100644 --- a/drivers/media/video/pvrusb2/pvrusb2-i2c-cmd-v4l2.c +++ b/drivers/media/video/pvrusb2/pvrusb2-i2c-cmd-v4l2.c | |||
@@ -28,18 +28,21 @@ | |||
28 | 28 | ||
29 | static void set_standard(struct pvr2_hdw *hdw) | 29 | static void set_standard(struct pvr2_hdw *hdw) |
30 | { | 30 | { |
31 | v4l2_std_id vs; | 31 | pvr2_trace(PVR2_TRACE_CHIPS,"i2c v4l2 set_standard"); |
32 | vs = hdw->std_mask_cur; | ||
33 | pvr2_trace(PVR2_TRACE_CHIPS, | ||
34 | "i2c v4l2 set_standard(0x%llx)",(long long unsigned)vs); | ||
35 | 32 | ||
36 | pvr2_i2c_core_cmd(hdw,VIDIOC_S_STD,&vs); | 33 | if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) { |
34 | pvr2_i2c_core_cmd(hdw,AUDC_SET_RADIO,NULL); | ||
35 | } else { | ||
36 | v4l2_std_id vs; | ||
37 | vs = hdw->std_mask_cur; | ||
38 | pvr2_i2c_core_cmd(hdw,VIDIOC_S_STD,&vs); | ||
39 | } | ||
37 | } | 40 | } |
38 | 41 | ||
39 | 42 | ||
40 | static int check_standard(struct pvr2_hdw *hdw) | 43 | static int check_standard(struct pvr2_hdw *hdw) |
41 | { | 44 | { |
42 | return hdw->std_dirty != 0; | 45 | return (hdw->input_dirty != 0) || (hdw->std_dirty != 0); |
43 | } | 46 | } |
44 | 47 | ||
45 | 48 | ||
@@ -50,32 +53,6 @@ const struct pvr2_i2c_op pvr2_i2c_op_v4l2_standard = { | |||
50 | }; | 53 | }; |
51 | 54 | ||
52 | 55 | ||
53 | static void set_radio(struct pvr2_hdw *hdw) | ||
54 | { | ||
55 | pvr2_trace(PVR2_TRACE_CHIPS, | ||
56 | "i2c v4l2 set_radio()"); | ||
57 | |||
58 | if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) { | ||
59 | pvr2_i2c_core_cmd(hdw,AUDC_SET_RADIO,NULL); | ||
60 | } else { | ||
61 | set_standard(hdw); | ||
62 | } | ||
63 | } | ||
64 | |||
65 | |||
66 | static int check_radio(struct pvr2_hdw *hdw) | ||
67 | { | ||
68 | return hdw->input_dirty != 0; | ||
69 | } | ||
70 | |||
71 | |||
72 | const struct pvr2_i2c_op pvr2_i2c_op_v4l2_radio = { | ||
73 | .check = check_radio, | ||
74 | .update = set_radio, | ||
75 | .name = "v4l2_radio", | ||
76 | }; | ||
77 | |||
78 | |||
79 | static void set_bcsh(struct pvr2_hdw *hdw) | 56 | static void set_bcsh(struct pvr2_hdw *hdw) |
80 | { | 57 | { |
81 | struct v4l2_control ctrl; | 58 | struct v4l2_control ctrl; |