linux/drivers/media/radio/radio-wl1273.c
<<
>>
Prefs
   1/*
   2 * Driver for the Texas Instruments WL1273 FM radio.
   3 *
   4 * Copyright (C) 2010 Nokia Corporation
   5 * Author: Matti J. Aaltonen <matti.j.aaltonen@nokia.com>
   6 *
   7 * This program is free software; you can redistribute it and/or
   8 * modify it under the terms of the GNU General Public License
   9 * version 2 as published by the Free Software Foundation.
  10 *
  11 * This program is distributed in the hope that it will be useful,
  12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 * GNU General Public License for more details.
  15 *
  16 * You should have received a copy of the GNU General Public License
  17 * along with this program; if not, write to the Free Software
  18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  19 */
  20
  21#include <linux/delay.h>
  22#include <linux/firmware.h>
  23#include <linux/interrupt.h>
  24#include <linux/mfd/wl1273-core.h>
  25#include <linux/slab.h>
  26#include <media/v4l2-common.h>
  27#include <media/v4l2-ctrls.h>
  28#include <media/v4l2-device.h>
  29#include <media/v4l2-ioctl.h>
  30
  31#define DRIVER_DESC "Wl1273 FM Radio"
  32
  33#define WL1273_POWER_SET_OFF            0
  34#define WL1273_POWER_SET_FM             BIT(0)
  35#define WL1273_POWER_SET_RDS            BIT(1)
  36#define WL1273_POWER_SET_RETENTION      BIT(4)
  37
  38#define WL1273_PUPD_SET_OFF             0x00
  39#define WL1273_PUPD_SET_ON              0x01
  40#define WL1273_PUPD_SET_RETENTION       0x10
  41
  42#define WL1273_FREQ(x)          (x * 10000 / 625)
  43#define WL1273_INV_FREQ(x)      (x * 625 / 10000)
  44
  45/*
  46 * static int radio_nr - The number of the radio device
  47 *
  48 * The default is 0.
  49 */
  50static int radio_nr;
  51module_param(radio_nr, int, 0);
  52MODULE_PARM_DESC(radio_nr, "The number of the radio device. Default = 0");
  53
  54struct wl1273_device {
  55        char *bus_type;
  56
  57        u8 forbidden;
  58        unsigned int preemphasis;
  59        unsigned int spacing;
  60        unsigned int tx_power;
  61        unsigned int rx_frequency;
  62        unsigned int tx_frequency;
  63        unsigned int rangelow;
  64        unsigned int rangehigh;
  65        unsigned int band;
  66        bool stereo;
  67
  68        /* RDS */
  69        unsigned int rds_on;
  70        struct delayed_work work;
  71
  72        wait_queue_head_t read_queue;
  73        struct mutex lock; /* for serializing fm radio operations */
  74        struct completion busy;
  75
  76        unsigned char *buffer;
  77        unsigned int buf_size;
  78        unsigned int rd_index;
  79        unsigned int wr_index;
  80
  81        /* Selected interrupts */
  82        u16 irq_flags;
  83        u16 irq_received;
  84
  85        struct v4l2_ctrl_handler ctrl_handler;
  86        struct v4l2_device v4l2dev;
  87        struct video_device videodev;
  88        struct device *dev;
  89        struct wl1273_core *core;
  90        struct file *owner;
  91        char *write_buf;
  92        unsigned int rds_users;
  93};
  94
  95#define WL1273_IRQ_MASK  (WL1273_FR_EVENT               |       \
  96                          WL1273_POW_ENB_EVENT)
  97
  98/*
  99 * static unsigned int rds_buf - the number of RDS buffer blocks used.
 100 *
 101 * The default number is 100.
 102 */
 103static unsigned int rds_buf = 100;
 104module_param(rds_buf, uint, 0);
 105MODULE_PARM_DESC(rds_buf, "Number of RDS buffer entries. Default = 100");
 106
 107static int wl1273_fm_read_reg(struct wl1273_core *core, u8 reg, u16 *value)
 108{
 109        struct i2c_client *client = core->client;
 110        u8 b[2];
 111        int r;
 112
 113        r = i2c_smbus_read_i2c_block_data(client, reg, sizeof(b), b);
 114        if (r != 2) {
 115                dev_err(&client->dev, "%s: Read: %d fails.\n", __func__, reg);
 116                return -EREMOTEIO;
 117        }
 118
 119        *value = (u16)b[0] << 8 | b[1];
 120
 121        return 0;
 122}
 123
 124static int wl1273_fm_write_cmd(struct wl1273_core *core, u8 cmd, u16 param)
 125{
 126        struct i2c_client *client = core->client;
 127        u8 buf[] = { (param >> 8) & 0xff, param & 0xff };
 128        int r;
 129
 130        r = i2c_smbus_write_i2c_block_data(client, cmd, sizeof(buf), buf);
 131        if (r) {
 132                dev_err(&client->dev, "%s: Cmd: %d fails.\n", __func__, cmd);
 133                return r;
 134        }
 135
 136        return 0;
 137}
 138
 139static int wl1273_fm_write_data(struct wl1273_core *core, u8 *data, u16 len)
 140{
 141        struct i2c_client *client = core->client;
 142        struct i2c_msg msg;
 143        int r;
 144
 145        msg.addr = client->addr;
 146        msg.flags = 0;
 147        msg.buf = data;
 148        msg.len = len;
 149
 150        r = i2c_transfer(client->adapter, &msg, 1);
 151        if (r != 1) {
 152                dev_err(&client->dev, "%s: write error.\n", __func__);
 153                return -EREMOTEIO;
 154        }
 155
 156        return 0;
 157}
 158
 159static int wl1273_fm_write_fw(struct wl1273_core *core,
 160                              __u8 *fw, int len)
 161{
 162        struct i2c_client *client = core->client;
 163        struct i2c_msg msg;
 164        int i, r = 0;
 165
 166        msg.addr = client->addr;
 167        msg.flags = 0;
 168
 169        for (i = 0; i <= len; i++) {
 170                msg.len = fw[0];
 171                msg.buf = fw + 1;
 172
 173                fw += msg.len + 1;
 174                dev_dbg(&client->dev, "%s:len[%d]: %d\n", __func__, i, msg.len);
 175
 176                r = i2c_transfer(client->adapter, &msg, 1);
 177                if (r < 0 && i < len + 1)
 178                        break;
 179        }
 180
 181        dev_dbg(&client->dev, "%s: i: %d\n", __func__, i);
 182        dev_dbg(&client->dev, "%s: len + 1: %d\n", __func__, len + 1);
 183
 184        /* Last transfer always fails. */
 185        if (i == len || r == 1)
 186                r = 0;
 187
 188        return r;
 189}
 190
 191/**
 192 * wl1273_fm_set_audio() -      Set audio mode.
 193 * @core:                       A pointer to the device struct.
 194 * @new_mode:                   The new audio mode.
 195 *
 196 * Audio modes are WL1273_AUDIO_DIGITAL and WL1273_AUDIO_ANALOG.
 197 */
 198static int wl1273_fm_set_audio(struct wl1273_core *core, unsigned int new_mode)
 199{
 200        int r = 0;
 201
 202        if (core->mode == WL1273_MODE_OFF ||
 203            core->mode == WL1273_MODE_SUSPENDED)
 204                return -EPERM;
 205
 206        if (core->mode == WL1273_MODE_RX && new_mode == WL1273_AUDIO_DIGITAL) {
 207                r = wl1273_fm_write_cmd(core, WL1273_PCM_MODE_SET,
 208                                        WL1273_PCM_DEF_MODE);
 209                if (r)
 210                        goto out;
 211
 212                r = wl1273_fm_write_cmd(core, WL1273_I2S_MODE_CONFIG_SET,
 213                                        core->i2s_mode);
 214                if (r)
 215                        goto out;
 216
 217                r = wl1273_fm_write_cmd(core, WL1273_AUDIO_ENABLE,
 218                                        WL1273_AUDIO_ENABLE_I2S);
 219                if (r)
 220                        goto out;
 221
 222        } else if (core->mode == WL1273_MODE_RX &&
 223                   new_mode == WL1273_AUDIO_ANALOG) {
 224                r = wl1273_fm_write_cmd(core, WL1273_AUDIO_ENABLE,
 225                                        WL1273_AUDIO_ENABLE_ANALOG);
 226                if (r)
 227                        goto out;
 228
 229        } else if (core->mode == WL1273_MODE_TX &&
 230                   new_mode == WL1273_AUDIO_DIGITAL) {
 231                r = wl1273_fm_write_cmd(core, WL1273_I2S_MODE_CONFIG_SET,
 232                                        core->i2s_mode);
 233                if (r)
 234                        goto out;
 235
 236                r = wl1273_fm_write_cmd(core, WL1273_AUDIO_IO_SET,
 237                                        WL1273_AUDIO_IO_SET_I2S);
 238                if (r)
 239                        goto out;
 240
 241        } else if (core->mode == WL1273_MODE_TX &&
 242                   new_mode == WL1273_AUDIO_ANALOG) {
 243                r = wl1273_fm_write_cmd(core, WL1273_AUDIO_IO_SET,
 244                                        WL1273_AUDIO_IO_SET_ANALOG);
 245                if (r)
 246                        goto out;
 247        }
 248
 249        core->audio_mode = new_mode;
 250out:
 251        return r;
 252}
 253
 254/**
 255 * wl1273_fm_set_volume() -     Set volume.
 256 * @core:                       A pointer to the device struct.
 257 * @volume:                     The new volume value.
 258 */
 259static int wl1273_fm_set_volume(struct wl1273_core *core, unsigned int volume)
 260{
 261        u16 val;
 262        int r;
 263
 264        if (volume > WL1273_MAX_VOLUME)
 265                return -EINVAL;
 266
 267        if (core->volume == volume)
 268                return 0;
 269
 270        val = volume;
 271        r = wl1273_fm_read_reg(core, WL1273_VOLUME_SET, &val);
 272        if (r)
 273                return r;
 274
 275        core->volume = volume;
 276        return 0;
 277}
 278
 279#define WL1273_FIFO_HAS_DATA(status)    (1 << 5 & status)
 280#define WL1273_RDS_CORRECTABLE_ERROR    (1 << 3)
 281#define WL1273_RDS_UNCORRECTABLE_ERROR  (1 << 4)
 282
 283static int wl1273_fm_rds(struct wl1273_device *radio)
 284{
 285        struct wl1273_core *core = radio->core;
 286        struct i2c_client *client = core->client;
 287        u16 val;
 288        u8 b0 = WL1273_RDS_DATA_GET, status;
 289        struct v4l2_rds_data rds = { 0, 0, 0 };
 290        struct i2c_msg msg[] = {
 291                {
 292                        .addr = client->addr,
 293                        .flags = 0,
 294                        .buf = &b0,
 295                        .len = 1,
 296                },
 297                {
 298                        .addr = client->addr,
 299                        .flags = I2C_M_RD,
 300                        .buf = (u8 *) &rds,
 301                        .len = sizeof(rds),
 302                }
 303        };
 304        int r;
 305
 306        if (core->mode != WL1273_MODE_RX)
 307                return 0;
 308
 309        r = wl1273_fm_read_reg(core, WL1273_RDS_SYNC_GET, &val);
 310        if (r)
 311                return r;
 312
 313        if ((val & 0x01) == 0) {
 314                /* RDS decoder not synchronized */
 315                return -EAGAIN;
 316        }
 317
 318        /* copy all four RDS blocks to internal buffer */
 319        do {
 320                r = i2c_transfer(client->adapter, msg, ARRAY_SIZE(msg));
 321                if (r != ARRAY_SIZE(msg)) {
 322                        dev_err(radio->dev, WL1273_FM_DRIVER_NAME
 323                                ": %s: read_rds error r == %i)\n",
 324                                __func__, r);
 325                }
 326
 327                status = rds.block;
 328
 329                if (!WL1273_FIFO_HAS_DATA(status))
 330                        break;
 331
 332                /* copy bits 0-2 (the block ID) to bits 3-5 */
 333                rds.block = V4L2_RDS_BLOCK_MSK & status;
 334                rds.block |= rds.block << 3;
 335
 336                /* copy the error bits to standard positions */
 337                if (WL1273_RDS_UNCORRECTABLE_ERROR & status) {
 338                        rds.block |= V4L2_RDS_BLOCK_ERROR;
 339                        rds.block &= ~V4L2_RDS_BLOCK_CORRECTED;
 340                } else if  (WL1273_RDS_CORRECTABLE_ERROR & status) {
 341                        rds.block &= ~V4L2_RDS_BLOCK_ERROR;
 342                        rds.block |= V4L2_RDS_BLOCK_CORRECTED;
 343                }
 344
 345                /* copy RDS block to internal buffer */
 346                memcpy(&radio->buffer[radio->wr_index], &rds, RDS_BLOCK_SIZE);
 347                radio->wr_index += 3;
 348
 349                /* wrap write pointer */
 350                if (radio->wr_index >= radio->buf_size)
 351                        radio->wr_index = 0;
 352
 353                /* check for overflow & start over */
 354                if (radio->wr_index == radio->rd_index) {
 355                        dev_dbg(radio->dev, "RDS OVERFLOW");
 356
 357                        radio->rd_index = 0;
 358                        radio->wr_index = 0;
 359                        break;
 360                }
 361        } while (WL1273_FIFO_HAS_DATA(status));
 362
 363        /* wake up read queue */
 364        if (radio->wr_index != radio->rd_index)
 365                wake_up_interruptible(&radio->read_queue);
 366
 367        return 0;
 368}
 369
 370static irqreturn_t wl1273_fm_irq_thread_handler(int irq, void *dev_id)
 371{
 372        struct wl1273_device *radio = dev_id;
 373        struct wl1273_core *core = radio->core;
 374        u16 flags;
 375        int r;
 376
 377        r = wl1273_fm_read_reg(core, WL1273_FLAG_GET, &flags);
 378        if (r)
 379                goto out;
 380
 381        if (flags & WL1273_BL_EVENT) {
 382                radio->irq_received = flags;
 383                dev_dbg(radio->dev, "IRQ: BL\n");
 384        }
 385
 386        if (flags & WL1273_RDS_EVENT) {
 387                msleep(200);
 388
 389                wl1273_fm_rds(radio);
 390        }
 391
 392        if (flags & WL1273_BBLK_EVENT)
 393                dev_dbg(radio->dev, "IRQ: BBLK\n");
 394
 395        if (flags & WL1273_LSYNC_EVENT)
 396                dev_dbg(radio->dev, "IRQ: LSYNC\n");
 397
 398        if (flags & WL1273_LEV_EVENT) {
 399                u16 level;
 400
 401                r = wl1273_fm_read_reg(core, WL1273_RSSI_LVL_GET, &level);
 402                if (r)
 403                        goto out;
 404
 405                if (level > 14)
 406                        dev_dbg(radio->dev, "IRQ: LEV: 0x%x04\n", level);
 407        }
 408
 409        if (flags & WL1273_IFFR_EVENT)
 410                dev_dbg(radio->dev, "IRQ: IFFR\n");
 411
 412        if (flags & WL1273_PI_EVENT)
 413                dev_dbg(radio->dev, "IRQ: PI\n");
 414
 415        if (flags & WL1273_PD_EVENT)
 416                dev_dbg(radio->dev, "IRQ: PD\n");
 417
 418        if (flags & WL1273_STIC_EVENT)
 419                dev_dbg(radio->dev, "IRQ: STIC\n");
 420
 421        if (flags & WL1273_MAL_EVENT)
 422                dev_dbg(radio->dev, "IRQ: MAL\n");
 423
 424        if (flags & WL1273_POW_ENB_EVENT) {
 425                complete(&radio->busy);
 426                dev_dbg(radio->dev, "NOT BUSY\n");
 427                dev_dbg(radio->dev, "IRQ: POW_ENB\n");
 428        }
 429
 430        if (flags & WL1273_SCAN_OVER_EVENT)
 431                dev_dbg(radio->dev, "IRQ: SCAN_OVER\n");
 432
 433        if (flags & WL1273_ERROR_EVENT)
 434                dev_dbg(radio->dev, "IRQ: ERROR\n");
 435
 436        if (flags & WL1273_FR_EVENT) {
 437                u16 freq;
 438
 439                dev_dbg(radio->dev, "IRQ: FR:\n");
 440
 441                if (core->mode == WL1273_MODE_RX) {
 442                        r = wl1273_fm_write_cmd(core, WL1273_TUNER_MODE_SET,
 443                                                TUNER_MODE_STOP_SEARCH);
 444                        if (r) {
 445                                dev_err(radio->dev,
 446                                        "%s: TUNER_MODE_SET fails: %d\n",
 447                                        __func__, r);
 448                                goto out;
 449                        }
 450
 451                        r = wl1273_fm_read_reg(core, WL1273_FREQ_SET, &freq);
 452                        if (r)
 453                                goto out;
 454
 455                        if (radio->band == WL1273_BAND_JAPAN)
 456                                radio->rx_frequency = WL1273_BAND_JAPAN_LOW +
 457                                        freq * 50;
 458                        else
 459                                radio->rx_frequency = WL1273_BAND_OTHER_LOW +
 460                                        freq * 50;
 461                        /*
 462                         *  The driver works better with this msleep,
 463                         *  the documentation doesn't mention it.
 464                         */
 465                        usleep_range(10000, 15000);
 466
 467                        dev_dbg(radio->dev, "%dkHz\n", radio->rx_frequency);
 468
 469                } else {
 470                        r = wl1273_fm_read_reg(core, WL1273_CHANL_SET, &freq);
 471                        if (r)
 472                                goto out;
 473
 474                        dev_dbg(radio->dev, "%dkHz\n", freq);
 475                }
 476                dev_dbg(radio->dev, "%s: NOT BUSY\n", __func__);
 477        }
 478
 479out:
 480        wl1273_fm_write_cmd(core, WL1273_INT_MASK_SET,
 481                            radio->irq_flags);
 482        complete(&radio->busy);
 483
 484        return IRQ_HANDLED;
 485}
 486
 487static int wl1273_fm_set_tx_freq(struct wl1273_device *radio, unsigned int freq)
 488{
 489        struct wl1273_core *core = radio->core;
 490        int r = 0;
 491
 492        if (freq < WL1273_BAND_TX_LOW) {
 493                dev_err(radio->dev,
 494                        "Frequency out of range: %d < %d\n", freq,
 495                        WL1273_BAND_TX_LOW);
 496                return -ERANGE;
 497        }
 498
 499        if (freq > WL1273_BAND_TX_HIGH) {
 500                dev_err(radio->dev,
 501                        "Frequency out of range: %d > %d\n", freq,
 502                        WL1273_BAND_TX_HIGH);
 503                return -ERANGE;
 504        }
 505
 506        /*
 507         *  The driver works better with this sleep,
 508         *  the documentation doesn't mention it.
 509         */
 510        usleep_range(5000, 10000);
 511
 512        dev_dbg(radio->dev, "%s: freq: %d kHz\n", __func__, freq);
 513
 514        /* Set the current tx channel */
 515        r = wl1273_fm_write_cmd(core, WL1273_CHANL_SET, freq / 10);
 516        if (r)
 517                return r;
 518
 519        INIT_COMPLETION(radio->busy);
 520
 521        /* wait for the FR IRQ */
 522        r = wait_for_completion_timeout(&radio->busy, msecs_to_jiffies(2000));
 523        if (!r)
 524                return -ETIMEDOUT;
 525
 526        dev_dbg(radio->dev, "WL1273_CHANL_SET: %d\n", r);
 527
 528        /* Enable the output power */
 529        r = wl1273_fm_write_cmd(core, WL1273_POWER_ENB_SET, 1);
 530        if (r)
 531                return r;
 532
 533        INIT_COMPLETION(radio->busy);
 534
 535        /* wait for the POWER_ENB IRQ */
 536        r = wait_for_completion_timeout(&radio->busy, msecs_to_jiffies(1000));
 537        if (!r)
 538                return -ETIMEDOUT;
 539
 540        radio->tx_frequency = freq;
 541        dev_dbg(radio->dev, "WL1273_POWER_ENB_SET: %d\n", r);
 542
 543        return  0;
 544}
 545
 546static int wl1273_fm_set_rx_freq(struct wl1273_device *radio, unsigned int freq)
 547{
 548        struct wl1273_core *core = radio->core;
 549        int r, f;
 550
 551        if (freq < radio->rangelow) {
 552                dev_err(radio->dev,
 553                        "Frequency out of range: %d < %d\n", freq,
 554                        radio->rangelow);
 555                r = -ERANGE;
 556                goto err;
 557        }
 558
 559        if (freq > radio->rangehigh) {
 560                dev_err(radio->dev,
 561                        "Frequency out of range: %d > %d\n", freq,
 562                        radio->rangehigh);
 563                r = -ERANGE;
 564                goto err;
 565        }
 566
 567        dev_dbg(radio->dev, "%s: %dkHz\n", __func__, freq);
 568
 569        wl1273_fm_write_cmd(core, WL1273_INT_MASK_SET, radio->irq_flags);
 570
 571        if (radio->band == WL1273_BAND_JAPAN)
 572                f = (freq - WL1273_BAND_JAPAN_LOW) / 50;
 573        else
 574                f = (freq - WL1273_BAND_OTHER_LOW) / 50;
 575
 576        r = wl1273_fm_write_cmd(core, WL1273_FREQ_SET, f);
 577        if (r) {
 578                dev_err(radio->dev, "FREQ_SET fails\n");
 579                goto err;
 580        }
 581
 582        r = wl1273_fm_write_cmd(core, WL1273_TUNER_MODE_SET, TUNER_MODE_PRESET);
 583        if (r) {
 584                dev_err(radio->dev, "TUNER_MODE_SET fails\n");
 585                goto err;
 586        }
 587
 588        INIT_COMPLETION(radio->busy);
 589
 590        r = wait_for_completion_timeout(&radio->busy, msecs_to_jiffies(2000));
 591        if (!r) {
 592                dev_err(radio->dev, "%s: TIMEOUT\n", __func__);
 593                return -ETIMEDOUT;
 594        }
 595
 596        radio->rd_index = 0;
 597        radio->wr_index = 0;
 598        radio->rx_frequency = freq;
 599        return 0;
 600err:
 601        return r;
 602}
 603
 604static int wl1273_fm_get_freq(struct wl1273_device *radio)
 605{
 606        struct wl1273_core *core = radio->core;
 607        unsigned int freq;
 608        u16 f;
 609        int r;
 610
 611        if (core->mode == WL1273_MODE_RX) {
 612                r = wl1273_fm_read_reg(core, WL1273_FREQ_SET, &f);
 613                if (r)
 614                        return r;
 615
 616                dev_dbg(radio->dev, "Freq get: 0x%04x\n", f);
 617                if (radio->band == WL1273_BAND_JAPAN)
 618                        freq = WL1273_BAND_JAPAN_LOW + 50 * f;
 619                else
 620                        freq = WL1273_BAND_OTHER_LOW + 50 * f;
 621        } else {
 622                r = wl1273_fm_read_reg(core, WL1273_CHANL_SET, &f);
 623                if (r)
 624                        return r;
 625
 626                freq = f * 10;
 627        }
 628
 629        return freq;
 630}
 631
 632/**
 633 * wl1273_fm_upload_firmware_patch() -  Upload the firmware.
 634 * @radio:                              A pointer to the device struct.
 635 *
 636 * The firmware file consists of arrays of bytes where the first byte
 637 * gives the array length. The first byte in the file gives the
 638 * number of these arrays.
 639 */
 640static int wl1273_fm_upload_firmware_patch(struct wl1273_device *radio)
 641{
 642        struct wl1273_core *core = radio->core;
 643        unsigned int packet_num;
 644        const struct firmware *fw_p;
 645        const char *fw_name = "radio-wl1273-fw.bin";
 646        struct device *dev = radio->dev;
 647        __u8 *ptr;
 648        int r;
 649
 650        dev_dbg(dev, "%s:\n", __func__);
 651
 652        /*
 653         * Uploading the firmware patch is not always necessary,
 654         * so we only print an info message.
 655         */
 656        if (request_firmware(&fw_p, fw_name, dev)) {
 657                dev_info(dev, "%s - %s not found\n", __func__, fw_name);
 658
 659                return 0;
 660        }
 661
 662        ptr = (__u8 *) fw_p->data;
 663        packet_num = ptr[0];
 664        dev_dbg(dev, "%s: packets: %d\n", __func__, packet_num);
 665
 666        r = wl1273_fm_write_fw(core, ptr + 1, packet_num);
 667        if (r) {
 668                dev_err(dev, "FW upload error: %d\n", r);
 669                goto out;
 670        }
 671
 672        /* ignore possible error here */
 673        wl1273_fm_write_cmd(core, WL1273_RESET, 0);
 674
 675        dev_dbg(dev, "%s - download OK, r: %d\n", __func__, r);
 676out:
 677        release_firmware(fw_p);
 678        return r;
 679}
 680
 681static int wl1273_fm_stop(struct wl1273_device *radio)
 682{
 683        struct wl1273_core *core = radio->core;
 684
 685        if (core->mode == WL1273_MODE_RX) {
 686                int r = wl1273_fm_write_cmd(core, WL1273_POWER_SET,
 687                                    WL1273_POWER_SET_OFF);
 688                if (r)
 689                        dev_err(radio->dev, "%s: POWER_SET fails: %d\n",
 690                                __func__, r);
 691        } else if (core->mode == WL1273_MODE_TX) {
 692                int r = wl1273_fm_write_cmd(core, WL1273_PUPD_SET,
 693                                            WL1273_PUPD_SET_OFF);
 694                if (r)
 695                        dev_err(radio->dev,
 696                                "%s: PUPD_SET fails: %d\n", __func__, r);
 697        }
 698
 699        if (core->pdata->disable) {
 700                core->pdata->disable();
 701                dev_dbg(radio->dev, "Back to reset\n");
 702        }
 703
 704        return 0;
 705}
 706
 707static int wl1273_fm_start(struct wl1273_device *radio, int new_mode)
 708{
 709        struct wl1273_core *core = radio->core;
 710        struct wl1273_fm_platform_data *pdata = core->pdata;
 711        struct device *dev = radio->dev;
 712        int r = -EINVAL;
 713
 714        if (pdata->enable && core->mode == WL1273_MODE_OFF) {
 715                dev_dbg(radio->dev, "Out of reset\n");
 716
 717                pdata->enable();
 718                msleep(250);
 719        }
 720
 721        if (new_mode == WL1273_MODE_RX) {
 722                u16 val = WL1273_POWER_SET_FM;
 723
 724                if (radio->rds_on)
 725                        val |= WL1273_POWER_SET_RDS;
 726
 727                /* If this fails try again */
 728                r = wl1273_fm_write_cmd(core, WL1273_POWER_SET, val);
 729                if (r) {
 730                        msleep(100);
 731
 732                        r = wl1273_fm_write_cmd(core, WL1273_POWER_SET, val);
 733                        if (r) {
 734                                dev_err(dev, "%s: POWER_SET fails\n", __func__);
 735                                goto fail;
 736                        }
 737                }
 738
 739                /* rds buffer configuration */
 740                radio->wr_index = 0;
 741                radio->rd_index = 0;
 742
 743        } else if (new_mode == WL1273_MODE_TX) {
 744                /* If this fails try again once */
 745                r = wl1273_fm_write_cmd(core, WL1273_PUPD_SET,
 746                                        WL1273_PUPD_SET_ON);
 747                if (r) {
 748                        msleep(100);
 749                        r = wl1273_fm_write_cmd(core, WL1273_PUPD_SET,
 750                                        WL1273_PUPD_SET_ON);
 751                        if (r) {
 752                                dev_err(dev, "%s: PUPD_SET fails\n", __func__);
 753                                goto fail;
 754                        }
 755                }
 756
 757                if (radio->rds_on)
 758                        r = wl1273_fm_write_cmd(core, WL1273_RDS_DATA_ENB, 1);
 759                else
 760                        r = wl1273_fm_write_cmd(core, WL1273_RDS_DATA_ENB, 0);
 761        } else {
 762                dev_warn(dev, "%s: Illegal mode.\n", __func__);
 763        }
 764
 765        if (core->mode == WL1273_MODE_OFF) {
 766                r = wl1273_fm_upload_firmware_patch(radio);
 767                if (r)
 768                        dev_warn(dev, "Firmware upload failed.\n");
 769
 770                /*
 771                 * Sometimes the chip is in a wrong power state at this point.
 772                 * So we set the power once again.
 773                 */
 774                if (new_mode == WL1273_MODE_RX) {
 775                        u16 val = WL1273_POWER_SET_FM;
 776
 777                        if (radio->rds_on)
 778                                val |= WL1273_POWER_SET_RDS;
 779
 780                        r = wl1273_fm_write_cmd(core, WL1273_POWER_SET, val);
 781                        if (r) {
 782                                dev_err(dev, "%s: POWER_SET fails\n", __func__);
 783                                goto fail;
 784                        }
 785                } else if (new_mode == WL1273_MODE_TX) {
 786                        r = wl1273_fm_write_cmd(core, WL1273_PUPD_SET,
 787                                                WL1273_PUPD_SET_ON);
 788                        if (r) {
 789                                dev_err(dev, "%s: PUPD_SET fails\n", __func__);
 790                                goto fail;
 791                        }
 792                }
 793        }
 794
 795        return 0;
 796fail:
 797        if (pdata->disable)
 798                pdata->disable();
 799
 800        dev_dbg(dev, "%s: return: %d\n", __func__, r);
 801        return r;
 802}
 803
 804static int wl1273_fm_suspend(struct wl1273_device *radio)
 805{
 806        struct wl1273_core *core = radio->core;
 807        int r = 0;
 808
 809        /* Cannot go from OFF to SUSPENDED */
 810        if (core->mode == WL1273_MODE_RX)
 811                r = wl1273_fm_write_cmd(core, WL1273_POWER_SET,
 812                                WL1273_POWER_SET_RETENTION);
 813        else if (core->mode == WL1273_MODE_TX)
 814                r = wl1273_fm_write_cmd(core, WL1273_PUPD_SET,
 815                                WL1273_PUPD_SET_RETENTION);
 816        else
 817                r = -EINVAL;
 818
 819        if (r) {
 820                dev_err(radio->dev, "%s: POWER_SET fails: %d\n", __func__, r);
 821                goto out;
 822        }
 823
 824out:
 825        return r;
 826}
 827
 828static int wl1273_fm_set_mode(struct wl1273_device *radio, int mode)
 829{
 830        struct wl1273_core *core = radio->core;
 831        struct device *dev = radio->dev;
 832        int old_mode;
 833        int r;
 834
 835        dev_dbg(dev, "%s\n", __func__);
 836        dev_dbg(dev, "Forbidden modes: 0x%02x\n", radio->forbidden);
 837
 838        old_mode = core->mode;
 839        if (mode & radio->forbidden) {
 840                r = -EPERM;
 841                goto out;
 842        }
 843
 844        switch (mode) {
 845        case WL1273_MODE_RX:
 846        case WL1273_MODE_TX:
 847                r = wl1273_fm_start(radio, mode);
 848                if (r) {
 849                        dev_err(dev, "%s: Cannot start.\n", __func__);
 850                        wl1273_fm_stop(radio);
 851                        goto out;
 852                }
 853
 854                core->mode = mode;
 855                r = wl1273_fm_write_cmd(core, WL1273_INT_MASK_SET,
 856                                        radio->irq_flags);
 857                if (r) {
 858                        dev_err(dev, "INT_MASK_SET fails.\n");
 859                        goto out;
 860                }
 861
 862                /* remember previous settings */
 863                if (mode == WL1273_MODE_RX) {
 864                        r = wl1273_fm_set_rx_freq(radio, radio->rx_frequency);
 865                        if (r) {
 866                                dev_err(dev, "set freq fails: %d.\n", r);
 867                                goto out;
 868                        }
 869
 870                        r = core->set_volume(core, core->volume);
 871                        if (r) {
 872                                dev_err(dev, "set volume fails: %d.\n", r);
 873                                goto out;
 874                        }
 875
 876                        dev_dbg(dev, "%s: Set vol: %d.\n", __func__,
 877                                core->volume);
 878                } else {
 879                        r = wl1273_fm_set_tx_freq(radio, radio->tx_frequency);
 880                        if (r) {
 881                                dev_err(dev, "set freq fails: %d.\n", r);
 882                                goto out;
 883                        }
 884                }
 885
 886                dev_dbg(radio->dev, "%s: Set audio mode.\n", __func__);
 887
 888                r = core->set_audio(core, core->audio_mode);
 889                if (r)
 890                        dev_err(dev, "Cannot set audio mode.\n");
 891                break;
 892
 893        case WL1273_MODE_OFF:
 894                r = wl1273_fm_stop(radio);
 895                if (r)
 896                        dev_err(dev, "%s: Off fails: %d\n", __func__, r);
 897                else
 898                        core->mode = WL1273_MODE_OFF;
 899
 900                break;
 901
 902        case WL1273_MODE_SUSPENDED:
 903                r = wl1273_fm_suspend(radio);
 904                if (r)
 905                        dev_err(dev, "%s: Suspend fails: %d\n", __func__, r);
 906                else
 907                        core->mode = WL1273_MODE_SUSPENDED;
 908
 909                break;
 910
 911        default:
 912                dev_err(dev, "%s: Unknown mode: %d\n", __func__, mode);
 913                r = -EINVAL;
 914                break;
 915        }
 916out:
 917        if (r)
 918                core->mode = old_mode;
 919
 920        return r;
 921}
 922
 923static int wl1273_fm_set_seek(struct wl1273_device *radio,
 924                              unsigned int wrap_around,
 925                              unsigned int seek_upward,
 926                              int level)
 927{
 928        struct wl1273_core *core = radio->core;
 929        int r = 0;
 930        unsigned int dir = (seek_upward == 0) ? 0 : 1;
 931        unsigned int f;
 932
 933        f = radio->rx_frequency;
 934        dev_dbg(radio->dev, "rx_frequency: %d\n", f);
 935
 936        if (dir && f + radio->spacing <= radio->rangehigh)
 937                r = wl1273_fm_set_rx_freq(radio, f + radio->spacing);
 938        else if (dir && wrap_around)
 939                r = wl1273_fm_set_rx_freq(radio, radio->rangelow);
 940        else if (f - radio->spacing >= radio->rangelow)
 941                r = wl1273_fm_set_rx_freq(radio, f - radio->spacing);
 942        else if (wrap_around)
 943                r = wl1273_fm_set_rx_freq(radio, radio->rangehigh);
 944
 945        if (r)
 946                goto out;
 947
 948        if (level < SCHAR_MIN || level > SCHAR_MAX)
 949                return -EINVAL;
 950
 951        INIT_COMPLETION(radio->busy);
 952        dev_dbg(radio->dev, "%s: BUSY\n", __func__);
 953
 954        r = wl1273_fm_write_cmd(core, WL1273_INT_MASK_SET, radio->irq_flags);
 955        if (r)
 956                goto out;
 957
 958        dev_dbg(radio->dev, "%s\n", __func__);
 959
 960        r = wl1273_fm_write_cmd(core, WL1273_SEARCH_LVL_SET, level);
 961        if (r)
 962                goto out;
 963
 964        r = wl1273_fm_write_cmd(core, WL1273_SEARCH_DIR_SET, dir);
 965        if (r)
 966                goto out;
 967
 968        r = wl1273_fm_write_cmd(core, WL1273_TUNER_MODE_SET,
 969                                TUNER_MODE_AUTO_SEEK);
 970        if (r)
 971                goto out;
 972
 973        wait_for_completion_timeout(&radio->busy, msecs_to_jiffies(1000));
 974        if (!(radio->irq_received & WL1273_BL_EVENT))
 975                goto out;
 976
 977        radio->irq_received &= ~WL1273_BL_EVENT;
 978
 979        if (!wrap_around)
 980                goto out;
 981
 982        /* Wrap around */
 983        dev_dbg(radio->dev, "Wrap around in HW seek.\n");
 984
 985        if (seek_upward)
 986                f = radio->rangelow;
 987        else
 988                f = radio->rangehigh;
 989
 990        r = wl1273_fm_set_rx_freq(radio, f);
 991        if (r)
 992                goto out;
 993
 994        INIT_COMPLETION(radio->busy);
 995        dev_dbg(radio->dev, "%s: BUSY\n", __func__);
 996
 997        r = wl1273_fm_write_cmd(core, WL1273_TUNER_MODE_SET,
 998                                TUNER_MODE_AUTO_SEEK);
 999        if (r)
1000                goto out;
1001
1002        wait_for_completion_timeout(&radio->busy, msecs_to_jiffies(1000));
1003out:
1004        dev_dbg(radio->dev, "%s: Err: %d\n", __func__, r);
1005        return r;
1006}
1007
1008/**
1009 * wl1273_fm_get_tx_ctune() -   Get the TX tuning capacitor value.
1010 * @radio:                      A pointer to the device struct.
1011 */
1012static unsigned int wl1273_fm_get_tx_ctune(struct wl1273_device *radio)
1013{
1014        struct wl1273_core *core = radio->core;
1015        struct device *dev = radio->dev;
1016        u16 val;
1017        int r;
1018
1019        if (core->mode == WL1273_MODE_OFF ||
1020            core->mode == WL1273_MODE_SUSPENDED)
1021                return -EPERM;
1022
1023        r = wl1273_fm_read_reg(core, WL1273_READ_FMANT_TUNE_VALUE, &val);
1024        if (r) {
1025                dev_err(dev, "%s: read error: %d\n", __func__, r);
1026                goto out;
1027        }
1028
1029out:
1030        return val;
1031}
1032
1033/**
1034 * wl1273_fm_set_preemphasis() - Set the TX pre-emphasis value.
1035 * @radio:                       A pointer to the device struct.
1036 * @preemphasis:                 The new pre-amphasis value.
1037 *
1038 * Possible pre-emphasis values are: V4L2_PREEMPHASIS_DISABLED,
1039 * V4L2_PREEMPHASIS_50_uS and V4L2_PREEMPHASIS_75_uS.
1040 */
1041static int wl1273_fm_set_preemphasis(struct wl1273_device *radio,
1042                                     unsigned int preemphasis)
1043{
1044        struct wl1273_core *core = radio->core;
1045        int r;
1046        u16 em;
1047
1048        if (core->mode == WL1273_MODE_OFF ||
1049            core->mode == WL1273_MODE_SUSPENDED)
1050                return -EPERM;
1051
1052        mutex_lock(&core->lock);
1053
1054        switch (preemphasis) {
1055        case V4L2_PREEMPHASIS_DISABLED:
1056                em = 1;
1057                break;
1058        case V4L2_PREEMPHASIS_50_uS:
1059                em = 0;
1060                break;
1061        case V4L2_PREEMPHASIS_75_uS:
1062                em = 2;
1063                break;
1064        default:
1065                r = -EINVAL;
1066                goto out;
1067        }
1068
1069        r = wl1273_fm_write_cmd(core, WL1273_PREMPH_SET, em);
1070        if (r)
1071                goto out;
1072
1073        radio->preemphasis = preemphasis;
1074
1075out:
1076        mutex_unlock(&core->lock);
1077        return r;
1078}
1079
1080static int wl1273_fm_rds_on(struct wl1273_device *radio)
1081{
1082        struct wl1273_core *core = radio->core;
1083        int r;
1084
1085        dev_dbg(radio->dev, "%s\n", __func__);
1086        if (radio->rds_on)
1087                return 0;
1088
1089        r = wl1273_fm_write_cmd(core, WL1273_POWER_SET,
1090                        WL1273_POWER_SET_FM | WL1273_POWER_SET_RDS);
1091        if (r)
1092                goto out;
1093
1094        r = wl1273_fm_set_rx_freq(radio, radio->rx_frequency);
1095        if (r)
1096                dev_err(radio->dev, "set freq fails: %d.\n", r);
1097out:
1098        return r;
1099}
1100
1101static int wl1273_fm_rds_off(struct wl1273_device *radio)
1102{
1103        struct wl1273_core *core = radio->core;
1104        int r;
1105
1106        if (!radio->rds_on)
1107                return 0;
1108
1109        radio->irq_flags &= ~WL1273_RDS_EVENT;
1110
1111        r = wl1273_fm_write_cmd(core, WL1273_INT_MASK_SET, radio->irq_flags);
1112        if (r)
1113                goto out;
1114
1115        /* stop rds reception */
1116        cancel_delayed_work(&radio->work);
1117
1118        /* Service pending read */
1119        wake_up_interruptible(&radio->read_queue);
1120
1121        dev_dbg(radio->dev, "%s\n", __func__);
1122
1123        r = wl1273_fm_write_cmd(core, WL1273_POWER_SET, WL1273_POWER_SET_FM);
1124        if (r)
1125                goto out;
1126
1127        r = wl1273_fm_set_rx_freq(radio, radio->rx_frequency);
1128        if (r)
1129                dev_err(radio->dev, "set freq fails: %d.\n", r);
1130out:
1131        dev_dbg(radio->dev, "%s: exiting...\n", __func__);
1132
1133        return r;
1134}
1135
1136static int wl1273_fm_set_rds(struct wl1273_device *radio, unsigned int new_mode)
1137{
1138        int r = 0;
1139        struct wl1273_core *core = radio->core;
1140
1141        if (core->mode == WL1273_MODE_OFF ||
1142            core->mode == WL1273_MODE_SUSPENDED)
1143                return -EPERM;
1144
1145        if (new_mode == WL1273_RDS_RESET) {
1146                r = wl1273_fm_write_cmd(core, WL1273_RDS_CNTRL_SET, 1);
1147                return r;
1148        }
1149
1150        if (core->mode == WL1273_MODE_TX && new_mode == WL1273_RDS_OFF) {
1151                r = wl1273_fm_write_cmd(core, WL1273_RDS_DATA_ENB, 0);
1152        } else if (core->mode == WL1273_MODE_TX && new_mode == WL1273_RDS_ON) {
1153                r = wl1273_fm_write_cmd(core, WL1273_RDS_DATA_ENB, 1);
1154        } else if (core->mode == WL1273_MODE_RX && new_mode == WL1273_RDS_OFF) {
1155                r = wl1273_fm_rds_off(radio);
1156        } else if (core->mode == WL1273_MODE_RX && new_mode == WL1273_RDS_ON) {
1157                r = wl1273_fm_rds_on(radio);
1158        } else {
1159                dev_err(radio->dev, "%s: Unknown mode: %d\n",
1160                        __func__, new_mode);
1161                r = -EINVAL;
1162        }
1163
1164        if (!r)
1165                radio->rds_on = (new_mode == WL1273_RDS_ON) ? true : false;
1166
1167        return r;
1168}
1169
1170static ssize_t wl1273_fm_fops_write(struct file *file, const char __user *buf,
1171                                    size_t count, loff_t *ppos)
1172{
1173        struct wl1273_device *radio = video_get_drvdata(video_devdata(file));
1174        u16 val;
1175        int r;
1176
1177        dev_dbg(radio->dev, "%s\n", __func__);
1178
1179        if (radio->core->mode != WL1273_MODE_TX)
1180                return count;
1181
1182        if (radio->rds_users == 0) {
1183                dev_warn(radio->dev, "%s: RDS not on.\n", __func__);
1184                return 0;
1185        }
1186
1187        if (mutex_lock_interruptible(&radio->core->lock))
1188                return -EINTR;
1189        /*
1190         * Multiple processes can open the device, but only
1191         * one gets to write to it.
1192         */
1193        if (radio->owner && radio->owner != file) {
1194                r = -EBUSY;
1195                goto out;
1196        }
1197        radio->owner = file;
1198
1199        /* Manual Mode */
1200        if (count > 255)
1201                val = 255;
1202        else
1203                val = count;
1204
1205        wl1273_fm_write_cmd(radio->core, WL1273_RDS_CONFIG_DATA_SET, val);
1206
1207        if (copy_from_user(radio->write_buf + 1, buf, val)) {
1208                r = -EFAULT;
1209                goto out;
1210        }
1211
1212        dev_dbg(radio->dev, "Count: %d\n", val);
1213        dev_dbg(radio->dev, "From user: \"%s\"\n", radio->write_buf);
1214
1215        radio->write_buf[0] = WL1273_RDS_DATA_SET;
1216        wl1273_fm_write_data(radio->core, radio->write_buf, val + 1);
1217
1218        r = val;
1219out:
1220        mutex_unlock(&radio->core->lock);
1221
1222        return r;
1223}
1224
1225static unsigned int wl1273_fm_fops_poll(struct file *file,
1226                                        struct poll_table_struct *pts)
1227{
1228        struct wl1273_device *radio = video_get_drvdata(video_devdata(file));
1229        struct wl1273_core *core = radio->core;
1230
1231        if (radio->owner && radio->owner != file)
1232                return -EBUSY;
1233
1234        radio->owner = file;
1235
1236        if (core->mode == WL1273_MODE_RX) {
1237                poll_wait(file, &radio->read_queue, pts);
1238
1239                if (radio->rd_index != radio->wr_index)
1240                        return POLLIN | POLLRDNORM;
1241
1242        } else if (core->mode == WL1273_MODE_TX) {
1243                return POLLOUT | POLLWRNORM;
1244        }
1245
1246        return 0;
1247}
1248
1249static int wl1273_fm_fops_open(struct file *file)
1250{
1251        struct wl1273_device *radio = video_get_drvdata(video_devdata(file));
1252        struct wl1273_core *core = radio->core;
1253        int r = 0;
1254
1255        dev_dbg(radio->dev, "%s\n", __func__);
1256
1257        if (core->mode == WL1273_MODE_RX && radio->rds_on &&
1258            !radio->rds_users) {
1259                dev_dbg(radio->dev, "%s: Mode: %d\n", __func__, core->mode);
1260
1261                if (mutex_lock_interruptible(&core->lock))
1262                        return -EINTR;
1263
1264                radio->irq_flags |= WL1273_RDS_EVENT;
1265
1266                r = wl1273_fm_write_cmd(core, WL1273_INT_MASK_SET,
1267                                        radio->irq_flags);
1268                if (r) {
1269                        mutex_unlock(&core->lock);
1270                        goto out;
1271                }
1272
1273                radio->rds_users++;
1274
1275                mutex_unlock(&core->lock);
1276        }
1277out:
1278        return r;
1279}
1280
1281static int wl1273_fm_fops_release(struct file *file)
1282{
1283        struct wl1273_device *radio = video_get_drvdata(video_devdata(file));
1284        struct wl1273_core *core = radio->core;
1285        int r = 0;
1286
1287        dev_dbg(radio->dev, "%s\n", __func__);
1288
1289        if (radio->rds_users > 0) {
1290                radio->rds_users--;
1291                if (radio->rds_users == 0) {
1292                        if (mutex_lock_interruptible(&core->lock))
1293                                return -EINTR;
1294
1295                        radio->irq_flags &= ~WL1273_RDS_EVENT;
1296
1297                        if (core->mode == WL1273_MODE_RX) {
1298                                r = wl1273_fm_write_cmd(core,
1299                                                        WL1273_INT_MASK_SET,
1300                                                        radio->irq_flags);
1301                                if (r) {
1302                                        mutex_unlock(&core->lock);
1303                                        goto out;
1304                                }
1305                        }
1306                        mutex_unlock(&core->lock);
1307                }
1308        }
1309
1310        if (file == radio->owner)
1311                radio->owner = NULL;
1312out:
1313        return r;
1314}
1315
1316static ssize_t wl1273_fm_fops_read(struct file *file, char __user *buf,
1317                                   size_t count, loff_t *ppos)
1318{
1319        int r = 0;
1320        struct wl1273_device *radio = video_get_drvdata(video_devdata(file));
1321        struct wl1273_core *core = radio->core;
1322        unsigned int block_count = 0;
1323        u16 val;
1324
1325        dev_dbg(radio->dev, "%s\n", __func__);
1326
1327        if (radio->core->mode != WL1273_MODE_RX)
1328                return 0;
1329
1330        if (radio->rds_users == 0) {
1331                dev_warn(radio->dev, "%s: RDS not on.\n", __func__);
1332                return 0;
1333        }
1334
1335        if (mutex_lock_interruptible(&core->lock))
1336                return -EINTR;
1337
1338        /*
1339         * Multiple processes can open the device, but only
1340         * one at a time gets read access.
1341         */
1342        if (radio->owner && radio->owner != file) {
1343                r = -EBUSY;
1344                goto out;
1345        }
1346        radio->owner = file;
1347
1348        r = wl1273_fm_read_reg(core, WL1273_RDS_SYNC_GET, &val);
1349        if (r) {
1350                dev_err(radio->dev, "%s: Get RDS_SYNC fails.\n", __func__);
1351                goto out;
1352        } else if (val == 0) {
1353                dev_info(radio->dev, "RDS_SYNC: Not synchronized\n");
1354                r = -ENODATA;
1355                goto out;
1356        }
1357
1358        /* block if no new data available */
1359        while (radio->wr_index == radio->rd_index) {
1360                if (file->f_flags & O_NONBLOCK) {
1361                        r = -EWOULDBLOCK;
1362                        goto out;
1363                }
1364
1365                dev_dbg(radio->dev, "%s: Wait for RDS data.\n", __func__);
1366                if (wait_event_interruptible(radio->read_queue,
1367                                             radio->wr_index !=
1368                                             radio->rd_index) < 0) {
1369                        r = -EINTR;
1370                        goto out;
1371                }
1372        }
1373
1374        /* calculate block count from byte count */
1375        count /= RDS_BLOCK_SIZE;
1376
1377        /* copy RDS blocks from the internal buffer and to user buffer */
1378        while (block_count < count) {
1379                if (radio->rd_index == radio->wr_index)
1380                        break;
1381
1382                /* always transfer complete RDS blocks */
1383                if (copy_to_user(buf, &radio->buffer[radio->rd_index],
1384                                 RDS_BLOCK_SIZE))
1385                        break;
1386
1387                /* increment and wrap the read pointer */
1388                radio->rd_index += RDS_BLOCK_SIZE;
1389                if (radio->rd_index >= radio->buf_size)
1390                        radio->rd_index = 0;
1391
1392                /* increment counters */
1393                block_count++;
1394                buf += RDS_BLOCK_SIZE;
1395                r += RDS_BLOCK_SIZE;
1396        }
1397
1398out:
1399        dev_dbg(radio->dev, "%s: exit\n", __func__);
1400        mutex_unlock(&core->lock);
1401
1402        return r;
1403}
1404
1405static const struct v4l2_file_operations wl1273_fops = {
1406        .owner          = THIS_MODULE,
1407        .read           = wl1273_fm_fops_read,
1408        .write          = wl1273_fm_fops_write,
1409        .poll           = wl1273_fm_fops_poll,
1410        .unlocked_ioctl = video_ioctl2,
1411        .open           = wl1273_fm_fops_open,
1412        .release        = wl1273_fm_fops_release,
1413};
1414
1415static int wl1273_fm_vidioc_querycap(struct file *file, void *priv,
1416                                     struct v4l2_capability *capability)
1417{
1418        struct wl1273_device *radio = video_get_drvdata(video_devdata(file));
1419
1420        dev_dbg(radio->dev, "%s\n", __func__);
1421
1422        strlcpy(capability->driver, WL1273_FM_DRIVER_NAME,
1423                sizeof(capability->driver));
1424        strlcpy(capability->card, "Texas Instruments Wl1273 FM Radio",
1425                sizeof(capability->card));
1426        strlcpy(capability->bus_info, radio->bus_type,
1427                sizeof(capability->bus_info));
1428
1429        capability->capabilities = V4L2_CAP_HW_FREQ_SEEK |
1430                V4L2_CAP_TUNER | V4L2_CAP_RADIO | V4L2_CAP_AUDIO |
1431                V4L2_CAP_RDS_CAPTURE | V4L2_CAP_MODULATOR |
1432                V4L2_CAP_RDS_OUTPUT;
1433
1434        return 0;
1435}
1436
1437static int wl1273_fm_vidioc_g_input(struct file *file, void *priv,
1438                                    unsigned int *i)
1439{
1440        struct wl1273_device *radio = video_get_drvdata(video_devdata(file));
1441
1442        dev_dbg(radio->dev, "%s\n", __func__);
1443
1444        *i = 0;
1445
1446        return 0;
1447}
1448
1449static int wl1273_fm_vidioc_s_input(struct file *file, void *priv,
1450                                    unsigned int i)
1451{
1452        struct wl1273_device *radio = video_get_drvdata(video_devdata(file));
1453
1454        dev_dbg(radio->dev, "%s\n", __func__);
1455
1456        if (i != 0)
1457                return -EINVAL;
1458
1459        return 0;
1460}
1461
1462/**
1463 * wl1273_fm_set_tx_power() -   Set the transmission power value.
1464 * @core:                       A pointer to the device struct.
1465 * @power:                      The new power value.
1466 */
1467static int wl1273_fm_set_tx_power(struct wl1273_device *radio, u16 power)
1468{
1469        int r;
1470
1471        if (radio->core->mode == WL1273_MODE_OFF ||
1472            radio->core->mode == WL1273_MODE_SUSPENDED)
1473                return -EPERM;
1474
1475        mutex_lock(&radio->core->lock);
1476
1477        /* Convert the dBuV value to chip presentation */
1478        r = wl1273_fm_write_cmd(radio->core, WL1273_POWER_LEV_SET, 122 - power);
1479        if (r)
1480                goto out;
1481
1482        radio->tx_power = power;
1483
1484out:
1485        mutex_unlock(&radio->core->lock);
1486        return r;
1487}
1488
1489#define WL1273_SPACING_50kHz    1
1490#define WL1273_SPACING_100kHz   2
1491#define WL1273_SPACING_200kHz   4
1492
1493static int wl1273_fm_tx_set_spacing(struct wl1273_device *radio,
1494                                    unsigned int spacing)
1495{
1496        int r;
1497
1498        if (spacing == 0) {
1499                r = wl1273_fm_write_cmd(radio->core, WL1273_SCAN_SPACING_SET,
1500                                        WL1273_SPACING_100kHz);
1501                radio->spacing = 100;
1502        } else if (spacing - 50000 < 25000) {
1503                r = wl1273_fm_write_cmd(radio->core, WL1273_SCAN_SPACING_SET,
1504                                        WL1273_SPACING_50kHz);
1505                radio->spacing = 50;
1506        } else if (spacing - 100000 < 50000) {
1507                r = wl1273_fm_write_cmd(radio->core, WL1273_SCAN_SPACING_SET,
1508                                        WL1273_SPACING_100kHz);
1509                radio->spacing = 100;
1510        } else {
1511                r = wl1273_fm_write_cmd(radio->core, WL1273_SCAN_SPACING_SET,
1512                                        WL1273_SPACING_200kHz);
1513                radio->spacing = 200;
1514        }
1515
1516        return r;
1517}
1518
1519static int wl1273_fm_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
1520{
1521        struct wl1273_device *radio = ctrl->priv;
1522        struct wl1273_core *core = radio->core;
1523
1524        dev_dbg(radio->dev, "%s\n", __func__);
1525
1526        if (mutex_lock_interruptible(&core->lock))
1527                return -EINTR;
1528
1529        switch (ctrl->id) {
1530        case  V4L2_CID_TUNE_ANTENNA_CAPACITOR:
1531                ctrl->val = wl1273_fm_get_tx_ctune(radio);
1532                break;
1533
1534        default:
1535                dev_warn(radio->dev, "%s: Unknown IOCTL: %d\n",
1536                         __func__, ctrl->id);
1537                break;
1538        }
1539
1540        mutex_unlock(&core->lock);
1541
1542        return 0;
1543}
1544
1545#define WL1273_MUTE_SOFT_ENABLE    (1 << 0)
1546#define WL1273_MUTE_AC             (1 << 1)
1547#define WL1273_MUTE_HARD_LEFT      (1 << 2)
1548#define WL1273_MUTE_HARD_RIGHT     (1 << 3)
1549#define WL1273_MUTE_SOFT_FORCE     (1 << 4)
1550
1551static inline struct wl1273_device *to_radio(struct v4l2_ctrl *ctrl)
1552{
1553        return container_of(ctrl->handler, struct wl1273_device, ctrl_handler);
1554}
1555
1556static int wl1273_fm_vidioc_s_ctrl(struct v4l2_ctrl *ctrl)
1557{
1558        struct wl1273_device *radio = to_radio(ctrl);
1559        struct wl1273_core *core = radio->core;
1560        int r = 0;
1561
1562        dev_dbg(radio->dev, "%s\n", __func__);
1563
1564        switch (ctrl->id) {
1565        case V4L2_CID_AUDIO_MUTE:
1566                if (mutex_lock_interruptible(&core->lock))
1567                        return -EINTR;
1568
1569                if (core->mode == WL1273_MODE_RX && ctrl->val)
1570                        r = wl1273_fm_write_cmd(core,
1571                                                WL1273_MUTE_STATUS_SET,
1572                                                WL1273_MUTE_HARD_LEFT |
1573                                                WL1273_MUTE_HARD_RIGHT);
1574                else if (core->mode == WL1273_MODE_RX)
1575                        r = wl1273_fm_write_cmd(core,
1576                                                WL1273_MUTE_STATUS_SET, 0x0);
1577                else if (core->mode == WL1273_MODE_TX && ctrl->val)
1578                        r = wl1273_fm_write_cmd(core, WL1273_MUTE, 1);
1579                else if (core->mode == WL1273_MODE_TX)
1580                        r = wl1273_fm_write_cmd(core, WL1273_MUTE, 0);
1581
1582                mutex_unlock(&core->lock);
1583                break;
1584
1585        case V4L2_CID_AUDIO_VOLUME:
1586                if (ctrl->val == 0)
1587                        r = wl1273_fm_set_mode(radio, WL1273_MODE_OFF);
1588                else
1589                        r =  core->set_volume(core, core->volume);
1590                break;
1591
1592        case V4L2_CID_TUNE_PREEMPHASIS:
1593                r = wl1273_fm_set_preemphasis(radio, ctrl->val);
1594                break;
1595
1596        case V4L2_CID_TUNE_POWER_LEVEL:
1597                r = wl1273_fm_set_tx_power(radio, ctrl->val);
1598                break;
1599
1600        default:
1601                dev_warn(radio->dev, "%s: Unknown IOCTL: %d\n",
1602                         __func__, ctrl->id);
1603                break;
1604        }
1605
1606        dev_dbg(radio->dev, "%s\n", __func__);
1607        return r;
1608}
1609
1610static int wl1273_fm_vidioc_g_audio(struct file *file, void *priv,
1611                                    struct v4l2_audio *audio)
1612{
1613        struct wl1273_device *radio = video_get_drvdata(video_devdata(file));
1614
1615        dev_dbg(radio->dev, "%s\n", __func__);
1616
1617        if (audio->index > 1)
1618                return -EINVAL;
1619
1620        strlcpy(audio->name, "Radio", sizeof(audio->name));
1621        audio->capability = V4L2_AUDCAP_STEREO;
1622
1623        return 0;
1624}
1625
1626static int wl1273_fm_vidioc_s_audio(struct file *file, void *priv,
1627                                    struct v4l2_audio *audio)
1628{
1629        struct wl1273_device *radio = video_get_drvdata(video_devdata(file));
1630
1631        dev_dbg(radio->dev, "%s\n", __func__);
1632
1633        if (audio->index != 0)
1634                return -EINVAL;
1635
1636        return 0;
1637}
1638
1639#define WL1273_RDS_NOT_SYNCHRONIZED 0
1640#define WL1273_RDS_SYNCHRONIZED 1
1641
1642static int wl1273_fm_vidioc_g_tuner(struct file *file, void *priv,
1643                                    struct v4l2_tuner *tuner)
1644{
1645        struct wl1273_device *radio = video_get_drvdata(video_devdata(file));
1646        struct wl1273_core *core = radio->core;
1647        u16 val;
1648        int r;
1649
1650        dev_dbg(radio->dev, "%s\n", __func__);
1651
1652        if (tuner->index > 0)
1653                return -EINVAL;
1654
1655        strlcpy(tuner->name, WL1273_FM_DRIVER_NAME, sizeof(tuner->name));
1656        tuner->type = V4L2_TUNER_RADIO;
1657
1658        tuner->rangelow = WL1273_FREQ(WL1273_BAND_JAPAN_LOW);
1659        tuner->rangehigh = WL1273_FREQ(WL1273_BAND_OTHER_HIGH);
1660
1661        tuner->capability = V4L2_TUNER_CAP_LOW | V4L2_TUNER_CAP_RDS |
1662                V4L2_TUNER_CAP_STEREO | V4L2_TUNER_CAP_RDS_BLOCK_IO;
1663
1664        if (radio->stereo)
1665                tuner->audmode = V4L2_TUNER_MODE_STEREO;
1666        else
1667                tuner->audmode = V4L2_TUNER_MODE_MONO;
1668
1669        if (core->mode != WL1273_MODE_RX)
1670                return 0;
1671
1672        if (mutex_lock_interruptible(&core->lock))
1673                return -EINTR;
1674
1675        r = wl1273_fm_read_reg(core, WL1273_STEREO_GET, &val);
1676        if (r)
1677                goto out;
1678
1679        if (val == 1)
1680                tuner->rxsubchans = V4L2_TUNER_SUB_STEREO;
1681        else
1682                tuner->rxsubchans = V4L2_TUNER_SUB_MONO;
1683
1684        r = wl1273_fm_read_reg(core, WL1273_RSSI_LVL_GET, &val);
1685        if (r)
1686                goto out;
1687
1688        tuner->signal = (s16) val;
1689        dev_dbg(radio->dev, "Signal: %d\n", tuner->signal);
1690
1691        tuner->afc = 0;
1692
1693        r = wl1273_fm_read_reg(core, WL1273_RDS_SYNC_GET, &val);
1694        if (r)
1695                goto out;
1696
1697        if (val == WL1273_RDS_SYNCHRONIZED)
1698                tuner->rxsubchans |= V4L2_TUNER_SUB_RDS;
1699out:
1700        mutex_unlock(&core->lock);
1701
1702        return r;
1703}
1704
1705static int wl1273_fm_vidioc_s_tuner(struct file *file, void *priv,
1706                                    struct v4l2_tuner *tuner)
1707{
1708        struct wl1273_device *radio = video_get_drvdata(video_devdata(file));
1709        struct wl1273_core *core = radio->core;
1710        int r = 0;
1711
1712        dev_dbg(radio->dev, "%s\n", __func__);
1713        dev_dbg(radio->dev, "tuner->index: %d\n", tuner->index);
1714        dev_dbg(radio->dev, "tuner->name: %s\n", tuner->name);
1715        dev_dbg(radio->dev, "tuner->capability: 0x%04x\n", tuner->capability);
1716        dev_dbg(radio->dev, "tuner->rxsubchans: 0x%04x\n", tuner->rxsubchans);
1717        dev_dbg(radio->dev, "tuner->rangelow: %d\n", tuner->rangelow);
1718        dev_dbg(radio->dev, "tuner->rangehigh: %d\n", tuner->rangehigh);
1719
1720        if (tuner->index > 0)
1721                return -EINVAL;
1722
1723        if (mutex_lock_interruptible(&core->lock))
1724                return -EINTR;
1725
1726        r = wl1273_fm_set_mode(radio, WL1273_MODE_RX);
1727        if (r)
1728                goto out;
1729
1730        if (tuner->rxsubchans & V4L2_TUNER_SUB_RDS)
1731                r = wl1273_fm_set_rds(radio, WL1273_RDS_ON);
1732        else
1733                r = wl1273_fm_set_rds(radio, WL1273_RDS_OFF);
1734
1735        if (r)
1736                dev_warn(radio->dev, "%s: RDS fails: %d\n", __func__, r);
1737
1738        if (tuner->audmode == V4L2_TUNER_MODE_MONO) {
1739                r = wl1273_fm_write_cmd(core, WL1273_MOST_MODE_SET,
1740                                        WL1273_RX_MONO);
1741                if (r < 0) {
1742                        dev_warn(radio->dev, "%s: MOST_MODE fails: %d\n",
1743                                 __func__, r);
1744                        goto out;
1745                }
1746                radio->stereo = false;
1747        } else if (tuner->audmode == V4L2_TUNER_MODE_STEREO) {
1748                r = wl1273_fm_write_cmd(core, WL1273_MOST_MODE_SET,
1749                                        WL1273_RX_STEREO);
1750                if (r < 0) {
1751                        dev_warn(radio->dev, "%s: MOST_MODE fails: %d\n",
1752                                 __func__, r);
1753                        goto out;
1754                }
1755                radio->stereo = true;
1756        } else {
1757                dev_err(radio->dev, "%s: tuner->audmode: %d\n",
1758                         __func__, tuner->audmode);
1759                r = -EINVAL;
1760                goto out;
1761        }
1762
1763out:
1764        mutex_unlock(&core->lock);
1765
1766        return r;
1767}
1768
1769static int wl1273_fm_vidioc_g_frequency(struct file *file, void *priv,
1770                                        struct v4l2_frequency *freq)
1771{
1772        struct wl1273_device *radio = video_get_drvdata(video_devdata(file));
1773        struct wl1273_core *core = radio->core;
1774
1775        dev_dbg(radio->dev, "%s\n", __func__);
1776
1777        if (mutex_lock_interruptible(&core->lock))
1778                return -EINTR;
1779
1780        freq->type = V4L2_TUNER_RADIO;
1781        freq->frequency = WL1273_FREQ(wl1273_fm_get_freq(radio));
1782
1783        mutex_unlock(&core->lock);
1784
1785        return 0;
1786}
1787
1788static int wl1273_fm_vidioc_s_frequency(struct file *file, void *priv,
1789                                        struct v4l2_frequency *freq)
1790{
1791        struct wl1273_device *radio = video_get_drvdata(video_devdata(file));
1792        struct wl1273_core *core = radio->core;
1793        int r;
1794
1795        dev_dbg(radio->dev, "%s: %d\n", __func__, freq->frequency);
1796
1797        if (freq->type != V4L2_TUNER_RADIO) {
1798                dev_dbg(radio->dev,
1799                        "freq->type != V4L2_TUNER_RADIO: %d\n", freq->type);
1800                return -EINVAL;
1801        }
1802
1803        if (mutex_lock_interruptible(&core->lock))
1804                return -EINTR;
1805
1806        if (core->mode == WL1273_MODE_RX) {
1807                dev_dbg(radio->dev, "freq: %d\n", freq->frequency);
1808
1809                r = wl1273_fm_set_rx_freq(radio,
1810                                          WL1273_INV_FREQ(freq->frequency));
1811                if (r)
1812                        dev_warn(radio->dev, WL1273_FM_DRIVER_NAME
1813                                 ": set frequency failed with %d\n", r);
1814        } else {
1815                r = wl1273_fm_set_tx_freq(radio,
1816                                          WL1273_INV_FREQ(freq->frequency));
1817                if (r)
1818                        dev_warn(radio->dev, WL1273_FM_DRIVER_NAME
1819                                 ": set frequency failed with %d\n", r);
1820        }
1821
1822        mutex_unlock(&core->lock);
1823
1824        dev_dbg(radio->dev, "wl1273_vidioc_s_frequency: DONE\n");
1825        return r;
1826}
1827
1828#define WL1273_DEFAULT_SEEK_LEVEL       7
1829
1830static int wl1273_fm_vidioc_s_hw_freq_seek(struct file *file, void *priv,
1831                                           struct v4l2_hw_freq_seek *seek)
1832{
1833        struct wl1273_device *radio = video_get_drvdata(video_devdata(file));
1834        struct wl1273_core *core = radio->core;
1835        int r;
1836
1837        dev_dbg(radio->dev, "%s\n", __func__);
1838
1839        if (seek->tuner != 0 || seek->type != V4L2_TUNER_RADIO)
1840                return -EINVAL;
1841
1842        if (mutex_lock_interruptible(&core->lock))
1843                return -EINTR;
1844
1845        r = wl1273_fm_set_mode(radio, WL1273_MODE_RX);
1846        if (r)
1847                goto out;
1848
1849        r = wl1273_fm_tx_set_spacing(radio, seek->spacing);
1850        if (r)
1851                dev_warn(radio->dev, "HW seek failed: %d\n", r);
1852
1853        r = wl1273_fm_set_seek(radio, seek->wrap_around, seek->seek_upward,
1854                               WL1273_DEFAULT_SEEK_LEVEL);
1855        if (r)
1856                dev_warn(radio->dev, "HW seek failed: %d\n", r);
1857
1858out:
1859        mutex_unlock(&core->lock);
1860        return r;
1861}
1862
1863static int wl1273_fm_vidioc_s_modulator(struct file *file, void *priv,
1864                                        struct v4l2_modulator *modulator)
1865{
1866        struct wl1273_device *radio = video_get_drvdata(video_devdata(file));
1867        struct wl1273_core *core = radio->core;
1868        int r = 0;
1869
1870        dev_dbg(radio->dev, "%s\n", __func__);
1871
1872        if (modulator->index > 0)
1873                return -EINVAL;
1874
1875        if (mutex_lock_interruptible(&core->lock))
1876                return -EINTR;
1877
1878        r = wl1273_fm_set_mode(radio, WL1273_MODE_TX);
1879        if (r)
1880                goto out;
1881
1882        if (modulator->txsubchans & V4L2_TUNER_SUB_RDS)
1883                r = wl1273_fm_set_rds(radio, WL1273_RDS_ON);
1884        else
1885                r = wl1273_fm_set_rds(radio, WL1273_RDS_OFF);
1886
1887        if (modulator->txsubchans & V4L2_TUNER_SUB_MONO)
1888                r = wl1273_fm_write_cmd(core, WL1273_MONO_SET, WL1273_TX_MONO);
1889        else
1890                r = wl1273_fm_write_cmd(core, WL1273_MONO_SET,
1891                                        WL1273_RX_STEREO);
1892        if (r < 0)
1893                dev_warn(radio->dev, WL1273_FM_DRIVER_NAME
1894                         "MONO_SET fails: %d\n", r);
1895out:
1896        mutex_unlock(&core->lock);
1897
1898        return r;
1899}
1900
1901static int wl1273_fm_vidioc_g_modulator(struct file *file, void *priv,
1902                                        struct v4l2_modulator *modulator)
1903{
1904        struct wl1273_device *radio = video_get_drvdata(video_devdata(file));
1905        struct wl1273_core *core = radio->core;
1906        u16 val;
1907        int r;
1908
1909        dev_dbg(radio->dev, "%s\n", __func__);
1910
1911        strlcpy(modulator->name, WL1273_FM_DRIVER_NAME,
1912                sizeof(modulator->name));
1913
1914        modulator->rangelow = WL1273_FREQ(WL1273_BAND_JAPAN_LOW);
1915        modulator->rangehigh = WL1273_FREQ(WL1273_BAND_OTHER_HIGH);
1916
1917        modulator->capability =  V4L2_TUNER_CAP_LOW | V4L2_TUNER_CAP_RDS |
1918                V4L2_TUNER_CAP_STEREO | V4L2_TUNER_CAP_RDS_BLOCK_IO;
1919
1920        if (core->mode != WL1273_MODE_TX)
1921                return 0;
1922
1923        if (mutex_lock_interruptible(&core->lock))
1924                return -EINTR;
1925
1926        r = wl1273_fm_read_reg(core, WL1273_MONO_SET, &val);
1927        if (r)
1928                goto out;
1929
1930        if (val == WL1273_TX_STEREO)
1931                modulator->txsubchans = V4L2_TUNER_SUB_STEREO;
1932        else
1933                modulator->txsubchans = V4L2_TUNER_SUB_MONO;
1934
1935        if (radio->rds_on)
1936                modulator->txsubchans |= V4L2_TUNER_SUB_RDS;
1937out:
1938        mutex_unlock(&core->lock);
1939
1940        return 0;
1941}
1942
1943static int wl1273_fm_vidioc_log_status(struct file *file, void *priv)
1944{
1945        struct wl1273_device *radio = video_get_drvdata(video_devdata(file));
1946        struct wl1273_core *core = radio->core;
1947        struct device *dev = radio->dev;
1948        u16 val;
1949        int r;
1950
1951        dev_info(dev, DRIVER_DESC);
1952
1953        if (core->mode == WL1273_MODE_OFF) {
1954                dev_info(dev, "Mode: Off\n");
1955                return 0;
1956        }
1957
1958        if (core->mode == WL1273_MODE_SUSPENDED) {
1959                dev_info(dev, "Mode: Suspended\n");
1960                return 0;
1961        }
1962
1963        r = wl1273_fm_read_reg(core, WL1273_ASIC_ID_GET, &val);
1964        if (r)
1965                dev_err(dev, "%s: Get ASIC_ID fails.\n", __func__);
1966        else
1967                dev_info(dev, "ASIC_ID: 0x%04x\n", val);
1968
1969        r = wl1273_fm_read_reg(core, WL1273_ASIC_VER_GET, &val);
1970        if (r)
1971                dev_err(dev, "%s: Get ASIC_VER fails.\n", __func__);
1972        else
1973                dev_info(dev, "ASIC Version: 0x%04x\n", val);
1974
1975        r = wl1273_fm_read_reg(core, WL1273_FIRM_VER_GET, &val);
1976        if (r)
1977                dev_err(dev, "%s: Get FIRM_VER fails.\n", __func__);
1978        else
1979                dev_info(dev, "FW version: %d(0x%04x)\n", val, val);
1980
1981        r = wl1273_fm_read_reg(core, WL1273_BAND_SET, &val);
1982        if (r)
1983                dev_err(dev, "%s: Get BAND fails.\n", __func__);
1984        else
1985                dev_info(dev, "BAND: %d\n", val);
1986
1987        if (core->mode == WL1273_MODE_TX) {
1988                r = wl1273_fm_read_reg(core, WL1273_PUPD_SET, &val);
1989                if (r)
1990                        dev_err(dev, "%s: Get PUPD fails.\n", __func__);
1991                else
1992                        dev_info(dev, "PUPD: 0x%04x\n", val);
1993
1994                r = wl1273_fm_read_reg(core, WL1273_CHANL_SET, &val);
1995                if (r)
1996                        dev_err(dev, "%s: Get CHANL fails.\n", __func__);
1997                else
1998                        dev_info(dev, "Tx frequency: %dkHz\n", val*10);
1999        } else if (core->mode == WL1273_MODE_RX) {
2000                int bf = radio->rangelow;
2001
2002                r = wl1273_fm_read_reg(core, WL1273_FREQ_SET, &val);
2003                if (r)
2004                        dev_err(dev, "%s: Get FREQ fails.\n", __func__);
2005                else
2006                        dev_info(dev, "RX Frequency: %dkHz\n", bf + val*50);
2007
2008                r = wl1273_fm_read_reg(core, WL1273_MOST_MODE_SET, &val);
2009                if (r)
2010                        dev_err(dev, "%s: Get MOST_MODE fails.\n",
2011                                __func__);
2012                else if (val == 0)
2013                        dev_info(dev, "MOST_MODE: Stereo according to blend\n");
2014                else if (val == 1)
2015                        dev_info(dev, "MOST_MODE: Force mono output\n");
2016                else
2017                        dev_info(dev, "MOST_MODE: Unexpected value: %d\n", val);
2018
2019                r = wl1273_fm_read_reg(core, WL1273_MOST_BLEND_SET, &val);
2020                if (r)
2021                        dev_err(dev, "%s: Get MOST_BLEND fails.\n", __func__);
2022                else if (val == 0)
2023                        dev_info(dev,
2024                                 "MOST_BLEND: Switched blend & hysteresis.\n");
2025                else if (val == 1)
2026                        dev_info(dev, "MOST_BLEND: Soft blend.\n");
2027                else
2028                        dev_info(dev, "MOST_BLEND: Unexpected val: %d\n", val);
2029
2030                r = wl1273_fm_read_reg(core, WL1273_STEREO_GET, &val);
2031                if (r)
2032                        dev_err(dev, "%s: Get STEREO fails.\n", __func__);
2033                else if (val == 0)
2034                        dev_info(dev, "STEREO: Not detected\n");
2035                else if (val == 1)
2036                        dev_info(dev, "STEREO: Detected\n");
2037                else
2038                        dev_info(dev, "STEREO: Unexpected value: %d\n", val);
2039
2040                r = wl1273_fm_read_reg(core, WL1273_RSSI_LVL_GET, &val);
2041                if (r)
2042                        dev_err(dev, "%s: Get RSSI_LVL fails.\n", __func__);
2043                else
2044                        dev_info(dev, "RX signal strength: %d\n", (s16) val);
2045
2046                r = wl1273_fm_read_reg(core, WL1273_POWER_SET, &val);
2047                if (r)
2048                        dev_err(dev, "%s: Get POWER fails.\n", __func__);
2049                else
2050                        dev_info(dev, "POWER: 0x%04x\n", val);
2051
2052                r = wl1273_fm_read_reg(core, WL1273_INT_MASK_SET, &val);
2053                if (r)
2054                        dev_err(dev, "%s: Get INT_MASK fails.\n", __func__);
2055                else
2056                        dev_info(dev, "INT_MASK: 0x%04x\n", val);
2057
2058                r = wl1273_fm_read_reg(core, WL1273_RDS_SYNC_GET, &val);
2059                if (r)
2060                        dev_err(dev, "%s: Get RDS_SYNC fails.\n",
2061                                __func__);
2062                else if (val == 0)
2063                        dev_info(dev, "RDS_SYNC: Not synchronized\n");
2064
2065                else if (val == 1)
2066                        dev_info(dev, "RDS_SYNC: Synchronized\n");
2067                else
2068                        dev_info(dev, "RDS_SYNC: Unexpected value: %d\n", val);
2069
2070                r = wl1273_fm_read_reg(core, WL1273_I2S_MODE_CONFIG_SET, &val);
2071                if (r)
2072                        dev_err(dev, "%s: Get I2S_MODE_CONFIG fails.\n",
2073                                __func__);
2074                else
2075                        dev_info(dev, "I2S_MODE_CONFIG: 0x%04x\n", val);
2076
2077                r = wl1273_fm_read_reg(core, WL1273_VOLUME_SET, &val);
2078                if (r)
2079                        dev_err(dev, "%s: Get VOLUME fails.\n", __func__);
2080                else
2081                        dev_info(dev, "VOLUME: 0x%04x\n", val);
2082        }
2083
2084        return 0;
2085}
2086
2087static void wl1273_vdev_release(struct video_device *dev)
2088{
2089}
2090
2091static const struct v4l2_ctrl_ops wl1273_ctrl_ops = {
2092        .s_ctrl = wl1273_fm_vidioc_s_ctrl,
2093        .g_volatile_ctrl = wl1273_fm_g_volatile_ctrl,
2094};
2095
2096static const struct v4l2_ioctl_ops wl1273_ioctl_ops = {
2097        .vidioc_querycap        = wl1273_fm_vidioc_querycap,
2098        .vidioc_g_input         = wl1273_fm_vidioc_g_input,
2099        .vidioc_s_input         = wl1273_fm_vidioc_s_input,
2100        .vidioc_g_audio         = wl1273_fm_vidioc_g_audio,
2101        .vidioc_s_audio         = wl1273_fm_vidioc_s_audio,
2102        .vidioc_g_tuner         = wl1273_fm_vidioc_g_tuner,
2103        .vidioc_s_tuner         = wl1273_fm_vidioc_s_tuner,
2104        .vidioc_g_frequency     = wl1273_fm_vidioc_g_frequency,
2105        .vidioc_s_frequency     = wl1273_fm_vidioc_s_frequency,
2106        .vidioc_s_hw_freq_seek  = wl1273_fm_vidioc_s_hw_freq_seek,
2107        .vidioc_g_modulator     = wl1273_fm_vidioc_g_modulator,
2108        .vidioc_s_modulator     = wl1273_fm_vidioc_s_modulator,
2109        .vidioc_log_status      = wl1273_fm_vidioc_log_status,
2110};
2111
2112static struct video_device wl1273_viddev_template = {
2113        .fops                   = &wl1273_fops,
2114        .ioctl_ops              = &wl1273_ioctl_ops,
2115        .name                   = WL1273_FM_DRIVER_NAME,
2116        .release                = wl1273_vdev_release,
2117};
2118
2119static int wl1273_fm_radio_remove(struct platform_device *pdev)
2120{
2121        struct wl1273_device *radio = platform_get_drvdata(pdev);
2122        struct wl1273_core *core = radio->core;
2123
2124        dev_info(&pdev->dev, "%s.\n", __func__);
2125
2126        free_irq(core->client->irq, radio);
2127        core->pdata->free_resources();
2128
2129        v4l2_ctrl_handler_free(&radio->ctrl_handler);
2130        video_unregister_device(&radio->videodev);
2131        v4l2_device_unregister(&radio->v4l2dev);
2132        kfree(radio->buffer);
2133        kfree(radio->write_buf);
2134        kfree(radio);
2135
2136        return 0;
2137}
2138
2139static int __devinit wl1273_fm_radio_probe(struct platform_device *pdev)
2140{
2141        struct wl1273_core **core = pdev->dev.platform_data;
2142        struct wl1273_device *radio;
2143        struct v4l2_ctrl *ctrl;
2144        int r = 0;
2145
2146        pr_debug("%s\n", __func__);
2147
2148        if (!core) {
2149                dev_err(&pdev->dev, "No platform data.\n");
2150                r = -EINVAL;
2151                goto pdata_err;
2152        }
2153
2154        radio = kzalloc(sizeof(*radio), GFP_KERNEL);
2155        if (!radio) {
2156                r = -ENOMEM;
2157                goto pdata_err;
2158        }
2159
2160        /* RDS buffer allocation */
2161        radio->buf_size = rds_buf * RDS_BLOCK_SIZE;
2162        radio->buffer = kmalloc(radio->buf_size, GFP_KERNEL);
2163        if (!radio->buffer) {
2164                pr_err("Cannot allocate memory for RDS buffer.\n");
2165                r = -ENOMEM;
2166                goto err_kmalloc;
2167        }
2168
2169        radio->core = *core;
2170        radio->irq_flags = WL1273_IRQ_MASK;
2171        radio->dev = &radio->core->client->dev;
2172        radio->rds_on = false;
2173        radio->core->mode = WL1273_MODE_OFF;
2174        radio->tx_power = 118;
2175        radio->core->audio_mode = WL1273_AUDIO_ANALOG;
2176        radio->band = WL1273_BAND_OTHER;
2177        radio->core->i2s_mode = WL1273_I2S_DEF_MODE;
2178        radio->core->channel_number = 2;
2179        radio->core->volume = WL1273_DEFAULT_VOLUME;
2180        radio->rx_frequency = WL1273_BAND_OTHER_LOW;
2181        radio->tx_frequency = WL1273_BAND_OTHER_HIGH;
2182        radio->rangelow = WL1273_BAND_OTHER_LOW;
2183        radio->rangehigh = WL1273_BAND_OTHER_HIGH;
2184        radio->stereo = true;
2185        radio->bus_type = "I2C";
2186
2187        radio->core->write = wl1273_fm_write_cmd;
2188        radio->core->set_audio = wl1273_fm_set_audio;
2189        radio->core->set_volume = wl1273_fm_set_volume;
2190
2191        if (radio->core->pdata->request_resources) {
2192                r = radio->core->pdata->request_resources(radio->core->client);
2193                if (r) {
2194                        dev_err(radio->dev, WL1273_FM_DRIVER_NAME
2195                                ": Cannot get platform data\n");
2196                        goto err_resources;
2197                }
2198
2199                dev_dbg(radio->dev, "irq: %d\n", radio->core->client->irq);
2200
2201                r = request_threaded_irq(radio->core->client->irq, NULL,
2202                                         wl1273_fm_irq_thread_handler,
2203                                         IRQF_ONESHOT | IRQF_TRIGGER_FALLING,
2204                                         "wl1273-fm", radio);
2205                if (r < 0) {
2206                        dev_err(radio->dev, WL1273_FM_DRIVER_NAME
2207                                ": Unable to register IRQ handler: %d\n", r);
2208                        goto err_request_irq;
2209                }
2210        } else {
2211                dev_err(radio->dev, WL1273_FM_DRIVER_NAME ": Core WL1273 IRQ"
2212                        " not configured");
2213                r = -EINVAL;
2214                goto err_resources;
2215        }
2216
2217        init_completion(&radio->busy);
2218        init_waitqueue_head(&radio->read_queue);
2219
2220        radio->write_buf = kmalloc(256, GFP_KERNEL);
2221        if (!radio->write_buf) {
2222                r = -ENOMEM;
2223                goto write_buf_err;
2224        }
2225
2226        radio->dev = &pdev->dev;
2227        radio->v4l2dev.ctrl_handler = &radio->ctrl_handler;
2228        radio->rds_users = 0;
2229
2230        r = v4l2_device_register(&pdev->dev, &radio->v4l2dev);
2231        if (r) {
2232                dev_err(&pdev->dev, "Cannot register v4l2_device.\n");
2233                goto device_register_err;
2234        }
2235
2236        /* V4L2 configuration */
2237        memcpy(&radio->videodev, &wl1273_viddev_template,
2238               sizeof(wl1273_viddev_template));
2239
2240        radio->videodev.v4l2_dev = &radio->v4l2dev;
2241
2242        v4l2_ctrl_handler_init(&radio->ctrl_handler, 6);
2243
2244        /* add in ascending ID order */
2245        v4l2_ctrl_new_std(&radio->ctrl_handler, &wl1273_ctrl_ops,
2246                          V4L2_CID_AUDIO_VOLUME, 0, WL1273_MAX_VOLUME, 1,
2247                          WL1273_DEFAULT_VOLUME);
2248
2249        v4l2_ctrl_new_std(&radio->ctrl_handler, &wl1273_ctrl_ops,
2250                          V4L2_CID_AUDIO_MUTE, 0, 1, 1, 1);
2251
2252        v4l2_ctrl_new_std_menu(&radio->ctrl_handler, &wl1273_ctrl_ops,
2253                               V4L2_CID_TUNE_PREEMPHASIS,
2254                               V4L2_PREEMPHASIS_75_uS, 0x03,
2255                               V4L2_PREEMPHASIS_50_uS);
2256
2257        v4l2_ctrl_new_std(&radio->ctrl_handler, &wl1273_ctrl_ops,
2258                          V4L2_CID_TUNE_POWER_LEVEL, 91, 122, 1, 118);
2259
2260        ctrl = v4l2_ctrl_new_std(&radio->ctrl_handler, &wl1273_ctrl_ops,
2261                                 V4L2_CID_TUNE_ANTENNA_CAPACITOR,
2262                                 0, 255, 1, 255);
2263        if (ctrl)
2264                ctrl->is_volatile = 1;
2265
2266        if (radio->ctrl_handler.error) {
2267                r = radio->ctrl_handler.error;
2268                dev_err(&pdev->dev, "Ctrl handler error: %d\n", r);
2269                goto handler_init_err;
2270        }
2271
2272        video_set_drvdata(&radio->videodev, radio);
2273        platform_set_drvdata(pdev, radio);
2274
2275        /* register video device */
2276        r = video_register_device(&radio->videodev, VFL_TYPE_RADIO, radio_nr);
2277        if (r) {
2278                dev_err(&pdev->dev, WL1273_FM_DRIVER_NAME
2279                        ": Could not register video device\n");
2280                goto handler_init_err;
2281        }
2282
2283        return 0;
2284
2285handler_init_err:
2286        v4l2_ctrl_handler_free(&radio->ctrl_handler);
2287        v4l2_device_unregister(&radio->v4l2dev);
2288device_register_err:
2289        kfree(radio->write_buf);
2290write_buf_err:
2291        free_irq(radio->core->client->irq, radio);
2292err_request_irq:
2293        radio->core->pdata->free_resources();
2294err_resources:
2295        kfree(radio->buffer);
2296err_kmalloc:
2297        kfree(radio);
2298pdata_err:
2299        return r;
2300}
2301
2302MODULE_ALIAS("platform:wl1273_fm_radio");
2303
2304static struct platform_driver wl1273_fm_radio_driver = {
2305        .probe          = wl1273_fm_radio_probe,
2306        .remove         = __devexit_p(wl1273_fm_radio_remove),
2307        .driver         = {
2308                .name   = "wl1273_fm_radio",
2309                .owner  = THIS_MODULE,
2310        },
2311};
2312
2313static int __init wl1273_fm_module_init(void)
2314{
2315        pr_info("%s\n", __func__);
2316        return platform_driver_register(&wl1273_fm_radio_driver);
2317}
2318module_init(wl1273_fm_module_init);
2319
2320static void __exit wl1273_fm_module_exit(void)
2321{
2322        flush_scheduled_work();
2323        platform_driver_unregister(&wl1273_fm_radio_driver);
2324        pr_info(DRIVER_DESC ", Exiting.\n");
2325}
2326module_exit(wl1273_fm_module_exit);
2327
2328MODULE_AUTHOR("Matti Aaltonen <matti.j.aaltonen@nokia.com>");
2329MODULE_DESCRIPTION(DRIVER_DESC);
2330MODULE_LICENSE("GPL");
2331