OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [drivers/] [media/] [video/] [cafe_ccic.c] - Blame information for rev 78

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 62 marcus.erl
/*
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
 */
49
MODULE_AUTHOR("Jonathan Corbet <corbet@lwn.net>");
50
MODULE_DESCRIPTION("Marvell 88ALP01 CMOS Camera Controller driver");
51
MODULE_LICENSE("GPL");
52
MODULE_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
68
static int alloc_bufs_at_read = 0;
69
module_param(alloc_bufs_at_read, bool, 0444);
70
MODULE_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
 
76
static int n_dma_bufs = 3;
77
module_param(n_dma_bufs, uint, 0644);
78
MODULE_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
 
82
static int dma_buf_size = VGA_WIDTH * VGA_HEIGHT * 2;  /* Worst case */
83
module_param(dma_buf_size, uint, 0444);
84
MODULE_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
 
89
static int min_buffers = 1;
90
module_param(min_buffers, uint, 0644);
91
MODULE_PARM_DESC(min_buffers,
92
                "The minimum number of streaming I/O buffers we are willing "
93
                "to work with.");
94
 
95
static int max_buffers = 10;
96
module_param(max_buffers, uint, 0644);
97
MODULE_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
 
102
static int flip = 0;
103
module_param(flip, bool, 0444);
104
MODULE_PARM_DESC(flip,
105
                "If set, the sensor will be instructed to flip the image "
106
                "vertically.");
107
 
108
 
109
enum 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
 */
121
struct 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
 */
135
struct 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
 */
201
static 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
 
211
static inline int cafe_needs_config(struct cafe_camera *cam)
212
{
213
        return test_bit(CF_CONFIG_NEEDED, &cam->flags);
214
}
215
 
216
static 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
 */
242
static LIST_HEAD(cafe_dev_list);
243
static DEFINE_MUTEX(cafe_dev_list_lock);
244
 
245
static 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
 
252
static 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
 
259
static 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
 
275
static 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
 */
295
static 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
 
301
static inline unsigned int cafe_reg_read(struct cafe_camera *cam,
302
                unsigned int reg)
303
{
304
        return ioread32(cam->regs + reg);
305
}
306
 
307
 
308
static 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
 
317
static 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
 
323
static 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
 
339
static 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
 
356
static 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
 
417
static 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
 
436
static 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
 */
478
static 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
 
510
static 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
 
519
static 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
 
525
static 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 */
531
static int cafe_cam_init(struct cafe_camera *cam);
532
static void cafe_ctlr_stop_dma(struct cafe_camera *cam);
533
static void cafe_ctlr_power_down(struct cafe_camera *cam);
534
 
535
static 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
 
549
static 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
 
563
static 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
 
584
static 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
 */
599
static 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
 
618
static 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
 */
669
static 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
 
681
static 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
 
691
static 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
 */
700
static 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
 
707
static void cafe_ctlr_stop(struct cafe_camera *cam)
708
{
709
        cafe_reg_clear_bit(cam, REG_CTRL0, C0_ENABLE);
710
}
711
 
712
static 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
 */
766
static 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
 */
793
static 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
 
818
static 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
 
835
static 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
 
848
static 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
 */
858
static 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
 */
894
static 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
 
905
static 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
 */
932
static 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
 
975
static 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
 */
999
static 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
 */
1031
static 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
 
1064
static 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
 
1141
static 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
 
1163
static 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
 
1186
static 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
 
1212
static 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
 
1237
static 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
 
1305
static 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
 
1323
static 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
 
1356
static 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
 
1406
static 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
 
1417
static 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
 
1429
static struct vm_operations_struct cafe_v4l_vm_ops = {
1430
        .open = cafe_v4l_vm_open,
1431
        .close = cafe_v4l_vm_close
1432
};
1433
 
1434
 
1435
static 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
 
1473
static 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
 
1495
static 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
 
1517
static 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
 
1530
static 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
 
1543
static 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
 
1556
static 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
 
1572
static 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
 */
1587
static 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
 
1596
static 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
 
1611
static 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
 
1623
static 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
 */
1673
static 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
 */
1685
static 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
 
1697
static int cafe_vidioc_g_input(struct file *filp, void *priv, unsigned int *i)
1698
{
1699
        *i = 0;
1700
        return 0;
1701
}
1702
 
1703
static 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 */
1711
static 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
 */
1720
static 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
 
1733
static 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
 
1747
static 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
 
1760
static 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
 
1771
static 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
 
1817
static 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
 
1860
static 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
 
1916
static 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
 
1940
static 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
 
1968
static char cafe_debug_buf[1024];
1969
static struct dentry *cafe_dfs_root;
1970
 
1971
static 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
 
1980
static void cafe_dfs_shutdown(void)
1981
{
1982
        if (cafe_dfs_root)
1983
                debugfs_remove(cafe_dfs_root);
1984
}
1985
 
1986
static int cafe_dfs_open(struct inode *inode, struct file *file)
1987
{
1988
        file->private_data = inode->i_private;
1989
        return 0;
1990
}
1991
 
1992
static 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
 
2015
static 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
 
2021
static 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
 
2041
static 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
 
2049
static 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
 
2064
static 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
 
2088
static 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
 */
2195
static 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
 
2214
static 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
 */
2234
static 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
 
2252
static 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
 
2287
static 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
 
2293
MODULE_DEVICE_TABLE(pci, cafe_ids);
2294
 
2295
static 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
 
2309
static 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
 
2329
static void __exit cafe_exit(void)
2330
{
2331
        pci_unregister_driver(&cafe_pci_driver);
2332
        cafe_dfs_shutdown();
2333
}
2334
 
2335
module_init(cafe_init);
2336
module_exit(cafe_exit);

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.