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