![]() |
|
|||
0001 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ 0002 /* 0003 * CCS static data in-memory data structure definitions 0004 * 0005 * Copyright 2019--2020 Intel Corporation 0006 */ 0007 0008 #ifndef __CCS_DATA_H__ 0009 #define __CCS_DATA_H__ 0010 0011 #include <linux/types.h> 0012 0013 struct device; 0014 0015 /** 0016 * struct ccs_data_block_version - CCS static data version 0017 * @version_major: Major version number 0018 * @version_minor: Minor version number 0019 * @date_year: Year 0020 * @date_month: Month 0021 * @date_day: Day 0022 */ 0023 struct ccs_data_block_version { 0024 u16 version_major; 0025 u16 version_minor; 0026 u16 date_year; 0027 u8 date_month; 0028 u8 date_day; 0029 }; 0030 0031 /** 0032 * struct ccs_reg - CCS register value 0033 * @addr: The 16-bit address of the register 0034 * @len: Length of the data 0035 * @value: Data 0036 */ 0037 struct ccs_reg { 0038 u16 addr; 0039 u16 len; 0040 u8 *value; 0041 }; 0042 0043 /** 0044 * struct ccs_if_rule - CCS static data if rule 0045 * @addr: Register address 0046 * @value: Register value 0047 * @mask: Value applied to both actual register value and @value 0048 */ 0049 struct ccs_if_rule { 0050 u16 addr; 0051 u8 value; 0052 u8 mask; 0053 }; 0054 0055 /** 0056 * struct ccs_frame_format_desc - CCS frame format descriptor 0057 * @pixelcode: The pixelcode; CCS_DATA_BLOCK_FFD_PIXELCODE_* 0058 * @value: Value related to the pixelcode 0059 */ 0060 struct ccs_frame_format_desc { 0061 u8 pixelcode; 0062 u16 value; 0063 }; 0064 0065 /** 0066 * struct ccs_frame_format_descs - A series of CCS frame format descriptors 0067 * @num_column_descs: Number of column descriptors 0068 * @num_row_descs: Number of row descriptors 0069 * @column_descs: Column descriptors 0070 * @row_descs: Row descriptors 0071 */ 0072 struct ccs_frame_format_descs { 0073 u8 num_column_descs; 0074 u8 num_row_descs; 0075 struct ccs_frame_format_desc *column_descs; 0076 struct ccs_frame_format_desc *row_descs; 0077 }; 0078 0079 /** 0080 * struct ccs_pdaf_readout - CCS PDAF data readout descriptor 0081 * @pdaf_readout_info_order: PDAF readout order 0082 * @ffd: Frame format of PDAF data 0083 */ 0084 struct ccs_pdaf_readout { 0085 u8 pdaf_readout_info_order; 0086 struct ccs_frame_format_descs *ffd; 0087 }; 0088 0089 /** 0090 * struct ccs_rule - A CCS static data rule 0091 * @num_if_rules: Number of if rules 0092 * @if_rules: If rules 0093 * @num_read_only_regs: Number of read-only registers 0094 * @read_only_regs: Read-only registers 0095 * @num_manufacturer_regs: Number of manufacturer-specific registers 0096 * @manufacturer_regs: Manufacturer-specific registers 0097 * @frame_format: Frame format 0098 * @pdaf_readout: PDAF readout 0099 */ 0100 struct ccs_rule { 0101 size_t num_if_rules; 0102 struct ccs_if_rule *if_rules; 0103 size_t num_read_only_regs; 0104 struct ccs_reg *read_only_regs; 0105 size_t num_manufacturer_regs; 0106 struct ccs_reg *manufacturer_regs; 0107 struct ccs_frame_format_descs *frame_format; 0108 struct ccs_pdaf_readout *pdaf_readout; 0109 }; 0110 0111 /** 0112 * struct ccs_pdaf_pix_loc_block_desc - PDAF pixel location block descriptor 0113 * @block_type_id: Block type identifier, from 0 to n 0114 * @repeat_x: Number of times this block is repeated to right 0115 */ 0116 struct ccs_pdaf_pix_loc_block_desc { 0117 u8 block_type_id; 0118 u16 repeat_x; 0119 }; 0120 0121 /** 0122 * struct ccs_pdaf_pix_loc_block_desc_group - PDAF pixel location block 0123 * descriptor group 0124 * @repeat_y: Number of times the group is repeated down 0125 * @num_block_descs: Number of block descriptors in @block_descs 0126 * @block_descs: Block descriptors 0127 */ 0128 struct ccs_pdaf_pix_loc_block_desc_group { 0129 u8 repeat_y; 0130 u16 num_block_descs; 0131 struct ccs_pdaf_pix_loc_block_desc *block_descs; 0132 }; 0133 0134 /** 0135 * struct ccs_pdaf_pix_loc_pixel_desc - PDAF pixel location block descriptor 0136 * @pixel_type: Type of the pixel; CCS_DATA_PDAF_PIXEL_TYPE_* 0137 * @small_offset_x: offset X coordinate 0138 * @small_offset_y: offset Y coordinate 0139 */ 0140 struct ccs_pdaf_pix_loc_pixel_desc { 0141 u8 pixel_type; 0142 u8 small_offset_x; 0143 u8 small_offset_y; 0144 }; 0145 0146 /** 0147 * struct ccs_pdaf_pix_loc_pixel_desc_group - PDAF pixel location pixel 0148 * descriptor group 0149 * @num_descs: Number of descriptors in @descs 0150 * @descs: PDAF pixel location pixel descriptors 0151 */ 0152 struct ccs_pdaf_pix_loc_pixel_desc_group { 0153 u8 num_descs; 0154 struct ccs_pdaf_pix_loc_pixel_desc *descs; 0155 }; 0156 0157 /** 0158 * struct ccs_pdaf_pix_loc - PDAF pixel locations 0159 * @main_offset_x: Start X coordinate of PDAF pixel blocks 0160 * @main_offset_y: Start Y coordinate of PDAF pixel blocks 0161 * @global_pdaf_type: PDAF pattern type 0162 * @block_width: Width of a block in pixels 0163 * @block_height: Heigth of a block in pixels 0164 * @num_block_desc_groups: Number of block descriptor groups 0165 * @block_desc_groups: Block descriptor groups 0166 * @num_pixel_desc_grups: Number of pixel descriptor groups 0167 * @pixel_desc_groups: Pixel descriptor groups 0168 */ 0169 struct ccs_pdaf_pix_loc { 0170 u16 main_offset_x; 0171 u16 main_offset_y; 0172 u8 global_pdaf_type; 0173 u8 block_width; 0174 u8 block_height; 0175 u16 num_block_desc_groups; 0176 struct ccs_pdaf_pix_loc_block_desc_group *block_desc_groups; 0177 u8 num_pixel_desc_grups; 0178 struct ccs_pdaf_pix_loc_pixel_desc_group *pixel_desc_groups; 0179 }; 0180 0181 /** 0182 * struct ccs_data_container - In-memory CCS static data 0183 * @version: CCS static data version 0184 * @num_sensor_read_only_regs: Number of the read-only registers for the sensor 0185 * @sensor_read_only_regs: Read-only registers for the sensor 0186 * @num_sensor_manufacturer_regs: Number of the manufacturer-specific registers 0187 * for the sensor 0188 * @sensor_manufacturer_regs: Manufacturer-specific registers for the sensor 0189 * @num_sensor_rules: Number of rules for the sensor 0190 * @sensor_rules: Rules for the sensor 0191 * @num_module_read_only_regs: Number of the read-only registers for the module 0192 * @module_read_only_regs: Read-only registers for the module 0193 * @num_module_manufacturer_regs: Number of the manufacturer-specific registers 0194 * for the module 0195 * @module_manufacturer_regs: Manufacturer-specific registers for the module 0196 * @num_module_rules: Number of rules for the module 0197 * @module_rules: Rules for the module 0198 * @sensor_pdaf: PDAF data for the sensor 0199 * @module_pdaf: PDAF data for the module 0200 * @license_length: Lenght of the license data 0201 * @license: License data 0202 * @end: Whether or not there's an end block 0203 * @backing: Raw data, pointed to from elsewhere so keep it around 0204 */ 0205 struct ccs_data_container { 0206 struct ccs_data_block_version *version; 0207 size_t num_sensor_read_only_regs; 0208 struct ccs_reg *sensor_read_only_regs; 0209 size_t num_sensor_manufacturer_regs; 0210 struct ccs_reg *sensor_manufacturer_regs; 0211 size_t num_sensor_rules; 0212 struct ccs_rule *sensor_rules; 0213 size_t num_module_read_only_regs; 0214 struct ccs_reg *module_read_only_regs; 0215 size_t num_module_manufacturer_regs; 0216 struct ccs_reg *module_manufacturer_regs; 0217 size_t num_module_rules; 0218 struct ccs_rule *module_rules; 0219 struct ccs_pdaf_pix_loc *sensor_pdaf; 0220 struct ccs_pdaf_pix_loc *module_pdaf; 0221 size_t license_length; 0222 char *license; 0223 bool end; 0224 void *backing; 0225 }; 0226 0227 int ccs_data_parse(struct ccs_data_container *ccsdata, const void *data, 0228 size_t len, struct device *dev, bool verbose); 0229 0230 #endif /* __CCS_DATA_H__ */
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.1.0 LXR engine. The LXR team |
![]() ![]() |