Immunize rcu_dereference() against crazy compiler writers
[linux-2.6] / include / media / ovcamchip.h
1 /* OmniVision* camera chip driver API
2  *
3  * Copyright (c) 1999-2004 Mark McClelland
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License as published by the
7  * Free Software Foundation; either version 2 of the License, or (at your
8  * option) any later version. NO WARRANTY OF ANY KIND is expressed or implied.
9  *
10  * * OmniVision is a trademark of OmniVision Technologies, Inc. This driver
11  * is not sponsored or developed by them.
12  */
13
14 #ifndef __LINUX_OVCAMCHIP_H
15 #define __LINUX_OVCAMCHIP_H
16
17 #include <linux/videodev.h>
18 #include <media/v4l2-common.h>
19
20 /* --------------------------------- */
21 /*           ENUMERATIONS            */
22 /* --------------------------------- */
23
24 /* Controls */
25 enum {
26         OVCAMCHIP_CID_CONT,             /* Contrast */
27         OVCAMCHIP_CID_BRIGHT,           /* Brightness */
28         OVCAMCHIP_CID_SAT,              /* Saturation */
29         OVCAMCHIP_CID_HUE,              /* Hue */
30         OVCAMCHIP_CID_EXP,              /* Exposure */
31         OVCAMCHIP_CID_FREQ,             /* Light frequency */
32         OVCAMCHIP_CID_BANDFILT,         /* Banding filter */
33         OVCAMCHIP_CID_AUTOBRIGHT,       /* Auto brightness */
34         OVCAMCHIP_CID_AUTOEXP,          /* Auto exposure */
35         OVCAMCHIP_CID_BACKLIGHT,        /* Back light compensation */
36         OVCAMCHIP_CID_MIRROR,           /* Mirror horizontally */
37 };
38
39 /* Chip types */
40 #define NUM_CC_TYPES    9
41 enum {
42         CC_UNKNOWN,
43         CC_OV76BE,
44         CC_OV7610,
45         CC_OV7620,
46         CC_OV7620AE,
47         CC_OV6620,
48         CC_OV6630,
49         CC_OV6630AE,
50         CC_OV6630AF,
51 };
52
53 /* --------------------------------- */
54 /*           I2C ADDRESSES           */
55 /* --------------------------------- */
56
57 #define OV7xx0_SID   (0x42 >> 1)
58 #define OV6xx0_SID   (0xC0 >> 1)
59
60 /* --------------------------------- */
61 /*                API                */
62 /* --------------------------------- */
63
64 struct ovcamchip_control {
65         __u32 id;
66         __s32 value;
67 };
68
69 struct ovcamchip_window {
70         int x;
71         int y;
72         int width;
73         int height;
74         int format;
75         int quarter;            /* Scale width and height down 2x */
76
77         /* This stuff will be removed eventually */
78         int clockdiv;           /* Clock divisor setting */
79 };
80
81 /* Commands */
82 #define OVCAMCHIP_CMD_Q_SUBTYPE     _IOR  (0x88, 0x00, int)
83 #define OVCAMCHIP_CMD_INITIALIZE    _IOW  (0x88, 0x01, int)
84 /* You must call OVCAMCHIP_CMD_INITIALIZE before any of commands below! */
85 #define OVCAMCHIP_CMD_S_CTRL        _IOW  (0x88, 0x02, struct ovcamchip_control)
86 #define OVCAMCHIP_CMD_G_CTRL        _IOWR (0x88, 0x03, struct ovcamchip_control)
87 #define OVCAMCHIP_CMD_S_MODE        _IOW  (0x88, 0x04, struct ovcamchip_window)
88 #define OVCAMCHIP_MAX_CMD           _IO   (0x88, 0x3f)
89
90 #endif