android_kernel_modules_leno.../camera/drivers/media/i2c/m10mo.h

729 lines
21 KiB
C

/*
* Copyright (c) 2014 Intel Corporation. All Rights Reserved.
*
* Partially based on m-5mols kernel driver,
* Copyright (C) 2011 Samsung Electronics Co., Ltd.
*
* Partially based on jc_v4l2 kernel driver from http://opensource.samsung.com
* Copyright (c) 2011, Code Aurora Forum. All rights reserved.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version
* 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#ifndef M10MO_REG_H
#define M10MO_REG_H
#include <linux/atomisp_platform.h>
#include <linux/atomisp.h>
#include <linux/delay.h>
#include <linux/i2c.h>
#include <linux/kernel.h>
#include <linux/spinlock.h>
#include <linux/types.h>
#include <linux/videodev2.h>
#include <linux/v4l2-mediabus.h>
#include <media/media-entity.h>
#include <media/v4l2-chip-ident.h>
#include <media/v4l2-ctrls.h>
#include <media/v4l2-device.h>
#include <media/v4l2-subdev.h>
#define M10MO_NAME "m10mo"
#define M10MO_ADDR 0x1f
#define M10MO_I2C_RETRY 5
#define M10MO_MIPI_FREQ_0 (963000000/2)
#define M10MO_MIPI_FREQ_1 (980700000/2)
#define M10MO_INIT_TIMEOUT 500
#define M10MO_BOOT_TIMEOUT 50
#define POLL_NUM 20
#define M10MO_MIN_EV -2000
#define M10MO_MAX_EV 3000
#define M10MO_EV_STEP 500
#define M10MO_FLICKER_AUTO 0x00
#define M10MO_FLICKER_50HZ 0x01
#define M10MO_FLICKER_60HZ 0x02
#define M10MO_FLICKER_OFF 0x03
#define M10MO_METERING_CENTER 0x00
#define M10MO_METERING_SPOT 0x01
#define M10MO_METERING_AVERAGE 0x02
/* TODO These values for focal length, f-number are taken from
* imx135 13MP. This can be changed when we get the proper values
* for m10mo
*/
/*
* focal length bits definition:
* bits 31-16: numerator, bits 15-0: denominator
*/
#define M10MO_FOCAL_LENGTH_DEFAULT 0x1710064
/*
* current f-number bits definition:
* bits 31-16: numerator, bits 15-0: denominator
*/
#define M10MO_F_NUMBER_DEFAULT 0x16000a
/*
* f-number range bits definition:
* bits 31-24: max f-number numerator
* bits 23-16: max f-number denominator
* bits 15-8: min f-number numerator
* bits 7-0: min f-number denominator
*/
#define M10MO_F_NUMBER_RANGE 0x160a160a
#define M10MO_FOCAL_LENGTH_NUM 369
#define M10MO_FOCAL_LENGTH_DEM 100
#define M10MO_F_NUMBER_DEFAULT_NUM 22
#define M10MO_F_NUMBER_DEM 10
#define M10MO_INVALID_CHECKSUM 0xffff
#define M10MO_VALID_CHECKSUM 0
/* M10MO FW VERSION INFO ADDR */
#define M10MO_FW_VERSION_INFO_ADDR_0 0x181EF080
#define M10MO_FW_VERSION_INFO_ADDR_1 0x18000020
/* M10MO I2C commands */
#define M10MO_BYTE_READ 0x01
#define M10MO_BYTE_WRITE 0x02
#define M10MO_MEMORY_READ_8BIT 0x03
#define M10MO_MEMORY_WRITE_8BIT 0x04
#define M10MO_MEMORY_READ_16BIT 0x05
#define M10MO_MEMORY_WRITE_16BIT 0x06
#define M10MO_MEMORY_READ_32BIT 0x07
#define M10MO_MEMORY_WRITE_32BIT 0x08
#define CAPTURE_FORMAT_YUV422 0x00
#define CAPTURE_FORMAT_JPEG8 0x01
/* TODO: Fix this */
/* 4128*3096*2 + X extra bytes. Rounded to height divisible by 32 -> 25624576 */
#define M10MO_MAX_YUV422_SIZE 25624576
/* Max RAW size 26000000 + 8*2048 + 1048 (to algin to 32 bytes) */
#define M10MO_MAX_RAW_SIZE 26017792
#define M10MO_GET_CLOCK_RATE_MODE(arg) ((arg >> M10MO_CLOCK_RATE_MODE_OFFSET) & M10MO_MASK)
#define M10MO_GET_MIPI_FREQ_MODE(arg) ((arg >> M10MO_MIPI_FREQ_MODE_OFFSET) & M10MO_MASK)
#define M10MO_GET_FOCUS_MODE(arg) ((arg >> M10MO_AF_MODE_OFFSET) & M10MO_MASK)
#define M10MO_GET_RESOLUTION_MODE(arg) ((arg >> M10MO_RESOLUTION_MODE_OFFSET) & M10MO_MASK)
#define M10MO_SHOT_MODES_SUPPORTED(arg) (arg & M10MO_SHOT_MODE_SUPPORT)
#define M10MO_GET_MIPI_PACKET_SIZE_IDX(arg) ((arg >> M10MO_MIPI_PACKET_SIZE_OFFSET) & M10MO_MASK)
#define M10MO_METADATA_WIDTH 2048
#define M10MO_METADATA_HEIGHT 4
#define M10MO_METADATA_FORMAT ATOMISP_INPUT_FORMAT_EMBEDDED
struct m10mo_spi {
int spi_enabled;
struct spi_device *spi_device;
int (*write)(struct spi_device *spi, const u8 *addr,
const int len, const int txSize);
int (*read)(struct spi_device *spi, u8 *buf, size_t len,
const int rxSize);
};
struct m10mo_version {
int customer;
int project;
int firmware;
int hardware;
int parameter;
int awb;
};
struct m10mo_resolution {
u32 width;
u32 height;
u32 command;
bool vdis;
};
struct m10mo_monitor_params {
u8 af_mode;
u8 exe_mode;
unsigned int af_touch_posx;
unsigned int af_touch_posy;
u8 flash_mode;
u8 torch;
};
/* Parameters dependent to the MIPI packet size (FW specific) */
struct m10mo_mipi_params {
u32 jpeg_width;
u32 jpeg_height;
u32 raw_width;
u32 raw_height;
};
struct m10mo_fw_ops {
int (*set_run_mode) (struct v4l2_subdev *sd);
int (*set_burst_mode) (struct v4l2_subdev *sd, unsigned int val);
int (*stream_off) (struct v4l2_subdev *sd);
int (*single_capture_process) (struct v4l2_subdev *sd);
int (*try_mbus_fmt) (struct v4l2_subdev *sd, struct v4l2_mbus_framefmt *fmt, bool update_fmt);
int (*set_mbus_fmt) (struct v4l2_subdev *sd, struct v4l2_mbus_framefmt *fmt);
int (*test_pattern) (struct v4l2_subdev *sd, u8 val);
};
struct m10mo_device {
struct v4l2_subdev sd;
struct media_pad pad;
struct v4l2_mbus_framefmt format;
struct m10mo_platform_data *pdata;
struct mutex input_lock; /* serialize sensor's ioctl */
struct m10mo_spi *spi;
struct m10mo_monitor_params monitor_params;
struct m10mo_mipi_params mipi_params;
u8 message_buffer[256]; /* Real buffer size TBD */
int res_type;
int power;
u8 fps;
u8 requested_mode;
u8 mode;
u8 capture_mode;
short iso_mode;
short iso_sensitivity;
u8 colorfx_cr;
u8 colorfx_cb;
int fmt_idx;
int capture_res_idx;
wait_queue_head_t irq_waitq;
unsigned int bad_fw:1;
unsigned int isp_ready:1;
unsigned int initialized;
struct m10mo_version ver;
struct v4l2_ctrl_handler ctrl_handler;
int run_mode;
struct v4l2_ctrl *link_freq;
struct v4l2_ctrl *zsl_capture;
struct v4l2_ctrl *colorfx;
const struct m10mo_fw_ops *fw_ops;
unsigned int num_lanes;
const struct m10mo_resolution *curr_res_table;
int entries_curr_table;
int ref_clock;
unsigned int fw_type;
int fw_addr_id;
u8 shot_mode;
};
enum hdr_options{
STOP_HDR_MODE,
START_HDR_MODE,
RESUME_PREVIEW_IN_HDR_MODE
};
enum lls_options{
STOP_LLS_MODE,
START_LLS_MODE,
RESUME_PREVIEW_IN_LLS_MODE
};
#define to_m10mo_sensor(x) container_of(x, struct m10mo_device, sd)
int m10mo_memory_read(struct v4l2_subdev *sd, u16 len, u32 addr, u8 *val);
int m10mo_memory_write(struct v4l2_subdev *sd, u8 cmd, u16 len, u32 addr, u8 *val);
int m10mo_writeb(struct v4l2_subdev *sd, u8 category, u8 reg, u32 val);
int m10mo_writew(struct v4l2_subdev *sd, u8 category, u8 reg, u32 val);
int m10mo_writel(struct v4l2_subdev *sd, u8 category, u8 reg, u32 val);
int m10mo_readb(struct v4l2_subdev *sd, u8 category, u8 reg, u32 *val);
int m10mo_readw(struct v4l2_subdev *sd, u8 category, u8 reg, u32 *val);
int m10mo_readl(struct v4l2_subdev *sd, u8 category, u8 reg, u32 *val);
int m10mo_setup_flash_controller(struct v4l2_subdev *sd);
int m10mo_request_mode_change(struct v4l2_subdev *sd, u8 requested_mode);
int m10mo_wait_mode_change(struct v4l2_subdev *sd, u8 mode, u32 timeout);
int __m10mo_param_mode_set(struct v4l2_subdev *sd);
int __m10mo_update_stream_info(struct v4l2_subdev *sd, struct v4l2_mbus_framefmt *fmt);
int __m10mo_try_mbus_fmt(struct v4l2_subdev *sd, struct v4l2_mbus_framefmt *fmt, bool update_fmt);
int __m10mo_set_mbus_fmt(struct v4l2_subdev *sd, struct v4l2_mbus_framefmt *fmt);
int m10mo_test_pattern_start(struct v4l2_subdev *sd);
int get_resolution_index(const struct m10mo_resolution *res,
int entries, int w, int h);
int m10mo_set_zsl_raw_capture(struct v4l2_subdev *sd);
void m10mo_register_spi_fw_flash_interface(struct m10mo_device *dev,
struct m10mo_spi *m10mo_spi_dev);
int m10mo_dump_fw(struct m10mo_device *m10mo_dev);
int m10mo_get_fw_address_count(void);
int m10mo_get_isp_fw_version_string(struct m10mo_device *dev, char *buf,
int len, int fw_address_id);
int m10mo_fw_checksum(struct m10mo_device *dev, u16 *result);
int m10mo_program_device(struct m10mo_device *m10mo_dev);
int m10mo_get_spi_state(struct m10mo_device *m10mo_dev);
int m10mo_set_spi_state(struct m10mo_device *m10mo_dev, bool enabled);
int m10mo_update_pll_setting(struct v4l2_subdev *sd);
int m10mo_dump_string_log1(struct v4l2_subdev *sd);
int m10mo_dump_string_log2_1(struct v4l2_subdev *sd);
int m10mo_dump_string_log2_2(struct v4l2_subdev *sd);
int m10mo_dump_string_log2_3(struct v4l2_subdev *sd);
int m10mo_dump_string_log3(struct v4l2_subdev *sd);
void m10mo_dump_log(struct v4l2_subdev *sd);
int m10mo_single_capture_process(struct v4l2_subdev *sd);
int m10mo_set_still_capture(struct v4l2_subdev *sd);
int m10mo_set_panorama_monitor(struct v4l2_subdev *sd);
int m10mo_set_zsl_monitor(struct v4l2_subdev *sd);
int m10mo_set_burst_mode(struct v4l2_subdev *sd, unsigned int val);
int m10mo_streamoff(struct v4l2_subdev *sd);
int m10mo_test_pattern(struct v4l2_subdev *sd, u8 val);
extern const struct m10mo_fw_ops fw_type1_5_ops;
extern const struct m10mo_fw_ops fw_type2_ops;
/* Below contents are based on the M10MO_categoryParameter-a1.xls */
/* Category register */
#define CATEGORY_SYSTEM 0x00
#define CATEGORY_PARAM 0x01 /* Monitor & Still Parameter A */
#define CATEGORY_MONITOR 0x02 /* Monitor & Still Parameter B */
#define CATEGORY_AE 0x03
#define CATEGORY_WB 0x06
#define CATEGORY_EXIF 0x07 /* Exif Information */
#define CATEGORY_LENS 0x0a /* AF Control */
#define CATEGORY_CAPTURE_PARAM 0x0b /* Still Picture parameter */
#define CATEGORY_CAPTURE_CTRL 0x0c /* Still picture control */
#define CATEGORY_LOGLEDFLASH 0x0d /*Log Led Flash Category */
#define CATEGORY_TEST 0x0d /* Test category for FW_TYPE_2 */
#define CATEGORY_FLASHROM 0x0f /* FlashROM-Writer Mode only */
/* Category 0_SYSTEM mode */
#define SYSTEM_CUSTOMER_CODE 0x00
#define SYSTEM_PROJECT_CODE 0x01
#define SYSTEM_VER_FIRMWARE 0x02
#define SYSTEM_VER_HARDWARE 0x04
#define SYSTEM_VER_PARAMETER 0x06
#define SYSTEM_VER_AWB 0x08
#define SYSTEM_MASTER_SENSOR 0x17
#define SYSTEM_SYSMODE 0x0b
/* SYSTEM mode status */
#define SYSTEM_STATUS 0x0c
/* interrupt enable register */
#define SYSTEM_INT_ENABLE 0x10
#define REG_INT_EN_MODE (1 << 0)
#define REG_INT_AF (1 << 1)
#define REG_INT_EN_ZOOM (1 << 2)
#define REG_INT_EN_CAPTURE (1 << 3)
#define REG_INT_EN_FRAMESYNC (1 << 4)
#define REG_INT_EN_FD (1 << 5)
#define REG_INT_EN_SOUND (1 << 7)
#define REG_REG_INT_MASK 0x0f
/* Interrupt factor (pending) register */
#define SYSTEM_INT_FACTOR 0x1c
#define REG_INT_STATUS_MODE (1 << 0)
#define REG_INT_STATUS_ZOOM (1 << 2)
#define REG_INT_STATUS_CAPTURE (1 << 3)
#define REG_INT_STATUS_FRAMESYNC (1 << 4)
#define REG_INT_STATUS_FD (1 << 5)
#define REG_INT_STATUS_SOUND (1 << 7)
/* category 1_PARAMETER mode */
#define PARAM_MON_SIZE 0x01
#define PARAM_MON_FPS 0x02
#define REG_FPS_30 0x02
#define PARAM_OUTPUT_IF_SEL 0x00
#define REG_OUTPUT_INTERFACE_MIPI 0x02
#define PARAM_MIPI_OUT_LANE_NUM 0x3e
#define REG_OUTPUT_MIPI_4LANE 0x04
#define PARAM_VDIS 0x00
#define SHOT_MODE 0x0e
#define MPO_FORMAT_META 0x0e
#define MONITOR_TYPE 0x6e
#define MOVIE_MODE 0x3c
#define MONITOR_PREVIEW 0
#define MONITOR_BURST 1
#define MONITOR_VIDEO 3
/* Category 2_MONITOR mode */
#define MONITOR_ZOOM 0x01
#define ZOOM_POS_MIN 0x01
#define ZOOM_POS_MAX 0x1f /* 31 */
#define MONITOR_CFIXR 0x0a
#define MONITOR_CFIXB 0x09
#define MONITOR_COLOR_EFFECT 0x0b
#define MONITOR_ZSL_MODE_STATUS 0x5f
#define REG_NORMAL_MONITOR 0x00
#define REG_ZSL_MONITOR 0x01
#define ZSL_MODE 0x6e
#define ZSL_INTERVAL 0x6f
#define COLOR_EFFECT_NONE 0x00
#define COLOR_EFFECT_ON 0x01
#define COLOR_EFFECT_NEGATIVE 0x02
#define COLOR_EFFECT_WARM 0x04
#define COLOR_EFFECT_COLD 0x05
#define COLOR_EFFECT_WASHED 0x06
#define COLOR_CFIXB_SEPIA 0xd8
#define COLOR_CFIXR_SEPIA 0x18
#define COLOR_CFIXB_BW 0x00
#define COLOR_CFIXR_BW 0x00
#define COLOR_CFIXB_RED 0x00
#define COLOR_CFIXR_RED 0x6b
#define COLOR_CFIXB_GREEN 0xe0
#define COLOR_CFIXR_GREEN 0xe0
#define COLOR_CFIXB_BLUE 0x40
#define COLOR_CFIXR_BLUE 0x00
#define COLOR_CFIXB_PINK 0x20
#define COLOR_CFIXR_PINK 0x40
#define COLOR_CFIXB_YELLOW 0x80
#define COLOR_CFIXR_YELLOW 0x00
#define COLOR_CFIXB_PURPLE 0x50
#define COLOR_CFIXR_PURPLE 0x20
#define COLOR_CFIXB_ANTIQUE 0xd0
#define COLOR_CFIXR_ANTIQUE 0x30
/* ZSL MODE */
#define CAPTURE_MODE 0x00
#define CAP_MODE_INFINITY_ZSL 0x0f
#define CAP_MODE_PANORAMA 0x00
/* In other type firmware movie mode is 0x00 */
#define CAP_MODE_MOVIE 0x00
#define ZSL_TRANSFER_NO 0x16
#define CAP_NV12_MODE 0x0a
#define START_DUAL_STATUS 0x1f
#define START_DUAL_CAPTURE 0x05
#define DUAL_CAPTURE_SINGLE_CAPTURE_START 0x01
#define DUAL_CAPTURE_HDR_CAPTURE_START 0x01
#define DUAL_CAPTURE_BURST_CAPTURE_START 0x04
#define DUAL_CAPTURE_BURST_CAPTURE_STOP 0x05
#define DUAL_CAPTURE_ZSL_CAPTURE_START 0x07
#define DUAL_CAPTURE_LLS_CAPTURE_START 0x08
#define DUAL_STATUS_IDLE 0x0
#define DUAL_STATUS_CAPTURE 0x1
#define DUAL_STATUS_AF_WORKING 0x2
/* Output format selection between YUV422 and NV12/NV21 */
#define OUTPUT_FMT_SELECT 0x05
#define OUTPUT_FMT_SELECT_YUV422 0x00
#define OUTPUT_FMT_SELECT_NV12NV21 0x01
/* Choose between NV12 and NV21 */
#define CHOOSE_NV12NV21_FMT 0x27
#define CHOOSE_NV12NV21_FMT_NV12 0x00
#define CHOOSE_NV12NV21_FMT_NV21 0x01
/* Enable/Disable metadata in monitor mode */
#define MON_METADATA_SUPPORT_CTRL 0x06
#define MON_METADATA_SUPPORT_CTRL_EN 0x01
#define MON_METADATA_SUPPORT_CTRL_DIS 0x00
/* MPO format */
#define MON_MPO_FMT_CTRL 0x07
#define MON_MPO_FMT_NV21 0x02
#define MON_MPO_FMT_YUV422 0x03
#define MON_MPO_FMT_YUV420 0x06
/* Category 3_Auto Exposure */
#define AE_LOCK 0x00
#define REG_AE_UNLOCK 0x00
#define REG_AE_LOCK 0x01
#define AE_MODE 0x01
#define REG_AE_OFF 0x00
#define AE_TARGET 0x02
#define AE_SPEED 0x03
#define AE_ISOMODE 0x05
#define AE_FLICKER 0x06
#define AE_FLICKER_AUTO 0x07
#define AE_EV_BIAS 0x09
#define AE_AUTO_BRACKET_EV1 0x20
#define AE_AUTO_BRACKET_EV2 0x21
#define REG_AE_ISOMODE_AUTO 0x00
#define REG_AE_ISOMODE_ISO100 0x01
#define REG_AE_ISOMODE_ISO200 0x02
#define REG_AE_ISOMODE_ISO400 0x03
#define REG_AE_ISOMODE_ISO800 0x04
#define REG_AE_ISOMODE_ISO1600 0x05
/* Category 6_White Balance */
#define AWB_MODE 0x02
#define REG_AWB_AUTO 0x01
#define REG_AWB_MANUAL 0x02
#define AWB_PRESET 0x03
#define REG_AWB_PROHIBITION 0x00
#define REG_AWB_INCANDESCENT 0x01
#define REG_AWB_FLUORESCENT_H 0x02
#define REG_AWB_FLUORESCENT_L 0x03
#define REG_AWB_DAYLIGHT 0x04
#define REG_AWB_CLOUDY 0x05
#define REG_AWB_SHADE 0x06
#define REG_AWB_HORIZON 0x07
#define REG_AWB_LEDLIGHT 0x09
/* Category 7_EXIF */
#define EXIF_INFO_EXPTIME_NU 0x00
#define EXIF_INFO_EXPTIME_DE 0x04
#define EXIF_INFO_TV_NU 0x08
#define EXIF_INFO_TV_DE 0x0c
#define EXIF_INFO_AV_NU 0x10
#define EXIF_INFO_AV_DE 0x14
#define EXIF_INFO_BV_NU 0x18
#define EXIF_INFO_BV_DE 0x1c
#define EXIF_INFO_EBV_NU 0x20
#define EXIF_INFO_EBV_DE 0x24
#define EXIF_INFO_ISO 0x28
#define EXIF_INFO_FLASH 0x2a
#define EXIF_INFO_SDR 0x2c
#define EXIF_INFO_QVAL 0x2e
/* Category A_Lens Parameter */
#define AF_MODE 0x01
#define AF_NORMAL 0x00
#define AF_MACRO 0x01
#define AF_TOUCH 0x02
#define AF_PREVIEW_CAF 0x03
#define AF_MOVIE_CAF 0x04
#define AF_FACE_CAF 0x05
#define AF_TOUCH_MACRO 0x06
#define AF_TOUCH_CAF 0x07
#define AF_EXECUTION 0x02
#define AF_STOP 0x00
#define AF_SEARCH 0x01
#define AF_PAN_FOCUSING 0x02
#define AF_RESULT 0x03
#define CAF_STATUS_RESTART_CHECK 0x01
#define CAF_STATUS_FOCUSING 0x02
#define CAF_STATUS_SUCCESS 0x03
#define CAF_STATUS_FAIL 0x04
#define AF_STATUS_INVALID 0x10
#define AF_STATUS_FOCUSING 0x20
#define AF_STATUS_SUCCESS 0x30
#define AF_STATUS_FAIL 0x40
#define AF_TOUCH_POSX 0X30
#define AF_TOUCH_POSY 0X32
/* Category B_CAPTURE Parameter */
#define CAPP_YUVOUT_MAIN 0x00
#define REG_YUV422 0x00
#define REG_BAYER10 0x07
#define REG_BAYER8 0x08
#define REG_JPEG 0x01
#define CAPP_MAIN_IMAGE_SIZE 0x01
#define CAPP_JPEG_SIZE_MAX 0x0f
#define CAPP_JPEG_RATIO 0x17
#define CAPP_JPEG_DUAL_RATIO 0x18
/* Category C_CAPTURE Control */
#define CAPC_MODE 0x00
#define REG_CAP_NONE 0x00
#define REG_CAP_ANTI_SHAKE 0x02
#define CAPC_SEL_FRAME_MAIN 0x06
#define CAPC_TRANSFER_START 0x09
#define REG_CAP_START_MAIN 0x01
/* Category D LED Flash Control */
#define FLASH_MODE 0xB6
#define FLASH_MODE_OFF 0x00
#define FLASH_MODE_ON 0X01
#define FLASH_MODE_AUTO 0X02
#define LED_TORCH 0x29
#define LED_TORCH_OFF 0x00
#define LED_TORCH_ON 0x01
#define LOG_ADD_SHOW 0x06
#define LOG_ADD_SHOW_INIT_VALUE 0x00
#define LOG_STR_LEN 0x07
#define LOG_STR_ADD3 0x08
#define LOG_STR_ADD2 0x09
#define LOG_STR_ADD1 0x0A
#define LOG_STR_ADD0 0x0B
#define LOG_SEL1 0x0C
#define LOG_SEL0 0x0D
#define LOG_ACT 0x0E
#define LOG_ACT_ENABLE 0x01
#define LOG_ACT_DISABLE 0x02
#define LOG_ACT_OUTPUT_STR 0x03
#define LOG_ACT_CLEAR 0x04
#define LOG_MODE 0x0F
#define LOG_STANDARD_MODE 0x00
#define LOG_ANALYZE_MODE0 0x01
#define LOG_ANALYZE_MODE1 0x02
#define LOG_ANALYZE_MODE2 0x03
#define LOG_TRACE_MODE 0x04
#define LOG_DATA_LEN1 0x14
#define LOG_DATA_LEN0 0x15
#define I2C_MEM_READ_SIZE 128
#define MAX_LOG_STR_LEN 0xFF
#define MIN_LOG_STR_LEN 0x00
#define MAX_LOG_STR_LEN_LOG2 0xFFFF
#define MIN_LOG_STR_LEN_LOG2 0x0000
#define MAX_MEM_DUMP_NUM 10000
#define MAX_MEM_DUMP_NUM_LOG3 20000
/* Category D Test */
#define TEST_PATTERN_SENSOR 0x1d
/* Category F_Flash */
#define REG_FLASH_ADD 0x00
#define REG_FLASH_BYTE 0x04
#define REG_FLASH_ERASE 0x06
#define REG_FLASH_WRITE 0x07
#define REG_FLASH_CHECK 0x09
#define REG_FLASH_SUM 0x0a
#define REG_CAM_START_ADD 0x0c
#define REG_CAM_START 0x12
#define REG_DATA_RAM_ADDR 0x14
#define REG_DATA_TRANS_SIZE 0x18
#define REG_PLL_VALUES 0x1c /* 2 dividers, 2 multipliers */
#define REG_SDRAM_CFG 0x48
#define REG_RAM_START 0x4a
#define REG_SIO_MODE 0x4b
#define REG_FW_READ 0x57
#define REG_CHECK_SUM_SIZE 0x5c
/* Shot modes (cat 0x01 byte 0x0e) */
#define SHOT_MODE_AUTO 0x01
#define SHOT_MODE_BEAUTY_FACE 0X02
#define SHOT_MODE_BEST_PHOTO 0X03
#define SHOT_MODE_DRAMA 0X04
#define SHOT_MODE_BEST_FACE 0X05
#define SHOT_MODE_ERASER 0X06
#define SHOT_MODE_PANORAMA 0x07
#define SHOT_MODE_RICH_TONE_HDR 0X09
#define SHOT_MODE_NIGHT 0X0A
#define SHOT_MODE_SOUND_SHOT 0X0B
#define SHOT_MODE_ANIMATED_PHOTO 0X0F
#define SHOT_MODE_SPORTS 0X11
/* Still capture modes for NV12 */
#define REG_CAP_NV12_MODE 0x0a
#define NORMAL_CAPTURE 0x00
#define HDR_CAPTURE 0x02
#define LLS_CAPTURE 0x04
#define RAW_CAPTURE 0x10
#define PREVIEW_IN_NV12_MODE 0x02
#define REG_RAM_START_SRAM 0x01
#define REG_RAM_START_SDRAM 0x02
#define REG_FLASH_WRITE_START_PRG 0x01
#define REG_FLASH_ERASE_SECTOR_ERASE 0x01
#define REG_FLASH_ERASE_CHIP_ERASE 0x02
#define REG_FLASH_ERASE_BLOCK64k_ERASE 0x04
#define REG_FLASH_ERASE_BLOCK32k_ERASE 0x08
#define REG_FW_READ_CMD_READ 0x01
#define REG_FW_READ_CMD_NONE 0x00
#define REG_SIO_MODE_RISING_LATCH 0x4c
#define REG_SIO_MODE_FALLING_LATCH 0x44
/* Starts internal ARM core, 1st command to be sent to ISP */
#define FLASH_CAM_START REG_CAM_START
/* Internal modes of M10MO */
enum M10MO_MODES {
M10MO_NO_MODE_REQUEST,
M10MO_POWERED_OFF,
M10MO_POWERING_ON,
M10MO_FLASH_WRITE_MODE,
M10MO_PARAM_SETTING_MODE,
M10MO_PARAMETER_MODE,
M10MO_MONITOR_MODE,
M10MO_MONITOR_MODE_ZSL,
M10MO_MONITOR_MODE_PANORAMA,
M10MO_SINGLE_CAPTURE_MODE,
M10MO_BURST_CAPTURE_MODE,
M10MO_MONITOR_MODE_HIGH_SPEED
};
/* Internal modes of M10MO */
enum M10MO_CAPTURE_MODES {
M10MO_CAPTURE_MODE_ZSL_NORMAL = 0,
M10MO_CAPTURE_MODE_ZSL_HDR,
M10MO_CAPTURE_MODE_ZSL_LLS,
M10MO_CAPTURE_MODE_ZSL_BURST,
M10MO_CAPTURE_MODE_ZSL_RAW
};
#define M10MO_MODE_PREVIEW_INDEX 0
#define M10MO_MODE_CAPTURE_INDEX 1
#define M10MO_MODE_VIDEO_INDEX 2
#define M10MO_ZSL_JPEG_VIRTUAL_CHANNEL 1
#define M10MO_ZSL_NV12_VIRTUAL_CHANNEL 0
#define M10MO_NORMAL_FPS 30
#define M10MO_HIGH_SPEED_FPS 60
/* FIXME It should be in tables */
#define MON_SIZE_FHD_60FPS 0x2b
extern const struct m10mo_resolution *resolutions[][3];
extern const ssize_t resolutions_sizes[][3];
struct M10MO_AF_Parameters {
u8 af_mode;
u8 af_normal;
u8 af_macro;
u8 af_touch;
u8 af_preview_caf;
u8 af_movie_caf;
u8 af_face_caf;
u8 af_touch_macro;
u8 af_touch_caf;
u8 af_execution;
u8 af_stop;
u8 af_search;
u8 af_pan_focusing;
u8 af_result;
u8 caf_status_restart_check;
u8 caf_status_focusing;
u8 caf_status_success;
u8 caf_status_fail;
u8 af_status_invalid;
u8 af_status_focusing;
u8 af_status_success;
u8 af_status_fail;
u8 af_touch_posx;
u8 af_touch_posy;
};
extern const struct M10MO_AF_Parameters m10m0_af_parameters[];
#endif /* M10MO_H */