aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/pvrusb2/pvrusb2-video-v4l.c
diff options
context:
space:
mode:
authorMike Isely <isely@pobox.com>2009-03-08 17:47:47 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2009-03-30 11:43:39 -0400
commit5a3bab8eb02f9413b802540530ea390d8d063e43 (patch)
tree70f29f62325b7ced90612f30909ddd0c7bc03e49 /drivers/media/video/pvrusb2/pvrusb2-video-v4l.c
parent2eb563b7e726b517ef86213df436f50ec6c1740c (diff)
V4L/DVB (11204): pvrusb2: Remove old i2c layer; we use v4l2-subdev now
This change removes the old i2c module controlling layer from the pvrusb2 driver. This is code that first had appeared in the driver back in December 2005. It's history. Now we use v4l2-subdev. Please note also that with this change, the driver will no longer be usable in kernels older that 2.6.22. Signed-off-by: Mike Isely <isely@pobox.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/pvrusb2/pvrusb2-video-v4l.c')
-rw-r--r--drivers/media/video/pvrusb2/pvrusb2-video-v4l.c186
1 files changed, 0 insertions, 186 deletions
diff --git a/drivers/media/video/pvrusb2/pvrusb2-video-v4l.c b/drivers/media/video/pvrusb2/pvrusb2-video-v4l.c
index 4e0c0881b7b1..ce8332dd9cc9 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-video-v4l.c
+++ b/drivers/media/video/pvrusb2/pvrusb2-video-v4l.c
@@ -30,7 +30,6 @@
30#include "pvrusb2-video-v4l.h" 30#include "pvrusb2-video-v4l.h"
31 31
32 32
33#include "pvrusb2-i2c-cmd-v4l2.h"
34 33
35#include "pvrusb2-hdw-internal.h" 34#include "pvrusb2-hdw-internal.h"
36#include "pvrusb2-debug.h" 35#include "pvrusb2-debug.h"
@@ -62,191 +61,6 @@ static const struct routing_scheme routing_schemes[] = {
62 }, 61 },
63}; 62};
64 63
65struct pvr2_v4l_decoder {
66 struct pvr2_i2c_handler handler;
67 struct pvr2_decoder_ctrl ctrl;
68 struct pvr2_i2c_client *client;
69 struct pvr2_hdw *hdw;
70 unsigned long stale_mask;
71};
72
73
74
75static void set_input(struct pvr2_v4l_decoder *ctxt)
76{
77 struct pvr2_hdw *hdw = ctxt->hdw;
78 struct v4l2_routing route;
79 const struct routing_scheme *sp;
80 unsigned int sid = hdw->hdw_desc->signal_routing_scheme;
81
82 pvr2_trace(PVR2_TRACE_CHIPS,"i2c v4l2 set_input(%d)",hdw->input_val);
83
84 if ((sid < ARRAY_SIZE(routing_schemes)) &&
85 ((sp = routing_schemes + sid) != NULL) &&
86 (hdw->input_val >= 0) &&
87 (hdw->input_val < sp->cnt)) {
88 route.input = sp->def[hdw->input_val];
89 } else {
90 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
91 "*** WARNING *** i2c v4l2 set_input:"
92 " Invalid routing scheme (%u) and/or input (%d)",
93 sid,hdw->input_val);
94 return;
95 }
96
97 route.output = 0;
98 pvr2_i2c_client_cmd(ctxt->client,VIDIOC_INT_S_VIDEO_ROUTING,&route);
99}
100
101
102static int check_input(struct pvr2_v4l_decoder *ctxt)
103{
104 struct pvr2_hdw *hdw = ctxt->hdw;
105 return hdw->input_dirty != 0;
106}
107
108
109static void set_audio(struct pvr2_v4l_decoder *ctxt)
110{
111 u32 val;
112 struct pvr2_hdw *hdw = ctxt->hdw;
113
114 pvr2_trace(PVR2_TRACE_CHIPS,"i2c v4l2 set_audio %d",
115 hdw->srate_val);
116 switch (hdw->srate_val) {
117 default:
118 case V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000:
119 val = 48000;
120 break;
121 case V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100:
122 val = 44100;
123 break;
124 case V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000:
125 val = 32000;
126 break;
127 }
128 pvr2_i2c_client_cmd(ctxt->client,VIDIOC_INT_AUDIO_CLOCK_FREQ,&val);
129}
130
131
132static int check_audio(struct pvr2_v4l_decoder *ctxt)
133{
134 struct pvr2_hdw *hdw = ctxt->hdw;
135 return hdw->srate_dirty != 0;
136}
137
138
139struct pvr2_v4l_decoder_ops {
140 void (*update)(struct pvr2_v4l_decoder *);
141 int (*check)(struct pvr2_v4l_decoder *);
142};
143
144
145static const struct pvr2_v4l_decoder_ops decoder_ops[] = {
146 { .update = set_input, .check = check_input},
147 { .update = set_audio, .check = check_audio},
148};
149
150
151static void decoder_detach(struct pvr2_v4l_decoder *ctxt)
152{
153 ctxt->client->handler = NULL;
154 pvr2_hdw_set_decoder(ctxt->hdw,NULL);
155 kfree(ctxt);
156}
157
158
159static int decoder_check(struct pvr2_v4l_decoder *ctxt)
160{
161 unsigned long msk;
162 unsigned int idx;
163
164 for (idx = 0; idx < ARRAY_SIZE(decoder_ops); idx++) {
165 msk = 1 << idx;
166 if (ctxt->stale_mask & msk) continue;
167 if (decoder_ops[idx].check(ctxt)) {
168 ctxt->stale_mask |= msk;
169 }
170 }
171 return ctxt->stale_mask != 0;
172}
173
174
175static void decoder_update(struct pvr2_v4l_decoder *ctxt)
176{
177 unsigned long msk;
178 unsigned int idx;
179
180 for (idx = 0; idx < ARRAY_SIZE(decoder_ops); idx++) {
181 msk = 1 << idx;
182 if (!(ctxt->stale_mask & msk)) continue;
183 ctxt->stale_mask &= ~msk;
184 decoder_ops[idx].update(ctxt);
185 }
186}
187
188
189static int decoder_detect(struct pvr2_i2c_client *cp)
190{
191 /* Attempt to query the decoder - let's see if it will answer */
192 struct v4l2_tuner vt;
193 int ret;
194
195 memset(&vt,0,sizeof(vt));
196 ret = pvr2_i2c_client_cmd(cp,VIDIOC_G_TUNER,&vt);
197 return ret == 0; /* Return true if it answered */
198}
199
200
201static void decoder_enable(struct pvr2_v4l_decoder *ctxt,int fl)
202{
203 pvr2_trace(PVR2_TRACE_CHIPS,"i2c v4l2 decoder_enable(%d)",fl);
204 pvr2_v4l2_cmd_stream(ctxt->client,fl);
205}
206
207
208static unsigned int decoder_describe(struct pvr2_v4l_decoder *ctxt,char *buf,unsigned int cnt)
209{
210 return scnprintf(buf,cnt,"handler: pvrusb2-video-v4l");
211}
212
213
214static const struct pvr2_i2c_handler_functions hfuncs = {
215 .detach = (void (*)(void *))decoder_detach,
216 .check = (int (*)(void *))decoder_check,
217 .update = (void (*)(void *))decoder_update,
218 .describe = (unsigned int (*)(void *,char *,unsigned int))decoder_describe,
219};
220
221
222int pvr2_i2c_decoder_v4l_setup(struct pvr2_hdw *hdw,
223 struct pvr2_i2c_client *cp)
224{
225 struct pvr2_v4l_decoder *ctxt;
226
227 if (hdw->decoder_ctrl) return 0;
228 if (cp->handler) return 0;
229 if (!decoder_detect(cp)) return 0;
230
231 ctxt = kzalloc(sizeof(*ctxt),GFP_KERNEL);
232 if (!ctxt) return 0;
233
234 ctxt->handler.func_data = ctxt;
235 ctxt->handler.func_table = &hfuncs;
236 ctxt->ctrl.ctxt = ctxt;
237 ctxt->ctrl.detach = (void (*)(void *))decoder_detach;
238 ctxt->ctrl.enable = (void (*)(void *,int))decoder_enable;
239 ctxt->client = cp;
240 ctxt->hdw = hdw;
241 ctxt->stale_mask = (1 << ARRAY_SIZE(decoder_ops)) - 1;
242 pvr2_hdw_set_decoder(hdw,&ctxt->ctrl);
243 cp->handler = &ctxt->handler;
244 pvr2_trace(PVR2_TRACE_CHIPS,"i2c 0x%x saa711x V4L2 handler set up",
245 cp->client->addr);
246 return !0;
247}
248
249
250void pvr2_saa7115_subdev_update(struct pvr2_hdw *hdw, struct v4l2_subdev *sd) 64void pvr2_saa7115_subdev_update(struct pvr2_hdw *hdw, struct v4l2_subdev *sd)
251{ 65{
252 if (hdw->input_dirty || hdw->force_dirty) { 66 if (hdw->input_dirty || hdw->force_dirty) {