Lines Matching refs:s
153 static bool block_from_buf(struct saa6588 *s, unsigned char *buf) in block_from_buf() argument
157 if (s->rd_index == s->wr_index) { in block_from_buf()
165 for (i = s->rd_index; i < s->rd_index + 3; i++) in block_from_buf()
166 dprintk("0x%02x ", s->buffer[i]); in block_from_buf()
169 memcpy(buf, &s->buffer[s->rd_index], 3); in block_from_buf()
171 s->rd_index += 3; in block_from_buf()
172 if (s->rd_index >= s->buf_size) in block_from_buf()
173 s->rd_index = 0; in block_from_buf()
174 s->block_count--; in block_from_buf()
177 dprintk("%d blocks total.\n", s->block_count); in block_from_buf()
182 static void read_from_buf(struct saa6588 *s, struct saa6588_command *a) in read_from_buf() argument
194 while (!a->nonblocking && !s->data_available_for_read) { in read_from_buf()
195 int ret = wait_event_interruptible(s->read_queue, in read_from_buf()
196 s->data_available_for_read); in read_from_buf()
204 spin_lock_irqsave(&s->lock, flags); in read_from_buf()
205 if (rd_blocks > s->block_count) in read_from_buf()
206 rd_blocks = s->block_count; in read_from_buf()
207 spin_unlock_irqrestore(&s->lock, flags); in read_from_buf()
215 spin_lock_irqsave(&s->lock, flags); in read_from_buf()
216 got_block = block_from_buf(s, buf); in read_from_buf()
217 spin_unlock_irqrestore(&s->lock, flags); in read_from_buf()
227 spin_lock_irqsave(&s->lock, flags); in read_from_buf()
228 s->data_available_for_read = (s->block_count > 0); in read_from_buf()
229 spin_unlock_irqrestore(&s->lock, flags); in read_from_buf()
232 static void block_to_buf(struct saa6588 *s, unsigned char *blockbuf) in block_to_buf() argument
242 s->buffer[s->wr_index] = blockbuf[i]; in block_to_buf()
243 s->wr_index++; in block_to_buf()
246 if (s->wr_index >= s->buf_size) in block_to_buf()
247 s->wr_index = 0; in block_to_buf()
249 if (s->wr_index == s->rd_index) { in block_to_buf()
250 s->rd_index += 3; in block_to_buf()
251 if (s->rd_index >= s->buf_size) in block_to_buf()
252 s->rd_index = 0; in block_to_buf()
254 s->block_count++; in block_to_buf()
257 dprintk("%d blocks total.\n", s->block_count); in block_to_buf()
260 static void saa6588_i2c_poll(struct saa6588 *s) in saa6588_i2c_poll() argument
262 struct i2c_client *client = v4l2_get_subdevdata(&s->sd); in saa6588_i2c_poll()
276 s->sync = tmpbuf[0] & 0x10; in saa6588_i2c_poll()
277 if (!s->sync) in saa6588_i2c_poll()
280 if (blocknum == s->last_blocknum) { in saa6588_i2c_poll()
286 s->last_blocknum = blocknum; in saa6588_i2c_poll()
325 spin_lock_irqsave(&s->lock, flags); in saa6588_i2c_poll()
326 block_to_buf(s, tmpbuf); in saa6588_i2c_poll()
327 spin_unlock_irqrestore(&s->lock, flags); in saa6588_i2c_poll()
328 s->data_available_for_read = 1; in saa6588_i2c_poll()
329 wake_up_interruptible(&s->read_queue); in saa6588_i2c_poll()
334 struct saa6588 *s = container_of(work, struct saa6588, work.work); in saa6588_work() local
336 saa6588_i2c_poll(s); in saa6588_work()
337 schedule_delayed_work(&s->work, msecs_to_jiffies(20)); in saa6588_work()
340 static void saa6588_configure(struct saa6588 *s) in saa6588_configure() argument
342 struct i2c_client *client = v4l2_get_subdevdata(&s->sd); in saa6588_configure()
399 struct saa6588 *s = to_saa6588(sd); in saa6588_ioctl() local
405 s->data_available_for_read = 1; in saa6588_ioctl()
406 wake_up_interruptible(&s->read_queue); in saa6588_ioctl()
407 s->data_available_for_read = 0; in saa6588_ioctl()
412 read_from_buf(s, a); in saa6588_ioctl()
417 if (s->data_available_for_read) in saa6588_ioctl()
419 poll_wait(a->instance, &s->read_queue, a->event_list); in saa6588_ioctl()
431 struct saa6588 *s = to_saa6588(sd); in saa6588_g_tuner() local
434 if (s->sync) in saa6588_g_tuner()
441 struct saa6588 *s = to_saa6588(sd); in saa6588_s_tuner() local
443 saa6588_configure(s); in saa6588_s_tuner()
468 struct saa6588 *s; in saa6588_probe() local
474 s = devm_kzalloc(&client->dev, sizeof(*s), GFP_KERNEL); in saa6588_probe()
475 if (s == NULL) in saa6588_probe()
478 s->buf_size = bufblocks * 3; in saa6588_probe()
480 s->buffer = devm_kzalloc(&client->dev, s->buf_size, GFP_KERNEL); in saa6588_probe()
481 if (s->buffer == NULL) in saa6588_probe()
483 sd = &s->sd; in saa6588_probe()
485 spin_lock_init(&s->lock); in saa6588_probe()
486 s->block_count = 0; in saa6588_probe()
487 s->wr_index = 0; in saa6588_probe()
488 s->rd_index = 0; in saa6588_probe()
489 s->last_blocknum = 0xff; in saa6588_probe()
490 init_waitqueue_head(&s->read_queue); in saa6588_probe()
491 s->data_available_for_read = 0; in saa6588_probe()
493 saa6588_configure(s); in saa6588_probe()
496 INIT_DELAYED_WORK(&s->work, saa6588_work); in saa6588_probe()
497 schedule_delayed_work(&s->work, 0); in saa6588_probe()
504 struct saa6588 *s = to_saa6588(sd); in saa6588_remove() local
508 cancel_delayed_work_sync(&s->work); in saa6588_remove()