Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * et8ek8_reg.h
0004  *
0005  * Copyright (C) 2008 Nokia Corporation
0006  *
0007  * Contact: Sakari Ailus <sakari.ailus@iki.fi>
0008  *          Tuukka Toivonen <tuukkat76@gmail.com>
0009  */
0010 
0011 #ifndef ET8EK8REGS_H
0012 #define ET8EK8REGS_H
0013 
0014 #include <linux/i2c.h>
0015 #include <linux/types.h>
0016 #include <linux/videodev2.h>
0017 #include <linux/v4l2-subdev.h>
0018 
0019 struct v4l2_mbus_framefmt;
0020 struct v4l2_subdev_pad_mbus_code_enum;
0021 
0022 struct et8ek8_mode {
0023     /* Physical sensor resolution and current image window */
0024     u16 sensor_width;
0025     u16 sensor_height;
0026     u16 sensor_window_origin_x;
0027     u16 sensor_window_origin_y;
0028     u16 sensor_window_width;
0029     u16 sensor_window_height;
0030 
0031     /* Image data coming from sensor (after scaling) */
0032     u16 width;
0033     u16 height;
0034     u16 window_origin_x;
0035     u16 window_origin_y;
0036     u16 window_width;
0037     u16 window_height;
0038 
0039     u32 pixel_clock;        /* in Hz */
0040     u32 ext_clock;          /* in Hz */
0041     struct v4l2_fract timeperframe;
0042     u32 max_exp;            /* Maximum exposure value */
0043     u32 bus_format;         /* MEDIA_BUS_FMT_ */
0044     u32 sensitivity;        /* 16.16 fixed point */
0045 };
0046 
0047 #define ET8EK8_REG_8BIT         1
0048 #define ET8EK8_REG_16BIT        2
0049 #define ET8EK8_REG_DELAY        100
0050 #define ET8EK8_REG_TERM         0xff
0051 struct et8ek8_reg {
0052     u16 type;
0053     u16 reg;            /* 16-bit offset */
0054     u32 val;            /* 8/16/32-bit value */
0055 };
0056 
0057 /* Possible struct smia_reglist types. */
0058 #define ET8EK8_REGLIST_STANDBY      0
0059 #define ET8EK8_REGLIST_POWERON      1
0060 #define ET8EK8_REGLIST_RESUME       2
0061 #define ET8EK8_REGLIST_STREAMON     3
0062 #define ET8EK8_REGLIST_STREAMOFF    4
0063 #define ET8EK8_REGLIST_DISABLED     5
0064 
0065 #define ET8EK8_REGLIST_MODE     10
0066 
0067 #define ET8EK8_REGLIST_LSC_ENABLE   100
0068 #define ET8EK8_REGLIST_LSC_DISABLE  101
0069 #define ET8EK8_REGLIST_ANR_ENABLE   102
0070 #define ET8EK8_REGLIST_ANR_DISABLE  103
0071 
0072 struct et8ek8_reglist {
0073     u32 type;
0074     struct et8ek8_mode mode;
0075     struct et8ek8_reg regs[];
0076 };
0077 
0078 #define ET8EK8_MAX_LEN          32
0079 struct et8ek8_meta_reglist {
0080     char version[ET8EK8_MAX_LEN];
0081     union {
0082         struct et8ek8_reglist *ptr;
0083     } reglist[];
0084 };
0085 
0086 extern struct et8ek8_meta_reglist meta_reglist;
0087 
0088 #endif /* ET8EK8REGS */