Lines Matching defs:radio

3  * drivers/media/radio/si470x/radio-si470x-i2c.c
15 #define DRIVER_DESC "I2C radio driver for Si470x FM Radio Receivers"
25 #include "radio-si470x.h"
84 static int si470x_get_register(struct si470x_device *radio, int regnr)
89 .addr = radio->client->addr,
96 if (i2c_transfer(radio->client->adapter, msgs, 1) != 1)
99 radio->registers[regnr] = __be16_to_cpu(buf[READ_INDEX(regnr)]);
108 static int si470x_set_register(struct si470x_device *radio, int regnr)
114 .addr = radio->client->addr,
121 buf[i] = __cpu_to_be16(radio->registers[WRITE_INDEX(i)]);
123 if (i2c_transfer(radio->client->adapter, msgs, 1) != 1)
138 static int si470x_get_all_registers(struct si470x_device *radio)
144 .addr = radio->client->addr,
151 if (i2c_transfer(radio->client->adapter, msgs, 1) != 1)
155 radio->registers[i] = __be16_to_cpu(buf[READ_INDEX(i)]);
171 struct si470x_device *radio = video_drvdata(file);
178 /* start radio */
179 retval = si470x_start(radio);
184 radio->registers[SYSCONFIG1] |= SYSCONFIG1_RDSIEN;
185 radio->registers[SYSCONFIG1] |= SYSCONFIG1_STCIEN;
186 radio->registers[SYSCONFIG1] &= ~SYSCONFIG1_GPIO2;
187 radio->registers[SYSCONFIG1] |= 0x1 << 2;
188 retval = si470x_set_register(radio, SYSCONFIG1);
203 struct si470x_device *radio = video_drvdata(file);
206 /* stop radio */
207 si470x_stop(radio);
240 struct si470x_device *radio = dev_id;
249 retval = si470x_get_register(radio, STATUSRSSI);
253 if (radio->registers[STATUSRSSI] & STATUSRSSI_STC)
254 complete(&radio->completion);
257 if ((radio->registers[SYSCONFIG1] & SYSCONFIG1_RDS) == 0)
262 retval = si470x_get_register(radio, STATUSRSSI + regnr);
268 if ((radio->registers[STATUSRSSI] & STATUSRSSI_RDSR) == 0)
275 bler = (radio->registers[STATUSRSSI] &
277 rds = radio->registers[RDSA];
280 bler = (radio->registers[READCHAN] &
282 rds = radio->registers[RDSB];
285 bler = (radio->registers[READCHAN] &
287 rds = radio->registers[RDSC];
290 bler = (radio->registers[READCHAN] &
292 rds = radio->registers[RDSD];
306 memcpy(&radio->buffer[radio->wr_index], &tmpbuf, 3);
307 radio->wr_index += 3;
310 if (radio->wr_index >= radio->buf_size)
311 radio->wr_index = 0;
314 if (radio->wr_index == radio->rd_index) {
316 radio->rd_index += 3;
317 if (radio->rd_index >= radio->buf_size)
318 radio->rd_index = 0;
322 if (radio->wr_index != radio->rd_index)
323 wake_up_interruptible(&radio->read_queue);
335 struct si470x_device *radio;
339 radio = devm_kzalloc(&client->dev, sizeof(*radio), GFP_KERNEL);
340 if (!radio) {
345 radio->client = client;
346 radio->band = 1; /* Default to 76 - 108 MHz */
347 mutex_init(&radio->lock);
348 init_completion(&radio->completion);
350 radio->get_register = si470x_get_register;
351 radio->set_register = si470x_set_register;
352 radio->fops_open = si470x_fops_open;
353 radio->fops_release = si470x_fops_release;
354 radio->vidioc_querycap = si470x_vidioc_querycap;
356 retval = v4l2_device_register(&client->dev, &radio->v4l2_dev);
362 v4l2_ctrl_handler_init(&radio->hdl, 2);
363 v4l2_ctrl_new_std(&radio->hdl, &si470x_ctrl_ops,
365 v4l2_ctrl_new_std(&radio->hdl, &si470x_ctrl_ops,
367 if (radio->hdl.error) {
368 retval = radio->hdl.error;
374 radio->videodev = si470x_viddev_template;
375 radio->videodev.ctrl_handler = &radio->hdl;
376 radio->videodev.lock = &radio->lock;
377 radio->videodev.v4l2_dev = &radio->v4l2_dev;
378 radio->videodev.release = video_device_release_empty;
379 radio->videodev.device_caps =
382 video_set_drvdata(&radio->videodev, radio);
384 radio->gpio_reset = devm_gpiod_get_optional(&client->dev, "reset",
386 if (IS_ERR(radio->gpio_reset)) {
387 retval = PTR_ERR(radio->gpio_reset);
392 if (radio->gpio_reset)
393 gpiod_set_value(radio->gpio_reset, 1);
396 radio->registers[POWERCFG] = POWERCFG_ENABLE;
397 if (si470x_set_register(radio, POWERCFG) < 0) {
404 if (si470x_get_all_registers(radio) < 0) {
409 radio->registers[DEVICEID], radio->registers[SI_CHIPID]);
410 if ((radio->registers[SI_CHIPID] & SI_CHIPID_FIRMWARE) < RADIO_FW_VERSION) {
415 radio->registers[SI_CHIPID] & SI_CHIPID_FIRMWARE);
419 si470x_set_freq(radio, 87.5 * FREQ_MUL); /* available in all regions */
422 radio->buf_size = rds_buf * 3;
423 radio->buffer = devm_kmalloc(&client->dev, radio->buf_size, GFP_KERNEL);
424 if (!radio->buffer) {
430 radio->wr_index = 0;
431 radio->rd_index = 0;
432 init_waitqueue_head(&radio->read_queue);
437 DRIVER_NAME, radio);
444 retval = video_register_device(&radio->videodev, VFL_TYPE_RADIO,
450 i2c_set_clientdata(client, radio);
454 v4l2_ctrl_handler_free(&radio->hdl);
455 v4l2_device_unregister(&radio->v4l2_dev);
466 struct si470x_device *radio = i2c_get_clientdata(client);
468 video_unregister_device(&radio->videodev);
470 if (radio->gpio_reset)
471 gpiod_set_value(radio->gpio_reset, 0);
473 v4l2_ctrl_handler_free(&radio->hdl);
474 v4l2_device_unregister(&radio->v4l2_dev);
485 struct si470x_device *radio = i2c_get_clientdata(client);
488 radio->registers[POWERCFG] |= POWERCFG_DISABLE;
489 if (si470x_set_register(radio, POWERCFG) < 0)
502 struct si470x_device *radio = i2c_get_clientdata(client);
505 radio->registers[POWERCFG] |= POWERCFG_ENABLE;
506 if (si470x_set_register(radio, POWERCFG) < 0)