18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * et8ek8_reg.h
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Copyright (C) 2008 Nokia Corporation
68c2ecf20Sopenharmony_ci *
78c2ecf20Sopenharmony_ci * Contact: Sakari Ailus <sakari.ailus@iki.fi>
88c2ecf20Sopenharmony_ci *          Tuukka Toivonen <tuukkat76@gmail.com>
98c2ecf20Sopenharmony_ci */
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ci#ifndef ET8EK8REGS_H
128c2ecf20Sopenharmony_ci#define ET8EK8REGS_H
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_ci#include <linux/i2c.h>
158c2ecf20Sopenharmony_ci#include <linux/types.h>
168c2ecf20Sopenharmony_ci#include <linux/videodev2.h>
178c2ecf20Sopenharmony_ci#include <linux/v4l2-subdev.h>
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_cistruct v4l2_mbus_framefmt;
208c2ecf20Sopenharmony_cistruct v4l2_subdev_pad_mbus_code_enum;
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_cistruct et8ek8_mode {
238c2ecf20Sopenharmony_ci	/* Physical sensor resolution and current image window */
248c2ecf20Sopenharmony_ci	u16 sensor_width;
258c2ecf20Sopenharmony_ci	u16 sensor_height;
268c2ecf20Sopenharmony_ci	u16 sensor_window_origin_x;
278c2ecf20Sopenharmony_ci	u16 sensor_window_origin_y;
288c2ecf20Sopenharmony_ci	u16 sensor_window_width;
298c2ecf20Sopenharmony_ci	u16 sensor_window_height;
308c2ecf20Sopenharmony_ci
318c2ecf20Sopenharmony_ci	/* Image data coming from sensor (after scaling) */
328c2ecf20Sopenharmony_ci	u16 width;
338c2ecf20Sopenharmony_ci	u16 height;
348c2ecf20Sopenharmony_ci	u16 window_origin_x;
358c2ecf20Sopenharmony_ci	u16 window_origin_y;
368c2ecf20Sopenharmony_ci	u16 window_width;
378c2ecf20Sopenharmony_ci	u16 window_height;
388c2ecf20Sopenharmony_ci
398c2ecf20Sopenharmony_ci	u32 pixel_clock;		/* in Hz */
408c2ecf20Sopenharmony_ci	u32 ext_clock;			/* in Hz */
418c2ecf20Sopenharmony_ci	struct v4l2_fract timeperframe;
428c2ecf20Sopenharmony_ci	u32 max_exp;			/* Maximum exposure value */
438c2ecf20Sopenharmony_ci	u32 bus_format;			/* MEDIA_BUS_FMT_ */
448c2ecf20Sopenharmony_ci	u32 sensitivity;		/* 16.16 fixed point */
458c2ecf20Sopenharmony_ci};
468c2ecf20Sopenharmony_ci
478c2ecf20Sopenharmony_ci#define ET8EK8_REG_8BIT			1
488c2ecf20Sopenharmony_ci#define ET8EK8_REG_16BIT		2
498c2ecf20Sopenharmony_ci#define ET8EK8_REG_DELAY		100
508c2ecf20Sopenharmony_ci#define ET8EK8_REG_TERM			0xff
518c2ecf20Sopenharmony_cistruct et8ek8_reg {
528c2ecf20Sopenharmony_ci	u16 type;
538c2ecf20Sopenharmony_ci	u16 reg;			/* 16-bit offset */
548c2ecf20Sopenharmony_ci	u32 val;			/* 8/16/32-bit value */
558c2ecf20Sopenharmony_ci};
568c2ecf20Sopenharmony_ci
578c2ecf20Sopenharmony_ci/* Possible struct smia_reglist types. */
588c2ecf20Sopenharmony_ci#define ET8EK8_REGLIST_STANDBY		0
598c2ecf20Sopenharmony_ci#define ET8EK8_REGLIST_POWERON		1
608c2ecf20Sopenharmony_ci#define ET8EK8_REGLIST_RESUME		2
618c2ecf20Sopenharmony_ci#define ET8EK8_REGLIST_STREAMON		3
628c2ecf20Sopenharmony_ci#define ET8EK8_REGLIST_STREAMOFF	4
638c2ecf20Sopenharmony_ci#define ET8EK8_REGLIST_DISABLED		5
648c2ecf20Sopenharmony_ci
658c2ecf20Sopenharmony_ci#define ET8EK8_REGLIST_MODE		10
668c2ecf20Sopenharmony_ci
678c2ecf20Sopenharmony_ci#define ET8EK8_REGLIST_LSC_ENABLE	100
688c2ecf20Sopenharmony_ci#define ET8EK8_REGLIST_LSC_DISABLE	101
698c2ecf20Sopenharmony_ci#define ET8EK8_REGLIST_ANR_ENABLE	102
708c2ecf20Sopenharmony_ci#define ET8EK8_REGLIST_ANR_DISABLE	103
718c2ecf20Sopenharmony_ci
728c2ecf20Sopenharmony_cistruct et8ek8_reglist {
738c2ecf20Sopenharmony_ci	u32 type;
748c2ecf20Sopenharmony_ci	struct et8ek8_mode mode;
758c2ecf20Sopenharmony_ci	struct et8ek8_reg regs[];
768c2ecf20Sopenharmony_ci};
778c2ecf20Sopenharmony_ci
788c2ecf20Sopenharmony_ci#define ET8EK8_MAX_LEN			32
798c2ecf20Sopenharmony_cistruct et8ek8_meta_reglist {
808c2ecf20Sopenharmony_ci	char version[ET8EK8_MAX_LEN];
818c2ecf20Sopenharmony_ci	union {
828c2ecf20Sopenharmony_ci		struct et8ek8_reglist *ptr;
838c2ecf20Sopenharmony_ci	} reglist[];
848c2ecf20Sopenharmony_ci};
858c2ecf20Sopenharmony_ci
868c2ecf20Sopenharmony_ciextern struct et8ek8_meta_reglist meta_reglist;
878c2ecf20Sopenharmony_ci
888c2ecf20Sopenharmony_ci#endif /* ET8EK8REGS */
89