Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

ASoC: codecs: Modify the bin file parsing method

Modify the aw88395_lib file so that the bin file
parsing is no longer related to the chip id of the chip.
Adopt the bin file data type "prof_data_type" as the
differentiation between different chip bin file
parsing methods.

Since the chip id macro for the aw88399 is no longer
defined in aw88395_reg.h, define the chip id
for the aw88399 in aw88399.h

Signed-off-by: Weidong Wang <wangweidong.a@awinic.com>
Link: https://lore.kernel.org/r/20231109093708.13155-1-wangweidong.a@awinic.com
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

Weidong Wang and committed by
Mark Brown
fc213b8d 8df73570

+42 -88
+1
sound/soc/codecs/aw88395/aw88395_device.h
··· 146 146 147 147 unsigned int channel; 148 148 unsigned int fade_step; 149 + unsigned int prof_data_type; 149 150 150 151 struct i2c_client *i2c; 151 152 struct device *dev;
+40 -84
sound/soc/codecs/aw88395/aw88395_lib.c
··· 11 11 #include <linux/i2c.h> 12 12 #include "aw88395_lib.h" 13 13 #include "aw88395_device.h" 14 - #include "aw88395_reg.h" 15 14 16 15 #define AW88395_CRC8_POLYNOMIAL 0x8C 17 16 DECLARE_CRC8_TABLE(aw_crc8_table); ··· 455 456 goto parse_bin_failed; 456 457 } 457 458 458 - if (aw_dev->chip_id == AW88261_CHIP_ID) { 459 - if (aw_bin->header_info[0].valid_data_len % 4) { 460 - dev_err(aw_dev->dev, "bin data len get error!"); 461 - ret = -EINVAL; 462 - goto parse_bin_failed; 463 - } 464 - } 465 - 466 459 prof_desc->sec_desc[AW88395_DATA_TYPE_REG].data = 467 460 data + aw_bin->header_info[0].valid_data_addr; 468 461 prof_desc->sec_desc[AW88395_DATA_TYPE_REG].len = ··· 519 528 cfg_dde[i].dev_profile); 520 529 return -EINVAL; 521 530 } 522 - 531 + aw_dev->prof_data_type = cfg_dde[i].data_type; 523 532 ret = aw_dev_parse_data_by_sec_type(aw_dev, prof_hdr, &cfg_dde[i], 524 533 &all_prof_info->prof_desc[cfg_dde[i].dev_profile]); 525 534 if (ret < 0) { ··· 555 564 cfg_dde[i].dev_profile); 556 565 return -EINVAL; 557 566 } 567 + aw_dev->prof_data_type = cfg_dde[i].data_type; 558 568 ret = aw_dev_parse_data_by_sec_type(aw_dev, prof_hdr, &cfg_dde[i], 559 569 &all_prof_info->prof_desc[cfg_dde[i].dev_profile]); 560 570 if (ret < 0) { ··· 574 582 return 0; 575 583 } 576 584 577 - static int aw88261_dev_cfg_get_valid_prof(struct aw_device *aw_dev, 585 + static int aw_dev_cfg_get_reg_valid_prof(struct aw_device *aw_dev, 578 586 struct aw_all_prof_info *all_prof_info) 579 587 { 580 588 struct aw_prof_desc *prof_desc = all_prof_info->prof_desc; ··· 616 624 return 0; 617 625 } 618 626 619 - static int aw88395_dev_cfg_get_valid_prof(struct aw_device *aw_dev, 627 + static int aw_dev_cfg_get_multiple_valid_prof(struct aw_device *aw_dev, 620 628 struct aw_all_prof_info *all_prof_info) 621 629 { 622 630 struct aw_prof_desc *prof_desc = all_prof_info->prof_desc; ··· 695 703 goto exit; 696 704 } 697 705 698 - switch (aw_dev->chip_id) { 699 - case AW88395_CHIP_ID: 700 - case AW88399_CHIP_ID: 701 - ret = aw88395_dev_cfg_get_valid_prof(aw_dev, all_prof_info); 702 - if (ret < 0) 703 - goto exit; 706 + switch (aw_dev->prof_data_type) { 707 + case ACF_SEC_TYPE_MULTIPLE_BIN: 708 + ret = aw_dev_cfg_get_multiple_valid_prof(aw_dev, all_prof_info); 704 709 break; 705 - case AW88261_CHIP_ID: 706 - case AW87390_CHIP_ID: 707 - ret = aw88261_dev_cfg_get_valid_prof(aw_dev, all_prof_info); 708 - if (ret < 0) 709 - goto exit; 710 + case ACF_SEC_TYPE_HDR_REG: 711 + ret = aw_dev_cfg_get_reg_valid_prof(aw_dev, all_prof_info); 710 712 break; 711 713 default: 712 - dev_err(aw_dev->dev, "valid prof unsupported"); 714 + dev_err(aw_dev->dev, "unsupport data type\n"); 713 715 ret = -EINVAL; 714 716 break; 715 717 } 716 - 717 - aw_dev->prof_info.prof_name_list = profile_name; 718 + if (!ret) 719 + aw_dev->prof_info.prof_name_list = profile_name; 718 720 719 721 exit: 720 722 devm_kfree(aw_dev->dev, all_prof_info); ··· 777 791 struct aw_cfg_dde_v1 *cfg_dde = 778 792 (struct aw_cfg_dde_v1 *)(aw_cfg->data + cfg_hdr->hdr_offset); 779 793 unsigned int i; 780 - int ret; 781 794 782 - switch (aw_dev->chip_id) { 783 - case AW88395_CHIP_ID: 784 - case AW88399_CHIP_ID: 785 - for (i = 0; i < cfg_hdr->ddt_num; ++i) { 786 - if ((cfg_dde[i].data_type == ACF_SEC_TYPE_MULTIPLE_BIN) && 787 - (aw_dev->chip_id == cfg_dde[i].chip_id) && 788 - (aw_dev->i2c->adapter->nr == cfg_dde[i].dev_bus) && 789 - (aw_dev->i2c->addr == cfg_dde[i].dev_addr)) 790 - (*scene_num)++; 791 - } 792 - ret = 0; 793 - break; 794 - case AW88261_CHIP_ID: 795 - case AW87390_CHIP_ID: 796 - for (i = 0; i < cfg_hdr->ddt_num; ++i) { 797 - if (((cfg_dde[i].data_type == ACF_SEC_TYPE_REG) || 798 - (cfg_dde[i].data_type == ACF_SEC_TYPE_HDR_REG)) && 799 - (aw_dev->chip_id == cfg_dde[i].chip_id) && 800 - (aw_dev->i2c->adapter->nr == cfg_dde[i].dev_bus) && 801 - (aw_dev->i2c->addr == cfg_dde[i].dev_addr)) 802 - (*scene_num)++; 803 - } 804 - ret = 0; 805 - break; 806 - default: 807 - dev_err(aw_dev->dev, "unsupported device"); 808 - ret = -EINVAL; 809 - break; 795 + for (i = 0; i < cfg_hdr->ddt_num; ++i) { 796 + if (((cfg_dde[i].data_type == ACF_SEC_TYPE_REG) || 797 + (cfg_dde[i].data_type == ACF_SEC_TYPE_HDR_REG) || 798 + (cfg_dde[i].data_type == ACF_SEC_TYPE_MULTIPLE_BIN)) && 799 + (aw_dev->chip_id == cfg_dde[i].chip_id) && 800 + (aw_dev->i2c->adapter->nr == cfg_dde[i].dev_bus) && 801 + (aw_dev->i2c->addr == cfg_dde[i].dev_addr)) 802 + (*scene_num)++; 810 803 } 811 804 812 - return ret; 805 + if ((*scene_num) == 0) { 806 + dev_err(aw_dev->dev, "failed to obtain scene, scenu_num = %d\n", (*scene_num)); 807 + return -EINVAL; 808 + } 809 + 810 + return 0; 813 811 } 814 812 815 813 static int aw_get_default_scene_count_v1(struct aw_device *aw_dev, ··· 804 834 struct aw_cfg_dde_v1 *cfg_dde = 805 835 (struct aw_cfg_dde_v1 *)(aw_cfg->data + cfg_hdr->hdr_offset); 806 836 unsigned int i; 807 - int ret; 808 837 809 - switch (aw_dev->chip_id) { 810 - case AW88395_CHIP_ID: 811 - case AW88399_CHIP_ID: 812 - for (i = 0; i < cfg_hdr->ddt_num; ++i) { 813 - if ((cfg_dde[i].data_type == ACF_SEC_TYPE_MULTIPLE_BIN) && 814 - (aw_dev->chip_id == cfg_dde[i].chip_id) && 815 - (aw_dev->channel == cfg_dde[i].dev_index)) 816 - (*scene_num)++; 817 - } 818 - ret = 0; 819 - break; 820 - case AW88261_CHIP_ID: 821 - case AW87390_CHIP_ID: 822 - for (i = 0; i < cfg_hdr->ddt_num; ++i) { 823 - if (((cfg_dde[i].data_type == ACF_SEC_TYPE_REG) || 824 - (cfg_dde[i].data_type == ACF_SEC_TYPE_HDR_REG)) && 825 - (aw_dev->chip_id == cfg_dde[i].chip_id) && 826 - (aw_dev->channel == cfg_dde[i].dev_index)) 827 - (*scene_num)++; 828 - } 829 - ret = 0; 830 - break; 831 - default: 832 - dev_err(aw_dev->dev, "unsupported device"); 833 - ret = -EINVAL; 834 - break; 838 + 839 + for (i = 0; i < cfg_hdr->ddt_num; ++i) { 840 + if (((cfg_dde[i].data_type == ACF_SEC_TYPE_MULTIPLE_BIN) || 841 + (cfg_dde[i].data_type == ACF_SEC_TYPE_REG) || 842 + (cfg_dde[i].data_type == ACF_SEC_TYPE_HDR_REG)) && 843 + (aw_dev->chip_id == cfg_dde[i].chip_id) && 844 + (aw_dev->channel == cfg_dde[i].dev_index)) 845 + (*scene_num)++; 835 846 } 836 847 837 - return ret; 848 + if ((*scene_num) == 0) { 849 + dev_err(aw_dev->dev, "failed to obtain scene, scenu_num = %d\n", (*scene_num)); 850 + return -EINVAL; 851 + } 852 + 853 + return 0; 838 854 } 839 855 840 856 static int aw_dev_parse_scene_count_v1(struct aw_device *aw_dev,
-3
sound/soc/codecs/aw88395/aw88395_reg.h
··· 95 95 #define AW88395_TM_REG (0x7C) 96 96 97 97 enum aw88395_id { 98 - AW88399_CHIP_ID = 0x2183, 99 98 AW88395_CHIP_ID = 0x2049, 100 - AW88261_CHIP_ID = 0x2113, 101 - AW87390_CHIP_ID = 0x76, 102 99 }; 103 100 104 101 #define AW88395_REG_MAX (0x7D)
-1
sound/soc/codecs/aw88399.c
··· 15 15 #include <sound/soc.h> 16 16 #include "aw88399.h" 17 17 #include "aw88395/aw88395_device.h" 18 - #include "aw88395/aw88395_reg.h" 19 18 20 19 static const struct regmap_config aw88399_remap_config = { 21 20 .val_bits = 16,
+1
sound/soc/codecs/aw88399.h
··· 491 491 #define AW88399_CRC_FW_BASE_ADDR (0x4C0) 492 492 #define AW88399_ACF_FILE "aw88399_acf.bin" 493 493 #define AW88399_DEV_SYSST_CHECK_MAX (10) 494 + #define AW88399_CHIP_ID 0x2183 494 495 495 496 #define AW88399_I2C_NAME "aw88399" 496 497