root/drivers/media/i2c/et8ek8/et8ek8_reg.h
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * et8ek8_reg.h
 *
 * Copyright (C) 2008 Nokia Corporation
 *
 * Contact: Sakari Ailus <sakari.ailus@iki.fi>
 *          Tuukka Toivonen <tuukkat76@gmail.com>
 */

#ifndef ET8EK8REGS_H
#define ET8EK8REGS_H

#include <linux/i2c.h>
#include <linux/types.h>
#include <linux/videodev2.h>
#include <linux/v4l2-subdev.h>

struct v4l2_mbus_framefmt;
struct v4l2_subdev_pad_mbus_code_enum;

struct et8ek8_mode {
        /* Physical sensor resolution and current image window */
        u16 sensor_width;
        u16 sensor_height;
        u16 sensor_window_origin_x;
        u16 sensor_window_origin_y;
        u16 sensor_window_width;
        u16 sensor_window_height;

        /* Image data coming from sensor (after scaling) */
        u16 width;
        u16 height;
        u16 window_origin_x;
        u16 window_origin_y;
        u16 window_width;
        u16 window_height;

        u32 pixel_clock;                /* in Hz */
        struct v4l2_fract timeperframe;
        u32 max_exp;                    /* Maximum exposure value */
        u32 bus_format;                 /* MEDIA_BUS_FMT_ */
        u32 sensitivity;                /* 16.16 fixed point */
};

#define ET8EK8_REG_8BIT                 1
#define ET8EK8_REG_16BIT                2
#define ET8EK8_REG_DELAY                100
#define ET8EK8_REG_TERM                 0xff
struct et8ek8_reg {
        u16 type;
        u16 reg;                        /* 16-bit offset */
        u32 val;                        /* 8/16/32-bit value */
};

/* Possible struct smia_reglist types. */
#define ET8EK8_REGLIST_STANDBY          0
#define ET8EK8_REGLIST_POWERON          1
#define ET8EK8_REGLIST_RESUME           2
#define ET8EK8_REGLIST_STREAMON         3
#define ET8EK8_REGLIST_STREAMOFF        4
#define ET8EK8_REGLIST_DISABLED         5

#define ET8EK8_REGLIST_MODE             10

#define ET8EK8_REGLIST_LSC_ENABLE       100
#define ET8EK8_REGLIST_LSC_DISABLE      101
#define ET8EK8_REGLIST_ANR_ENABLE       102
#define ET8EK8_REGLIST_ANR_DISABLE      103

struct et8ek8_reglist {
        u32 type;
        struct et8ek8_mode mode;
        struct et8ek8_reg regs[];
};

#define ET8EK8_MAX_LEN                  32
struct et8ek8_meta_reglist {
        char version[ET8EK8_MAX_LEN];
        union {
                struct et8ek8_reglist *ptr;
        } reglist[];
};

extern struct et8ek8_meta_reglist meta_reglist;

#endif /* ET8EK8REGS */