1c5254e72SPavel Machek /*
2c5254e72SPavel Machek  * et8ek8_reg.h
3c5254e72SPavel Machek  *
4c5254e72SPavel Machek  * Copyright (C) 2008 Nokia Corporation
5c5254e72SPavel Machek  *
6c5254e72SPavel Machek  * Contact: Sakari Ailus <sakari.ailus@iki.fi>
7c5254e72SPavel Machek  *          Tuukka Toivonen <tuukkat76@gmail.com>
8c5254e72SPavel Machek  *
9c5254e72SPavel Machek  * This program is free software; you can redistribute it and/or
10c5254e72SPavel Machek  * modify it under the terms of the GNU General Public License
11c5254e72SPavel Machek  * version 2 as published by the Free Software Foundation.
12c5254e72SPavel Machek  *
13c5254e72SPavel Machek  * This program is distributed in the hope that it will be useful, but
14c5254e72SPavel Machek  * WITHOUT ANY WARRANTY; without even the implied warranty of
15c5254e72SPavel Machek  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16c5254e72SPavel Machek  * General Public License for more details.
17c5254e72SPavel Machek  */
18c5254e72SPavel Machek 
19c5254e72SPavel Machek #ifndef ET8EK8REGS_H
20c5254e72SPavel Machek #define ET8EK8REGS_H
21c5254e72SPavel Machek 
22c5254e72SPavel Machek #include <linux/i2c.h>
23c5254e72SPavel Machek #include <linux/types.h>
24c5254e72SPavel Machek #include <linux/videodev2.h>
25c5254e72SPavel Machek #include <linux/v4l2-subdev.h>
26c5254e72SPavel Machek 
27c5254e72SPavel Machek struct v4l2_mbus_framefmt;
28c5254e72SPavel Machek struct v4l2_subdev_pad_mbus_code_enum;
29c5254e72SPavel Machek 
30c5254e72SPavel Machek struct et8ek8_mode {
31c5254e72SPavel Machek 	/* Physical sensor resolution and current image window */
32c5254e72SPavel Machek 	u16 sensor_width;
33c5254e72SPavel Machek 	u16 sensor_height;
34c5254e72SPavel Machek 	u16 sensor_window_origin_x;
35c5254e72SPavel Machek 	u16 sensor_window_origin_y;
36c5254e72SPavel Machek 	u16 sensor_window_width;
37c5254e72SPavel Machek 	u16 sensor_window_height;
38c5254e72SPavel Machek 
39c5254e72SPavel Machek 	/* Image data coming from sensor (after scaling) */
40c5254e72SPavel Machek 	u16 width;
41c5254e72SPavel Machek 	u16 height;
42c5254e72SPavel Machek 	u16 window_origin_x;
43c5254e72SPavel Machek 	u16 window_origin_y;
44c5254e72SPavel Machek 	u16 window_width;
45c5254e72SPavel Machek 	u16 window_height;
46c5254e72SPavel Machek 
47c5254e72SPavel Machek 	u32 pixel_clock;		/* in Hz */
48c5254e72SPavel Machek 	u32 ext_clock;			/* in Hz */
49c5254e72SPavel Machek 	struct v4l2_fract timeperframe;
50c5254e72SPavel Machek 	u32 max_exp;			/* Maximum exposure value */
51c5254e72SPavel Machek 	u32 bus_format;			/* MEDIA_BUS_FMT_ */
52c5254e72SPavel Machek 	u32 sensitivity;		/* 16.16 fixed point */
53c5254e72SPavel Machek };
54c5254e72SPavel Machek 
55c5254e72SPavel Machek #define ET8EK8_REG_8BIT			1
56c5254e72SPavel Machek #define ET8EK8_REG_16BIT		2
57c5254e72SPavel Machek #define ET8EK8_REG_DELAY		100
58c5254e72SPavel Machek #define ET8EK8_REG_TERM			0xff
59c5254e72SPavel Machek struct et8ek8_reg {
60c5254e72SPavel Machek 	u16 type;
61c5254e72SPavel Machek 	u16 reg;			/* 16-bit offset */
62c5254e72SPavel Machek 	u32 val;			/* 8/16/32-bit value */
63c5254e72SPavel Machek };
64c5254e72SPavel Machek 
65c5254e72SPavel Machek /* Possible struct smia_reglist types. */
66c5254e72SPavel Machek #define ET8EK8_REGLIST_STANDBY		0
67c5254e72SPavel Machek #define ET8EK8_REGLIST_POWERON		1
68c5254e72SPavel Machek #define ET8EK8_REGLIST_RESUME		2
69c5254e72SPavel Machek #define ET8EK8_REGLIST_STREAMON		3
70c5254e72SPavel Machek #define ET8EK8_REGLIST_STREAMOFF	4
71c5254e72SPavel Machek #define ET8EK8_REGLIST_DISABLED		5
72c5254e72SPavel Machek 
73c5254e72SPavel Machek #define ET8EK8_REGLIST_MODE		10
74c5254e72SPavel Machek 
75c5254e72SPavel Machek #define ET8EK8_REGLIST_LSC_ENABLE	100
76c5254e72SPavel Machek #define ET8EK8_REGLIST_LSC_DISABLE	101
77c5254e72SPavel Machek #define ET8EK8_REGLIST_ANR_ENABLE	102
78c5254e72SPavel Machek #define ET8EK8_REGLIST_ANR_DISABLE	103
79c5254e72SPavel Machek 
80c5254e72SPavel Machek struct et8ek8_reglist {
81c5254e72SPavel Machek 	u32 type;
82c5254e72SPavel Machek 	struct et8ek8_mode mode;
83c5254e72SPavel Machek 	struct et8ek8_reg regs[];
84c5254e72SPavel Machek };
85c5254e72SPavel Machek 
86c5254e72SPavel Machek #define ET8EK8_MAX_LEN			32
87c5254e72SPavel Machek struct et8ek8_meta_reglist {
88c5254e72SPavel Machek 	char version[ET8EK8_MAX_LEN];
89c5254e72SPavel Machek 	union {
90c5254e72SPavel Machek 		struct et8ek8_reglist *ptr;
91c5254e72SPavel Machek 	} reglist[];
92c5254e72SPavel Machek };
93c5254e72SPavel Machek 
94c5254e72SPavel Machek extern struct et8ek8_meta_reglist meta_reglist;
95c5254e72SPavel Machek 
96c5254e72SPavel Machek #endif /* ET8EK8REGS */
97