linux/drivers/media/video/cafe_ccic.c
<<
>>
Prefs
   1/*
   2 * A driver for the CMOS camera controller in the Marvell 88ALP01 "cafe"
   3 * multifunction chip.  Currently works with the Omnivision OV7670
   4 * sensor.
   5 *
   6 * The data sheet for this device can be found at:
   7 *    http://www.marvell.com/products/pcconn/88ALP01.jsp
   8 *
   9 * Copyright 2006 One Laptop Per Child Association, Inc.
  10 * Copyright 2006-7 Jonathan Corbet <corbet@lwn.net>
  11 *
  12 * Written by Jonathan Corbet, corbet@lwn.net.
  13 *
  14 * This file may be distributed under the terms of the GNU General
  15 * Public License, version 2.
  16 */
  17
  18#include <linux/kernel.h>
  19#include <linux/module.h>
  20#include <linux/init.h>
  21#include <linux/fs.h>
  22#include <linux/pci.h>
  23#include <linux/i2c.h>
  24#include <linux/interrupt.h>
  25#include <linux/spinlock.h>
  26#include <linux/videodev2.h>
  27#include <media/v4l2-common.h>
  28#include <media/v4l2-chip-ident.h>
  29#include <linux/device.h>
  30#include <linux/wait.h>
  31#include <linux/list.h>
  32#include <linux/dma-mapping.h>
  33#include <linux/delay.h>
  34#include <linux/debugfs.h>
  35#include <linux/jiffies.h>
  36#include <linux/vmalloc.h>
  37
  38#include <asm/uaccess.h>
  39#include <asm/io.h>
  40
  41#include "cafe_ccic-regs.h"
  42
  43#define CAFE_VERSION 0x000002
  44
  45
  46/*
  47 * Parameters.
  48 */
  49MODULE_AUTHOR("Jonathan Corbet <corbet@lwn.net>");
  50MODULE_DESCRIPTION("Marvell 88ALP01 CMOS Camera Controller driver");
  51MODULE_LICENSE("GPL");
  52MODULE_SUPPORTED_DEVICE("Video");
  53
  54/*
  55 * Internal DMA buffer management.  Since the controller cannot do S/G I/O,
  56 * we must have physically contiguous buffers to bring frames into.
  57 * These parameters control how many buffers we use, whether we
  58 * allocate them at load time (better chance of success, but nails down
  59 * memory) or when somebody tries to use the camera (riskier), and,
  60 * for load-time allocation, how big they should be.
  61 *
  62 * The controller can cycle through three buffers.  We could use
  63 * more by flipping pointers around, but it probably makes little
  64 * sense.
  65 */
  66
  67#define MAX_DMA_BUFS 3
  68static int alloc_bufs_at_read = 0;
  69module_param(alloc_bufs_at_read, bool, 0444);
  70MODULE_PARM_DESC(alloc_bufs_at_read,
  71                "Non-zero value causes DMA buffers to be allocated when the "
  72                "video capture device is read, rather than at module load "
  73                "time.  This saves memory, but decreases the chances of "
  74                "successfully getting those buffers.");
  75
  76static int n_dma_bufs = 3;
  77module_param(n_dma_bufs, uint, 0644);
  78MODULE_PARM_DESC(n_dma_bufs,
  79                "The number of DMA buffers to allocate.  Can be either two "
  80                "(saves memory, makes timing tighter) or three.");
  81
  82static int dma_buf_size = VGA_WIDTH * VGA_HEIGHT * 2;  /* Worst case */
  83module_param(dma_buf_size, uint, 0444);
  84MODULE_PARM_DESC(dma_buf_size,
  85                "The size of the allocated DMA buffers.  If actual operating "
  86                "parameters require larger buffers, an attempt to reallocate "
  87                "will be made.");
  88
  89static int min_buffers = 1;
  90module_param(min_buffers, uint, 0644);
  91MODULE_PARM_DESC(min_buffers,
  92                "The minimum number of streaming I/O buffers we are willing "
  93                "to work with.");
  94
  95static int max_buffers = 10;
  96module_param(max_buffers, uint, 0644);
  97MODULE_PARM_DESC(max_buffers,
  98                "The maximum number of streaming I/O buffers an application "
  99                "will be allowed to allocate.  These buffers are big and live "
 100                "in vmalloc space.");
 101
 102static int flip = 0;
 103module_param(flip, bool, 0444);
 104MODULE_PARM_DESC(flip,
 105                "If set, the sensor will be instructed to flip the image "
 106                "vertically.");
 107
 108
 109enum cafe_state {
 110        S_NOTREADY,     /* Not yet initialized */
 111        S_IDLE,         /* Just hanging around */
 112        S_FLAKED,       /* Some sort of problem */
 113        S_SINGLEREAD,   /* In read() */
 114        S_SPECREAD,     /* Speculative read (for future read()) */
 115        S_STREAMING     /* Streaming data */
 116};
 117
 118/*
 119 * Tracking of streaming I/O buffers.
 120 */
 121struct cafe_sio_buffer {
 122        struct list_head list;
 123        struct v4l2_buffer v4lbuf;
 124        char *buffer;   /* Where it lives in kernel space */
 125        int mapcount;
 126        struct cafe_camera *cam;
 127};
 128
 129/*
 130 * A description of one of our devices.
 131 * Locking: controlled by s_mutex.  Certain fields, however, require
 132 *          the dev_lock spinlock; they are marked as such by comments.
 133 *          dev_lock is also required for access to device registers.
 134 */
 135struct cafe_camera
 136{
 137        enum cafe_state state;
 138        unsigned long flags;            /* Buffer status, mainly (dev_lock) */
 139        int users;                      /* How many open FDs */
 140        struct file *owner;             /* Who has data access (v4l2) */
 141
 142        /*
 143         * Subsystem structures.
 144         */
 145        struct pci_dev *pdev;
 146        struct video_device v4ldev;
 147        struct i2c_adapter i2c_adapter;
 148        struct i2c_client *sensor;
 149
 150        unsigned char __iomem *regs;
 151        struct list_head dev_list;      /* link to other devices */
 152
 153        /* DMA buffers */
 154        unsigned int nbufs;             /* How many are alloc'd */
 155        int next_buf;                   /* Next to consume (dev_lock) */
 156        unsigned int dma_buf_size;      /* allocated size */
 157        void *dma_bufs[MAX_DMA_BUFS];   /* Internal buffer addresses */
 158        dma_addr_t dma_handles[MAX_DMA_BUFS]; /* Buffer bus addresses */
 159        unsigned int specframes;        /* Unconsumed spec frames (dev_lock) */
 160        unsigned int sequence;          /* Frame sequence number */
 161        unsigned int buf_seq[MAX_DMA_BUFS]; /* Sequence for individual buffers */
 162
 163        /* Streaming buffers */
 164        unsigned int n_sbufs;           /* How many we have */
 165        struct cafe_sio_buffer *sb_bufs; /* The array of housekeeping structs */
 166        struct list_head sb_avail;      /* Available for data (we own) (dev_lock) */
 167        struct list_head sb_full;       /* With data (user space owns) (dev_lock) */
 168        struct tasklet_struct s_tasklet;
 169
 170        /* Current operating parameters */
 171        u32 sensor_type;                /* Currently ov7670 only */
 172        struct v4l2_pix_format pix_format;
 173
 174        /* Locks */
 175        struct mutex s_mutex; /* Access to this structure */
 176        spinlock_t dev_lock;  /* Access to device */
 177
 178        /* Misc */
 179        wait_queue_head_t smbus_wait;   /* Waiting on i2c events */
 180        wait_queue_head_t iowait;       /* Waiting on frame data */
 181#ifdef CONFIG_VIDEO_ADV_DEBUG
 182        struct dentry *dfs_regs;
 183        struct dentry *dfs_cam_regs;
 184#endif
 185};
 186
 187/*
 188 * Status flags.  Always manipulated with bit operations.
 189 */
 190#define CF_BUF0_VALID    0      /* Buffers valid - first three */
 191#define CF_BUF1_VALID    1
 192#define CF_BUF2_VALID    2
 193#define CF_DMA_ACTIVE    3      /* A frame is incoming */
 194#define CF_CONFIG_NEEDED 4      /* Must configure hardware */
 195
 196
 197
 198/*
 199 * Start over with DMA buffers - dev_lock needed.
 200 */
 201static void cafe_reset_buffers(struct cafe_camera *cam)
 202{
 203        int i;
 204
 205        cam->next_buf = -1;
 206        for (i = 0; i < cam->nbufs; i++)
 207                clear_bit(i, &cam->flags);
 208        cam->specframes = 0;
 209}
 210
 211static inline int cafe_needs_config(struct cafe_camera *cam)
 212{
 213        return test_bit(CF_CONFIG_NEEDED, &cam->flags);
 214}
 215
 216static void cafe_set_config_needed(struct cafe_camera *cam, int needed)
 217{
 218        if (needed)
 219                set_bit(CF_CONFIG_NEEDED, &cam->flags);
 220        else
 221                clear_bit(CF_CONFIG_NEEDED, &cam->flags);
 222}
 223
 224
 225
 226
 227/*
 228 * Debugging and related.
 229 */
 230#define cam_err(cam, fmt, arg...) \
 231        dev_err(&(cam)->pdev->dev, fmt, ##arg);
 232#define cam_warn(cam, fmt, arg...) \
 233        dev_warn(&(cam)->pdev->dev, fmt, ##arg);
 234#define cam_dbg(cam, fmt, arg...) \
 235        dev_dbg(&(cam)->pdev->dev, fmt, ##arg);
 236
 237
 238/* ---------------------------------------------------------------------*/
 239/*
 240 * We keep a simple list of known devices to search at open time.
 241 */
 242static LIST_HEAD(cafe_dev_list);
 243static DEFINE_MUTEX(cafe_dev_list_lock);
 244
 245static void cafe_add_dev(struct cafe_camera *cam)
 246{
 247        mutex_lock(&cafe_dev_list_lock);
 248        list_add_tail(&cam->dev_list, &cafe_dev_list);
 249        mutex_unlock(&cafe_dev_list_lock);
 250}
 251
 252static void cafe_remove_dev(struct cafe_camera *cam)
 253{
 254        mutex_lock(&cafe_dev_list_lock);
 255        list_del(&cam->dev_list);
 256        mutex_unlock(&cafe_dev_list_lock);
 257}
 258
 259static struct cafe_camera *cafe_find_dev(int minor)
 260{
 261        struct cafe_camera *cam;
 262
 263        mutex_lock(&cafe_dev_list_lock);
 264        list_for_each_entry(cam, &cafe_dev_list, dev_list) {
 265                if (cam->v4ldev.minor == minor)
 266                        goto done;
 267        }
 268        cam = NULL;
 269  done:
 270        mutex_unlock(&cafe_dev_list_lock);
 271        return cam;
 272}
 273
 274
 275static struct cafe_camera *cafe_find_by_pdev(struct pci_dev *pdev)
 276{
 277        struct cafe_camera *cam;
 278
 279        mutex_lock(&cafe_dev_list_lock);
 280        list_for_each_entry(cam, &cafe_dev_list, dev_list) {
 281                if (cam->pdev == pdev)
 282                        goto done;
 283        }
 284        cam = NULL;
 285  done:
 286        mutex_unlock(&cafe_dev_list_lock);
 287        return cam;
 288}
 289
 290
 291/* ------------------------------------------------------------------------ */
 292/*
 293 * Device register I/O
 294 */
 295static inline void cafe_reg_write(struct cafe_camera *cam, unsigned int reg,
 296                unsigned int val)
 297{
 298        iowrite32(val, cam->regs + reg);
 299}
 300
 301static inline unsigned int cafe_reg_read(struct cafe_camera *cam,
 302                unsigned int reg)
 303{
 304        return ioread32(cam->regs + reg);
 305}
 306
 307
 308static inline void cafe_reg_write_mask(struct cafe_camera *cam, unsigned int reg,
 309                unsigned int val, unsigned int mask)
 310{
 311        unsigned int v = cafe_reg_read(cam, reg);
 312
 313        v = (v & ~mask) | (val & mask);
 314        cafe_reg_write(cam, reg, v);
 315}
 316
 317static inline void cafe_reg_clear_bit(struct cafe_camera *cam,
 318                unsigned int reg, unsigned int val)
 319{
 320        cafe_reg_write_mask(cam, reg, 0, val);
 321}
 322
 323static inline void cafe_reg_set_bit(struct cafe_camera *cam,
 324                unsigned int reg, unsigned int val)
 325{
 326        cafe_reg_write_mask(cam, reg, val, val);
 327}
 328
 329
 330
 331/* -------------------------------------------------------------------- */
 332/*
 333 * The I2C/SMBUS interface to the camera itself starts here.  The
 334 * controller handles SMBUS itself, presenting a relatively simple register
 335 * interface; all we have to do is to tell it where to route the data.
 336 */
 337#define CAFE_SMBUS_TIMEOUT (HZ)  /* generous */
 338
 339static int cafe_smbus_write_done(struct cafe_camera *cam)
 340{
 341        unsigned long flags;
 342        int c1;
 343
 344        /*
 345         * We must delay after the interrupt, or the controller gets confused
 346         * and never does give us good status.  Fortunately, we don't do this
 347         * often.
 348         */
 349        udelay(20);
 350        spin_lock_irqsave(&cam->dev_lock, flags);
 351        c1 = cafe_reg_read(cam, REG_TWSIC1);
 352        spin_unlock_irqrestore(&cam->dev_lock, flags);
 353        return (c1 & (TWSIC1_WSTAT|TWSIC1_ERROR)) != TWSIC1_WSTAT;
 354}
 355
 356static int cafe_smbus_write_data(struct cafe_camera *cam,
 357                u16 addr, u8 command, u8 value)
 358{
 359        unsigned int rval;
 360        unsigned long flags;
 361        DEFINE_WAIT(the_wait);
 362
 363        spin_lock_irqsave(&cam->dev_lock, flags);
 364        rval = TWSIC0_EN | ((addr << TWSIC0_SID_SHIFT) & TWSIC0_SID);
 365        rval |= TWSIC0_OVMAGIC;  /* Make OV sensors work */
 366        /*
 367         * Marvell sez set clkdiv to all 1's for now.
 368         */
 369        rval |= TWSIC0_CLKDIV;
 370        cafe_reg_write(cam, REG_TWSIC0, rval);
 371        (void) cafe_reg_read(cam, REG_TWSIC1); /* force write */
 372        rval = value | ((command << TWSIC1_ADDR_SHIFT) & TWSIC1_ADDR);
 373        cafe_reg_write(cam, REG_TWSIC1, rval);
 374        spin_unlock_irqrestore(&cam->dev_lock, flags);
 375
 376        /*
 377         * Time to wait for the write to complete.  THIS IS A RACY
 378         * WAY TO DO IT, but the sad fact is that reading the TWSIC1
 379         * register too quickly after starting the operation sends
 380         * the device into a place that may be kinder and better, but
 381         * which is absolutely useless for controlling the sensor.  In
 382         * practice we have plenty of time to get into our sleep state
 383         * before the interrupt hits, and the worst case is that we
 384         * time out and then see that things completed, so this seems
 385         * the best way for now.
 386         */
 387        do {
 388                prepare_to_wait(&cam->smbus_wait, &the_wait,
 389                                TASK_UNINTERRUPTIBLE);
 390                schedule_timeout(1); /* even 1 jiffy is too long */
 391                finish_wait(&cam->smbus_wait, &the_wait);
 392        } while (!cafe_smbus_write_done(cam));
 393
 394#ifdef IF_THE_CAFE_HARDWARE_WORKED_RIGHT
 395        wait_event_timeout(cam->smbus_wait, cafe_smbus_write_done(cam),
 396                        CAFE_SMBUS_TIMEOUT);
 397#endif
 398        spin_lock_irqsave(&cam->dev_lock, flags);
 399        rval = cafe_reg_read(cam, REG_TWSIC1);
 400        spin_unlock_irqrestore(&cam->dev_lock, flags);
 401
 402        if (rval & TWSIC1_WSTAT) {
 403                cam_err(cam, "SMBUS write (%02x/%02x/%02x) timed out\n", addr,
 404                                command, value);
 405                return -EIO;
 406        }
 407        if (rval & TWSIC1_ERROR) {
 408                cam_err(cam, "SMBUS write (%02x/%02x/%02x) error\n", addr,
 409                                command, value);
 410                return -EIO;
 411        }
 412        return 0;
 413}
 414
 415
 416
 417static int cafe_smbus_read_done(struct cafe_camera *cam)
 418{
 419        unsigned long flags;
 420        int c1;
 421
 422        /*
 423         * We must delay after the interrupt, or the controller gets confused
 424         * and never does give us good status.  Fortunately, we don't do this
 425         * often.
 426         */
 427        udelay(20);
 428        spin_lock_irqsave(&cam->dev_lock, flags);
 429        c1 = cafe_reg_read(cam, REG_TWSIC1);
 430        spin_unlock_irqrestore(&cam->dev_lock, flags);
 431        return c1 & (TWSIC1_RVALID|TWSIC1_ERROR);
 432}
 433
 434
 435
 436static int cafe_smbus_read_data(struct cafe_camera *cam,
 437                u16 addr, u8 command, u8 *value)
 438{
 439        unsigned int rval;
 440        unsigned long flags;
 441
 442        spin_lock_irqsave(&cam->dev_lock, flags);
 443        rval = TWSIC0_EN | ((addr << TWSIC0_SID_SHIFT) & TWSIC0_SID);
 444        rval |= TWSIC0_OVMAGIC; /* Make OV sensors work */
 445        /*
 446         * Marvel sez set clkdiv to all 1's for now.
 447         */
 448        rval |= TWSIC0_CLKDIV;
 449        cafe_reg_write(cam, REG_TWSIC0, rval);
 450        (void) cafe_reg_read(cam, REG_TWSIC1); /* force write */
 451        rval = TWSIC1_READ | ((command << TWSIC1_ADDR_SHIFT) & TWSIC1_ADDR);
 452        cafe_reg_write(cam, REG_TWSIC1, rval);
 453        spin_unlock_irqrestore(&cam->dev_lock, flags);
 454
 455        wait_event_timeout(cam->smbus_wait,
 456                        cafe_smbus_read_done(cam), CAFE_SMBUS_TIMEOUT);
 457        spin_lock_irqsave(&cam->dev_lock, flags);
 458        rval = cafe_reg_read(cam, REG_TWSIC1);
 459        spin_unlock_irqrestore(&cam->dev_lock, flags);
 460
 461        if (rval & TWSIC1_ERROR) {
 462                cam_err(cam, "SMBUS read (%02x/%02x) error\n", addr, command);
 463                return -EIO;
 464        }
 465        if (! (rval & TWSIC1_RVALID)) {
 466                cam_err(cam, "SMBUS read (%02x/%02x) timed out\n", addr,
 467                                command);
 468                return -EIO;
 469        }
 470        *value = rval & 0xff;
 471        return 0;
 472}
 473
 474/*
 475 * Perform a transfer over SMBUS.  This thing is called under
 476 * the i2c bus lock, so we shouldn't race with ourselves...
 477 */
 478static int cafe_smbus_xfer(struct i2c_adapter *adapter, u16 addr,
 479                unsigned short flags, char rw, u8 command,
 480                int size, union i2c_smbus_data *data)
 481{
 482        struct cafe_camera *cam = i2c_get_adapdata(adapter);
 483        int ret = -EINVAL;
 484
 485        /*
 486         * Refuse to talk to anything but OV cam chips.  We should
 487         * never even see an attempt to do so, but one never knows.
 488         */
 489        if (cam->sensor && addr != cam->sensor->addr) {
 490                cam_err(cam, "funky smbus addr %d\n", addr);
 491                return -EINVAL;
 492        }
 493        /*
 494         * This interface would appear to only do byte data ops.  OK
 495         * it can do word too, but the cam chip has no use for that.
 496         */
 497        if (size != I2C_SMBUS_BYTE_DATA) {
 498                cam_err(cam, "funky xfer size %d\n", size);
 499                return -EINVAL;
 500        }
 501
 502        if (rw == I2C_SMBUS_WRITE)
 503                ret = cafe_smbus_write_data(cam, addr, command, data->byte);
 504        else if (rw == I2C_SMBUS_READ)
 505                ret = cafe_smbus_read_data(cam, addr, command, &data->byte);
 506        return ret;
 507}
 508
 509
 510static void cafe_smbus_enable_irq(struct cafe_camera *cam)
 511{
 512        unsigned long flags;
 513
 514        spin_lock_irqsave(&cam->dev_lock, flags);
 515        cafe_reg_set_bit(cam, REG_IRQMASK, TWSIIRQS);
 516        spin_unlock_irqrestore(&cam->dev_lock, flags);
 517}
 518
 519static u32 cafe_smbus_func(struct i2c_adapter *adapter)
 520{
 521        return I2C_FUNC_SMBUS_READ_BYTE_DATA  |
 522               I2C_FUNC_SMBUS_WRITE_BYTE_DATA;
 523}
 524
 525static struct i2c_algorithm cafe_smbus_algo = {
 526        .smbus_xfer = cafe_smbus_xfer,
 527        .functionality = cafe_smbus_func
 528};
 529
 530/* Somebody is on the bus */
 531static int cafe_cam_init(struct cafe_camera *cam);
 532static void cafe_ctlr_stop_dma(struct cafe_camera *cam);
 533static void cafe_ctlr_power_down(struct cafe_camera *cam);
 534
 535static int cafe_smbus_attach(struct i2c_client *client)
 536{
 537        struct cafe_camera *cam = i2c_get_adapdata(client->adapter);
 538
 539        /*
 540         * Don't talk to chips we don't recognize.
 541         */
 542        if (client->driver->id == I2C_DRIVERID_OV7670) {
 543                cam->sensor = client;
 544                return cafe_cam_init(cam);
 545        }
 546        return -EINVAL;
 547}
 548
 549static int cafe_smbus_detach(struct i2c_client *client)
 550{
 551        struct cafe_camera *cam = i2c_get_adapdata(client->adapter);
 552
 553        if (cam->sensor == client) {
 554                cafe_ctlr_stop_dma(cam);
 555                cafe_ctlr_power_down(cam);
 556                cam_err(cam, "lost the sensor!\n");
 557                cam->sensor = NULL;  /* Bummer, no camera */
 558                cam->state = S_NOTREADY;
 559        }
 560        return 0;
 561}
 562
 563static int cafe_smbus_setup(struct cafe_camera *cam)
 564{
 565        struct i2c_adapter *adap = &cam->i2c_adapter;
 566        int ret;
 567
 568        cafe_smbus_enable_irq(cam);
 569        adap->id = I2C_HW_SMBUS_CAFE;
 570        adap->class = I2C_CLASS_CAM_DIGITAL;
 571        adap->owner = THIS_MODULE;
 572        adap->client_register = cafe_smbus_attach;
 573        adap->client_unregister = cafe_smbus_detach;
 574        adap->algo = &cafe_smbus_algo;
 575        strcpy(adap->name, "cafe_ccic");
 576        adap->dev.parent = &cam->pdev->dev;
 577        i2c_set_adapdata(adap, cam);
 578        ret = i2c_add_adapter(adap);
 579        if (ret)
 580                printk(KERN_ERR "Unable to register cafe i2c adapter\n");
 581        return ret;
 582}
 583
 584static void cafe_smbus_shutdown(struct cafe_camera *cam)
 585{
 586        i2c_del_adapter(&cam->i2c_adapter);
 587}
 588
 589
 590/* ------------------------------------------------------------------- */
 591/*
 592 * Deal with the controller.
 593 */
 594
 595/*
 596 * Do everything we think we need to have the interface operating
 597 * according to the desired format.
 598 */
 599static void cafe_ctlr_dma(struct cafe_camera *cam)
 600{
 601        /*
 602         * Store the first two Y buffers (we aren't supporting
 603         * planar formats for now, so no UV bufs).  Then either
 604         * set the third if it exists, or tell the controller
 605         * to just use two.
 606         */
 607        cafe_reg_write(cam, REG_Y0BAR, cam->dma_handles[0]);
 608        cafe_reg_write(cam, REG_Y1BAR, cam->dma_handles[1]);
 609        if (cam->nbufs > 2) {
 610                cafe_reg_write(cam, REG_Y2BAR, cam->dma_handles[2]);
 611                cafe_reg_clear_bit(cam, REG_CTRL1, C1_TWOBUFS);
 612        }
 613        else
 614                cafe_reg_set_bit(cam, REG_CTRL1, C1_TWOBUFS);
 615        cafe_reg_write(cam, REG_UBAR, 0); /* 32 bits only for now */
 616}
 617
 618static void cafe_ctlr_image(struct cafe_camera *cam)
 619{
 620        int imgsz;
 621        struct v4l2_pix_format *fmt = &cam->pix_format;
 622
 623        imgsz = ((fmt->height << IMGSZ_V_SHIFT) & IMGSZ_V_MASK) |
 624                (fmt->bytesperline & IMGSZ_H_MASK);
 625        cafe_reg_write(cam, REG_IMGSIZE, imgsz);
 626        cafe_reg_write(cam, REG_IMGOFFSET, 0);
 627        /* YPITCH just drops the last two bits */
 628        cafe_reg_write_mask(cam, REG_IMGPITCH, fmt->bytesperline,
 629                        IMGP_YP_MASK);
 630        /*
 631         * Tell the controller about the image format we are using.
 632         */
 633        switch (cam->pix_format.pixelformat) {
 634        case V4L2_PIX_FMT_YUYV:
 635            cafe_reg_write_mask(cam, REG_CTRL0,
 636                            C0_DF_YUV|C0_YUV_PACKED|C0_YUVE_YUYV,
 637                            C0_DF_MASK);
 638            break;
 639
 640        case V4L2_PIX_FMT_RGB444:
 641            cafe_reg_write_mask(cam, REG_CTRL0,
 642                            C0_DF_RGB|C0_RGBF_444|C0_RGB4_XRGB,
 643                            C0_DF_MASK);
 644                /* Alpha value? */
 645            break;
 646
 647        case V4L2_PIX_FMT_RGB565:
 648            cafe_reg_write_mask(cam, REG_CTRL0,
 649                            C0_DF_RGB|C0_RGBF_565|C0_RGB5_BGGR,
 650                            C0_DF_MASK);
 651            break;
 652
 653        default:
 654            cam_err(cam, "Unknown format %x\n", cam->pix_format.pixelformat);
 655            break;
 656        }
 657        /*
 658         * Make sure it knows we want to use hsync/vsync.
 659         */
 660        cafe_reg_write_mask(cam, REG_CTRL0, C0_SIF_HVSYNC,
 661                        C0_SIFM_MASK);
 662}
 663
 664
 665/*
 666 * Configure the controller for operation; caller holds the
 667 * device mutex.
 668 */
 669static int cafe_ctlr_configure(struct cafe_camera *cam)
 670{
 671        unsigned long flags;
 672
 673        spin_lock_irqsave(&cam->dev_lock, flags);
 674        cafe_ctlr_dma(cam);
 675        cafe_ctlr_image(cam);
 676        cafe_set_config_needed(cam, 0);
 677        spin_unlock_irqrestore(&cam->dev_lock, flags);
 678        return 0;
 679}
 680
 681static void cafe_ctlr_irq_enable(struct cafe_camera *cam)
 682{
 683        /*
 684         * Clear any pending interrupts, since we do not
 685         * expect to have I/O active prior to enabling.
 686         */
 687        cafe_reg_write(cam, REG_IRQSTAT, FRAMEIRQS);
 688        cafe_reg_set_bit(cam, REG_IRQMASK, FRAMEIRQS);
 689}
 690
 691static void cafe_ctlr_irq_disable(struct cafe_camera *cam)
 692{
 693        cafe_reg_clear_bit(cam, REG_IRQMASK, FRAMEIRQS);
 694}
 695
 696/*
 697 * Make the controller start grabbing images.  Everything must
 698 * be set up before doing this.
 699 */
 700static void cafe_ctlr_start(struct cafe_camera *cam)
 701{
 702        /* set_bit performs a read, so no other barrier should be
 703           needed here */
 704        cafe_reg_set_bit(cam, REG_CTRL0, C0_ENABLE);
 705}
 706
 707static void cafe_ctlr_stop(struct cafe_camera *cam)
 708{
 709        cafe_reg_clear_bit(cam, REG_CTRL0, C0_ENABLE);
 710}
 711
 712static void cafe_ctlr_init(struct cafe_camera *cam)
 713{
 714        unsigned long flags;
 715
 716        spin_lock_irqsave(&cam->dev_lock, flags);
 717        /*
 718         * Added magic to bring up the hardware on the B-Test board
 719         */
 720        cafe_reg_write(cam, 0x3038, 0x8);
 721        cafe_reg_write(cam, 0x315c, 0x80008);
 722        /*
 723         * Go through the dance needed to wake the device up.
 724         * Note that these registers are global and shared
 725         * with the NAND and SD devices.  Interaction between the
 726         * three still needs to be examined.
 727         */
 728        cafe_reg_write(cam, REG_GL_CSR, GCSR_SRS|GCSR_MRS); /* Needed? */
 729        cafe_reg_write(cam, REG_GL_CSR, GCSR_SRC|GCSR_MRC);
 730        cafe_reg_write(cam, REG_GL_CSR, GCSR_SRC|GCSR_MRS);
 731        /*
 732         * Here we must wait a bit for the controller to come around.
 733         */
 734        spin_unlock_irqrestore(&cam->dev_lock, flags);
 735        msleep(5);
 736        spin_lock_irqsave(&cam->dev_lock, flags);
 737
 738        cafe_reg_write(cam, REG_GL_CSR, GCSR_CCIC_EN|GCSR_SRC|GCSR_MRC);
 739        cafe_reg_set_bit(cam, REG_GL_IMASK, GIMSK_CCIC_EN);
 740        /*
 741         * Make sure it's not powered down.
 742         */
 743        cafe_reg_clear_bit(cam, REG_CTRL1, C1_PWRDWN);
 744        /*
 745         * Turn off the enable bit.  It sure should be off anyway,
 746         * but it's good to be sure.
 747         */
 748        cafe_reg_clear_bit(cam, REG_CTRL0, C0_ENABLE);
 749        /*
 750         * Mask all interrupts.
 751         */
 752        cafe_reg_write(cam, REG_IRQMASK, 0);
 753        /*
 754         * Clock the sensor appropriately.  Controller clock should
 755         * be 48MHz, sensor "typical" value is half that.
 756         */
 757        cafe_reg_write_mask(cam, REG_CLKCTRL, 2, CLK_DIV_MASK);
 758        spin_unlock_irqrestore(&cam->dev_lock, flags);
 759}
 760
 761
 762/*
 763 * Stop the controller, and don't return until we're really sure that no
 764 * further DMA is going on.
 765 */
 766static void cafe_ctlr_stop_dma(struct cafe_camera *cam)
 767{
 768        unsigned long flags;
 769
 770        /*
 771         * Theory: stop the camera controller (whether it is operating
 772         * or not).  Delay briefly just in case we race with the SOF
 773         * interrupt, then wait until no DMA is active.
 774         */
 775        spin_lock_irqsave(&cam->dev_lock, flags);
 776        cafe_ctlr_stop(cam);
 777        spin_unlock_irqrestore(&cam->dev_lock, flags);
 778        mdelay(1);
 779        wait_event_timeout(cam->iowait,
 780                        !test_bit(CF_DMA_ACTIVE, &cam->flags), HZ);
 781        if (test_bit(CF_DMA_ACTIVE, &cam->flags))
 782                cam_err(cam, "Timeout waiting for DMA to end\n");
 783                /* This would be bad news - what now? */
 784        spin_lock_irqsave(&cam->dev_lock, flags);
 785        cam->state = S_IDLE;
 786        cafe_ctlr_irq_disable(cam);
 787        spin_unlock_irqrestore(&cam->dev_lock, flags);
 788}
 789
 790/*
 791 * Power up and down.
 792 */
 793static void cafe_ctlr_power_up(struct cafe_camera *cam)
 794{
 795        unsigned long flags;
 796
 797        spin_lock_irqsave(&cam->dev_lock, flags);
 798        cafe_reg_clear_bit(cam, REG_CTRL1, C1_PWRDWN);
 799        /*
 800         * Part one of the sensor dance: turn the global
 801         * GPIO signal on.
 802         */
 803        cafe_reg_write(cam, REG_GL_FCR, GFCR_GPIO_ON);
 804        cafe_reg_write(cam, REG_GL_GPIOR, GGPIO_OUT|GGPIO_VAL);
 805        /*
 806         * Put the sensor into operational mode (assumes OLPC-style
 807         * wiring).  Control 0 is reset - set to 1 to operate.
 808         * Control 1 is power down, set to 0 to operate.
 809         */
 810        cafe_reg_write(cam, REG_GPR, GPR_C1EN|GPR_C0EN); /* pwr up, reset */
 811//      mdelay(1); /* Marvell says 1ms will do it */
 812        cafe_reg_write(cam, REG_GPR, GPR_C1EN|GPR_C0EN|GPR_C0);
 813//      mdelay(1); /* Enough? */
 814        spin_unlock_irqrestore(&cam->dev_lock, flags);
 815        msleep(5); /* Just to be sure */
 816}
 817
 818static void cafe_ctlr_power_down(struct cafe_camera *cam)
 819{
 820        unsigned long flags;
 821
 822        spin_lock_irqsave(&cam->dev_lock, flags);
 823        cafe_reg_write(cam, REG_GPR, GPR_C1EN|GPR_C0EN|GPR_C1);
 824        cafe_reg_write(cam, REG_GL_FCR, GFCR_GPIO_ON);
 825        cafe_reg_write(cam, REG_GL_GPIOR, GGPIO_OUT);
 826        cafe_reg_set_bit(cam, REG_CTRL1, C1_PWRDWN);
 827        spin_unlock_irqrestore(&cam->dev_lock, flags);
 828}
 829
 830/* -------------------------------------------------------------------- */
 831/*
 832 * Communications with the sensor.
 833 */
 834
 835static int __cafe_cam_cmd(struct cafe_camera *cam, int cmd, void *arg)
 836{
 837        struct i2c_client *sc = cam->sensor;
 838        int ret;
 839
 840        if (sc == NULL || sc->driver == NULL || sc->driver->command == NULL)
 841                return -EINVAL;
 842        ret = sc->driver->command(sc, cmd, arg);
 843        if (ret == -EPERM) /* Unsupported command */
 844                return 0;
 845        return ret;
 846}
 847
 848static int __cafe_cam_reset(struct cafe_camera *cam)
 849{
 850        int zero = 0;
 851        return __cafe_cam_cmd(cam, VIDIOC_INT_RESET, &zero);
 852}
 853
 854/*
 855 * We have found the sensor on the i2c.  Let's try to have a
 856 * conversation.
 857 */
 858static int cafe_cam_init(struct cafe_camera *cam)
 859{
 860        struct v4l2_chip_ident chip = { V4L2_CHIP_MATCH_I2C_ADDR, 0, 0, 0 };
 861        int ret;
 862
 863        mutex_lock(&cam->s_mutex);
 864        if (cam->state != S_NOTREADY)
 865                cam_warn(cam, "Cam init with device in funky state %d",
 866                                cam->state);
 867        ret = __cafe_cam_reset(cam);
 868        if (ret)
 869                goto out;
 870        chip.match_chip = cam->sensor->addr;
 871        ret = __cafe_cam_cmd(cam, VIDIOC_G_CHIP_IDENT, &chip);
 872        if (ret)
 873                goto out;
 874        cam->sensor_type = chip.ident;
 875//      if (cam->sensor->addr != OV7xx0_SID) {
 876        if (cam->sensor_type != V4L2_IDENT_OV7670) {
 877                cam_err(cam, "Unsupported sensor type %d", cam->sensor->addr);
 878                ret = -EINVAL;
 879                goto out;
 880        }
 881/* Get/set parameters? */
 882        ret = 0;
 883        cam->state = S_IDLE;
 884  out:
 885        cafe_ctlr_power_down(cam);
 886        mutex_unlock(&cam->s_mutex);
 887        return ret;
 888}
 889
 890/*
 891 * Configure the sensor to match the parameters we have.  Caller should
 892 * hold s_mutex
 893 */
 894static int cafe_cam_set_flip(struct cafe_camera *cam)
 895{
 896        struct v4l2_control ctrl;
 897
 898        memset(&ctrl, 0, sizeof(ctrl));
 899        ctrl.id = V4L2_CID_VFLIP;
 900        ctrl.value = flip;
 901        return __cafe_cam_cmd(cam, VIDIOC_S_CTRL, &ctrl);
 902}
 903
 904
 905static int cafe_cam_configure(struct cafe_camera *cam)
 906{
 907        struct v4l2_format fmt;
 908        int ret, zero = 0;
 909
 910        if (cam->state != S_IDLE)
 911                return -EINVAL;
 912        fmt.fmt.pix = cam->pix_format;
 913        ret = __cafe_cam_cmd(cam, VIDIOC_INT_INIT, &zero);
 914        if (ret == 0)
 915                ret = __cafe_cam_cmd(cam, VIDIOC_S_FMT, &fmt);
 916        /*
 917         * OV7670 does weird things if flip is set *before* format...
 918         */
 919        ret += cafe_cam_set_flip(cam);
 920        return ret;
 921}
 922
 923/* -------------------------------------------------------------------- */
 924/*
 925 * DMA buffer management.  These functions need s_mutex held.
 926 */
 927
 928/* FIXME: this is inefficient as hell, since dma_alloc_coherent just
 929 * does a get_free_pages() call, and we waste a good chunk of an orderN
 930 * allocation.  Should try to allocate the whole set in one chunk.
 931 */
 932static int cafe_alloc_dma_bufs(struct cafe_camera *cam, int loadtime)
 933{
 934        int i;
 935
 936        cafe_set_config_needed(cam, 1);
 937        if (loadtime)
 938                cam->dma_buf_size = dma_buf_size;
 939        else
 940                cam->dma_buf_size = cam->pix_format.sizeimage;
 941        if (n_dma_bufs > 3)
 942                n_dma_bufs = 3;
 943
 944        cam->nbufs = 0;
 945        for (i = 0; i < n_dma_bufs; i++) {
 946                cam->dma_bufs[i] = dma_alloc_coherent(&cam->pdev->dev,
 947                                cam->dma_buf_size, cam->dma_handles + i,
 948                                GFP_KERNEL);
 949                if (cam->dma_bufs[i] == NULL) {
 950                        cam_warn(cam, "Failed to allocate DMA buffer\n");
 951                        break;
 952                }
 953                /* For debug, remove eventually */
 954                memset(cam->dma_bufs[i], 0xcc, cam->dma_buf_size);
 955                (cam->nbufs)++;
 956        }
 957
 958        switch (cam->nbufs) {
 959        case 1:
 960            dma_free_coherent(&cam->pdev->dev, cam->dma_buf_size,
 961                            cam->dma_bufs[0], cam->dma_handles[0]);
 962            cam->nbufs = 0;
 963        case 0:
 964            cam_err(cam, "Insufficient DMA buffers, cannot operate\n");
 965            return -ENOMEM;
 966
 967        case 2:
 968            if (n_dma_bufs > 2)
 969                    cam_warn(cam, "Will limp along with only 2 buffers\n");
 970            break;
 971        }
 972        return 0;
 973}
 974
 975static void cafe_free_dma_bufs(struct cafe_camera *cam)
 976{
 977        int i;
 978
 979        for (i = 0; i < cam->nbufs; i++) {
 980                dma_free_coherent(&cam->pdev->dev, cam->dma_buf_size,
 981                                cam->dma_bufs[i], cam->dma_handles[i]);
 982                cam->dma_bufs[i] = NULL;
 983        }
 984        cam->nbufs = 0;
 985}
 986
 987
 988
 989
 990
 991/* ----------------------------------------------------------------------- */
 992/*
 993 * Here starts the V4L2 interface code.
 994 */
 995
 996/*
 997 * Read an image from the device.
 998 */
 999static ssize_t cafe_deliver_buffer(struct cafe_camera *cam,
1000                char __user *buffer, size_t len, loff_t *pos)
1001{
1002        int bufno;
1003        unsigned long flags;
1004
1005        spin_lock_irqsave(&cam->dev_lock, flags);
1006        if (cam->next_buf < 0) {
1007                cam_err(cam, "deliver_buffer: No next buffer\n");
1008                spin_unlock_irqrestore(&cam->dev_lock, flags);
1009                return -EIO;
1010        }
1011        bufno = cam->next_buf;
1012        clear_bit(bufno, &cam->flags);
1013        if (++(cam->next_buf) >= cam->nbufs)
1014                cam->next_buf = 0;
1015        if (! test_bit(cam->next_buf, &cam->flags))
1016                cam->next_buf = -1;
1017        cam->specframes = 0;
1018        spin_unlock_irqrestore(&cam->dev_lock, flags);
1019
1020        if (len > cam->pix_format.sizeimage)
1021                len = cam->pix_format.sizeimage;
1022        if (copy_to_user(buffer, cam->dma_bufs[bufno], len))
1023                return -EFAULT;
1024        (*pos) += len;
1025        return len;
1026}
1027
1028/*
1029 * Get everything ready, and start grabbing frames.
1030 */
1031static int cafe_read_setup(struct cafe_camera *cam, enum cafe_state state)
1032{
1033        int ret;
1034        unsigned long flags;
1035
1036        /*
1037         * Configuration.  If we still don't have DMA buffers,
1038         * make one last, desperate attempt.
1039         */
1040        if (cam->nbufs == 0)
1041                if (cafe_alloc_dma_bufs(cam, 0))
1042                        return -ENOMEM;
1043
1044        if (cafe_needs_config(cam)) {
1045                cafe_cam_configure(cam);
1046                ret = cafe_ctlr_configure(cam);
1047                if (ret)
1048                        return ret;
1049        }
1050
1051        /*
1052         * Turn it loose.
1053         */
1054        spin_lock_irqsave(&cam->dev_lock, flags);
1055        cafe_reset_buffers(cam);
1056        cafe_ctlr_irq_enable(cam);
1057        cam->state = state;
1058        cafe_ctlr_start(cam);
1059        spin_unlock_irqrestore(&cam->dev_lock, flags);
1060        return 0;
1061}
1062
1063
1064static ssize_t cafe_v4l_read(struct file *filp,
1065                char __user *buffer, size_t len, loff_t *pos)
1066{
1067        struct cafe_camera *cam = filp->private_data;
1068        int ret = 0;
1069
1070        /*
1071         * Perhaps we're in speculative read mode and already
1072         * have data?
1073         */
1074        mutex_lock(&cam->s_mutex);
1075        if (cam->state == S_SPECREAD) {
1076                if (cam->next_buf >= 0) {
1077                        ret = cafe_deliver_buffer(cam, buffer, len, pos);
1078                        if (ret != 0)
1079                                goto out_unlock;
1080                }
1081        } else if (cam->state == S_FLAKED || cam->state == S_NOTREADY) {
1082                ret = -EIO;
1083                goto out_unlock;
1084        } else if (cam->state != S_IDLE) {
1085                ret = -EBUSY;
1086                goto out_unlock;
1087        }
1088
1089        /*
1090         * v4l2: multiple processes can open the device, but only
1091         * one gets to grab data from it.
1092         */
1093        if (cam->owner && cam->owner != filp) {
1094                ret = -EBUSY;
1095                goto out_unlock;
1096        }
1097        cam->owner = filp;
1098
1099        /*
1100         * Do setup if need be.
1101         */
1102        if (cam->state != S_SPECREAD) {
1103                ret = cafe_read_setup(cam, S_SINGLEREAD);
1104                if (ret)
1105                        goto out_unlock;
1106        }
1107        /*
1108         * Wait for something to happen.  This should probably
1109         * be interruptible (FIXME).
1110         */
1111        wait_event_timeout(cam->iowait, cam->next_buf >= 0, HZ);
1112        if (cam->next_buf < 0) {
1113                cam_err(cam, "read() operation timed out\n");
1114                cafe_ctlr_stop_dma(cam);
1115                ret = -EIO;
1116                goto out_unlock;
1117        }
1118        /*
1119         * Give them their data and we should be done.
1120         */
1121        ret = cafe_deliver_buffer(cam, buffer, len, pos);
1122
1123  out_unlock:
1124        mutex_unlock(&cam->s_mutex);
1125        return ret;
1126}
1127
1128
1129
1130
1131
1132
1133
1134
1135/*
1136 * Streaming I/O support.
1137 */
1138
1139
1140
1141static int cafe_vidioc_streamon(struct file *filp, void *priv,
1142                enum v4l2_buf_type type)
1143{
1144        struct cafe_camera *cam = filp->private_data;
1145        int ret = -EINVAL;
1146
1147        if (type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
1148                goto out;
1149        mutex_lock(&cam->s_mutex);
1150        if (cam->state != S_IDLE || cam->n_sbufs == 0)
1151                goto out_unlock;
1152
1153        cam->sequence = 0;
1154        ret = cafe_read_setup(cam, S_STREAMING);
1155
1156  out_unlock:
1157        mutex_unlock(&cam->s_mutex);
1158  out:
1159        return ret;
1160}
1161
1162
1163static int cafe_vidioc_streamoff(struct file *filp, void *priv,
1164                enum v4l2_buf_type type)
1165{
1166        struct cafe_camera *cam = filp->private_data;
1167        int ret = -EINVAL;
1168
1169        if (type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
1170                goto out;
1171        mutex_lock(&cam->s_mutex);
1172        if (cam->state != S_STREAMING)
1173                goto out_unlock;
1174
1175        cafe_ctlr_stop_dma(cam);
1176        ret = 0;
1177
1178  out_unlock:
1179        mutex_unlock(&cam->s_mutex);
1180  out:
1181        return ret;
1182}
1183
1184
1185
1186static int cafe_setup_siobuf(struct cafe_camera *cam, int index)
1187{
1188        struct cafe_sio_buffer *buf = cam->sb_bufs + index;
1189
1190        INIT_LIST_HEAD(&buf->list);
1191        buf->v4lbuf.length = PAGE_ALIGN(cam->pix_format.sizeimage);
1192        buf->buffer = vmalloc_user(buf->v4lbuf.length);
1193        if (buf->buffer == NULL)
1194                return -ENOMEM;
1195        buf->mapcount = 0;
1196        buf->cam = cam;
1197
1198        buf->v4lbuf.index = index;
1199        buf->v4lbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
1200        buf->v4lbuf.field = V4L2_FIELD_NONE;
1201        buf->v4lbuf.memory = V4L2_MEMORY_MMAP;
1202        /*
1203         * Offset: must be 32-bit even on a 64-bit system.  videobuf-dma-sg
1204         * just uses the length times the index, but the spec warns
1205         * against doing just that - vma merging problems.  So we
1206         * leave a gap between each pair of buffers.
1207         */
1208        buf->v4lbuf.m.offset = 2*index*buf->v4lbuf.length;
1209        return 0;
1210}
1211
1212static int cafe_free_sio_buffers(struct cafe_camera *cam)
1213{
1214        int i;
1215
1216        /*
1217         * If any buffers are mapped, we cannot free them at all.
1218         */
1219        for (i = 0; i < cam->n_sbufs; i++)
1220                if (cam->sb_bufs[i].mapcount > 0)
1221                        return -EBUSY;
1222        /*
1223         * OK, let's do it.
1224         */
1225        for (i = 0; i < cam->n_sbufs; i++)
1226                vfree(cam->sb_bufs[i].buffer);
1227        cam->n_sbufs = 0;
1228        kfree(cam->sb_bufs);
1229        cam->sb_bufs = NULL;
1230        INIT_LIST_HEAD(&cam->sb_avail);
1231        INIT_LIST_HEAD(&cam->sb_full);
1232        return 0;
1233}
1234
1235
1236
1237static int cafe_vidioc_reqbufs(struct file *filp, void *priv,
1238                struct v4l2_requestbuffers *req)
1239{
1240        struct cafe_camera *cam = filp->private_data;
1241        int ret = 0;  /* Silence warning */
1242
1243        /*
1244         * Make sure it's something we can do.  User pointers could be
1245         * implemented without great pain, but that's not been done yet.
1246         */
1247        if (req->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
1248                return -EINVAL;
1249        if (req->memory != V4L2_MEMORY_MMAP)
1250                return -EINVAL;
1251        /*
1252         * If they ask for zero buffers, they really want us to stop streaming
1253         * (if it's happening) and free everything.  Should we check owner?
1254         */
1255        mutex_lock(&cam->s_mutex);
1256        if (req->count == 0) {
1257                if (cam->state == S_STREAMING)
1258                        cafe_ctlr_stop_dma(cam);
1259                ret = cafe_free_sio_buffers (cam);
1260                goto out;
1261        }
1262        /*
1263         * Device needs to be idle and working.  We *could* try to do the
1264         * right thing in S_SPECREAD by shutting things down, but it
1265         * probably doesn't matter.
1266         */
1267        if (cam->state != S_IDLE || (cam->owner && cam->owner != filp)) {
1268                ret = -EBUSY;
1269                goto out;
1270        }
1271        cam->owner = filp;
1272
1273        if (req->count < min_buffers)
1274                req->count = min_buffers;
1275        else if (req->count > max_buffers)
1276                req->count = max_buffers;
1277        if (cam->n_sbufs > 0) {
1278                ret = cafe_free_sio_buffers(cam);
1279                if (ret)
1280                        goto out;
1281        }
1282
1283        cam->sb_bufs = kzalloc(req->count*sizeof(struct cafe_sio_buffer),
1284                        GFP_KERNEL);
1285        if (cam->sb_bufs == NULL) {
1286                ret = -ENOMEM;
1287                goto out;
1288        }
1289        for (cam->n_sbufs = 0; cam->n_sbufs < req->count; (cam->n_sbufs++)) {
1290                ret = cafe_setup_siobuf(cam, cam->n_sbufs);
1291                if (ret)
1292                        break;
1293        }
1294
1295        if (cam->n_sbufs == 0)  /* no luck at all - ret already set */
1296                kfree(cam->sb_bufs);
1297        req->count = cam->n_sbufs;  /* In case of partial success */
1298
1299  out:
1300        mutex_unlock(&cam->s_mutex);
1301        return ret;
1302}
1303
1304
1305static int cafe_vidioc_querybuf(struct file *filp, void *priv,
1306                struct v4l2_buffer *buf)
1307{
1308        struct cafe_camera *cam = filp->private_data;
1309        int ret = -EINVAL;
1310
1311        mutex_lock(&cam->s_mutex);
1312        if (buf->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
1313                goto out;
1314        if (buf->index < 0 || buf->index >= cam->n_sbufs)
1315                goto out;
1316        *buf = cam->sb_bufs[buf->index].v4lbuf;
1317        ret = 0;
1318  out:
1319        mutex_unlock(&cam->s_mutex);
1320        return ret;
1321}
1322
1323static int cafe_vidioc_qbuf(struct file *filp, void *priv,
1324                struct v4l2_buffer *buf)
1325{
1326        struct cafe_camera *cam = filp->private_data;
1327        struct cafe_sio_buffer *sbuf;
1328        int ret = -EINVAL;
1329        unsigned long flags;
1330
1331        mutex_lock(&cam->s_mutex);
1332        if (buf->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
1333                goto out;
1334        if (buf->index < 0 || buf->index >= cam->n_sbufs)
1335                goto out;
1336        sbuf = cam->sb_bufs + buf->index;
1337        if (sbuf->v4lbuf.flags & V4L2_BUF_FLAG_QUEUED) {
1338                ret = 0; /* Already queued?? */
1339                goto out;
1340        }
1341        if (sbuf->v4lbuf.flags & V4L2_BUF_FLAG_DONE) {
1342                /* Spec doesn't say anything, seems appropriate tho */
1343                ret = -EBUSY;
1344                goto out;
1345        }
1346        sbuf->v4lbuf.flags |= V4L2_BUF_FLAG_QUEUED;
1347        spin_lock_irqsave(&cam->dev_lock, flags);
1348        list_add(&sbuf->list, &cam->sb_avail);
1349        spin_unlock_irqrestore(&cam->dev_lock, flags);
1350        ret = 0;
1351  out:
1352        mutex_unlock(&cam->s_mutex);
1353        return ret;
1354}
1355
1356static int cafe_vidioc_dqbuf(struct file *filp, void *priv,
1357                struct v4l2_buffer *buf)
1358{
1359        struct cafe_camera *cam = filp->private_data;
1360        struct cafe_sio_buffer *sbuf;
1361        int ret = -EINVAL;
1362        unsigned long flags;
1363
1364        mutex_lock(&cam->s_mutex);
1365        if (buf->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
1366                goto out_unlock;
1367        if (cam->state != S_STREAMING)
1368                goto out_unlock;
1369        if (list_empty(&cam->sb_full) && filp->f_flags & O_NONBLOCK) {
1370                ret = -EAGAIN;
1371                goto out_unlock;
1372        }
1373
1374        while (list_empty(&cam->sb_full) && cam->state == S_STREAMING) {
1375                mutex_unlock(&cam->s_mutex);
1376                if (wait_event_interruptible(cam->iowait,
1377                                                !list_empty(&cam->sb_full))) {
1378                        ret = -ERESTARTSYS;
1379                        goto out;
1380                }
1381                mutex_lock(&cam->s_mutex);
1382        }
1383
1384        if (cam->state != S_STREAMING)
1385                ret = -EINTR;
1386        else {
1387                spin_lock_irqsave(&cam->dev_lock, flags);
1388                /* Should probably recheck !list_empty() here */
1389                sbuf = list_entry(cam->sb_full.next,
1390                                struct cafe_sio_buffer, list);
1391                list_del_init(&sbuf->list);
1392                spin_unlock_irqrestore(&cam->dev_lock, flags);
1393                sbuf->v4lbuf.flags &= ~V4L2_BUF_FLAG_DONE;
1394                *buf = sbuf->v4lbuf;
1395                ret = 0;
1396        }
1397
1398  out_unlock:
1399        mutex_unlock(&cam->s_mutex);
1400  out:
1401        return ret;
1402}
1403
1404
1405
1406static void cafe_v4l_vm_open(struct vm_area_struct *vma)
1407{
1408        struct cafe_sio_buffer *sbuf = vma->vm_private_data;
1409        /*
1410         * Locking: done under mmap_sem, so we don't need to
1411         * go back to the camera lock here.
1412         */
1413        sbuf->mapcount++;
1414}
1415
1416
1417static void cafe_v4l_vm_close(struct vm_area_struct *vma)
1418{
1419        struct cafe_sio_buffer *sbuf = vma->vm_private_data;
1420
1421        mutex_lock(&sbuf->cam->s_mutex);
1422        sbuf->mapcount--;
1423        /* Docs say we should stop I/O too... */
1424        if (sbuf->mapcount == 0)
1425                sbuf->v4lbuf.flags &= ~V4L2_BUF_FLAG_MAPPED;
1426        mutex_unlock(&sbuf->cam->s_mutex);
1427}
1428
1429static struct vm_operations_struct cafe_v4l_vm_ops = {
1430        .open = cafe_v4l_vm_open,
1431        .close = cafe_v4l_vm_close
1432};
1433
1434
1435static int cafe_v4l_mmap(struct file *filp, struct vm_area_struct *vma)
1436{
1437        struct cafe_camera *cam = filp->private_data;
1438        unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
1439        int ret = -EINVAL;
1440        int i;
1441        struct cafe_sio_buffer *sbuf = NULL;
1442
1443        if (! (vma->vm_flags & VM_WRITE) || ! (vma->vm_flags & VM_SHARED))
1444                return -EINVAL;
1445        /*
1446         * Find the buffer they are looking for.
1447         */
1448        mutex_lock(&cam->s_mutex);
1449        for (i = 0; i < cam->n_sbufs; i++)
1450                if (cam->sb_bufs[i].v4lbuf.m.offset == offset) {
1451                        sbuf = cam->sb_bufs + i;
1452                        break;
1453                }
1454        if (sbuf == NULL)
1455                goto out;
1456
1457        ret = remap_vmalloc_range(vma, sbuf->buffer, 0);
1458        if (ret)
1459                goto out;
1460        vma->vm_flags |= VM_DONTEXPAND;
1461        vma->vm_private_data = sbuf;
1462        vma->vm_ops = &cafe_v4l_vm_ops;
1463        sbuf->v4lbuf.flags |= V4L2_BUF_FLAG_MAPPED;
1464        cafe_v4l_vm_open(vma);
1465        ret = 0;
1466  out:
1467        mutex_unlock(&cam->s_mutex);
1468        return ret;
1469}
1470
1471
1472
1473static int cafe_v4l_open(struct inode *inode, struct file *filp)
1474{
1475        struct cafe_camera *cam;
1476
1477        cam = cafe_find_dev(iminor(inode));
1478        if (cam == NULL)
1479                return -ENODEV;
1480        filp->private_data = cam;
1481
1482        mutex_lock(&cam->s_mutex);
1483        if (cam->users == 0) {
1484                cafe_ctlr_power_up(cam);
1485                __cafe_cam_reset(cam);
1486                cafe_set_config_needed(cam, 1);
1487        /* FIXME make sure this is complete */
1488        }
1489        (cam->users)++;
1490        mutex_unlock(&cam->s_mutex);
1491        return 0;
1492}
1493
1494
1495static int cafe_v4l_release(struct inode *inode, struct file *filp)
1496{
1497        struct cafe_camera *cam = filp->private_data;
1498
1499        mutex_lock(&cam->s_mutex);
1500        (cam->users)--;
1501        if (filp == cam->owner) {
1502                cafe_ctlr_stop_dma(cam);
1503                cafe_free_sio_buffers(cam);
1504                cam->owner = NULL;
1505        }
1506        if (cam->users == 0) {
1507                cafe_ctlr_power_down(cam);
1508                if (alloc_bufs_at_read)
1509                        cafe_free_dma_bufs(cam);
1510        }
1511        mutex_unlock(&cam->s_mutex);
1512        return 0;
1513}
1514
1515
1516
1517static unsigned int cafe_v4l_poll(struct file *filp,
1518                struct poll_table_struct *pt)
1519{
1520        struct cafe_camera *cam = filp->private_data;
1521
1522        poll_wait(filp, &cam->iowait, pt);
1523        if (cam->next_buf >= 0)
1524                return POLLIN | POLLRDNORM;
1525        return 0;
1526}
1527
1528
1529
1530static int cafe_vidioc_queryctrl(struct file *filp, void *priv,
1531                struct v4l2_queryctrl *qc)
1532{
1533        struct cafe_camera *cam = filp->private_data;
1534        int ret;
1535
1536        mutex_lock(&cam->s_mutex);
1537        ret = __cafe_cam_cmd(cam, VIDIOC_QUERYCTRL, qc);
1538        mutex_unlock(&cam->s_mutex);
1539        return ret;
1540}
1541
1542
1543static int cafe_vidioc_g_ctrl(struct file *filp, void *priv,
1544                struct v4l2_control *ctrl)
1545{
1546        struct cafe_camera *cam = filp->private_data;
1547        int ret;
1548
1549        mutex_lock(&cam->s_mutex);
1550        ret = __cafe_cam_cmd(cam, VIDIOC_G_CTRL, ctrl);
1551        mutex_unlock(&cam->s_mutex);
1552        return ret;
1553}
1554
1555
1556static int cafe_vidioc_s_ctrl(struct file *filp, void *priv,
1557                struct v4l2_control *ctrl)
1558{
1559        struct cafe_camera *cam = filp->private_data;
1560        int ret;
1561
1562        mutex_lock(&cam->s_mutex);
1563        ret = __cafe_cam_cmd(cam, VIDIOC_S_CTRL, ctrl);
1564        mutex_unlock(&cam->s_mutex);
1565        return ret;
1566}
1567
1568
1569
1570
1571
1572static int cafe_vidioc_querycap(struct file *file, void *priv,
1573                struct v4l2_capability *cap)
1574{
1575        strcpy(cap->driver, "cafe_ccic");
1576        strcpy(cap->card, "cafe_ccic");
1577        cap->version = CAFE_VERSION;
1578        cap->capabilities = V4L2_CAP_VIDEO_CAPTURE |
1579                V4L2_CAP_READWRITE | V4L2_CAP_STREAMING;
1580        return 0;
1581}
1582
1583
1584/*
1585 * The default format we use until somebody says otherwise.
1586 */
1587static struct v4l2_pix_format cafe_def_pix_format = {
1588        .width          = VGA_WIDTH,
1589        .height         = VGA_HEIGHT,
1590        .pixelformat    = V4L2_PIX_FMT_YUYV,
1591        .field          = V4L2_FIELD_NONE,
1592        .bytesperline   = VGA_WIDTH*2,
1593        .sizeimage      = VGA_WIDTH*VGA_HEIGHT*2,
1594};
1595
1596static int cafe_vidioc_enum_fmt_cap(struct file *filp,
1597                void *priv, struct v4l2_fmtdesc *fmt)
1598{
1599        struct cafe_camera *cam = priv;
1600        int ret;
1601
1602        if (fmt->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
1603                return -EINVAL;
1604        mutex_lock(&cam->s_mutex);
1605        ret = __cafe_cam_cmd(cam, VIDIOC_ENUM_FMT, fmt);
1606        mutex_unlock(&cam->s_mutex);
1607        return ret;
1608}
1609
1610
1611static int cafe_vidioc_try_fmt_cap (struct file *filp, void *priv,
1612                struct v4l2_format *fmt)
1613{
1614        struct cafe_camera *cam = priv;
1615        int ret;
1616
1617        mutex_lock(&cam->s_mutex);
1618        ret = __cafe_cam_cmd(cam, VIDIOC_TRY_FMT, fmt);
1619        mutex_unlock(&cam->s_mutex);
1620        return ret;
1621}
1622
1623static int cafe_vidioc_s_fmt_cap(struct file *filp, void *priv,
1624                struct v4l2_format *fmt)
1625{
1626        struct cafe_camera *cam = priv;
1627        int ret;
1628
1629        /*
1630         * Can't do anything if the device is not idle
1631         * Also can't if there are streaming buffers in place.
1632         */
1633        if (cam->state != S_IDLE || cam->n_sbufs > 0)
1634                return -EBUSY;
1635        /*
1636         * See if the formatting works in principle.
1637         */
1638        ret = cafe_vidioc_try_fmt_cap(filp, priv, fmt);
1639        if (ret)
1640                return ret;
1641        /*
1642         * Now we start to change things for real, so let's do it
1643         * under lock.
1644         */
1645        mutex_lock(&cam->s_mutex);
1646        cam->pix_format = fmt->fmt.pix;
1647        /*
1648         * Make sure we have appropriate DMA buffers.
1649         */
1650        ret = -ENOMEM;
1651        if (cam->nbufs > 0 && cam->dma_buf_size < cam->pix_format.sizeimage)
1652                cafe_free_dma_bufs(cam);
1653        if (cam->nbufs == 0) {
1654                if (cafe_alloc_dma_bufs(cam, 0))
1655                        goto out;
1656        }
1657        /*
1658         * It looks like this might work, so let's program the sensor.
1659         */
1660        ret = cafe_cam_configure(cam);
1661        if (! ret)
1662                ret = cafe_ctlr_configure(cam);
1663  out:
1664        mutex_unlock(&cam->s_mutex);
1665        return ret;
1666}
1667
1668/*
1669 * Return our stored notion of how the camera is/should be configured.
1670 * The V4l2 spec wants us to be smarter, and actually get this from
1671 * the camera (and not mess with it at open time).  Someday.
1672 */
1673static int cafe_vidioc_g_fmt_cap(struct file *filp, void *priv,
1674                struct v4l2_format *f)
1675{
1676        struct cafe_camera *cam = priv;
1677
1678        f->fmt.pix = cam->pix_format;
1679        return 0;
1680}
1681
1682/*
1683 * We only have one input - the sensor - so minimize the nonsense here.
1684 */
1685static int cafe_vidioc_enum_input(struct file *filp, void *priv,
1686                struct v4l2_input *input)
1687{
1688        if (input->index != 0)
1689                return -EINVAL;
1690
1691        input->type = V4L2_INPUT_TYPE_CAMERA;
1692        input->std = V4L2_STD_ALL; /* Not sure what should go here */
1693        strcpy(input->name, "Camera");
1694        return 0;
1695}
1696
1697static int cafe_vidioc_g_input(struct file *filp, void *priv, unsigned int *i)
1698{
1699        *i = 0;
1700        return 0;
1701}
1702
1703static int cafe_vidioc_s_input(struct file *filp, void *priv, unsigned int i)
1704{
1705        if (i != 0)
1706                return -EINVAL;
1707        return 0;
1708}
1709
1710/* from vivi.c */
1711static int cafe_vidioc_s_std(struct file *filp, void *priv, v4l2_std_id *a)
1712{
1713        return 0;
1714}
1715
1716/*
1717 * G/S_PARM.  Most of this is done by the sensor, but we are
1718 * the level which controls the number of read buffers.
1719 */
1720static int cafe_vidioc_g_parm(struct file *filp, void *priv,
1721                struct v4l2_streamparm *parms)
1722{
1723        struct cafe_camera *cam = priv;
1724        int ret;
1725
1726        mutex_lock(&cam->s_mutex);
1727        ret = __cafe_cam_cmd(cam, VIDIOC_G_PARM, parms);
1728        mutex_unlock(&cam->s_mutex);
1729        parms->parm.capture.readbuffers = n_dma_bufs;
1730        return ret;
1731}
1732
1733static int cafe_vidioc_s_parm(struct file *filp, void *priv,
1734                struct v4l2_streamparm *parms)
1735{
1736        struct cafe_camera *cam = priv;
1737        int ret;
1738
1739        mutex_lock(&cam->s_mutex);
1740        ret = __cafe_cam_cmd(cam, VIDIOC_S_PARM, parms);
1741        mutex_unlock(&cam->s_mutex);
1742        parms->parm.capture.readbuffers = n_dma_bufs;
1743        return ret;
1744}
1745
1746
1747static void cafe_v4l_dev_release(struct video_device *vd)
1748{
1749        struct cafe_camera *cam = container_of(vd, struct cafe_camera, v4ldev);
1750
1751        kfree(cam);
1752}
1753
1754
1755/*
1756 * This template device holds all of those v4l2 methods; we
1757 * clone it for specific real devices.
1758 */
1759
1760static const struct file_operations cafe_v4l_fops = {
1761        .owner = THIS_MODULE,
1762        .open = cafe_v4l_open,
1763        .release = cafe_v4l_release,
1764        .read = cafe_v4l_read,
1765        .poll = cafe_v4l_poll,
1766        .mmap = cafe_v4l_mmap,
1767        .ioctl = video_ioctl2,
1768        .llseek = no_llseek,
1769};
1770
1771static struct video_device cafe_v4l_template = {
1772        .name = "cafe",
1773        .type = VFL_TYPE_GRABBER,
1774        .type2 = VID_TYPE_CAPTURE,
1775        .minor = -1, /* Get one dynamically */
1776        .tvnorms = V4L2_STD_NTSC_M,
1777        .current_norm = V4L2_STD_NTSC_M,  /* make mplayer happy */
1778
1779        .fops = &cafe_v4l_fops,
1780        .release = cafe_v4l_dev_release,
1781
1782        .vidioc_querycap        = cafe_vidioc_querycap,
1783        .vidioc_enum_fmt_cap    = cafe_vidioc_enum_fmt_cap,
1784        .vidioc_try_fmt_cap     = cafe_vidioc_try_fmt_cap,
1785        .vidioc_s_fmt_cap       = cafe_vidioc_s_fmt_cap,
1786        .vidioc_g_fmt_cap       = cafe_vidioc_g_fmt_cap,
1787        .vidioc_enum_input      = cafe_vidioc_enum_input,
1788        .vidioc_g_input         = cafe_vidioc_g_input,
1789        .vidioc_s_input         = cafe_vidioc_s_input,
1790        .vidioc_s_std           = cafe_vidioc_s_std,
1791        .vidioc_reqbufs         = cafe_vidioc_reqbufs,
1792        .vidioc_querybuf        = cafe_vidioc_querybuf,
1793        .vidioc_qbuf            = cafe_vidioc_qbuf,
1794        .vidioc_dqbuf           = cafe_vidioc_dqbuf,
1795        .vidioc_streamon        = cafe_vidioc_streamon,
1796        .vidioc_streamoff       = cafe_vidioc_streamoff,
1797        .vidioc_queryctrl       = cafe_vidioc_queryctrl,
1798        .vidioc_g_ctrl          = cafe_vidioc_g_ctrl,
1799        .vidioc_s_ctrl          = cafe_vidioc_s_ctrl,
1800        .vidioc_g_parm          = cafe_vidioc_g_parm,
1801        .vidioc_s_parm          = cafe_vidioc_s_parm,
1802};
1803
1804
1805
1806
1807
1808
1809
1810/* ---------------------------------------------------------------------- */
1811/*
1812 * Interrupt handler stuff
1813 */
1814
1815
1816
1817static void cafe_frame_tasklet(unsigned long data)
1818{
1819        struct cafe_camera *cam = (struct cafe_camera *) data;
1820        int i;
1821        unsigned long flags;
1822        struct cafe_sio_buffer *sbuf;
1823
1824        spin_lock_irqsave(&cam->dev_lock, flags);
1825        for (i = 0; i < cam->nbufs; i++) {
1826                int bufno = cam->next_buf;
1827                if (bufno < 0) {  /* "will never happen" */
1828                        cam_err(cam, "No valid bufs in tasklet!\n");
1829                        break;
1830                }
1831                if (++(cam->next_buf) >= cam->nbufs)
1832                        cam->next_buf = 0;
1833                if (! test_bit(bufno, &cam->flags))
1834                        continue;
1835                if (list_empty(&cam->sb_avail))
1836                        break;  /* Leave it valid, hope for better later */
1837                clear_bit(bufno, &cam->flags);
1838                sbuf = list_entry(cam->sb_avail.next,
1839                                struct cafe_sio_buffer, list);
1840                /*
1841                 * Drop the lock during the big copy.  This *should* be safe...
1842                 */
1843                spin_unlock_irqrestore(&cam->dev_lock, flags);
1844                memcpy(sbuf->buffer, cam->dma_bufs[bufno],
1845                                cam->pix_format.sizeimage);
1846                sbuf->v4lbuf.bytesused = cam->pix_format.sizeimage;
1847                sbuf->v4lbuf.sequence = cam->buf_seq[bufno];
1848                sbuf->v4lbuf.flags &= ~V4L2_BUF_FLAG_QUEUED;
1849                sbuf->v4lbuf.flags |= V4L2_BUF_FLAG_DONE;
1850                spin_lock_irqsave(&cam->dev_lock, flags);
1851                list_move_tail(&sbuf->list, &cam->sb_full);
1852        }
1853        if (! list_empty(&cam->sb_full))
1854                wake_up(&cam->iowait);
1855        spin_unlock_irqrestore(&cam->dev_lock, flags);
1856}
1857
1858
1859
1860static void cafe_frame_complete(struct cafe_camera *cam, int frame)
1861{
1862        /*
1863         * Basic frame housekeeping.
1864         */
1865        if (test_bit(frame, &cam->flags) && printk_ratelimit())
1866                cam_err(cam, "Frame overrun on %d, frames lost\n", frame);
1867        set_bit(frame, &cam->flags);
1868        clear_bit(CF_DMA_ACTIVE, &cam->flags);
1869        if (cam->next_buf < 0)
1870                cam->next_buf = frame;
1871        cam->buf_seq[frame] = ++(cam->sequence);
1872
1873        switch (cam->state) {
1874        /*
1875         * If in single read mode, try going speculative.
1876         */
1877            case S_SINGLEREAD:
1878                cam->state = S_SPECREAD;
1879                cam->specframes = 0;
1880                wake_up(&cam->iowait);
1881                break;
1882
1883        /*
1884         * If we are already doing speculative reads, and nobody is
1885         * reading them, just stop.
1886         */
1887            case S_SPECREAD:
1888                if (++(cam->specframes) >= cam->nbufs) {
1889                        cafe_ctlr_stop(cam);
1890                        cafe_ctlr_irq_disable(cam);
1891                        cam->state = S_IDLE;
1892                }
1893                wake_up(&cam->iowait);
1894                break;
1895        /*
1896         * For the streaming case, we defer the real work to the
1897         * camera tasklet.
1898         *
1899         * FIXME: if the application is not consuming the buffers,
1900         * we should eventually put things on hold and restart in
1901         * vidioc_dqbuf().
1902         */
1903            case S_STREAMING:
1904                tasklet_schedule(&cam->s_tasklet);
1905                break;
1906
1907            default:
1908                cam_err(cam, "Frame interrupt in non-operational state\n");
1909                break;
1910        }
1911}
1912
1913
1914
1915
1916static void cafe_frame_irq(struct cafe_camera *cam, unsigned int irqs)
1917{
1918        unsigned int frame;
1919
1920        cafe_reg_write(cam, REG_IRQSTAT, FRAMEIRQS); /* Clear'em all */
1921        /*
1922         * Handle any frame completions.  There really should
1923         * not be more than one of these, or we have fallen
1924         * far behind.
1925         */
1926        for (frame = 0; frame < cam->nbufs; frame++)
1927                if (irqs & (IRQ_EOF0 << frame))
1928                        cafe_frame_complete(cam, frame);
1929        /*
1930         * If a frame starts, note that we have DMA active.  This
1931         * code assumes that we won't get multiple frame interrupts
1932         * at once; may want to rethink that.
1933         */
1934        if (irqs & (IRQ_SOF0 | IRQ_SOF1 | IRQ_SOF2))
1935                set_bit(CF_DMA_ACTIVE, &cam->flags);
1936}
1937
1938
1939
1940static irqreturn_t cafe_irq(int irq, void *data)
1941{
1942        struct cafe_camera *cam = data;
1943        unsigned int irqs;
1944
1945        spin_lock(&cam->dev_lock);
1946        irqs = cafe_reg_read(cam, REG_IRQSTAT);
1947        if ((irqs & ALLIRQS) == 0) {
1948                spin_unlock(&cam->dev_lock);
1949                return IRQ_NONE;
1950        }
1951        if (irqs & FRAMEIRQS)
1952                cafe_frame_irq(cam, irqs);
1953        if (irqs & TWSIIRQS) {
1954                cafe_reg_write(cam, REG_IRQSTAT, TWSIIRQS);
1955                wake_up(&cam->smbus_wait);
1956        }
1957        spin_unlock(&cam->dev_lock);
1958        return IRQ_HANDLED;
1959}
1960
1961
1962/* -------------------------------------------------------------------------- */
1963#ifdef CONFIG_VIDEO_ADV_DEBUG
1964/*
1965 * Debugfs stuff.
1966 */
1967
1968static char cafe_debug_buf[1024];
1969static struct dentry *cafe_dfs_root;
1970
1971static void cafe_dfs_setup(void)
1972{
1973        cafe_dfs_root = debugfs_create_dir("cafe_ccic", NULL);
1974        if (IS_ERR(cafe_dfs_root)) {
1975                cafe_dfs_root = NULL;  /* Never mind */
1976                printk(KERN_NOTICE "cafe_ccic unable to set up debugfs\n");
1977        }
1978}
1979
1980static void cafe_dfs_shutdown(void)
1981{
1982        if (cafe_dfs_root)
1983                debugfs_remove(cafe_dfs_root);
1984}
1985
1986static int cafe_dfs_open(struct inode *inode, struct file *file)
1987{
1988        file->private_data = inode->i_private;
1989        return 0;
1990}
1991
1992static ssize_t cafe_dfs_read_regs(struct file *file,
1993                char __user *buf, size_t count, loff_t *ppos)
1994{
1995        struct cafe_camera *cam = file->private_data;
1996        char *s = cafe_debug_buf;
1997        int offset;
1998
1999        for (offset = 0; offset < 0x44; offset += 4)
2000                s += sprintf(s, "%02x: %08x\n", offset,
2001                                cafe_reg_read(cam, offset));
2002        for (offset = 0x88; offset <= 0x90; offset += 4)
2003                s += sprintf(s, "%02x: %08x\n", offset,
2004                                cafe_reg_read(cam, offset));
2005        for (offset = 0xb4; offset <= 0xbc; offset += 4)
2006                s += sprintf(s, "%02x: %08x\n", offset,
2007                                cafe_reg_read(cam, offset));
2008        for (offset = 0x3000; offset <= 0x300c; offset += 4)
2009                s += sprintf(s, "%04x: %08x\n", offset,
2010                                cafe_reg_read(cam, offset));
2011        return simple_read_from_buffer(buf, count, ppos, cafe_debug_buf,
2012                        s - cafe_debug_buf);
2013}
2014
2015static const struct file_operations cafe_dfs_reg_ops = {
2016        .owner = THIS_MODULE,
2017        .read = cafe_dfs_read_regs,
2018        .open = cafe_dfs_open
2019};
2020
2021static ssize_t cafe_dfs_read_cam(struct file *file,
2022                char __user *buf, size_t count, loff_t *ppos)
2023{
2024        struct cafe_camera *cam = file->private_data;
2025        char *s = cafe_debug_buf;
2026        int offset;
2027
2028        if (! cam->sensor)
2029                return -EINVAL;
2030        for (offset = 0x0; offset < 0x8a; offset++)
2031        {
2032                u8 v;
2033
2034                cafe_smbus_read_data(cam, cam->sensor->addr, offset, &v);
2035                s += sprintf(s, "%02x: %02x\n", offset, v);
2036        }
2037        return simple_read_from_buffer(buf, count, ppos, cafe_debug_buf,
2038                        s - cafe_debug_buf);
2039}
2040
2041static const struct file_operations cafe_dfs_cam_ops = {
2042        .owner = THIS_MODULE,
2043        .read = cafe_dfs_read_cam,
2044        .open = cafe_dfs_open
2045};
2046
2047
2048
2049static void cafe_dfs_cam_setup(struct cafe_camera *cam)
2050{
2051        char fname[40];
2052
2053        if (!cafe_dfs_root)
2054                return;
2055        sprintf(fname, "regs-%d", cam->v4ldev.minor);
2056        cam->dfs_regs = debugfs_create_file(fname, 0444, cafe_dfs_root,
2057                        cam, &cafe_dfs_reg_ops);
2058        sprintf(fname, "cam-%d", cam->v4ldev.minor);
2059        cam->dfs_cam_regs = debugfs_create_file(fname, 0444, cafe_dfs_root,
2060                        cam, &cafe_dfs_cam_ops);
2061}
2062
2063
2064static void cafe_dfs_cam_shutdown(struct cafe_camera *cam)
2065{
2066        if (! IS_ERR(cam->dfs_regs))
2067                debugfs_remove(cam->dfs_regs);
2068        if (! IS_ERR(cam->dfs_cam_regs))
2069                debugfs_remove(cam->dfs_cam_regs);
2070}
2071
2072#else
2073
2074#define cafe_dfs_setup()
2075#define cafe_dfs_shutdown()
2076#define cafe_dfs_cam_setup(cam)
2077#define cafe_dfs_cam_shutdown(cam)
2078#endif    /* CONFIG_VIDEO_ADV_DEBUG */
2079
2080
2081
2082
2083/* ------------------------------------------------------------------------*/
2084/*
2085 * PCI interface stuff.
2086 */
2087
2088static int cafe_pci_probe(struct pci_dev *pdev,
2089                const struct pci_device_id *id)
2090{
2091        int ret;
2092        u16 classword;
2093        struct cafe_camera *cam;
2094        /*
2095         * Make sure we have a camera here - we'll get calls for
2096         * the other cafe devices as well.
2097         */
2098        pci_read_config_word(pdev, PCI_CLASS_DEVICE, &classword);
2099        if (classword != PCI_CLASS_MULTIMEDIA_VIDEO)
2100                return -ENODEV;
2101        /*
2102         * Start putting together one of our big camera structures.
2103         */
2104        ret = -ENOMEM;
2105        cam = kzalloc(sizeof(struct cafe_camera), GFP_KERNEL);
2106        if (cam == NULL)
2107                goto out;
2108        mutex_init(&cam->s_mutex);
2109        mutex_lock(&cam->s_mutex);
2110        spin_lock_init(&cam->dev_lock);
2111        cam->state = S_NOTREADY;
2112        cafe_set_config_needed(cam, 1);
2113        init_waitqueue_head(&cam->smbus_wait);
2114        init_waitqueue_head(&cam->iowait);
2115        cam->pdev = pdev;
2116        cam->pix_format = cafe_def_pix_format;
2117        INIT_LIST_HEAD(&cam->dev_list);
2118        INIT_LIST_HEAD(&cam->sb_avail);
2119        INIT_LIST_HEAD(&cam->sb_full);
2120        tasklet_init(&cam->s_tasklet, cafe_frame_tasklet, (unsigned long) cam);
2121        /*
2122         * Get set up on the PCI bus.
2123         */
2124        ret = pci_enable_device(pdev);
2125        if (ret)
2126                goto out_free;
2127        pci_set_master(pdev);
2128
2129        ret = -EIO;
2130        cam->regs = pci_iomap(pdev, 0, 0);
2131        if (! cam->regs) {
2132                printk(KERN_ERR "Unable to ioremap cafe-ccic regs\n");
2133                goto out_free;
2134        }
2135        ret = request_irq(pdev->irq, cafe_irq, IRQF_SHARED, "cafe-ccic", cam);
2136        if (ret)
2137                goto out_iounmap;
2138        /*
2139         * Initialize the controller and leave it powered up.  It will
2140         * stay that way until the sensor driver shows up.
2141         */
2142        cafe_ctlr_init(cam);
2143        cafe_ctlr_power_up(cam);
2144        /*
2145         * Set up I2C/SMBUS communications.  We have to drop the mutex here
2146         * because the sensor could attach in this call chain, leading to
2147         * unsightly deadlocks.
2148         */
2149        mutex_unlock(&cam->s_mutex);  /* attach can deadlock */
2150        ret = cafe_smbus_setup(cam);
2151        if (ret)
2152                goto out_freeirq;
2153        /*
2154         * Get the v4l2 setup done.
2155         */
2156        mutex_lock(&cam->s_mutex);
2157        cam->v4ldev = cafe_v4l_template;
2158        cam->v4ldev.debug = 0;
2159//      cam->v4ldev.debug = V4L2_DEBUG_IOCTL_ARG;
2160        cam->v4ldev.dev = &pdev->dev;
2161        ret = video_register_device(&cam->v4ldev, VFL_TYPE_GRABBER, -1);
2162        if (ret)
2163                goto out_smbus;
2164        /*
2165         * If so requested, try to get our DMA buffers now.
2166         */
2167        if (!alloc_bufs_at_read) {
2168                if (cafe_alloc_dma_bufs(cam, 1))
2169                        cam_warn(cam, "Unable to alloc DMA buffers at load"
2170                                        " will try again later.");
2171        }
2172
2173        cafe_dfs_cam_setup(cam);
2174        mutex_unlock(&cam->s_mutex);
2175        cafe_add_dev(cam);
2176        return 0;
2177
2178  out_smbus:
2179        cafe_smbus_shutdown(cam);
2180  out_freeirq:
2181        cafe_ctlr_power_down(cam);
2182        free_irq(pdev->irq, cam);
2183  out_iounmap:
2184        pci_iounmap(pdev, cam->regs);
2185  out_free:
2186        kfree(cam);
2187  out:
2188        return ret;
2189}
2190
2191
2192/*
2193 * Shut down an initialized device
2194 */
2195static void cafe_shutdown(struct cafe_camera *cam)
2196{
2197/* FIXME: Make sure we take care of everything here */
2198        cafe_dfs_cam_shutdown(cam);
2199        if (cam->n_sbufs > 0)
2200                /* What if they are still mapped?  Shouldn't be, but... */
2201                cafe_free_sio_buffers(cam);
2202        cafe_remove_dev(cam);
2203        cafe_ctlr_stop_dma(cam);
2204        cafe_ctlr_power_down(cam);
2205        cafe_smbus_shutdown(cam);
2206        cafe_free_dma_bufs(cam);
2207        free_irq(cam->pdev->irq, cam);
2208        pci_iounmap(cam->pdev, cam->regs);
2209        video_unregister_device(&cam->v4ldev);
2210        /* kfree(cam); done in v4l_release () */
2211}
2212
2213
2214static void cafe_pci_remove(struct pci_dev *pdev)
2215{
2216        struct cafe_camera *cam = cafe_find_by_pdev(pdev);
2217
2218        if (cam == NULL) {
2219                printk(KERN_WARNING "pci_remove on unknown pdev %p\n", pdev);
2220                return;
2221        }
2222        mutex_lock(&cam->s_mutex);
2223        if (cam->users > 0)
2224                cam_warn(cam, "Removing a device with users!\n");
2225        cafe_shutdown(cam);
2226/* No unlock - it no longer exists */
2227}
2228
2229
2230#ifdef CONFIG_PM
2231/*
2232 * Basic power management.
2233 */
2234static int cafe_pci_suspend(struct pci_dev *pdev, pm_message_t state)
2235{
2236        struct cafe_camera *cam = cafe_find_by_pdev(pdev);
2237        int ret;
2238        enum cafe_state cstate;
2239
2240        ret = pci_save_state(pdev);
2241        if (ret)
2242                return ret;
2243        cstate = cam->state; /* HACK - stop_dma sets to idle */
2244        cafe_ctlr_stop_dma(cam);
2245        cafe_ctlr_power_down(cam);
2246        pci_disable_device(pdev);
2247        cam->state = cstate;
2248        return 0;
2249}
2250
2251
2252static int cafe_pci_resume(struct pci_dev *pdev)
2253{
2254        struct cafe_camera *cam = cafe_find_by_pdev(pdev);
2255        int ret = 0;
2256
2257        ret = pci_restore_state(pdev);
2258        if (ret)
2259                return ret;
2260        ret = pci_enable_device(pdev);
2261
2262        if (ret) {
2263                cam_warn(cam, "Unable to re-enable device on resume!\n");
2264                return ret;
2265        }
2266        cafe_ctlr_init(cam);
2267        cafe_ctlr_power_down(cam);
2268
2269        mutex_lock(&cam->s_mutex);
2270        if (cam->users > 0) {
2271                cafe_ctlr_power_up(cam);
2272                __cafe_cam_reset(cam);
2273        }
2274        mutex_unlock(&cam->s_mutex);
2275
2276        set_bit(CF_CONFIG_NEEDED, &cam->flags);
2277        if (cam->state == S_SPECREAD)
2278                cam->state = S_IDLE;  /* Don't bother restarting */
2279        else if (cam->state == S_SINGLEREAD || cam->state == S_STREAMING)
2280                ret = cafe_read_setup(cam, cam->state);
2281        return ret;
2282}
2283
2284#endif  /* CONFIG_PM */
2285
2286
2287static struct pci_device_id cafe_ids[] = {
2288        { PCI_DEVICE(0x11ab, 0x4100) }, /* Eventual real ID */
2289        { PCI_DEVICE(0x11ab, 0x4102) }, /* Really eventual real ID */
2290        { 0, }
2291};
2292
2293MODULE_DEVICE_TABLE(pci, cafe_ids);
2294
2295static struct pci_driver cafe_pci_driver = {
2296        .name = "cafe1000-ccic",
2297        .id_table = cafe_ids,
2298        .probe = cafe_pci_probe,
2299        .remove = cafe_pci_remove,
2300#ifdef CONFIG_PM
2301        .suspend = cafe_pci_suspend,
2302        .resume = cafe_pci_resume,
2303#endif
2304};
2305
2306
2307
2308
2309static int __init cafe_init(void)
2310{
2311        int ret;
2312
2313        printk(KERN_NOTICE "Marvell M88ALP01 'CAFE' Camera Controller version %d\n",
2314                        CAFE_VERSION);
2315        cafe_dfs_setup();
2316        ret = pci_register_driver(&cafe_pci_driver);
2317        if (ret) {
2318                printk(KERN_ERR "Unable to register cafe_ccic driver\n");
2319                goto out;
2320        }
2321        request_module("ov7670");  /* FIXME want something more general */
2322        ret = 0;
2323
2324  out:
2325        return ret;
2326}
2327
2328
2329static void __exit cafe_exit(void)
2330{
2331        pci_unregister_driver(&cafe_pci_driver);
2332        cafe_dfs_shutdown();
2333}
2334
2335module_init(cafe_init);
2336module_exit(cafe_exit);
2337