blob: c5e78026e9fe0afd6fee957f13e60fb7809ae791 [file] [log] [blame]
/*
* drivers/amlogic/media/camera/common/config_parser.h
*
* Copyright (C) 2017 Amlogic, Inc. 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 as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* 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 CONFIG_PARSER
#define CONFIG_PARSER
#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/mm.h>
#include <linux/i2c.h>
#include <linux/string.h>
#include <linux/amlogic/media/frame_provider/tvin/tvin_v4l2.h>
#define EFFECT_ITEM_MAX 16
#define AET_ITEM_MAX 32
#define HW_ITEM_MAX 16
#define WB_ITEM_MAX 10
#define CAPTURE_ITEM_MAX 9
#define NR_ITEM_MAX 5
#define PEAKING_ITEM_MAX 5
#define LENS_ITEM_MAX 5
#define SCENE_ITEM_MAX 1
#define EFFECT_MAX 18
#define HW_MAX 64
#define WB_MAX 2
#define GAMMA_MAX 257
#define SCENE_MAX 281
#define WB_SENSOR_MAX 4
#define CAPTURE_MAX 8
#define LENS_MAX 1027
#define WAVE_MAX 12
#define CM_MAX 188
#define NR_MAX 15
#define PEAKING_MAX 35
#define AE_LEN 119
#define AWB_LEN 120
#define AF_LEN 42
#define BUFFER_SIZE 1024
enum error_code {
NO_MEM = 1,
READ_ERROR,
WRONG_FORMAT,
CHECK_LEN_FAILED,
CHECK_FAILED,
HEAD_FAILED,
BODY_HEAD_FAILED,
BODY_ELEMENT_FAILED,
};
struct effect_type {
int num;
char name[40];
unsigned int export[EFFECT_MAX];
};
struct effect_struct {
int sum;
struct effect_type eff[EFFECT_ITEM_MAX];
};
struct hw_type {
int num;
char name[40];
int export[HW_MAX];
};
struct hw_struct {
int sum;
struct hw_type hw[HW_ITEM_MAX];
};
struct wb_type {
int num;
char name[40];
int export[2];
};
struct wb_struct {
int sum;
struct wb_type wb[WB_ITEM_MAX];
};
struct scene_type {
int num;
char name[40];
int export[SCENE_MAX];
};
struct scene_struct {
int sum;
struct scene_type scene[SCENE_ITEM_MAX];
};
struct capture_type {
int num;
char name[40];
int export[CAPTURE_ITEM_MAX];
};
struct capture_struct {
int sum;
struct capture_type capture[CAPTURE_MAX];
};
struct sensor_aet_s {
unsigned int exp;
unsigned int ag;
unsigned int vts;
unsigned int gain;
unsigned int fr;
};
/* sensor_aet_t */
struct sensor_aet_info_s {
unsigned int fmt_main_fr;
unsigned int fmt_capture; /* false: preview, true: capture */
unsigned int fmt_hactive;
unsigned int fmt_vactive;
unsigned int fmt_rated_fr;
unsigned int fmt_min_fr;
unsigned int tbl_max_step;
unsigned int tbl_rated_step;
unsigned int tbl_max_gain;
unsigned int tbl_min_gain;
unsigned int format_transfer_parameter;
};
/* sensor_aet_info_t */
struct aet_type {
int num;
char name[40];
struct sensor_aet_info_s *info;
struct sensor_aet_s *aet_table;
};
struct aet_struct {
int sum;
struct aet_type aet[AET_ITEM_MAX];
};
struct wave_struct {
int export[WAVE_MAX];
};
struct lens_type {
int num;
char name[40];
int export[LENS_MAX];
};
struct lens_struct {
int sum;
struct lens_type lens[LENS_ITEM_MAX];
};
struct gamma_struct {
unsigned int gamma_r[GAMMA_MAX];
unsigned int gamma_g[GAMMA_MAX];
unsigned int gamma_b[GAMMA_MAX];
};
struct wb_sensor_struct {
int export[WB_SENSOR_MAX];
};
struct version_struct {
char date[40];
char module[30];
char version[30];
};
struct cm_struct {
int export[CM_MAX];
};
struct nr_type {
int num;
char name[40];
int export[NR_MAX];
};
struct nr_struct {
int sum;
struct nr_type nr[NR_ITEM_MAX];
};
struct peaking_type {
int num;
char name[40];
int export[PEAKING_MAX];
};
struct peaking_struct {
int sum;
struct peaking_type peaking[PEAKING_ITEM_MAX];
};
struct configure_s {
struct effect_struct eff;
int effect_valid;
struct hw_struct hw;
int hw_valid;
struct aet_struct aet;
int aet_valid;
struct capture_struct capture;
int capture_valid;
struct scene_struct scene;
int scene_valid;
struct wb_struct wb;
int wb_valid;
struct wave_struct wave;
int wave_valid;
struct lens_struct lens;
int lens_valid;
struct gamma_struct gamma;
int gamma_valid;
struct wb_sensor_struct wb_sensor_data;
int wb_sensor_data_valid;
struct version_struct version;
int version_info_valid;
struct cm_struct cm;
int cm_valid;
struct nr_struct nr;
int nr_valid;
struct peaking_struct peaking;
int peaking_valid;
};
struct para_index_s {
unsigned int effect_index;
unsigned int scenes_index;
unsigned int wb_index;
unsigned int capture_index;
unsigned int nr_index;
unsigned int peaking_index;
unsigned int lens_index;
};
struct wb_pair_t {
enum camera_wb_flip_e wb;
char *name;
};
struct effect_pair_t {
enum camera_special_effect_e effect;
char *name;
};
struct sensor_dg_s {
unsigned short r;
unsigned short g;
unsigned short b;
unsigned short dg_default;
};
struct camera_priv_data_s {
struct sensor_aet_info_s
*sensor_aet_info; /* point to 1 of up to 16 aet information */
struct sensor_aet_s *sensor_aet_table;
unsigned int sensor_aet_step; /* current step of the current aet */
struct configure_s *configure;
};
int parse_config(const char *path, struct configure_s *cf);
int generate_para(struct cam_parameter_s *para, struct para_index_s pindex,
struct configure_s *cf);
void free_para(struct cam_parameter_s *para);
int update_fmt_para(int width, int height, struct cam_parameter_s *para,
struct para_index_s *pindex, struct configure_s *cf);
unsigned int get_aet_current_step(void *priv);
unsigned int get_aet_current_gain(void *pirv);
unsigned int get_aet_min_gain(void *priv);
unsigned int get_aet_max_gain(void *priv);
unsigned int get_aet_max_step(void *priv);
unsigned int get_aet_gain_by_step(void *priv, unsigned int new_step);
int my_i2c_put_byte(struct i2c_adapter *adapter, unsigned short i2c_addr,
unsigned short addr, unsigned char data);
int my_i2c_put_byte_add8(struct i2c_adapter *adapter, unsigned short i2c_addr,
char *buf, int len);
int my_i2c_get_byte(struct i2c_adapter *adapter, unsigned short i2c_addr,
unsigned short addr);
int my_i2c_get_word(struct i2c_adapter *adapter, unsigned short i2c_addr);
#endif