blob: 10b07ec48ba1f712ea0f18b18d4a1ec166252af2 [file] [log] [blame]
/* Copyright (c) 2017, The Linux Foundation. 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 and
* only 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 _CAM_SENSOR_I2C_H_
#define _CAM_SENSOR_I2C_H_
#include <linux/delay.h>
#include <media/v4l2-subdev.h>
#include <media/cam_sensor.h>
#include <media/cam_sensor.h>
#include "cam_cci_dev.h"
#include "cam_sensor_io.h"
#define I2C_POLL_TIME_MS 5
#define MAX_POLL_DELAY_MS 100
#define I2C_COMPARE_MATCH 0
#define I2C_COMPARE_MISMATCH 1
#define I2C_REG_DATA_MAX (8*1024)
/**
* @client: CCI client structure
* @data: I2C data
* @addr_type: I2c address type
* @data_type: I2C data type
*
* This API handles CCI read
*/
int32_t cam_cci_i2c_read(struct cam_sensor_cci_client *client,
uint32_t addr, uint32_t *data,
enum camera_sensor_i2c_type addr_type,
enum camera_sensor_i2c_type data_type);
/**
* @client: CCI client structure
* @addr: I2c address
* @data: I2C data
* @addr_type: I2c address type
* @num_byte: number of bytes
*
* This API handles CCI sequential read
*/
int32_t cam_camera_cci_i2c_read_seq(struct cam_sensor_cci_client *client,
uint32_t addr, uint8_t *data,
enum camera_sensor_i2c_type addr_type,
uint32_t num_byte);
/**
* @client: CCI client structure
* @write_setting: I2C register setting
*
* This API handles CCI random write
*/
int32_t cam_cci_i2c_write_table(
struct camera_io_master *client,
struct cam_sensor_i2c_reg_setting *write_setting);
/**
* @client: CCI client structure
* @write_setting: I2C register setting
* @cam_sensor_i2c_write_flag: burst or seq write
*
* This API handles CCI continuous write
*/
int32_t cam_cci_i2c_write_continuous_table(
struct camera_io_master *client,
struct cam_sensor_i2c_reg_setting *write_setting,
uint8_t cam_sensor_i2c_write_flag);
/**
* @cci_client: CCI client structure
* @cci_cmd: CCI command type
*
* Does I2C call to I2C functionalities
*/
int32_t cam_sensor_cci_i2c_util(struct cam_sensor_cci_client *cci_client,
uint16_t cci_cmd);
/**
* @client: CCI client structure
* @addr: I2C address
* @data: I2C data
* @data_mask: I2C data mask
* @data_type: I2C data type
* @addr_type: I2C addr type
* @delay_ms: Delay in milli seconds
*
* This API implements CCI based I2C poll
*/
int32_t cam_cci_i2c_poll(struct cam_sensor_cci_client *client,
uint32_t addr, uint16_t data, uint16_t data_mask,
enum camera_sensor_i2c_type data_type,
enum camera_sensor_i2c_type addr_type,
uint32_t delay_ms);
/**
* cam_qup_i2c_read : QUP based i2c read
* @client : QUP I2C client structure
* @data : I2C data
* @addr_type : I2c address type
* @data_type : I2C data type
*
* This API handles QUP I2C read
*/
int32_t cam_qup_i2c_read(struct i2c_client *client,
uint32_t addr, uint32_t *data,
enum camera_sensor_i2c_type addr_type,
enum camera_sensor_i2c_type data_type);
/**
* cam_qup_i2c_read_seq : QUP based I2C sequential read
* @client : QUP I2C client structure
* @data : I2C data
* @addr_type : I2c address type
* @num_bytes : number of bytes to read
* This API handles QUP I2C Sequential read
*/
int32_t cam_qup_i2c_read_seq(struct i2c_client *client,
uint32_t addr, uint8_t *data,
enum camera_sensor_i2c_type addr_type,
uint32_t num_byte);
/**
* cam_qup_i2c_poll : QUP based I2C poll operation
* @client : QUP I2C client structure
* @addr : I2C address
* @data : I2C data
* @data_mask : I2C data mask
* @data_type : I2C data type
* @addr_type : I2C addr type
* @delay_ms : Delay in milli seconds
*
* This API implements QUP based I2C poll
*/
int32_t cam_qup_i2c_poll(struct i2c_client *client,
uint32_t addr, uint16_t data, uint16_t data_mask,
enum camera_sensor_i2c_type addr_type,
enum camera_sensor_i2c_type data_type,
uint32_t delay_ms);
/**
* cam_qup_i2c_write_table : QUP based I2C write random
* @client : QUP I2C client structure
* @write_setting : I2C register settings
*
* This API handles QUP I2C random write
*/
int32_t cam_qup_i2c_write_table(
struct camera_io_master *client,
struct cam_sensor_i2c_reg_setting *write_setting);
#endif /*_CAM_SENSOR_I2C_H*/