• Home
  • Raw
  • Download

Lines Matching refs:radio

84 static int si470x_get_register(struct si470x_device *radio, int regnr)  in si470x_get_register()  argument
89 .addr = radio->client->addr, in si470x_get_register()
96 if (i2c_transfer(radio->client->adapter, msgs, 1) != 1) in si470x_get_register()
99 radio->registers[regnr] = __be16_to_cpu(buf[READ_INDEX(regnr)]); in si470x_get_register()
108 static int si470x_set_register(struct si470x_device *radio, int regnr) in si470x_set_register() argument
114 .addr = radio->client->addr, in si470x_set_register()
121 buf[i] = __cpu_to_be16(radio->registers[WRITE_INDEX(i)]); in si470x_set_register()
123 if (i2c_transfer(radio->client->adapter, msgs, 1) != 1) in si470x_set_register()
138 static int si470x_get_all_registers(struct si470x_device *radio) in si470x_get_all_registers() argument
144 .addr = radio->client->addr, in si470x_get_all_registers()
151 if (i2c_transfer(radio->client->adapter, msgs, 1) != 1) in si470x_get_all_registers()
155 radio->registers[i] = __be16_to_cpu(buf[READ_INDEX(i)]); in si470x_get_all_registers()
171 struct si470x_device *radio = video_drvdata(file); in si470x_fops_open() local
179 retval = si470x_start(radio); in si470x_fops_open()
184 radio->registers[SYSCONFIG1] |= SYSCONFIG1_RDSIEN; in si470x_fops_open()
185 radio->registers[SYSCONFIG1] |= SYSCONFIG1_STCIEN; in si470x_fops_open()
186 radio->registers[SYSCONFIG1] &= ~SYSCONFIG1_GPIO2; in si470x_fops_open()
187 radio->registers[SYSCONFIG1] |= 0x1 << 2; in si470x_fops_open()
188 retval = si470x_set_register(radio, SYSCONFIG1); in si470x_fops_open()
203 struct si470x_device *radio = video_drvdata(file); in si470x_fops_release() local
207 si470x_stop(radio); in si470x_fops_release()
240 struct si470x_device *radio = dev_id; in si470x_i2c_interrupt() local
249 retval = si470x_get_register(radio, STATUSRSSI); in si470x_i2c_interrupt()
253 if (radio->registers[STATUSRSSI] & STATUSRSSI_STC) in si470x_i2c_interrupt()
254 complete(&radio->completion); in si470x_i2c_interrupt()
257 if ((radio->registers[SYSCONFIG1] & SYSCONFIG1_RDS) == 0) in si470x_i2c_interrupt()
262 retval = si470x_get_register(radio, STATUSRSSI + regnr); in si470x_i2c_interrupt()
268 if ((radio->registers[STATUSRSSI] & STATUSRSSI_RDSR) == 0) in si470x_i2c_interrupt()
275 bler = (radio->registers[STATUSRSSI] & in si470x_i2c_interrupt()
277 rds = radio->registers[RDSA]; in si470x_i2c_interrupt()
280 bler = (radio->registers[READCHAN] & in si470x_i2c_interrupt()
282 rds = radio->registers[RDSB]; in si470x_i2c_interrupt()
285 bler = (radio->registers[READCHAN] & in si470x_i2c_interrupt()
287 rds = radio->registers[RDSC]; in si470x_i2c_interrupt()
290 bler = (radio->registers[READCHAN] & in si470x_i2c_interrupt()
292 rds = radio->registers[RDSD]; in si470x_i2c_interrupt()
306 memcpy(&radio->buffer[radio->wr_index], &tmpbuf, 3); in si470x_i2c_interrupt()
307 radio->wr_index += 3; in si470x_i2c_interrupt()
310 if (radio->wr_index >= radio->buf_size) in si470x_i2c_interrupt()
311 radio->wr_index = 0; in si470x_i2c_interrupt()
314 if (radio->wr_index == radio->rd_index) { in si470x_i2c_interrupt()
316 radio->rd_index += 3; in si470x_i2c_interrupt()
317 if (radio->rd_index >= radio->buf_size) in si470x_i2c_interrupt()
318 radio->rd_index = 0; in si470x_i2c_interrupt()
322 if (radio->wr_index != radio->rd_index) in si470x_i2c_interrupt()
323 wake_up_interruptible(&radio->read_queue); in si470x_i2c_interrupt()
335 struct si470x_device *radio; in si470x_i2c_probe() local
340 radio = devm_kzalloc(&client->dev, sizeof(*radio), GFP_KERNEL); in si470x_i2c_probe()
341 if (!radio) { in si470x_i2c_probe()
346 radio->client = client; in si470x_i2c_probe()
347 radio->band = 1; /* Default to 76 - 108 MHz */ in si470x_i2c_probe()
348 mutex_init(&radio->lock); in si470x_i2c_probe()
349 init_completion(&radio->completion); in si470x_i2c_probe()
351 radio->get_register = si470x_get_register; in si470x_i2c_probe()
352 radio->set_register = si470x_set_register; in si470x_i2c_probe()
353 radio->fops_open = si470x_fops_open; in si470x_i2c_probe()
354 radio->fops_release = si470x_fops_release; in si470x_i2c_probe()
355 radio->vidioc_querycap = si470x_vidioc_querycap; in si470x_i2c_probe()
357 retval = v4l2_device_register(&client->dev, &radio->v4l2_dev); in si470x_i2c_probe()
363 v4l2_ctrl_handler_init(&radio->hdl, 2); in si470x_i2c_probe()
364 v4l2_ctrl_new_std(&radio->hdl, &si470x_ctrl_ops, in si470x_i2c_probe()
366 v4l2_ctrl_new_std(&radio->hdl, &si470x_ctrl_ops, in si470x_i2c_probe()
368 if (radio->hdl.error) { in si470x_i2c_probe()
369 retval = radio->hdl.error; in si470x_i2c_probe()
375 radio->videodev = si470x_viddev_template; in si470x_i2c_probe()
376 radio->videodev.ctrl_handler = &radio->hdl; in si470x_i2c_probe()
377 radio->videodev.lock = &radio->lock; in si470x_i2c_probe()
378 radio->videodev.v4l2_dev = &radio->v4l2_dev; in si470x_i2c_probe()
379 radio->videodev.release = video_device_release_empty; in si470x_i2c_probe()
380 radio->videodev.device_caps = in si470x_i2c_probe()
383 video_set_drvdata(&radio->videodev, radio); in si470x_i2c_probe()
385 radio->gpio_reset = devm_gpiod_get_optional(&client->dev, "reset", in si470x_i2c_probe()
387 if (IS_ERR(radio->gpio_reset)) { in si470x_i2c_probe()
388 retval = PTR_ERR(radio->gpio_reset); in si470x_i2c_probe()
393 if (radio->gpio_reset) in si470x_i2c_probe()
394 gpiod_set_value(radio->gpio_reset, 1); in si470x_i2c_probe()
397 radio->registers[POWERCFG] = POWERCFG_ENABLE; in si470x_i2c_probe()
398 if (si470x_set_register(radio, POWERCFG) < 0) { in si470x_i2c_probe()
405 if (si470x_get_all_registers(radio) < 0) { in si470x_i2c_probe()
410 radio->registers[DEVICEID], radio->registers[SI_CHIPID]); in si470x_i2c_probe()
411 if ((radio->registers[SI_CHIPID] & SI_CHIPID_FIRMWARE) < RADIO_FW_VERSION) { in si470x_i2c_probe()
417 radio->registers[SI_CHIPID] & SI_CHIPID_FIRMWARE); in si470x_i2c_probe()
430 si470x_set_freq(radio, 87.5 * FREQ_MUL); /* available in all regions */ in si470x_i2c_probe()
433 radio->buf_size = rds_buf * 3; in si470x_i2c_probe()
434 radio->buffer = devm_kmalloc(&client->dev, radio->buf_size, GFP_KERNEL); in si470x_i2c_probe()
435 if (!radio->buffer) { in si470x_i2c_probe()
441 radio->wr_index = 0; in si470x_i2c_probe()
442 radio->rd_index = 0; in si470x_i2c_probe()
443 init_waitqueue_head(&radio->read_queue); in si470x_i2c_probe()
448 DRIVER_NAME, radio); in si470x_i2c_probe()
455 retval = video_register_device(&radio->videodev, VFL_TYPE_RADIO, in si470x_i2c_probe()
461 i2c_set_clientdata(client, radio); in si470x_i2c_probe()
465 v4l2_ctrl_handler_free(&radio->hdl); in si470x_i2c_probe()
466 v4l2_device_unregister(&radio->v4l2_dev); in si470x_i2c_probe()
477 struct si470x_device *radio = i2c_get_clientdata(client); in si470x_i2c_remove() local
479 video_unregister_device(&radio->videodev); in si470x_i2c_remove()
481 if (radio->gpio_reset) in si470x_i2c_remove()
482 gpiod_set_value(radio->gpio_reset, 0); in si470x_i2c_remove()
484 v4l2_ctrl_handler_free(&radio->hdl); in si470x_i2c_remove()
485 v4l2_device_unregister(&radio->v4l2_dev); in si470x_i2c_remove()
497 struct si470x_device *radio = i2c_get_clientdata(client); in si470x_i2c_suspend() local
500 radio->registers[POWERCFG] |= POWERCFG_DISABLE; in si470x_i2c_suspend()
501 if (si470x_set_register(radio, POWERCFG) < 0) in si470x_i2c_suspend()
514 struct si470x_device *radio = i2c_get_clientdata(client); in si470x_i2c_resume() local
517 radio->registers[POWERCFG] |= POWERCFG_ENABLE; in si470x_i2c_resume()
518 if (si470x_set_register(radio, POWERCFG) < 0) in si470x_i2c_resume()