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: cs35l56: Set fw_regs table after getting REVID

Defer setting the cs35l56_base.fw_regs pointer until after the REVID has
been read in cs35l56_hw_init(). Also make the corresponding change to the
cs35l56_hda drivers to prevent a build break.

This is preparing for firmware registers that change address between
revisions of the same device.

Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>

authored by

Richard Fitzgerald and committed by
Takashi Iwai
ab91835e 9cf5b8b6

+41 -36
-3
include/sound/cs35l56.h
··· 337 337 extern const struct regmap_config cs35l63_regmap_i2c; 338 338 extern const struct regmap_config cs35l63_regmap_sdw; 339 339 340 - extern const struct cs35l56_fw_reg cs35l56_fw_reg; 341 - extern const struct cs35l56_fw_reg cs35l63_fw_reg; 342 - 343 340 extern const struct cirrus_amp_cal_controls cs35l56_calibration_controls; 344 341 345 342 extern const char * const cs35l56_tx_input_texts[CS35L56_NUM_INPUT_SRC];
+1
sound/hda/codecs/side-codecs/cs35l56_hda.c
··· 1049 1049 goto err; 1050 1050 } 1051 1051 1052 + cs35l56->base.type = hid & 0xff; 1052 1053 cs35l56->base.cal_index = -1; 1053 1054 1054 1055 cs35l56_init_cs_dsp(&cs35l56->base, &cs35l56->cs_dsp);
-2
sound/hda/codecs/side-codecs/cs35l56_hda_i2c.c
··· 27 27 cs35l56->base.can_hibernate = true; 28 28 #endif 29 29 30 - cs35l56->base.fw_reg = &cs35l56_fw_reg; 31 - 32 30 cs35l56->base.regmap = devm_regmap_init_i2c(clt, &cs35l56_regmap_i2c); 33 31 if (IS_ERR(cs35l56->base.regmap)) { 34 32 ret = PTR_ERR(cs35l56->base.regmap);
-2
sound/hda/codecs/side-codecs/cs35l56_hda_spi.c
··· 30 30 cs35l56->base.can_hibernate = true; 31 31 #endif 32 32 33 - cs35l56->base.fw_reg = &cs35l56_fw_reg; 34 - 35 33 cs35l56->base.regmap = devm_regmap_init_spi(spi, &cs35l56_regmap_spi); 36 34 if (IS_ERR(cs35l56->base.regmap)) { 37 35 ret = PTR_ERR(cs35l56->base.regmap);
+2 -2
sound/soc/codecs/cs35l56-i2c.c
··· 35 35 switch (id) { 36 36 case 0x3556: 37 37 regmap_config = &cs35l56_regmap_i2c; 38 - cs35l56->base.fw_reg = &cs35l56_fw_reg; 38 + cs35l56->base.type = 0x56; 39 39 break; 40 40 case 0x3563: 41 41 regmap_config = &cs35l63_regmap_i2c; 42 - cs35l56->base.fw_reg = &cs35l63_fw_reg; 42 + cs35l56->base.type = 0x63; 43 43 break; 44 44 default: 45 45 return -ENODEV;
+2 -2
sound/soc/codecs/cs35l56-sdw.c
··· 527 527 case 0x3556: 528 528 case 0x3557: 529 529 regmap_config = &cs35l56_regmap_sdw; 530 - cs35l56->base.fw_reg = &cs35l56_fw_reg; 531 530 break; 532 531 case 0x3563: 533 532 regmap_config = &cs35l63_regmap_sdw; 534 - cs35l56->base.fw_reg = &cs35l63_fw_reg; 535 533 break; 536 534 default: 537 535 return -ENODEV; 538 536 } 537 + 538 + cs35l56->base.type = ((unsigned int)id->driver_data) & 0xff; 539 539 540 540 cs35l56->base.regmap = devm_regmap_init(dev, &cs35l56_regmap_bus_sdw, 541 541 peripheral, regmap_config);
+35 -24
sound/soc/codecs/cs35l56-shared.c
··· 309 309 } 310 310 } 311 311 312 + static const struct cs35l56_fw_reg cs35l56_fw_reg = { 313 + .fw_ver = CS35L56_DSP1_FW_VER, 314 + .halo_state = CS35L56_DSP1_HALO_STATE, 315 + .pm_cur_stat = CS35L56_DSP1_PM_CUR_STATE, 316 + .prot_sts = CS35L56_PROTECTION_STATUS, 317 + .transducer_actual_ps = CS35L56_TRANSDUCER_ACTUAL_PS, 318 + .user_mute = CS35L56_MAIN_RENDER_USER_MUTE, 319 + .user_volume = CS35L56_MAIN_RENDER_USER_VOLUME, 320 + .posture_number = CS35L56_MAIN_POSTURE_NUMBER, 321 + }; 322 + 323 + static const struct cs35l56_fw_reg cs35l63_fw_reg = { 324 + .fw_ver = CS35L63_DSP1_FW_VER, 325 + .halo_state = CS35L63_DSP1_HALO_STATE, 326 + .pm_cur_stat = CS35L63_DSP1_PM_CUR_STATE, 327 + .prot_sts = CS35L63_PROTECTION_STATUS, 328 + .transducer_actual_ps = CS35L63_TRANSDUCER_ACTUAL_PS, 329 + .user_mute = CS35L63_MAIN_RENDER_USER_MUTE, 330 + .user_volume = CS35L63_MAIN_RENDER_USER_VOLUME, 331 + .posture_number = CS35L63_MAIN_POSTURE_NUMBER, 332 + }; 333 + 334 + static void cs35l56_set_fw_reg_table(struct cs35l56_base *cs35l56_base) 335 + { 336 + switch (cs35l56_base->type) { 337 + default: 338 + cs35l56_base->fw_reg = &cs35l56_fw_reg; 339 + break; 340 + case 0x63: 341 + cs35l56_base->fw_reg = &cs35l63_fw_reg; 342 + break; 343 + } 344 + } 345 + 312 346 int cs35l56_mbox_send(struct cs35l56_base *cs35l56_base, unsigned int command) 313 347 { 314 348 unsigned int val; ··· 1013 979 return ret; 1014 980 } 1015 981 cs35l56_base->rev = revid & (CS35L56_AREVID_MASK | CS35L56_MTLREVID_MASK); 982 + cs35l56_set_fw_reg_table(cs35l56_base); 1016 983 1017 984 ret = cs35l56_wait_for_firmware_boot(cs35l56_base); 1018 985 if (ret) ··· 1314 1279 .cache_type = REGCACHE_MAPLE, 1315 1280 }; 1316 1281 EXPORT_SYMBOL_NS_GPL(cs35l63_regmap_sdw, "SND_SOC_CS35L56_SHARED"); 1317 - 1318 - const struct cs35l56_fw_reg cs35l56_fw_reg = { 1319 - .fw_ver = CS35L56_DSP1_FW_VER, 1320 - .halo_state = CS35L56_DSP1_HALO_STATE, 1321 - .pm_cur_stat = CS35L56_DSP1_PM_CUR_STATE, 1322 - .prot_sts = CS35L56_PROTECTION_STATUS, 1323 - .transducer_actual_ps = CS35L56_TRANSDUCER_ACTUAL_PS, 1324 - .user_mute = CS35L56_MAIN_RENDER_USER_MUTE, 1325 - .user_volume = CS35L56_MAIN_RENDER_USER_VOLUME, 1326 - .posture_number = CS35L56_MAIN_POSTURE_NUMBER, 1327 - }; 1328 - EXPORT_SYMBOL_NS_GPL(cs35l56_fw_reg, "SND_SOC_CS35L56_SHARED"); 1329 - 1330 - const struct cs35l56_fw_reg cs35l63_fw_reg = { 1331 - .fw_ver = CS35L63_DSP1_FW_VER, 1332 - .halo_state = CS35L63_DSP1_HALO_STATE, 1333 - .pm_cur_stat = CS35L63_DSP1_PM_CUR_STATE, 1334 - .prot_sts = CS35L63_PROTECTION_STATUS, 1335 - .transducer_actual_ps = CS35L63_TRANSDUCER_ACTUAL_PS, 1336 - .user_mute = CS35L63_MAIN_RENDER_USER_MUTE, 1337 - .user_volume = CS35L63_MAIN_RENDER_USER_VOLUME, 1338 - .posture_number = CS35L63_MAIN_POSTURE_NUMBER, 1339 - }; 1340 - EXPORT_SYMBOL_NS_GPL(cs35l63_fw_reg, "SND_SOC_CS35L56_SHARED"); 1341 1282 1342 1283 MODULE_DESCRIPTION("ASoC CS35L56 Shared"); 1343 1284 MODULE_AUTHOR("Richard Fitzgerald <rf@opensource.cirrus.com>");
+1 -1
sound/soc/codecs/cs35l56-spi.c
··· 26 26 27 27 spi_set_drvdata(spi, cs35l56); 28 28 29 - cs35l56->base.fw_reg = &cs35l56_fw_reg; 29 + cs35l56->base.type = 0x56; 30 30 31 31 cs35l56->base.regmap = devm_regmap_init_spi(spi, regmap_config); 32 32 if (IS_ERR(cs35l56->base.regmap)) {