Lines Matching defs:aw_dev

24 static int aw_parse_bin_header(struct aw_device *aw_dev, struct aw_bin *bin);
26 static int aw_check_sum(struct aw_device *aw_dev, struct aw_bin *bin, int bin_num)
41 dev_dbg(aw_dev->dev, "%s -- check_sum = %p, check_sum = 0x%x, sum_data = 0x%x",
44 dev_err(aw_dev->dev, "%s. CheckSum Fail.bin_num=%d, CheckSum:0x%x, SumData:0x%x",
52 static int aw_check_data_version(struct aw_device *aw_dev, struct aw_bin *bin, int bin_num)
56 dev_err(aw_dev->dev, "aw_bin_parse Unrecognized this bin data version\n");
63 static int aw_check_register_num(struct aw_device *aw_dev, struct aw_bin *bin, int bin_num)
75 dev_dbg(aw_dev->dev, "%s,parse_register_num = 0x%x,check_register_num = 0x%x\n",
78 dev_err(aw_dev->dev, "%s parse_register_num = 0x%x,check_register_num = 0x%x\n",
90 static int aw_check_dsp_reg_num(struct aw_device *aw_dev, struct aw_bin *bin, int bin_num)
103 dev_dbg(aw_dev->dev, "%s bin_num = %d, parse_dsp_reg_num = 0x%x, check_dsp_reg_num = 0x%x",
106 dev_err(aw_dev->dev, "aw_bin_parse check dsp reg num error\n");
107 dev_err(aw_dev->dev, "%s parse_dsp_reg_num = 0x%x, check_dsp_reg_num = 0x%x",
121 static int aw_check_soc_app_num(struct aw_device *aw_dev, struct aw_bin *bin, int bin_num)
132 dev_dbg(aw_dev->dev, "%s bin_num = %d, parse_soc_app_num=0x%x, check_soc_app_num = 0x%x\n",
135 dev_err(aw_dev->dev, "%s parse_soc_app_num=0x%x, check_soc_app_num = 0x%x\n",
158 static int aw_parse_one_of_multi_bins(struct aw_device *aw_dev, unsigned int bin_num,
166 dev_err(aw_dev->dev, "bin_header_info size[%d] overflow file size[%d]\n",
186 return aw_parse_bin_header(aw_dev, bin);
189 static int aw_get_multi_bin_header(struct aw_device *aw_dev, struct aw_bin *bin)
202 dev_dbg(aw_dev->dev, "aw_bin_parse enter multi bin for is %d\n", i);
203 ret = aw_parse_one_of_multi_bins(aw_dev, bin_num, i, bin);
211 static int aw_parse_bin_header(struct aw_device *aw_dev, struct aw_bin *bin)
216 dev_err(aw_dev->dev, "bin_header_info size[%d] overflow file size[%d]\n",
222 dev_dbg(aw_dev->dev, "aw_bin_parse bin_data_type 0x%x\n", bin_data_type);
228 dev_dbg(aw_dev->dev, "%s bin->single_bin_parse_num is %d\n", __func__,
237 dev_dbg(aw_dev->dev, "%s bin->multi_bin_parse_num is %d\n", __func__,
239 return aw_get_multi_bin_header(aw_dev, bin);
241 dev_dbg(aw_dev->dev, "%s There is no corresponding type\n", __func__);
246 static int aw_check_bin_header_version(struct aw_device *aw_dev, struct aw_bin *bin)
251 dev_dbg(aw_dev->dev, "aw_bin_parse header_version 0x%x\n", header_version);
255 return aw_parse_bin_header(aw_dev, bin);
257 dev_err(aw_dev->dev, "aw_bin_parse Unrecognized this bin header version\n");
262 static int aw_parsing_bin_file(struct aw_device *aw_dev, struct aw_bin *bin)
268 dev_err(aw_dev->dev, "aw_bin_parse bin is NULL\n");
276 ret = aw_check_bin_header_version(aw_dev, bin);
278 dev_err(aw_dev->dev, "aw_bin_parse check bin header version error\n");
283 ret = aw_check_sum(aw_dev, bin, i);
285 dev_err(aw_dev->dev, "aw_bin_parse check sum data error\n");
288 ret = aw_check_data_version(aw_dev, bin, i);
290 dev_err(aw_dev->dev, "aw_bin_parse check data version error\n");
296 ret = aw_check_register_num(aw_dev, bin, i);
299 ret = aw_check_dsp_reg_num(aw_dev, bin, i);
302 ret = aw_check_soc_app_num(aw_dev, bin, i);
361 static int aw_dev_prof_parse_multi_bin(struct aw_device *aw_dev, unsigned char *data,
368 aw_bin = devm_kzalloc(aw_dev->dev, data_len + sizeof(struct aw_bin), GFP_KERNEL);
375 ret = aw_parsing_bin_file(aw_dev, aw_bin);
377 dev_err(aw_dev->dev, "parse bin failed");
420 dev_dbg(aw_dev->dev, "bin_data_type not found");
428 devm_kfree(aw_dev->dev, aw_bin);
432 static int aw_dev_parse_reg_bin_with_hdr(struct aw_device *aw_dev,
438 aw_bin = devm_kzalloc(aw_dev->dev, data_len + sizeof(*aw_bin), GFP_KERNEL);
445 ret = aw_parsing_bin_file(aw_dev, aw_bin);
447 dev_err(aw_dev->dev, "parse bin failed");
453 dev_err(aw_dev->dev, "bin num or type error");
464 devm_kfree(aw_dev->dev, aw_bin);
470 devm_kfree(aw_dev->dev, aw_bin);
475 static int aw_dev_parse_data_by_sec_type(struct aw_device *aw_dev, struct aw_cfg_hdr *cfg_hdr,
491 aw_dev, (u8 *)cfg_hdr + cfg_dde->data_offset,
494 return aw_dev_parse_reg_bin_with_hdr(aw_dev, (u8 *)cfg_hdr + cfg_dde->data_offset,
497 dev_err(aw_dev->dev, "%s cfg_dde->data_type = %d\n", __func__, cfg_dde->data_type);
504 static int aw_dev_parse_dev_type(struct aw_device *aw_dev,
513 if ((aw_dev->i2c->adapter->nr == cfg_dde[i].dev_bus) &&
514 (aw_dev->i2c->addr == cfg_dde[i].dev_addr) &&
518 dev_err(aw_dev->dev, "dev_profile [%d] overflow",
522 aw_dev->prof_data_type = cfg_dde[i].data_type;
523 ret = aw_dev_parse_data_by_sec_type(aw_dev, prof_hdr, &cfg_dde[i],
526 dev_err(aw_dev->dev, "parse failed");
534 dev_dbg(aw_dev->dev, "get dev type num is %d, please use default", sec_num);
541 static int aw_dev_parse_dev_default_type(struct aw_device *aw_dev,
550 if ((aw_dev->channel == cfg_dde[i].dev_index) &&
554 dev_err(aw_dev->dev, "dev_profile [%d] overflow",
558 aw_dev->prof_data_type = cfg_dde[i].data_type;
559 ret = aw_dev_parse_data_by_sec_type(aw_dev, prof_hdr, &cfg_dde[i],
562 dev_err(aw_dev->dev, "parse failed");
570 dev_err(aw_dev->dev, "get dev default type failed, get num[%d]", sec_num);
577 static int aw_dev_cfg_get_reg_valid_prof(struct aw_device *aw_dev,
581 struct aw_prof_info *prof_info = &aw_dev->prof_info;
590 dev_dbg(aw_dev->dev, "get valid profile:%d", aw_dev->prof_info.count);
593 dev_err(aw_dev->dev, "no profile data");
597 prof_info->prof_desc = devm_kcalloc(aw_dev->dev,
606 dev_err(aw_dev->dev, "overflow count[%d]",
619 static int aw_dev_cfg_get_multiple_valid_prof(struct aw_device *aw_dev,
623 struct aw_prof_info *prof_info = &aw_dev->prof_info;
641 dev_dbg(aw_dev->dev, "get valid profile:%d", aw_dev->prof_info.count);
644 dev_err(aw_dev->dev, "no profile data");
648 prof_info->prof_desc = devm_kcalloc(aw_dev->dev,
664 dev_err(aw_dev->dev, "overflow count[%d]",
678 static int aw_dev_load_cfg_by_hdr(struct aw_device *aw_dev,
684 all_prof_info = devm_kzalloc(aw_dev->dev, sizeof(struct aw_all_prof_info), GFP_KERNEL);
688 ret = aw_dev_parse_dev_type(aw_dev, prof_hdr, all_prof_info);
692 dev_dbg(aw_dev->dev, "get dev type num is 0, parse default dev");
693 ret = aw_dev_parse_dev_default_type(aw_dev, prof_hdr, all_prof_info);
698 switch (aw_dev->prof_data_type) {
700 ret = aw_dev_cfg_get_multiple_valid_prof(aw_dev, all_prof_info);
703 ret = aw_dev_cfg_get_reg_valid_prof(aw_dev, all_prof_info);
706 dev_err(aw_dev->dev, "unsupport data type\n");
711 aw_dev->prof_info.prof_name_list = profile_name;
714 devm_kfree(aw_dev->dev, all_prof_info);
718 static int aw_dev_create_prof_name_list_v1(struct aw_device *aw_dev)
720 struct aw_prof_info *prof_info = &aw_dev->prof_info;
725 dev_err(aw_dev->dev, "prof_desc is NULL");
729 prof_info->prof_name_list = devm_kzalloc(aw_dev->dev,
738 dev_dbg(aw_dev->dev, "prof name is %s", prof_info->prof_name_list[i]);
744 static int aw_get_dde_type_info(struct aw_device *aw_dev, struct aw_container *aw_cfg)
762 aw_dev->prof_info.prof_type = AW88395_DEV_TYPE_ID;
764 aw_dev->prof_info.prof_type = AW88395_DEV_DEFAULT_TYPE_ID;
766 dev_err(aw_dev->dev, "can't find scene");
773 static int aw_get_dev_scene_count_v1(struct aw_device *aw_dev, struct aw_container *aw_cfg,
785 (aw_dev->chip_id == cfg_dde[i].chip_id) &&
786 (aw_dev->i2c->adapter->nr == cfg_dde[i].dev_bus) &&
787 (aw_dev->i2c->addr == cfg_dde[i].dev_addr))
792 dev_err(aw_dev->dev, "failed to obtain scene, scenu_num = %d\n", (*scene_num));
799 static int aw_get_default_scene_count_v1(struct aw_device *aw_dev,
813 (aw_dev->chip_id == cfg_dde[i].chip_id) &&
814 (aw_dev->channel == cfg_dde[i].dev_index))
819 dev_err(aw_dev->dev, "failed to obtain scene, scenu_num = %d\n", (*scene_num));
826 static int aw_dev_parse_scene_count_v1(struct aw_device *aw_dev,
832 ret = aw_get_dde_type_info(aw_dev, aw_cfg);
836 switch (aw_dev->prof_info.prof_type) {
838 ret = aw_get_dev_scene_count_v1(aw_dev, aw_cfg, count);
841 ret = aw_get_default_scene_count_v1(aw_dev, aw_cfg, count);
844 dev_err(aw_dev->dev, "unsupported prof_type[%x]", aw_dev->prof_info.prof_type);
852 static int aw_dev_parse_data_by_sec_type_v1(struct aw_device *aw_dev,
857 struct aw_prof_info *prof_info = &aw_dev->prof_info;
862 ret = aw_dev_prof_parse_multi_bin(aw_dev, (u8 *)prof_hdr + cfg_dde->data_offset,
865 dev_err(aw_dev->dev, "parse multi bin failed");
873 ret = aw_dev_parse_reg_bin_with_hdr(aw_dev,
877 dev_err(aw_dev->dev, "parse reg bin with hdr failed");
885 dev_err(aw_dev->dev, "unsupported SEC_TYPE [%d]", cfg_dde->data_type);
892 static int aw_dev_parse_dev_type_v1(struct aw_device *aw_dev,
902 if ((aw_dev->i2c->adapter->nr == cfg_dde[i].dev_bus) &&
903 (aw_dev->i2c->addr == cfg_dde[i].dev_addr) &&
904 (aw_dev->chip_id == cfg_dde[i].chip_id)) {
905 ret = aw_dev_parse_data_by_sec_type_v1(aw_dev, prof_hdr,
908 dev_err(aw_dev->dev, "parse failed");
915 dev_err(aw_dev->dev, "get dev type failed, get num [%d]", cur_scene_id);
922 static int aw_dev_parse_default_type_v1(struct aw_device *aw_dev,
932 if ((aw_dev->channel == cfg_dde[i].dev_index) &&
933 (aw_dev->chip_id == cfg_dde[i].chip_id)) {
934 ret = aw_dev_parse_data_by_sec_type_v1(aw_dev, prof_hdr,
937 dev_err(aw_dev->dev, "parse failed");
944 dev_err(aw_dev->dev, "get dev default type failed, get num[%d]", cur_scene_id);
951 static int aw_dev_parse_by_hdr_v1(struct aw_device *aw_dev,
956 switch (aw_dev->prof_info.prof_type) {
958 ret = aw_dev_parse_dev_type_v1(aw_dev, cfg_hdr);
961 ret = aw_dev_parse_default_type_v1(aw_dev, cfg_hdr);
964 dev_err(aw_dev->dev, "prof type matched failed, get num[%d]",
965 aw_dev->prof_info.prof_type);
973 static int aw_dev_load_cfg_by_hdr_v1(struct aw_device *aw_dev,
977 struct aw_prof_info *prof_info = &aw_dev->prof_info;
980 ret = aw_dev_parse_scene_count_v1(aw_dev, aw_cfg, &prof_info->count);
982 dev_err(aw_dev->dev, "get scene count failed");
986 prof_info->prof_desc = devm_kcalloc(aw_dev->dev,
992 ret = aw_dev_parse_by_hdr_v1(aw_dev, cfg_hdr);
994 dev_err(aw_dev->dev, "parse hdr failed");
998 ret = aw_dev_create_prof_name_list_v1(aw_dev);
1000 dev_err(aw_dev->dev, "create prof name list failed");
1007 int aw88395_dev_cfg_load(struct aw_device *aw_dev, struct aw_container *aw_cfg)
1016 ret = aw_dev_load_cfg_by_hdr(aw_dev, cfg_hdr);
1018 dev_err(aw_dev->dev, "hdr_version[0x%x] parse failed",
1024 ret = aw_dev_load_cfg_by_hdr_v1(aw_dev, aw_cfg);
1026 dev_err(aw_dev->dev, "hdr_version[0x%x] parse failed",
1032 dev_err(aw_dev->dev, "unsupported hdr_version [0x%x]", cfg_hdr->hdr_version);
1035 aw_dev->fw_status = AW88395_DEV_FW_OK;
1041 static int aw_dev_check_cfg_by_hdr(struct aw_device *aw_dev, struct aw_container *aw_cfg)
1054 dev_err(aw_dev->dev, "not acf type file");
1060 dev_err(aw_dev->dev, "hdr_len with ddt_len [%d] overflow file size[%d]",
1072 dev_err(aw_dev->dev, "act_data[%d] not equal to file size[%d]!",
1081 dev_err(aw_dev->dev, "ddt_num[%d] end_data_offset[%d] overflow size[%d]",
1090 dev_err(aw_dev->dev, "ddt_num[%d] act_crc8:0x%x != data_crc:0x%x",
1099 static int aw_dev_check_acf_by_hdr_v1(struct aw_device *aw_dev, struct aw_container *aw_cfg)
1113 dev_err(aw_dev->dev, "not acf type file");
1119 dev_err(aw_dev->dev, "hdrlen with ddt_len [%d] overflow file size[%d]",
1131 dev_err(aw_dev->dev, "act_data[%d] not equal to file size[%d]!",
1140 dev_err(aw_dev->dev, "ddt_num[%d] end_data_offset[%d] overflow size[%d]",
1149 dev_err(aw_dev->dev, "ddt_num[%d] act_crc8:0x%x != data_crc 0x%x",
1158 int aw88395_dev_load_acf_check(struct aw_device *aw_dev, struct aw_container *aw_cfg)
1163 dev_err(aw_dev->dev, "aw_prof is NULL");
1168 dev_err(aw_dev->dev, "cfg hdr size[%d] overflow file size[%d]",
1178 return aw_dev_check_cfg_by_hdr(aw_dev, aw_cfg);
1180 return aw_dev_check_acf_by_hdr_v1(aw_dev, aw_cfg);
1182 dev_err(aw_dev->dev, "unsupported hdr_version [0x%x]", cfg_hdr->hdr_version);