Lines Matching refs:s
141 static bool block_from_buf(struct saa6588 *s, unsigned char *buf) in block_from_buf() argument
145 if (s->rd_index == s->wr_index) { in block_from_buf()
153 for (i = s->rd_index; i < s->rd_index + 3; i++) in block_from_buf()
154 dprintk("0x%02x ", s->buffer[i]); in block_from_buf()
157 memcpy(buf, &s->buffer[s->rd_index], 3); in block_from_buf()
159 s->rd_index += 3; in block_from_buf()
160 if (s->rd_index >= s->buf_size) in block_from_buf()
161 s->rd_index = 0; in block_from_buf()
162 s->block_count--; in block_from_buf()
165 dprintk("%d blocks total.\n", s->block_count); in block_from_buf()
170 static void read_from_buf(struct saa6588 *s, struct saa6588_command *a) in read_from_buf() argument
182 while (!a->nonblocking && !s->data_available_for_read) { in read_from_buf()
183 int ret = wait_event_interruptible(s->read_queue, in read_from_buf()
184 s->data_available_for_read); in read_from_buf()
192 spin_lock_irqsave(&s->lock, flags); in read_from_buf()
193 if (rd_blocks > s->block_count) in read_from_buf()
194 rd_blocks = s->block_count; in read_from_buf()
195 spin_unlock_irqrestore(&s->lock, flags); in read_from_buf()
203 spin_lock_irqsave(&s->lock, flags); in read_from_buf()
204 got_block = block_from_buf(s, buf); in read_from_buf()
205 spin_unlock_irqrestore(&s->lock, flags); in read_from_buf()
215 spin_lock_irqsave(&s->lock, flags); in read_from_buf()
216 s->data_available_for_read = (s->block_count > 0); in read_from_buf()
217 spin_unlock_irqrestore(&s->lock, flags); in read_from_buf()
220 static void block_to_buf(struct saa6588 *s, unsigned char *blockbuf) in block_to_buf() argument
230 s->buffer[s->wr_index] = blockbuf[i]; in block_to_buf()
231 s->wr_index++; in block_to_buf()
234 if (s->wr_index >= s->buf_size) in block_to_buf()
235 s->wr_index = 0; in block_to_buf()
237 if (s->wr_index == s->rd_index) { in block_to_buf()
238 s->rd_index += 3; in block_to_buf()
239 if (s->rd_index >= s->buf_size) in block_to_buf()
240 s->rd_index = 0; in block_to_buf()
242 s->block_count++; in block_to_buf()
245 dprintk("%d blocks total.\n", s->block_count); in block_to_buf()
248 static void saa6588_i2c_poll(struct saa6588 *s) in saa6588_i2c_poll() argument
250 struct i2c_client *client = v4l2_get_subdevdata(&s->sd); in saa6588_i2c_poll()
264 s->sync = tmpbuf[0] & 0x10; in saa6588_i2c_poll()
265 if (!s->sync) in saa6588_i2c_poll()
268 if (blocknum == s->last_blocknum) { in saa6588_i2c_poll()
274 s->last_blocknum = blocknum; in saa6588_i2c_poll()
311 spin_lock_irqsave(&s->lock, flags); in saa6588_i2c_poll()
312 block_to_buf(s, tmpbuf); in saa6588_i2c_poll()
313 spin_unlock_irqrestore(&s->lock, flags); in saa6588_i2c_poll()
314 s->data_available_for_read = 1; in saa6588_i2c_poll()
315 wake_up_interruptible(&s->read_queue); in saa6588_i2c_poll()
320 struct saa6588 *s = container_of(work, struct saa6588, work.work); in saa6588_work() local
322 saa6588_i2c_poll(s); in saa6588_work()
323 schedule_delayed_work(&s->work, msecs_to_jiffies(20)); in saa6588_work()
326 static void saa6588_configure(struct saa6588 *s) in saa6588_configure() argument
328 struct i2c_client *client = v4l2_get_subdevdata(&s->sd); in saa6588_configure()
385 struct saa6588 *s = to_saa6588(sd); in saa6588_command() local
391 s->data_available_for_read = 1; in saa6588_command()
392 wake_up_interruptible(&s->read_queue); in saa6588_command()
393 s->data_available_for_read = 0; in saa6588_command()
398 read_from_buf(s, a); in saa6588_command()
403 if (s->data_available_for_read) in saa6588_command()
405 poll_wait(a->instance, &s->read_queue, a->event_list); in saa6588_command()
417 struct saa6588 *s = to_saa6588(sd); in saa6588_g_tuner() local
420 if (s->sync) in saa6588_g_tuner()
427 struct saa6588 *s = to_saa6588(sd); in saa6588_s_tuner() local
429 saa6588_configure(s); in saa6588_s_tuner()
454 struct saa6588 *s; in saa6588_probe() local
460 s = devm_kzalloc(&client->dev, sizeof(*s), GFP_KERNEL); in saa6588_probe()
461 if (s == NULL) in saa6588_probe()
464 s->buf_size = bufblocks * 3; in saa6588_probe()
466 s->buffer = devm_kzalloc(&client->dev, s->buf_size, GFP_KERNEL); in saa6588_probe()
467 if (s->buffer == NULL) in saa6588_probe()
469 sd = &s->sd; in saa6588_probe()
471 spin_lock_init(&s->lock); in saa6588_probe()
472 s->block_count = 0; in saa6588_probe()
473 s->wr_index = 0; in saa6588_probe()
474 s->rd_index = 0; in saa6588_probe()
475 s->last_blocknum = 0xff; in saa6588_probe()
476 init_waitqueue_head(&s->read_queue); in saa6588_probe()
477 s->data_available_for_read = 0; in saa6588_probe()
479 saa6588_configure(s); in saa6588_probe()
482 INIT_DELAYED_WORK(&s->work, saa6588_work); in saa6588_probe()
483 schedule_delayed_work(&s->work, 0); in saa6588_probe()
490 struct saa6588 *s = to_saa6588(sd); in saa6588_remove() local
494 cancel_delayed_work_sync(&s->work); in saa6588_remove()