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()
323 spin_lock_irqsave(&s->lock, flags); in saa6588_i2c_poll()
324 block_to_buf(s, tmpbuf); in saa6588_i2c_poll()
325 spin_unlock_irqrestore(&s->lock, flags); in saa6588_i2c_poll()
326 s->data_available_for_read = 1; in saa6588_i2c_poll()
327 wake_up_interruptible(&s->read_queue); in saa6588_i2c_poll()
332 struct saa6588 *s = container_of(work, struct saa6588, work.work); in saa6588_work() local
334 saa6588_i2c_poll(s); in saa6588_work()
335 schedule_delayed_work(&s->work, msecs_to_jiffies(20)); in saa6588_work()
338 static void saa6588_configure(struct saa6588 *s) in saa6588_configure() argument
340 struct i2c_client *client = v4l2_get_subdevdata(&s->sd); in saa6588_configure()
397 struct saa6588 *s = to_saa6588(sd); in saa6588_ioctl() local
403 s->data_available_for_read = 1; in saa6588_ioctl()
404 wake_up_interruptible(&s->read_queue); in saa6588_ioctl()
405 s->data_available_for_read = 0; in saa6588_ioctl()
410 read_from_buf(s, a); in saa6588_ioctl()
415 if (s->data_available_for_read) in saa6588_ioctl()
417 poll_wait(a->instance, &s->read_queue, a->event_list); in saa6588_ioctl()
429 struct saa6588 *s = to_saa6588(sd); in saa6588_g_tuner() local
432 if (s->sync) in saa6588_g_tuner()
439 struct saa6588 *s = to_saa6588(sd); in saa6588_s_tuner() local
441 saa6588_configure(s); in saa6588_s_tuner()
466 struct saa6588 *s; in saa6588_probe() local
472 s = devm_kzalloc(&client->dev, sizeof(*s), GFP_KERNEL); in saa6588_probe()
473 if (s == NULL) in saa6588_probe()
476 s->buf_size = bufblocks * 3; in saa6588_probe()
478 s->buffer = devm_kzalloc(&client->dev, s->buf_size, GFP_KERNEL); in saa6588_probe()
479 if (s->buffer == NULL) in saa6588_probe()
481 sd = &s->sd; in saa6588_probe()
483 spin_lock_init(&s->lock); in saa6588_probe()
484 s->block_count = 0; in saa6588_probe()
485 s->wr_index = 0; in saa6588_probe()
486 s->rd_index = 0; in saa6588_probe()
487 s->last_blocknum = 0xff; in saa6588_probe()
488 init_waitqueue_head(&s->read_queue); in saa6588_probe()
489 s->data_available_for_read = 0; in saa6588_probe()
491 saa6588_configure(s); in saa6588_probe()
494 INIT_DELAYED_WORK(&s->work, saa6588_work); in saa6588_probe()
495 schedule_delayed_work(&s->work, 0); in saa6588_probe()
502 struct saa6588 *s = to_saa6588(sd); in saa6588_remove() local
506 cancel_delayed_work_sync(&s->work); in saa6588_remove()