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