linux/drivers/staging/media/lirc/lirc_zilog.c
<<
>>
Prefs
   1/*
   2 * i2c IR lirc driver for devices with zilog IR processors
   3 *
   4 * Copyright (c) 2000 Gerd Knorr <kraxel@goldbach.in-berlin.de>
   5 * modified for PixelView (BT878P+W/FM) by
   6 *      Michal Kochanowicz <mkochano@pld.org.pl>
   7 *      Christoph Bartelmus <lirc@bartelmus.de>
   8 * modified for KNC ONE TV Station/Anubis Typhoon TView Tuner by
   9 *      Ulrich Mueller <ulrich.mueller42@web.de>
  10 * modified for Asus TV-Box and Creative/VisionTek BreakOut-Box by
  11 *      Stefan Jahn <stefan@lkcc.org>
  12 * modified for inclusion into kernel sources by
  13 *      Jerome Brock <jbrock@users.sourceforge.net>
  14 * modified for Leadtek Winfast PVR2000 by
  15 *      Thomas Reitmayr (treitmayr@yahoo.com)
  16 * modified for Hauppauge PVR-150 IR TX device by
  17 *      Mark Weaver <mark@npsl.co.uk>
  18 * changed name from lirc_pvr150 to lirc_zilog, works on more than pvr-150
  19 *      Jarod Wilson <jarod@redhat.com>
  20 *
  21 * parts are cut&pasted from the lirc_i2c.c driver
  22 *
  23 * Numerous changes updating lirc_zilog.c in kernel 2.6.38 and later are
  24 * Copyright (C) 2011 Andy Walls <awalls@md.metrocast.net>
  25 *
  26 *  This program is free software; you can redistribute it and/or modify
  27 *  it under the terms of the GNU General Public License as published by
  28 *  the Free Software Foundation; either version 2 of the License, or
  29 *  (at your option) any later version.
  30 *
  31 *  This program is distributed in the hope that it will be useful,
  32 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  33 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  34 *  GNU General Public License for more details.
  35 *
  36 *  You should have received a copy of the GNU General Public License
  37 *  along with this program; if not, write to the Free Software
  38 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  39 *
  40 */
  41
  42#include <linux/module.h>
  43#include <linux/kmod.h>
  44#include <linux/kernel.h>
  45#include <linux/sched.h>
  46#include <linux/fs.h>
  47#include <linux/poll.h>
  48#include <linux/string.h>
  49#include <linux/timer.h>
  50#include <linux/delay.h>
  51#include <linux/completion.h>
  52#include <linux/errno.h>
  53#include <linux/slab.h>
  54#include <linux/i2c.h>
  55#include <linux/firmware.h>
  56#include <linux/vmalloc.h>
  57
  58#include <linux/mutex.h>
  59#include <linux/kthread.h>
  60
  61#include <media/lirc_dev.h>
  62#include <media/lirc.h>
  63
  64/* Max transfer size done by I2C transfer functions */
  65#define MAX_XFER_SIZE  64
  66
  67struct IR;
  68
  69struct IR_rx {
  70        struct kref ref;
  71        struct IR *ir;
  72
  73        /* RX device */
  74        struct mutex client_lock;
  75        struct i2c_client *c;
  76
  77        /* RX polling thread data */
  78        struct task_struct *task;
  79
  80        /* RX read data */
  81        unsigned char b[3];
  82        bool hdpvr_data_fmt;
  83};
  84
  85struct IR_tx {
  86        struct kref ref;
  87        struct IR *ir;
  88
  89        /* TX device */
  90        struct mutex client_lock;
  91        struct i2c_client *c;
  92
  93        /* TX additional actions needed */
  94        int need_boot;
  95        bool post_tx_ready_poll;
  96};
  97
  98struct IR {
  99        struct kref ref;
 100        struct list_head list;
 101
 102        /* FIXME spinlock access to l.features */
 103        struct lirc_driver l;
 104        struct lirc_buffer rbuf;
 105
 106        struct mutex ir_lock;
 107        atomic_t open_count;
 108
 109        struct i2c_adapter *adapter;
 110
 111        spinlock_t rx_ref_lock; /* struct IR_rx kref get()/put() */
 112        struct IR_rx *rx;
 113
 114        spinlock_t tx_ref_lock; /* struct IR_tx kref get()/put() */
 115        struct IR_tx *tx;
 116};
 117
 118/* IR transceiver instance object list */
 119/*
 120 * This lock is used for the following:
 121 * a. ir_devices_list access, insertions, deletions
 122 * b. struct IR kref get()s and put()s
 123 * c. serialization of ir_probe() for the two i2c_clients for a Z8
 124 */
 125static DEFINE_MUTEX(ir_devices_lock);
 126static LIST_HEAD(ir_devices_list);
 127
 128/* Block size for IR transmitter */
 129#define TX_BLOCK_SIZE   99
 130
 131/* Hauppauge IR transmitter data */
 132struct tx_data_struct {
 133        /* Boot block */
 134        unsigned char *boot_data;
 135
 136        /* Start of binary data block */
 137        unsigned char *datap;
 138
 139        /* End of binary data block */
 140        unsigned char *endp;
 141
 142        /* Number of installed codesets */
 143        unsigned int num_code_sets;
 144
 145        /* Pointers to codesets */
 146        unsigned char **code_sets;
 147
 148        /* Global fixed data template */
 149        int fixed[TX_BLOCK_SIZE];
 150};
 151
 152static struct tx_data_struct *tx_data;
 153static struct mutex tx_data_lock;
 154
 155
 156/* module parameters */
 157static bool debug;      /* debug output */
 158static bool tx_only;    /* only handle the IR Tx function */
 159static int minor = -1;  /* minor number */
 160
 161
 162/* struct IR reference counting */
 163static struct IR *get_ir_device(struct IR *ir, bool ir_devices_lock_held)
 164{
 165        if (ir_devices_lock_held) {
 166                kref_get(&ir->ref);
 167        } else {
 168                mutex_lock(&ir_devices_lock);
 169                kref_get(&ir->ref);
 170                mutex_unlock(&ir_devices_lock);
 171        }
 172        return ir;
 173}
 174
 175static void release_ir_device(struct kref *ref)
 176{
 177        struct IR *ir = container_of(ref, struct IR, ref);
 178
 179        /*
 180         * Things should be in this state by now:
 181         * ir->rx set to NULL and deallocated - happens before ir->rx->ir put()
 182         * ir->rx->task kthread stopped - happens before ir->rx->ir put()
 183         * ir->tx set to NULL and deallocated - happens before ir->tx->ir put()
 184         * ir->open_count ==  0 - happens on final close()
 185         * ir_lock, tx_ref_lock, rx_ref_lock, all released
 186         */
 187        if (ir->l.minor >= 0 && ir->l.minor < MAX_IRCTL_DEVICES) {
 188                lirc_unregister_driver(ir->l.minor);
 189                ir->l.minor = MAX_IRCTL_DEVICES;
 190        }
 191        if (kfifo_initialized(&ir->rbuf.fifo))
 192                lirc_buffer_free(&ir->rbuf);
 193        list_del(&ir->list);
 194        kfree(ir);
 195}
 196
 197static int put_ir_device(struct IR *ir, bool ir_devices_lock_held)
 198{
 199        int released;
 200
 201        if (ir_devices_lock_held)
 202                return kref_put(&ir->ref, release_ir_device);
 203
 204        mutex_lock(&ir_devices_lock);
 205        released = kref_put(&ir->ref, release_ir_device);
 206        mutex_unlock(&ir_devices_lock);
 207
 208        return released;
 209}
 210
 211/* struct IR_rx reference counting */
 212static struct IR_rx *get_ir_rx(struct IR *ir)
 213{
 214        struct IR_rx *rx;
 215
 216        spin_lock(&ir->rx_ref_lock);
 217        rx = ir->rx;
 218        if (rx != NULL)
 219                kref_get(&rx->ref);
 220        spin_unlock(&ir->rx_ref_lock);
 221        return rx;
 222}
 223
 224static void destroy_rx_kthread(struct IR_rx *rx, bool ir_devices_lock_held)
 225{
 226        /* end up polling thread */
 227        if (!IS_ERR_OR_NULL(rx->task)) {
 228                kthread_stop(rx->task);
 229                rx->task = NULL;
 230                /* Put the ir ptr that ir_probe() gave to the rx poll thread */
 231                put_ir_device(rx->ir, ir_devices_lock_held);
 232        }
 233}
 234
 235static void release_ir_rx(struct kref *ref)
 236{
 237        struct IR_rx *rx = container_of(ref, struct IR_rx, ref);
 238        struct IR *ir = rx->ir;
 239
 240        /*
 241         * This release function can't do all the work, as we want
 242         * to keep the rx_ref_lock a spinlock, and killing the poll thread
 243         * and releasing the ir reference can cause a sleep.  That work is
 244         * performed by put_ir_rx()
 245         */
 246        ir->l.features &= ~LIRC_CAN_REC_LIRCCODE;
 247        /* Don't put_ir_device(rx->ir) here; lock can't be freed yet */
 248        ir->rx = NULL;
 249        /* Don't do the kfree(rx) here; we still need to kill the poll thread */
 250}
 251
 252static int put_ir_rx(struct IR_rx *rx, bool ir_devices_lock_held)
 253{
 254        int released;
 255        struct IR *ir = rx->ir;
 256
 257        spin_lock(&ir->rx_ref_lock);
 258        released = kref_put(&rx->ref, release_ir_rx);
 259        spin_unlock(&ir->rx_ref_lock);
 260        /* Destroy the rx kthread while not holding the spinlock */
 261        if (released) {
 262                destroy_rx_kthread(rx, ir_devices_lock_held);
 263                kfree(rx);
 264                /* Make sure we're not still in a poll_table somewhere */
 265                wake_up_interruptible(&ir->rbuf.wait_poll);
 266        }
 267        /* Do a reference put() for the rx->ir reference, if we released rx */
 268        if (released)
 269                put_ir_device(ir, ir_devices_lock_held);
 270        return released;
 271}
 272
 273/* struct IR_tx reference counting */
 274static struct IR_tx *get_ir_tx(struct IR *ir)
 275{
 276        struct IR_tx *tx;
 277
 278        spin_lock(&ir->tx_ref_lock);
 279        tx = ir->tx;
 280        if (tx != NULL)
 281                kref_get(&tx->ref);
 282        spin_unlock(&ir->tx_ref_lock);
 283        return tx;
 284}
 285
 286static void release_ir_tx(struct kref *ref)
 287{
 288        struct IR_tx *tx = container_of(ref, struct IR_tx, ref);
 289        struct IR *ir = tx->ir;
 290
 291        ir->l.features &= ~LIRC_CAN_SEND_PULSE;
 292        /* Don't put_ir_device(tx->ir) here, so our lock doesn't get freed */
 293        ir->tx = NULL;
 294        kfree(tx);
 295}
 296
 297static int put_ir_tx(struct IR_tx *tx, bool ir_devices_lock_held)
 298{
 299        int released;
 300        struct IR *ir = tx->ir;
 301
 302        spin_lock(&ir->tx_ref_lock);
 303        released = kref_put(&tx->ref, release_ir_tx);
 304        spin_unlock(&ir->tx_ref_lock);
 305        /* Do a reference put() for the tx->ir reference, if we released tx */
 306        if (released)
 307                put_ir_device(ir, ir_devices_lock_held);
 308        return released;
 309}
 310
 311static int add_to_buf(struct IR *ir)
 312{
 313        __u16 code;
 314        unsigned char codes[2];
 315        unsigned char keybuf[6];
 316        int got_data = 0;
 317        int ret;
 318        int failures = 0;
 319        unsigned char sendbuf[1] = { 0 };
 320        struct lirc_buffer *rbuf = ir->l.rbuf;
 321        struct IR_rx *rx;
 322        struct IR_tx *tx;
 323
 324        if (lirc_buffer_full(rbuf)) {
 325                dev_dbg(ir->l.dev, "buffer overflow\n");
 326                return -EOVERFLOW;
 327        }
 328
 329        rx = get_ir_rx(ir);
 330        if (rx == NULL)
 331                return -ENXIO;
 332
 333        /* Ensure our rx->c i2c_client remains valid for the duration */
 334        mutex_lock(&rx->client_lock);
 335        if (rx->c == NULL) {
 336                mutex_unlock(&rx->client_lock);
 337                put_ir_rx(rx, false);
 338                return -ENXIO;
 339        }
 340
 341        tx = get_ir_tx(ir);
 342
 343        /*
 344         * service the device as long as it is returning
 345         * data and we have space
 346         */
 347        do {
 348                if (kthread_should_stop()) {
 349                        ret = -ENODATA;
 350                        break;
 351                }
 352
 353                /*
 354                 * Lock i2c bus for the duration.  RX/TX chips interfere so
 355                 * this is worth it
 356                 */
 357                mutex_lock(&ir->ir_lock);
 358
 359                if (kthread_should_stop()) {
 360                        mutex_unlock(&ir->ir_lock);
 361                        ret = -ENODATA;
 362                        break;
 363                }
 364
 365                /*
 366                 * Send random "poll command" (?)  Windows driver does this
 367                 * and it is a good point to detect chip failure.
 368                 */
 369                ret = i2c_master_send(rx->c, sendbuf, 1);
 370                if (ret != 1) {
 371                        dev_err(ir->l.dev, "i2c_master_send failed with %d\n",
 372                                ret);
 373                        if (failures >= 3) {
 374                                mutex_unlock(&ir->ir_lock);
 375                                dev_err(ir->l.dev,
 376                                        "unable to read from the IR chip after 3 resets, giving up\n");
 377                                break;
 378                        }
 379
 380                        /* Looks like the chip crashed, reset it */
 381                        dev_err(ir->l.dev,
 382                                "polling the IR receiver chip failed, trying reset\n");
 383
 384                        set_current_state(TASK_UNINTERRUPTIBLE);
 385                        if (kthread_should_stop()) {
 386                                mutex_unlock(&ir->ir_lock);
 387                                ret = -ENODATA;
 388                                break;
 389                        }
 390                        schedule_timeout((100 * HZ + 999) / 1000);
 391                        if (tx != NULL)
 392                                tx->need_boot = 1;
 393
 394                        ++failures;
 395                        mutex_unlock(&ir->ir_lock);
 396                        ret = 0;
 397                        continue;
 398                }
 399
 400                if (kthread_should_stop()) {
 401                        mutex_unlock(&ir->ir_lock);
 402                        ret = -ENODATA;
 403                        break;
 404                }
 405                ret = i2c_master_recv(rx->c, keybuf, sizeof(keybuf));
 406                mutex_unlock(&ir->ir_lock);
 407                if (ret != sizeof(keybuf)) {
 408                        dev_err(ir->l.dev,
 409                                "i2c_master_recv failed with %d -- keeping last read buffer\n",
 410                                ret);
 411                } else {
 412                        rx->b[0] = keybuf[3];
 413                        rx->b[1] = keybuf[4];
 414                        rx->b[2] = keybuf[5];
 415                        dev_dbg(ir->l.dev,
 416                                "key (0x%02x/0x%02x)\n",
 417                                rx->b[0], rx->b[1]);
 418                }
 419
 420                /* key pressed ? */
 421                if (rx->hdpvr_data_fmt) {
 422                        if (got_data && (keybuf[0] == 0x80)) {
 423                                ret = 0;
 424                                break;
 425                        } else if (got_data && (keybuf[0] == 0x00)) {
 426                                ret = -ENODATA;
 427                                break;
 428                        }
 429                } else if ((rx->b[0] & 0x80) == 0) {
 430                        ret = got_data ? 0 : -ENODATA;
 431                        break;
 432                }
 433
 434                /* look what we have */
 435                code = (((__u16)rx->b[0] & 0x7f) << 6) | (rx->b[1] >> 2);
 436
 437                codes[0] = (code >> 8) & 0xff;
 438                codes[1] = code & 0xff;
 439
 440                /* return it */
 441                lirc_buffer_write(rbuf, codes);
 442                ++got_data;
 443                ret = 0;
 444        } while (!lirc_buffer_full(rbuf));
 445
 446        mutex_unlock(&rx->client_lock);
 447        if (tx != NULL)
 448                put_ir_tx(tx, false);
 449        put_ir_rx(rx, false);
 450        return ret;
 451}
 452
 453/*
 454 * Main function of the polling thread -- from lirc_dev.
 455 * We don't fit the LIRC model at all anymore.  This is horrible, but
 456 * basically we have a single RX/TX device with a nasty failure mode
 457 * that needs to be accounted for across the pair.  lirc lets us provide
 458 * fops, but prevents us from using the internal polling, etc. if we do
 459 * so.  Hence the replication.  Might be neater to extend the LIRC model
 460 * to account for this but I'd think it's a very special case of seriously
 461 * messed up hardware.
 462 */
 463static int lirc_thread(void *arg)
 464{
 465        struct IR *ir = arg;
 466        struct lirc_buffer *rbuf = ir->l.rbuf;
 467
 468        dev_dbg(ir->l.dev, "poll thread started\n");
 469
 470        while (!kthread_should_stop()) {
 471                set_current_state(TASK_INTERRUPTIBLE);
 472
 473                /* if device not opened, we can sleep half a second */
 474                if (atomic_read(&ir->open_count) == 0) {
 475                        schedule_timeout(HZ/2);
 476                        continue;
 477                }
 478
 479                /*
 480                 * This is ~113*2 + 24 + jitter (2*repeat gap + code length).
 481                 * We use this interval as the chip resets every time you poll
 482                 * it (bad!).  This is therefore just sufficient to catch all
 483                 * of the button presses.  It makes the remote much more
 484                 * responsive.  You can see the difference by running irw and
 485                 * holding down a button.  With 100ms, the old polling
 486                 * interval, you'll notice breaks in the repeat sequence
 487                 * corresponding to lost keypresses.
 488                 */
 489                schedule_timeout((260 * HZ) / 1000);
 490                if (kthread_should_stop())
 491                        break;
 492                if (!add_to_buf(ir))
 493                        wake_up_interruptible(&rbuf->wait_poll);
 494        }
 495
 496        dev_dbg(ir->l.dev, "poll thread ended\n");
 497        return 0;
 498}
 499
 500static int set_use_inc(void *data)
 501{
 502        return 0;
 503}
 504
 505static void set_use_dec(void *data)
 506{
 507}
 508
 509/* safe read of a uint32 (always network byte order) */
 510static int read_uint32(unsigned char **data,
 511                                     unsigned char *endp, unsigned int *val)
 512{
 513        if (*data + 4 > endp)
 514                return 0;
 515        *val = ((*data)[0] << 24) | ((*data)[1] << 16) |
 516               ((*data)[2] << 8) | (*data)[3];
 517        *data += 4;
 518        return 1;
 519}
 520
 521/* safe read of a uint8 */
 522static int read_uint8(unsigned char **data,
 523                                    unsigned char *endp, unsigned char *val)
 524{
 525        if (*data + 1 > endp)
 526                return 0;
 527        *val = *((*data)++);
 528        return 1;
 529}
 530
 531/* safe skipping of N bytes */
 532static int skip(unsigned char **data,
 533                              unsigned char *endp, unsigned int distance)
 534{
 535        if (*data + distance > endp)
 536                return 0;
 537        *data += distance;
 538        return 1;
 539}
 540
 541/* decompress key data into the given buffer */
 542static int get_key_data(unsigned char *buf,
 543                             unsigned int codeset, unsigned int key)
 544{
 545        unsigned char *data, *endp, *diffs, *key_block;
 546        unsigned char keys, ndiffs, id;
 547        unsigned int base, lim, pos, i;
 548
 549        /* Binary search for the codeset */
 550        for (base = 0, lim = tx_data->num_code_sets; lim; lim >>= 1) {
 551                pos = base + (lim >> 1);
 552                data = tx_data->code_sets[pos];
 553
 554                if (!read_uint32(&data, tx_data->endp, &i))
 555                        goto corrupt;
 556
 557                if (i == codeset)
 558                        break;
 559                else if (codeset > i) {
 560                        base = pos + 1;
 561                        --lim;
 562                }
 563        }
 564        /* Not found? */
 565        if (!lim)
 566                return -EPROTO;
 567
 568        /* Set end of data block */
 569        endp = pos < tx_data->num_code_sets - 1 ?
 570                tx_data->code_sets[pos + 1] : tx_data->endp;
 571
 572        /* Read the block header */
 573        if (!read_uint8(&data, endp, &keys) ||
 574            !read_uint8(&data, endp, &ndiffs) ||
 575            ndiffs > TX_BLOCK_SIZE || keys == 0)
 576                goto corrupt;
 577
 578        /* Save diffs & skip */
 579        diffs = data;
 580        if (!skip(&data, endp, ndiffs))
 581                goto corrupt;
 582
 583        /* Read the id of the first key */
 584        if (!read_uint8(&data, endp, &id))
 585                goto corrupt;
 586
 587        /* Unpack the first key's data */
 588        for (i = 0; i < TX_BLOCK_SIZE; ++i) {
 589                if (tx_data->fixed[i] == -1) {
 590                        if (!read_uint8(&data, endp, &buf[i]))
 591                                goto corrupt;
 592                } else {
 593                        buf[i] = (unsigned char)tx_data->fixed[i];
 594                }
 595        }
 596
 597        /* Early out key found/not found */
 598        if (key == id)
 599                return 0;
 600        if (keys == 1)
 601                return -EPROTO;
 602
 603        /* Sanity check */
 604        key_block = data;
 605        if (!skip(&data, endp, (keys - 1) * (ndiffs + 1)))
 606                goto corrupt;
 607
 608        /* Binary search for the key */
 609        for (base = 0, lim = keys - 1; lim; lim >>= 1) {
 610                /* Seek to block */
 611                unsigned char *key_data;
 612
 613                pos = base + (lim >> 1);
 614                key_data = key_block + (ndiffs + 1) * pos;
 615
 616                if (*key_data == key) {
 617                        /* skip key id */
 618                        ++key_data;
 619
 620                        /* found, so unpack the diffs */
 621                        for (i = 0; i < ndiffs; ++i) {
 622                                unsigned char val;
 623
 624                                if (!read_uint8(&key_data, endp, &val) ||
 625                                    diffs[i] >= TX_BLOCK_SIZE)
 626                                        goto corrupt;
 627                                buf[diffs[i]] = val;
 628                        }
 629
 630                        return 0;
 631                } else if (key > *key_data) {
 632                        base = pos + 1;
 633                        --lim;
 634                }
 635        }
 636        /* Key not found */
 637        return -EPROTO;
 638
 639corrupt:
 640        pr_err("firmware is corrupt\n");
 641        return -EFAULT;
 642}
 643
 644/* send a block of data to the IR TX device */
 645static int send_data_block(struct IR_tx *tx, unsigned char *data_block)
 646{
 647        int i, j, ret;
 648        unsigned char buf[5];
 649
 650        for (i = 0; i < TX_BLOCK_SIZE;) {
 651                int tosend = TX_BLOCK_SIZE - i;
 652
 653                if (tosend > 4)
 654                        tosend = 4;
 655                buf[0] = (unsigned char)(i + 1);
 656                for (j = 0; j < tosend; ++j)
 657                        buf[1 + j] = data_block[i + j];
 658                dev_dbg(tx->ir->l.dev, "%*ph", 5, buf);
 659                ret = i2c_master_send(tx->c, buf, tosend + 1);
 660                if (ret != tosend + 1) {
 661                        dev_err(tx->ir->l.dev,
 662                                "i2c_master_send failed with %d\n", ret);
 663                        return ret < 0 ? ret : -EFAULT;
 664                }
 665                i += tosend;
 666        }
 667        return 0;
 668}
 669
 670/* send boot data to the IR TX device */
 671static int send_boot_data(struct IR_tx *tx)
 672{
 673        int ret, i;
 674        unsigned char buf[4];
 675
 676        /* send the boot block */
 677        ret = send_data_block(tx, tx_data->boot_data);
 678        if (ret != 0)
 679                return ret;
 680
 681        /* Hit the go button to activate the new boot data */
 682        buf[0] = 0x00;
 683        buf[1] = 0x20;
 684        ret = i2c_master_send(tx->c, buf, 2);
 685        if (ret != 2) {
 686                dev_err(tx->ir->l.dev, "i2c_master_send failed with %d\n", ret);
 687                return ret < 0 ? ret : -EFAULT;
 688        }
 689
 690        /*
 691         * Wait for zilog to settle after hitting go post boot block upload.
 692         * Without this delay, the HD-PVR and HVR-1950 both return an -EIO
 693         * upon attempting to get firmware revision, and tx probe thus fails.
 694         */
 695        for (i = 0; i < 10; i++) {
 696                ret = i2c_master_send(tx->c, buf, 1);
 697                if (ret == 1)
 698                        break;
 699                udelay(100);
 700        }
 701
 702        if (ret != 1) {
 703                dev_err(tx->ir->l.dev, "i2c_master_send failed with %d\n", ret);
 704                return ret < 0 ? ret : -EFAULT;
 705        }
 706
 707        /* Here comes the firmware version... (hopefully) */
 708        ret = i2c_master_recv(tx->c, buf, 4);
 709        if (ret != 4) {
 710                dev_err(tx->ir->l.dev, "i2c_master_recv failed with %d\n", ret);
 711                return 0;
 712        }
 713        if ((buf[0] != 0x80) && (buf[0] != 0xa0)) {
 714                dev_err(tx->ir->l.dev, "unexpected IR TX init response: %02x\n",
 715                        buf[0]);
 716                return 0;
 717        }
 718        dev_notice(tx->ir->l.dev,
 719                   "Zilog/Hauppauge IR blaster firmware version %d.%d.%d loaded\n",
 720                   buf[1], buf[2], buf[3]);
 721
 722        return 0;
 723}
 724
 725/* unload "firmware", lock held */
 726static void fw_unload_locked(void)
 727{
 728        if (tx_data) {
 729                vfree(tx_data->code_sets);
 730
 731                vfree(tx_data->datap);
 732
 733                vfree(tx_data);
 734                tx_data = NULL;
 735                pr_debug("successfully unloaded IR blaster firmware\n");
 736        }
 737}
 738
 739/* unload "firmware" for the IR TX device */
 740static void fw_unload(void)
 741{
 742        mutex_lock(&tx_data_lock);
 743        fw_unload_locked();
 744        mutex_unlock(&tx_data_lock);
 745}
 746
 747/* load "firmware" for the IR TX device */
 748static int fw_load(struct IR_tx *tx)
 749{
 750        int ret;
 751        unsigned int i;
 752        unsigned char *data, version, num_global_fixed;
 753        const struct firmware *fw_entry;
 754
 755        /* Already loaded? */
 756        mutex_lock(&tx_data_lock);
 757        if (tx_data) {
 758                ret = 0;
 759                goto out;
 760        }
 761
 762        /* Request codeset data file */
 763        ret = request_firmware(&fw_entry, "haup-ir-blaster.bin", tx->ir->l.dev);
 764        if (ret != 0) {
 765                dev_err(tx->ir->l.dev,
 766                        "firmware haup-ir-blaster.bin not available (%d)\n",
 767                        ret);
 768                ret = ret < 0 ? ret : -EFAULT;
 769                goto out;
 770        }
 771        dev_dbg(tx->ir->l.dev, "firmware of size %zu loaded\n", fw_entry->size);
 772
 773        /* Parse the file */
 774        tx_data = vmalloc(sizeof(*tx_data));
 775        if (tx_data == NULL) {
 776                release_firmware(fw_entry);
 777                ret = -ENOMEM;
 778                goto out;
 779        }
 780        tx_data->code_sets = NULL;
 781
 782        /* Copy the data so hotplug doesn't get confused and timeout */
 783        tx_data->datap = vmalloc(fw_entry->size);
 784        if (tx_data->datap == NULL) {
 785                release_firmware(fw_entry);
 786                vfree(tx_data);
 787                ret = -ENOMEM;
 788                goto out;
 789        }
 790        memcpy(tx_data->datap, fw_entry->data, fw_entry->size);
 791        tx_data->endp = tx_data->datap + fw_entry->size;
 792        release_firmware(fw_entry); fw_entry = NULL;
 793
 794        /* Check version */
 795        data = tx_data->datap;
 796        if (!read_uint8(&data, tx_data->endp, &version))
 797                goto corrupt;
 798        if (version != 1) {
 799                dev_err(tx->ir->l.dev,
 800                        "unsupported code set file version (%u, expected 1) -- please upgrade to a newer driver\n",
 801                        version);
 802                fw_unload_locked();
 803                ret = -EFAULT;
 804                goto out;
 805        }
 806
 807        /* Save boot block for later */
 808        tx_data->boot_data = data;
 809        if (!skip(&data, tx_data->endp, TX_BLOCK_SIZE))
 810                goto corrupt;
 811
 812        if (!read_uint32(&data, tx_data->endp,
 813                              &tx_data->num_code_sets))
 814                goto corrupt;
 815
 816        dev_dbg(tx->ir->l.dev, "%u IR blaster codesets loaded\n",
 817                tx_data->num_code_sets);
 818
 819        tx_data->code_sets = vmalloc(
 820                tx_data->num_code_sets * sizeof(char *));
 821        if (tx_data->code_sets == NULL) {
 822                fw_unload_locked();
 823                ret = -ENOMEM;
 824                goto out;
 825        }
 826
 827        for (i = 0; i < TX_BLOCK_SIZE; ++i)
 828                tx_data->fixed[i] = -1;
 829
 830        /* Read global fixed data template */
 831        if (!read_uint8(&data, tx_data->endp, &num_global_fixed) ||
 832            num_global_fixed > TX_BLOCK_SIZE)
 833                goto corrupt;
 834        for (i = 0; i < num_global_fixed; ++i) {
 835                unsigned char pos, val;
 836
 837                if (!read_uint8(&data, tx_data->endp, &pos) ||
 838                    !read_uint8(&data, tx_data->endp, &val) ||
 839                    pos >= TX_BLOCK_SIZE)
 840                        goto corrupt;
 841                tx_data->fixed[pos] = (int)val;
 842        }
 843
 844        /* Filch out the position of each code set */
 845        for (i = 0; i < tx_data->num_code_sets; ++i) {
 846                unsigned int id;
 847                unsigned char keys;
 848                unsigned char ndiffs;
 849
 850                /* Save the codeset position */
 851                tx_data->code_sets[i] = data;
 852
 853                /* Read header */
 854                if (!read_uint32(&data, tx_data->endp, &id) ||
 855                    !read_uint8(&data, tx_data->endp, &keys) ||
 856                    !read_uint8(&data, tx_data->endp, &ndiffs) ||
 857                    ndiffs > TX_BLOCK_SIZE || keys == 0)
 858                        goto corrupt;
 859
 860                /* skip diff positions */
 861                if (!skip(&data, tx_data->endp, ndiffs))
 862                        goto corrupt;
 863
 864                /*
 865                 * After the diffs we have the first key id + data -
 866                 * global fixed
 867                 */
 868                if (!skip(&data, tx_data->endp,
 869                               1 + TX_BLOCK_SIZE - num_global_fixed))
 870                        goto corrupt;
 871
 872                /* Then we have keys-1 blocks of key id+diffs */
 873                if (!skip(&data, tx_data->endp,
 874                               (ndiffs + 1) * (keys - 1)))
 875                        goto corrupt;
 876        }
 877        ret = 0;
 878        goto out;
 879
 880corrupt:
 881        dev_err(tx->ir->l.dev, "firmware is corrupt\n");
 882        fw_unload_locked();
 883        ret = -EFAULT;
 884
 885out:
 886        mutex_unlock(&tx_data_lock);
 887        return ret;
 888}
 889
 890/* copied from lirc_dev */
 891static ssize_t read(struct file *filep, char __user *outbuf, size_t n,
 892                    loff_t *ppos)
 893{
 894        struct IR *ir = filep->private_data;
 895        struct IR_rx *rx;
 896        struct lirc_buffer *rbuf = ir->l.rbuf;
 897        int ret = 0, written = 0, retries = 0;
 898        unsigned int m;
 899        DECLARE_WAITQUEUE(wait, current);
 900
 901        dev_dbg(ir->l.dev, "read called\n");
 902        if (n % rbuf->chunk_size) {
 903                dev_dbg(ir->l.dev, "read result = -EINVAL\n");
 904                return -EINVAL;
 905        }
 906
 907        rx = get_ir_rx(ir);
 908        if (rx == NULL)
 909                return -ENXIO;
 910
 911        /*
 912         * we add ourselves to the task queue before buffer check
 913         * to avoid losing scan code (in case when queue is awaken somewhere
 914         * between while condition checking and scheduling)
 915         */
 916        add_wait_queue(&rbuf->wait_poll, &wait);
 917        set_current_state(TASK_INTERRUPTIBLE);
 918
 919        /*
 920         * while we didn't provide 'length' bytes, device is opened in blocking
 921         * mode and 'copy_to_user' is happy, wait for data.
 922         */
 923        while (written < n && ret == 0) {
 924                if (lirc_buffer_empty(rbuf)) {
 925                        /*
 926                         * According to the read(2) man page, 'written' can be
 927                         * returned as less than 'n', instead of blocking
 928                         * again, returning -EWOULDBLOCK, or returning
 929                         * -ERESTARTSYS
 930                         */
 931                        if (written)
 932                                break;
 933                        if (filep->f_flags & O_NONBLOCK) {
 934                                ret = -EWOULDBLOCK;
 935                                break;
 936                        }
 937                        if (signal_pending(current)) {
 938                                ret = -ERESTARTSYS;
 939                                break;
 940                        }
 941                        schedule();
 942                        set_current_state(TASK_INTERRUPTIBLE);
 943                } else {
 944                        unsigned char buf[MAX_XFER_SIZE];
 945
 946                        if (rbuf->chunk_size > sizeof(buf)) {
 947                                dev_err(ir->l.dev,
 948                                        "chunk_size is too big (%d)!\n",
 949                                        rbuf->chunk_size);
 950                                ret = -EINVAL;
 951                                break;
 952                        }
 953                        m = lirc_buffer_read(rbuf, buf);
 954                        if (m == rbuf->chunk_size) {
 955                                ret = copy_to_user(outbuf + written, buf,
 956                                                   rbuf->chunk_size);
 957                                written += rbuf->chunk_size;
 958                        } else {
 959                                retries++;
 960                        }
 961                        if (retries >= 5) {
 962                                dev_err(ir->l.dev, "Buffer read failed!\n");
 963                                ret = -EIO;
 964                        }
 965                }
 966        }
 967
 968        remove_wait_queue(&rbuf->wait_poll, &wait);
 969        put_ir_rx(rx, false);
 970        set_current_state(TASK_RUNNING);
 971
 972        dev_dbg(ir->l.dev, "read result = %d (%s)\n", ret,
 973                ret ? "Error" : "OK");
 974
 975        return ret ? ret : written;
 976}
 977
 978/* send a keypress to the IR TX device */
 979static int send_code(struct IR_tx *tx, unsigned int code, unsigned int key)
 980{
 981        unsigned char data_block[TX_BLOCK_SIZE];
 982        unsigned char buf[2];
 983        int i, ret;
 984
 985        /* Get data for the codeset/key */
 986        ret = get_key_data(data_block, code, key);
 987
 988        if (ret == -EPROTO) {
 989                dev_err(tx->ir->l.dev,
 990                        "failed to get data for code %u, key %u -- check lircd.conf entries\n",
 991                        code, key);
 992                return ret;
 993        } else if (ret != 0)
 994                return ret;
 995
 996        /* Send the data block */
 997        ret = send_data_block(tx, data_block);
 998        if (ret != 0)
 999                return ret;
1000
1001        /* Send data block length? */
1002        buf[0] = 0x00;
1003        buf[1] = 0x40;
1004        ret = i2c_master_send(tx->c, buf, 2);
1005        if (ret != 2) {
1006                dev_err(tx->ir->l.dev, "i2c_master_send failed with %d\n", ret);
1007                return ret < 0 ? ret : -EFAULT;
1008        }
1009
1010        /* Give the z8 a moment to process data block */
1011        for (i = 0; i < 10; i++) {
1012                ret = i2c_master_send(tx->c, buf, 1);
1013                if (ret == 1)
1014                        break;
1015                udelay(100);
1016        }
1017
1018        if (ret != 1) {
1019                dev_err(tx->ir->l.dev, "i2c_master_send failed with %d\n", ret);
1020                return ret < 0 ? ret : -EFAULT;
1021        }
1022
1023        /* Send finished download? */
1024        ret = i2c_master_recv(tx->c, buf, 1);
1025        if (ret != 1) {
1026                dev_err(tx->ir->l.dev, "i2c_master_recv failed with %d\n", ret);
1027                return ret < 0 ? ret : -EFAULT;
1028        }
1029        if (buf[0] != 0xA0) {
1030                dev_err(tx->ir->l.dev, "unexpected IR TX response #1: %02x\n",
1031                        buf[0]);
1032                return -EFAULT;
1033        }
1034
1035        /* Send prepare command? */
1036        buf[0] = 0x00;
1037        buf[1] = 0x80;
1038        ret = i2c_master_send(tx->c, buf, 2);
1039        if (ret != 2) {
1040                dev_err(tx->ir->l.dev, "i2c_master_send failed with %d\n", ret);
1041                return ret < 0 ? ret : -EFAULT;
1042        }
1043
1044        /*
1045         * The sleep bits aren't necessary on the HD PVR, and in fact, the
1046         * last i2c_master_recv always fails with a -5, so for now, we're
1047         * going to skip this whole mess and say we're done on the HD PVR
1048         */
1049        if (!tx->post_tx_ready_poll) {
1050                dev_dbg(tx->ir->l.dev, "sent code %u, key %u\n", code, key);
1051                return 0;
1052        }
1053
1054        /*
1055         * This bit NAKs until the device is ready, so we retry it
1056         * sleeping a bit each time.  This seems to be what the windows
1057         * driver does, approximately.
1058         * Try for up to 1s.
1059         */
1060        for (i = 0; i < 20; ++i) {
1061                set_current_state(TASK_UNINTERRUPTIBLE);
1062                schedule_timeout((50 * HZ + 999) / 1000);
1063                ret = i2c_master_send(tx->c, buf, 1);
1064                if (ret == 1)
1065                        break;
1066                dev_dbg(tx->ir->l.dev,
1067                        "NAK expected: i2c_master_send failed with %d (try %d)\n",
1068                        ret, i+1);
1069        }
1070        if (ret != 1) {
1071                dev_err(tx->ir->l.dev,
1072                        "IR TX chip never got ready: last i2c_master_send failed with %d\n",
1073                        ret);
1074                return ret < 0 ? ret : -EFAULT;
1075        }
1076
1077        /* Seems to be an 'ok' response */
1078        i = i2c_master_recv(tx->c, buf, 1);
1079        if (i != 1) {
1080                dev_err(tx->ir->l.dev, "i2c_master_recv failed with %d\n", ret);
1081                return -EFAULT;
1082        }
1083        if (buf[0] != 0x80) {
1084                dev_err(tx->ir->l.dev, "unexpected IR TX response #2: %02x\n",
1085                        buf[0]);
1086                return -EFAULT;
1087        }
1088
1089        /* Oh good, it worked */
1090        dev_dbg(tx->ir->l.dev, "sent code %u, key %u\n", code, key);
1091        return 0;
1092}
1093
1094/*
1095 * Write a code to the device.  We take in a 32-bit number (an int) and then
1096 * decode this to a codeset/key index.  The key data is then decompressed and
1097 * sent to the device.  We have a spin lock as per i2c documentation to prevent
1098 * multiple concurrent sends which would probably cause the device to explode.
1099 */
1100static ssize_t write(struct file *filep, const char __user *buf, size_t n,
1101                     loff_t *ppos)
1102{
1103        struct IR *ir = filep->private_data;
1104        struct IR_tx *tx;
1105        size_t i;
1106        int failures = 0;
1107
1108        /* Validate user parameters */
1109        if (n % sizeof(int))
1110                return -EINVAL;
1111
1112        /* Get a struct IR_tx reference */
1113        tx = get_ir_tx(ir);
1114        if (tx == NULL)
1115                return -ENXIO;
1116
1117        /* Ensure our tx->c i2c_client remains valid for the duration */
1118        mutex_lock(&tx->client_lock);
1119        if (tx->c == NULL) {
1120                mutex_unlock(&tx->client_lock);
1121                put_ir_tx(tx, false);
1122                return -ENXIO;
1123        }
1124
1125        /* Lock i2c bus for the duration */
1126        mutex_lock(&ir->ir_lock);
1127
1128        /* Send each keypress */
1129        for (i = 0; i < n;) {
1130                int ret = 0;
1131                int command;
1132
1133                if (copy_from_user(&command, buf + i, sizeof(command))) {
1134                        mutex_unlock(&ir->ir_lock);
1135                        mutex_unlock(&tx->client_lock);
1136                        put_ir_tx(tx, false);
1137                        return -EFAULT;
1138                }
1139
1140                /* Send boot data first if required */
1141                if (tx->need_boot == 1) {
1142                        /* Make sure we have the 'firmware' loaded, first */
1143                        ret = fw_load(tx);
1144                        if (ret != 0) {
1145                                mutex_unlock(&ir->ir_lock);
1146                                mutex_unlock(&tx->client_lock);
1147                                put_ir_tx(tx, false);
1148                                if (ret != -ENOMEM)
1149                                        ret = -EIO;
1150                                return ret;
1151                        }
1152                        /* Prep the chip for transmitting codes */
1153                        ret = send_boot_data(tx);
1154                        if (ret == 0)
1155                                tx->need_boot = 0;
1156                }
1157
1158                /* Send the code */
1159                if (ret == 0) {
1160                        ret = send_code(tx, (unsigned)command >> 16,
1161                                            (unsigned)command & 0xFFFF);
1162                        if (ret == -EPROTO) {
1163                                mutex_unlock(&ir->ir_lock);
1164                                mutex_unlock(&tx->client_lock);
1165                                put_ir_tx(tx, false);
1166                                return ret;
1167                        }
1168                }
1169
1170                /*
1171                 * Hmm, a failure.  If we've had a few then give up, otherwise
1172                 * try a reset
1173                 */
1174                if (ret != 0) {
1175                        /* Looks like the chip crashed, reset it */
1176                        dev_err(tx->ir->l.dev,
1177                                "sending to the IR transmitter chip failed, trying reset\n");
1178
1179                        if (failures >= 3) {
1180                                dev_err(tx->ir->l.dev,
1181                                        "unable to send to the IR chip after 3 resets, giving up\n");
1182                                mutex_unlock(&ir->ir_lock);
1183                                mutex_unlock(&tx->client_lock);
1184                                put_ir_tx(tx, false);
1185                                return ret;
1186                        }
1187                        set_current_state(TASK_UNINTERRUPTIBLE);
1188                        schedule_timeout((100 * HZ + 999) / 1000);
1189                        tx->need_boot = 1;
1190                        ++failures;
1191                } else
1192                        i += sizeof(int);
1193        }
1194
1195        /* Release i2c bus */
1196        mutex_unlock(&ir->ir_lock);
1197
1198        mutex_unlock(&tx->client_lock);
1199
1200        /* Give back our struct IR_tx reference */
1201        put_ir_tx(tx, false);
1202
1203        /* All looks good */
1204        return n;
1205}
1206
1207/* copied from lirc_dev */
1208static unsigned int poll(struct file *filep, poll_table *wait)
1209{
1210        struct IR *ir = filep->private_data;
1211        struct IR_rx *rx;
1212        struct lirc_buffer *rbuf = ir->l.rbuf;
1213        unsigned int ret;
1214
1215        dev_dbg(ir->l.dev, "poll called\n");
1216
1217        rx = get_ir_rx(ir);
1218        if (rx == NULL) {
1219                /*
1220                 * Revisit this, if our poll function ever reports writeable
1221                 * status for Tx
1222                 */
1223                dev_dbg(ir->l.dev, "poll result = POLLERR\n");
1224                return POLLERR;
1225        }
1226
1227        /*
1228         * Add our lirc_buffer's wait_queue to the poll_table. A wake up on
1229         * that buffer's wait queue indicates we may have a new poll status.
1230         */
1231        poll_wait(filep, &rbuf->wait_poll, wait);
1232
1233        /* Indicate what ops could happen immediately without blocking */
1234        ret = lirc_buffer_empty(rbuf) ? 0 : (POLLIN|POLLRDNORM);
1235
1236        dev_dbg(ir->l.dev, "poll result = %s\n",
1237                ret ? "POLLIN|POLLRDNORM" : "none");
1238        return ret;
1239}
1240
1241static long ioctl(struct file *filep, unsigned int cmd, unsigned long arg)
1242{
1243        struct IR *ir = filep->private_data;
1244        unsigned long __user *uptr = (unsigned long __user *)arg;
1245        int result;
1246        unsigned long mode, features;
1247
1248        features = ir->l.features;
1249
1250        switch (cmd) {
1251        case LIRC_GET_LENGTH:
1252                result = put_user(13UL, uptr);
1253                break;
1254        case LIRC_GET_FEATURES:
1255                result = put_user(features, uptr);
1256                break;
1257        case LIRC_GET_REC_MODE:
1258                if (!(features&LIRC_CAN_REC_MASK))
1259                        return -ENOSYS;
1260
1261                result = put_user(LIRC_REC2MODE
1262                                  (features&LIRC_CAN_REC_MASK),
1263                                  uptr);
1264                break;
1265        case LIRC_SET_REC_MODE:
1266                if (!(features&LIRC_CAN_REC_MASK))
1267                        return -ENOSYS;
1268
1269                result = get_user(mode, uptr);
1270                if (!result && !(LIRC_MODE2REC(mode) & features))
1271                        result = -EINVAL;
1272                break;
1273        case LIRC_GET_SEND_MODE:
1274                if (!(features&LIRC_CAN_SEND_MASK))
1275                        return -ENOSYS;
1276
1277                result = put_user(LIRC_MODE_PULSE, uptr);
1278                break;
1279        case LIRC_SET_SEND_MODE:
1280                if (!(features&LIRC_CAN_SEND_MASK))
1281                        return -ENOSYS;
1282
1283                result = get_user(mode, uptr);
1284                if (!result && mode != LIRC_MODE_PULSE)
1285                        return -EINVAL;
1286                break;
1287        default:
1288                return -EINVAL;
1289        }
1290        return result;
1291}
1292
1293static struct IR *get_ir_device_by_minor(unsigned int minor)
1294{
1295        struct IR *ir;
1296        struct IR *ret = NULL;
1297
1298        mutex_lock(&ir_devices_lock);
1299
1300        if (!list_empty(&ir_devices_list)) {
1301                list_for_each_entry(ir, &ir_devices_list, list) {
1302                        if (ir->l.minor == minor) {
1303                                ret = get_ir_device(ir, true);
1304                                break;
1305                        }
1306                }
1307        }
1308
1309        mutex_unlock(&ir_devices_lock);
1310        return ret;
1311}
1312
1313/*
1314 * Open the IR device.  Get hold of our IR structure and
1315 * stash it in private_data for the file
1316 */
1317static int open(struct inode *node, struct file *filep)
1318{
1319        struct IR *ir;
1320        unsigned int minor = MINOR(node->i_rdev);
1321
1322        /* find our IR struct */
1323        ir = get_ir_device_by_minor(minor);
1324
1325        if (ir == NULL)
1326                return -ENODEV;
1327
1328        atomic_inc(&ir->open_count);
1329
1330        /* stash our IR struct */
1331        filep->private_data = ir;
1332
1333        nonseekable_open(node, filep);
1334        return 0;
1335}
1336
1337/* Close the IR device */
1338static int close(struct inode *node, struct file *filep)
1339{
1340        /* find our IR struct */
1341        struct IR *ir = filep->private_data;
1342
1343        if (ir == NULL) {
1344                pr_err("ir: close: no private_data attached to the file!\n");
1345                return -ENODEV;
1346        }
1347
1348        atomic_dec(&ir->open_count);
1349
1350        put_ir_device(ir, false);
1351        return 0;
1352}
1353
1354static int ir_remove(struct i2c_client *client);
1355static int ir_probe(struct i2c_client *client, const struct i2c_device_id *id);
1356
1357#define ID_FLAG_TX      0x01
1358#define ID_FLAG_HDPVR   0x02
1359
1360static const struct i2c_device_id ir_transceiver_id[] = {
1361        { "ir_tx_z8f0811_haup",  ID_FLAG_TX                 },
1362        { "ir_rx_z8f0811_haup",  0                          },
1363        { "ir_tx_z8f0811_hdpvr", ID_FLAG_HDPVR | ID_FLAG_TX },
1364        { "ir_rx_z8f0811_hdpvr", ID_FLAG_HDPVR              },
1365        { }
1366};
1367MODULE_DEVICE_TABLE(i2c, ir_transceiver_id);
1368
1369static struct i2c_driver driver = {
1370        .driver = {
1371                .name   = "Zilog/Hauppauge i2c IR",
1372        },
1373        .probe          = ir_probe,
1374        .remove         = ir_remove,
1375        .id_table       = ir_transceiver_id,
1376};
1377
1378static const struct file_operations lirc_fops = {
1379        .owner          = THIS_MODULE,
1380        .llseek         = no_llseek,
1381        .read           = read,
1382        .write          = write,
1383        .poll           = poll,
1384        .unlocked_ioctl = ioctl,
1385#ifdef CONFIG_COMPAT
1386        .compat_ioctl   = ioctl,
1387#endif
1388        .open           = open,
1389        .release        = close
1390};
1391
1392static struct lirc_driver lirc_template = {
1393        .name           = "lirc_zilog",
1394        .minor          = -1,
1395        .code_length    = 13,
1396        .buffer_size    = BUFLEN / 2,
1397        .sample_rate    = 0, /* tell lirc_dev to not start its own kthread */
1398        .chunk_size     = 2,
1399        .set_use_inc    = set_use_inc,
1400        .set_use_dec    = set_use_dec,
1401        .fops           = &lirc_fops,
1402        .owner          = THIS_MODULE,
1403};
1404
1405static int ir_remove(struct i2c_client *client)
1406{
1407        if (strncmp("ir_tx_z8", client->name, 8) == 0) {
1408                struct IR_tx *tx = i2c_get_clientdata(client);
1409
1410                if (tx != NULL) {
1411                        mutex_lock(&tx->client_lock);
1412                        tx->c = NULL;
1413                        mutex_unlock(&tx->client_lock);
1414                        put_ir_tx(tx, false);
1415                }
1416        } else if (strncmp("ir_rx_z8", client->name, 8) == 0) {
1417                struct IR_rx *rx = i2c_get_clientdata(client);
1418
1419                if (rx != NULL) {
1420                        mutex_lock(&rx->client_lock);
1421                        rx->c = NULL;
1422                        mutex_unlock(&rx->client_lock);
1423                        put_ir_rx(rx, false);
1424                }
1425        }
1426        return 0;
1427}
1428
1429
1430/* ir_devices_lock must be held */
1431static struct IR *get_ir_device_by_adapter(struct i2c_adapter *adapter)
1432{
1433        struct IR *ir;
1434
1435        if (list_empty(&ir_devices_list))
1436                return NULL;
1437
1438        list_for_each_entry(ir, &ir_devices_list, list)
1439                if (ir->adapter == adapter) {
1440                        get_ir_device(ir, true);
1441                        return ir;
1442                }
1443
1444        return NULL;
1445}
1446
1447static int ir_probe(struct i2c_client *client, const struct i2c_device_id *id)
1448{
1449        struct IR *ir;
1450        struct IR_tx *tx;
1451        struct IR_rx *rx;
1452        struct i2c_adapter *adap = client->adapter;
1453        int ret;
1454        bool tx_probe = false;
1455
1456        dev_dbg(&client->dev, "%s: %s on i2c-%d (%s), client addr=0x%02x\n",
1457                __func__, id->name, adap->nr, adap->name, client->addr);
1458
1459        /*
1460         * The IR receiver    is at i2c address 0x71.
1461         * The IR transmitter is at i2c address 0x70.
1462         */
1463
1464        if (id->driver_data & ID_FLAG_TX)
1465                tx_probe = true;
1466        else if (tx_only) /* module option */
1467                return -ENXIO;
1468
1469        pr_info("probing IR %s on %s (i2c-%d)\n",
1470                   tx_probe ? "Tx" : "Rx", adap->name, adap->nr);
1471
1472        mutex_lock(&ir_devices_lock);
1473
1474        /* Use a single struct IR instance for both the Rx and Tx functions */
1475        ir = get_ir_device_by_adapter(adap);
1476        if (ir == NULL) {
1477                ir = kzalloc(sizeof(struct IR), GFP_KERNEL);
1478                if (ir == NULL) {
1479                        ret = -ENOMEM;
1480                        goto out_no_ir;
1481                }
1482                kref_init(&ir->ref);
1483
1484                /* store for use in ir_probe() again, and open() later on */
1485                INIT_LIST_HEAD(&ir->list);
1486                list_add_tail(&ir->list, &ir_devices_list);
1487
1488                ir->adapter = adap;
1489                mutex_init(&ir->ir_lock);
1490                atomic_set(&ir->open_count, 0);
1491                spin_lock_init(&ir->tx_ref_lock);
1492                spin_lock_init(&ir->rx_ref_lock);
1493
1494                /* set lirc_dev stuff */
1495                memcpy(&ir->l, &lirc_template, sizeof(struct lirc_driver));
1496                /*
1497                 * FIXME this is a pointer reference to us, but no refcount.
1498                 *
1499                 * This OK for now, since lirc_dev currently won't touch this
1500                 * buffer as we provide our own lirc_fops.
1501                 *
1502                 * Currently our own lirc_fops rely on this ir->l.rbuf pointer
1503                 */
1504                ir->l.rbuf = &ir->rbuf;
1505                ir->l.dev  = &adap->dev;
1506                ret = lirc_buffer_init(ir->l.rbuf,
1507                                       ir->l.chunk_size, ir->l.buffer_size);
1508                if (ret)
1509                        goto out_put_ir;
1510        }
1511
1512        if (tx_probe) {
1513                /* Get the IR_rx instance for later, if already allocated */
1514                rx = get_ir_rx(ir);
1515
1516                /* Set up a struct IR_tx instance */
1517                tx = kzalloc(sizeof(struct IR_tx), GFP_KERNEL);
1518                if (tx == NULL) {
1519                        ret = -ENOMEM;
1520                        goto out_put_xx;
1521                }
1522                kref_init(&tx->ref);
1523                ir->tx = tx;
1524
1525                ir->l.features |= LIRC_CAN_SEND_PULSE;
1526                mutex_init(&tx->client_lock);
1527                tx->c = client;
1528                tx->need_boot = 1;
1529                tx->post_tx_ready_poll =
1530                               (id->driver_data & ID_FLAG_HDPVR) ? false : true;
1531
1532                /* An ir ref goes to the struct IR_tx instance */
1533                tx->ir = get_ir_device(ir, true);
1534
1535                /* A tx ref goes to the i2c_client */
1536                i2c_set_clientdata(client, get_ir_tx(ir));
1537
1538                /*
1539                 * Load the 'firmware'.  We do this before registering with
1540                 * lirc_dev, so the first firmware load attempt does not happen
1541                 * after a open() or write() call on the device.
1542                 *
1543                 * Failure here is not deemed catastrophic, so the receiver will
1544                 * still be usable.  Firmware load will be retried in write(),
1545                 * if it is needed.
1546                 */
1547                fw_load(tx);
1548
1549                /* Proceed only if the Rx client is also ready or not needed */
1550                if (rx == NULL && !tx_only) {
1551                        dev_info(tx->ir->l.dev,
1552                                 "probe of IR Tx on %s (i2c-%d) done. Waiting on IR Rx.\n",
1553                                 adap->name, adap->nr);
1554                        goto out_ok;
1555                }
1556        } else {
1557                /* Get the IR_tx instance for later, if already allocated */
1558                tx = get_ir_tx(ir);
1559
1560                /* Set up a struct IR_rx instance */
1561                rx = kzalloc(sizeof(struct IR_rx), GFP_KERNEL);
1562                if (rx == NULL) {
1563                        ret = -ENOMEM;
1564                        goto out_put_xx;
1565                }
1566                kref_init(&rx->ref);
1567                ir->rx = rx;
1568
1569                ir->l.features |= LIRC_CAN_REC_LIRCCODE;
1570                mutex_init(&rx->client_lock);
1571                rx->c = client;
1572                rx->hdpvr_data_fmt =
1573                               (id->driver_data & ID_FLAG_HDPVR) ? true : false;
1574
1575                /* An ir ref goes to the struct IR_rx instance */
1576                rx->ir = get_ir_device(ir, true);
1577
1578                /* An rx ref goes to the i2c_client */
1579                i2c_set_clientdata(client, get_ir_rx(ir));
1580
1581                /*
1582                 * Start the polling thread.
1583                 * It will only perform an empty loop around schedule_timeout()
1584                 * until we register with lirc_dev and the first user open()
1585                 */
1586                /* An ir ref goes to the new rx polling kthread */
1587                rx->task = kthread_run(lirc_thread, get_ir_device(ir, true),
1588                                       "zilog-rx-i2c-%d", adap->nr);
1589                if (IS_ERR(rx->task)) {
1590                        ret = PTR_ERR(rx->task);
1591                        dev_err(tx->ir->l.dev,
1592                                "%s: could not start IR Rx polling thread\n",
1593                                __func__);
1594                        /* Failed kthread, so put back the ir ref */
1595                        put_ir_device(ir, true);
1596                        /* Failure exit, so put back rx ref from i2c_client */
1597                        i2c_set_clientdata(client, NULL);
1598                        put_ir_rx(rx, true);
1599                        ir->l.features &= ~LIRC_CAN_REC_LIRCCODE;
1600                        goto out_put_xx;
1601                }
1602
1603                /* Proceed only if the Tx client is also ready */
1604                if (tx == NULL) {
1605                        pr_info("probe of IR Rx on %s (i2c-%d) done. Waiting on IR Tx.\n",
1606                                   adap->name, adap->nr);
1607                        goto out_ok;
1608                }
1609        }
1610
1611        /* register with lirc */
1612        ir->l.minor = minor; /* module option: user requested minor number */
1613        ir->l.minor = lirc_register_driver(&ir->l);
1614        if (ir->l.minor < 0 || ir->l.minor >= MAX_IRCTL_DEVICES) {
1615                dev_err(tx->ir->l.dev,
1616                        "%s: \"minor\" must be between 0 and %d (%d)!\n",
1617                        __func__, MAX_IRCTL_DEVICES-1, ir->l.minor);
1618                ret = -EBADRQC;
1619                goto out_put_xx;
1620        }
1621        dev_info(ir->l.dev,
1622                 "IR unit on %s (i2c-%d) registered as lirc%d and ready\n",
1623                 adap->name, adap->nr, ir->l.minor);
1624
1625out_ok:
1626        if (rx != NULL)
1627                put_ir_rx(rx, true);
1628        if (tx != NULL)
1629                put_ir_tx(tx, true);
1630        put_ir_device(ir, true);
1631        dev_info(ir->l.dev,
1632                 "probe of IR %s on %s (i2c-%d) done\n",
1633                 tx_probe ? "Tx" : "Rx", adap->name, adap->nr);
1634        mutex_unlock(&ir_devices_lock);
1635        return 0;
1636
1637out_put_xx:
1638        if (rx != NULL)
1639                put_ir_rx(rx, true);
1640        if (tx != NULL)
1641                put_ir_tx(tx, true);
1642out_put_ir:
1643        put_ir_device(ir, true);
1644out_no_ir:
1645        dev_err(&client->dev,
1646                "%s: probing IR %s on %s (i2c-%d) failed with %d\n",
1647                __func__, tx_probe ? "Tx" : "Rx", adap->name, adap->nr, ret);
1648        mutex_unlock(&ir_devices_lock);
1649        return ret;
1650}
1651
1652static int __init zilog_init(void)
1653{
1654        int ret;
1655
1656        pr_notice("Zilog/Hauppauge IR driver initializing\n");
1657
1658        mutex_init(&tx_data_lock);
1659
1660        request_module("firmware_class");
1661
1662        ret = i2c_add_driver(&driver);
1663        if (ret)
1664                pr_err("initialization failed\n");
1665        else
1666                pr_notice("initialization complete\n");
1667
1668        return ret;
1669}
1670
1671static void __exit zilog_exit(void)
1672{
1673        i2c_del_driver(&driver);
1674        /* if loaded */
1675        fw_unload();
1676        pr_notice("Zilog/Hauppauge IR driver unloaded\n");
1677}
1678
1679module_init(zilog_init);
1680module_exit(zilog_exit);
1681
1682MODULE_DESCRIPTION("Zilog/Hauppauge infrared transmitter driver (i2c stack)");
1683MODULE_AUTHOR("Gerd Knorr, Michal Kochanowicz, Christoph Bartelmus, Ulrich Mueller, Stefan Jahn, Jerome Brock, Mark Weaver, Andy Walls");
1684MODULE_LICENSE("GPL");
1685/* for compat with old name, which isn't all that accurate anymore */
1686MODULE_ALIAS("lirc_pvr150");
1687
1688module_param(minor, int, 0444);
1689MODULE_PARM_DESC(minor, "Preferred minor device number");
1690
1691module_param(debug, bool, 0644);
1692MODULE_PARM_DESC(debug, "Enable debugging messages");
1693
1694module_param(tx_only, bool, 0644);
1695MODULE_PARM_DESC(tx_only, "Only handle the IR transmit function");
1696