Lines Matching defs:radio
3 * drivers/media/radio/si470x/radio-si470x-common.c
83 * - blacklisted KWorld radio in hid-core.c and hid-ids.h
102 #include "radio-si470x.h"
179 static int si470x_set_band(struct si470x_device *radio, int band)
181 if (radio->band == band)
184 radio->band = band;
185 radio->registers[SYSCONFIG2] &= ~SYSCONFIG2_BAND;
186 radio->registers[SYSCONFIG2] |= radio->band << 6;
187 return radio->set_register(radio, SYSCONFIG2);
193 static int si470x_set_chan(struct si470x_device *radio, unsigned short chan)
199 retval = radio->get_register(radio, POWERCFG);
203 if ((radio->registers[POWERCFG] & (POWERCFG_ENABLE|POWERCFG_DMUTE))
209 radio->registers[CHANNEL] &= ~CHANNEL_CHAN;
210 radio->registers[CHANNEL] |= CHANNEL_TUNE | chan;
211 retval = radio->set_register(radio, CHANNEL);
216 reinit_completion(&radio->completion);
217 time_left = wait_for_completion_timeout(&radio->completion,
222 if ((radio->registers[STATUSRSSI] & STATUSRSSI_STC) == 0)
223 dev_warn(&radio->videodev.dev, "tune does not complete\n");
225 dev_warn(&radio->videodev.dev,
229 radio->registers[CHANNEL] &= ~CHANNEL_TUNE;
230 retval = radio->set_register(radio, CHANNEL);
239 static unsigned int si470x_get_step(struct si470x_device *radio)
242 switch ((radio->registers[SYSCONFIG2] & SYSCONFIG2_SPACE) >> 4) {
259 static int si470x_get_freq(struct si470x_device *radio, unsigned int *freq)
264 retval = radio->get_register(radio, READCHAN);
265 chan = radio->registers[READCHAN] & READCHAN_READCHAN;
268 *freq = chan * si470x_get_step(radio) + bands[radio->band].rangelow;
277 int si470x_set_freq(struct si470x_device *radio, unsigned int freq)
281 freq = clamp(freq, bands[radio->band].rangelow,
282 bands[radio->band].rangehigh);
284 chan = (freq - bands[radio->band].rangelow) / si470x_get_step(radio);
286 return si470x_set_chan(radio, chan);
294 static int si470x_set_seek(struct si470x_device *radio,
314 if (radio->band != band) {
315 retval = si470x_get_freq(radio, &freq);
318 retval = si470x_set_band(radio, band);
321 retval = si470x_set_freq(radio, freq);
327 radio->registers[POWERCFG] |= POWERCFG_SEEK;
329 radio->registers[POWERCFG] &= ~POWERCFG_SKMODE;
331 radio->registers[POWERCFG] |= POWERCFG_SKMODE;
333 radio->registers[POWERCFG] |= POWERCFG_SEEKUP;
335 radio->registers[POWERCFG] &= ~POWERCFG_SEEKUP;
336 retval = radio->set_register(radio, POWERCFG);
341 reinit_completion(&radio->completion);
342 time_left = wait_for_completion_timeout(&radio->completion,
347 if ((radio->registers[STATUSRSSI] & STATUSRSSI_STC) == 0)
348 dev_warn(&radio->videodev.dev, "seek does not complete\n");
349 if (radio->registers[STATUSRSSI] & STATUSRSSI_SF)
350 dev_warn(&radio->videodev.dev,
354 radio->registers[POWERCFG] &= ~POWERCFG_SEEK;
355 retval = radio->set_register(radio, POWERCFG);
365 * si470x_start - switch on radio
367 int si470x_start(struct si470x_device *radio)
372 radio->registers[POWERCFG] =
374 retval = radio->set_register(radio, POWERCFG);
379 radio->registers[SYSCONFIG1] |= SYSCONFIG1_RDSIEN | SYSCONFIG1_STCIEN |
381 radio->registers[SYSCONFIG1] &= ~SYSCONFIG1_GPIO2;
382 radio->registers[SYSCONFIG1] |= SYSCONFIG1_GPIO2_INT;
384 radio->registers[SYSCONFIG1] |= SYSCONFIG1_DE;
385 retval = radio->set_register(radio, SYSCONFIG1);
390 radio->registers[SYSCONFIG2] =
392 ((radio->band << 6) & SYSCONFIG2_BAND) |/* BAND */
395 retval = radio->set_register(radio, SYSCONFIG2);
400 retval = si470x_set_chan(radio,
401 radio->registers[CHANNEL] & CHANNEL_CHAN);
410 * si470x_stop - switch off radio
412 int si470x_stop(struct si470x_device *radio)
417 radio->registers[SYSCONFIG1] &= ~SYSCONFIG1_RDS;
418 retval = radio->set_register(radio, SYSCONFIG1);
423 radio->registers[POWERCFG] &= ~POWERCFG_DMUTE;
425 radio->registers[POWERCFG] |= POWERCFG_ENABLE | POWERCFG_DISABLE;
426 retval = radio->set_register(radio, POWERCFG);
437 static int si470x_rds_on(struct si470x_device *radio)
442 radio->registers[SYSCONFIG1] |= SYSCONFIG1_RDS;
443 retval = radio->set_register(radio, SYSCONFIG1);
445 radio->registers[SYSCONFIG1] &= ~SYSCONFIG1_RDS;
462 struct si470x_device *radio = video_drvdata(file);
467 if ((radio->registers[SYSCONFIG1] & SYSCONFIG1_RDS) == 0)
468 si470x_rds_on(radio);
471 while (radio->wr_index == radio->rd_index) {
476 if (wait_event_interruptible(radio->read_queue,
477 radio->wr_index != radio->rd_index) < 0) {
488 if (radio->rd_index == radio->wr_index)
492 if (copy_to_user(buf, &radio->buffer[radio->rd_index], 3))
497 radio->rd_index += 3;
498 if (radio->rd_index >= radio->buf_size)
499 radio->rd_index = 0;
518 struct si470x_device *radio = video_drvdata(file);
524 if ((radio->registers[SYSCONFIG1] & SYSCONFIG1_RDS) == 0)
525 si470x_rds_on(radio);
527 poll_wait(file, &radio->read_queue, pts);
529 if (radio->rd_index != radio->wr_index)
539 struct si470x_device *radio = video_drvdata(file);
541 return radio->fops_open(file);
550 struct si470x_device *radio = video_drvdata(file);
552 return radio->fops_release(file);
577 struct si470x_device *radio =
582 radio->registers[SYSCONFIG2] &= ~SYSCONFIG2_VOLUME;
583 radio->registers[SYSCONFIG2] |= ctrl->val;
584 return radio->set_register(radio, SYSCONFIG2);
587 radio->registers[POWERCFG] &= ~POWERCFG_DMUTE;
589 radio->registers[POWERCFG] |= POWERCFG_DMUTE;
590 return radio->set_register(radio, POWERCFG);
603 struct si470x_device *radio = video_drvdata(file);
609 if (!radio->status_rssi_auto_update) {
610 retval = radio->get_register(radio, STATUSRSSI);
626 if ((radio->registers[STATUSRSSI] & STATUSRSSI_ST) == 0)
636 if ((radio->registers[POWERCFG] & POWERCFG_MONO) == 0)
643 tuner->signal = (radio->registers[STATUSRSSI] & STATUSRSSI_RSSI);
651 tuner->afc = (radio->registers[STATUSRSSI] & STATUSRSSI_AFCRL) ? 1 : 0;
663 struct si470x_device *radio = video_drvdata(file);
671 radio->registers[POWERCFG] |= POWERCFG_MONO; /* force mono */
675 radio->registers[POWERCFG] &= ~POWERCFG_MONO; /* try stereo */
679 return radio->set_register(radio, POWERCFG);
684 * si470x_vidioc_g_frequency - get tuner or modulator radio frequency
689 struct si470x_device *radio = video_drvdata(file);
695 return si470x_get_freq(radio, &freq->frequency);
700 * si470x_vidioc_s_frequency - set tuner or modulator radio frequency
705 struct si470x_device *radio = video_drvdata(file);
711 if (freq->frequency < bands[radio->band].rangelow ||
712 freq->frequency > bands[radio->band].rangehigh) {
714 retval = si470x_set_band(radio, 1);
718 return si470x_set_freq(radio, freq->frequency);
728 struct si470x_device *radio = video_drvdata(file);
736 return si470x_set_seek(radio, seek);
761 struct si470x_device *radio = video_drvdata(file);
763 return radio->vidioc_querycap(file, priv, capability);