include/sound/cs35l56.h
380
static inline int cs35l56_init_config_for_spi(struct cs35l56_base *cs35l56,
include/sound/cs35l56.h
392
static inline bool cs35l56_is_spi(struct cs35l56_base *cs35l56)
include/sound/cs35l56.h
409
int cs35l56_set_asp_patch(struct cs35l56_base *cs35l56_base);
include/sound/cs35l56.h
410
int cs35l56_set_patch(struct cs35l56_base *cs35l56_base);
include/sound/cs35l56.h
411
int cs35l56_mbox_send(struct cs35l56_base *cs35l56_base, unsigned int command);
include/sound/cs35l56.h
412
int cs35l56_firmware_shutdown(struct cs35l56_base *cs35l56_base);
include/sound/cs35l56.h
413
int cs35l56_wait_for_firmware_boot(struct cs35l56_base *cs35l56_base);
include/sound/cs35l56.h
416
void cs35l56_system_reset(struct cs35l56_base *cs35l56_base, bool is_soundwire);
include/sound/cs35l56.h
417
int cs35l56_irq_request(struct cs35l56_base *cs35l56_base, int irq);
include/sound/cs35l56.h
419
int cs35l56_is_fw_reload_needed(struct cs35l56_base *cs35l56_base);
include/sound/cs35l56.h
420
int cs35l56_runtime_suspend_common(struct cs35l56_base *cs35l56_base);
include/sound/cs35l56.h
421
int cs35l56_runtime_resume_common(struct cs35l56_base *cs35l56_base, bool is_soundwire);
include/sound/cs35l56.h
422
void cs35l56_init_cs_dsp(struct cs35l56_base *cs35l56_base, struct cs_dsp *cs_dsp);
include/sound/cs35l56.h
423
int cs35l56_get_calibration(struct cs35l56_base *cs35l56_base);
include/sound/cs35l56.h
424
int cs35l56_stash_calibration(struct cs35l56_base *cs35l56_base,
include/sound/cs35l56.h
426
ssize_t cs35l56_calibrate_debugfs_write(struct cs35l56_base *cs35l56_base,
include/sound/cs35l56.h
429
ssize_t cs35l56_cal_ambient_debugfs_write(struct cs35l56_base *cs35l56_base,
include/sound/cs35l56.h
432
ssize_t cs35l56_cal_data_debugfs_read(struct cs35l56_base *cs35l56_base,
include/sound/cs35l56.h
435
ssize_t cs35l56_cal_data_debugfs_write(struct cs35l56_base *cs35l56_base,
include/sound/cs35l56.h
438
void cs35l56_create_cal_debugfs(struct cs35l56_base *cs35l56_base,
include/sound/cs35l56.h
440
void cs35l56_remove_cal_debugfs(struct cs35l56_base *cs35l56_base);
include/sound/cs35l56.h
441
int cs35l56_cal_set_status_get(struct cs35l56_base *cs35l56_base,
include/sound/cs35l56.h
443
int cs35l56_read_prot_status(struct cs35l56_base *cs35l56_base,
include/sound/cs35l56.h
445
void cs35l56_warn_if_firmware_missing(struct cs35l56_base *cs35l56_base);
include/sound/cs35l56.h
446
void cs35l56_log_tuning(struct cs35l56_base *cs35l56_base, struct cs_dsp *cs_dsp);
include/sound/cs35l56.h
447
int cs35l56_hw_init(struct cs35l56_base *cs35l56_base);
include/sound/cs35l56.h
448
int cs35l56_get_speaker_id(struct cs35l56_base *cs35l56_base);
include/sound/cs35l56.h
449
int cs35l56_check_and_save_onchip_spkid_gpios(struct cs35l56_base *cs35l56_base,
include/sound/cs35l56.h
452
int cs35l56_configure_onchip_spkid_pads(struct cs35l56_base *cs35l56_base);
include/sound/cs35l56.h
453
int cs35l56_read_onchip_spkid(struct cs35l56_base *cs35l56_base);
sound/hda/codecs/side-codecs/cs35l56_hda.c
703
struct cs35l56_base *cs35l56_base = file->private_data;
sound/hda/codecs/side-codecs/cs35l56_hda.c
706
PM_RUNTIME_ACQUIRE_IF_ENABLED_AUTOSUSPEND(cs35l56_base->dev, pm);
sound/hda/codecs/side-codecs/cs35l56_hda.c
711
return cs35l56_calibrate_debugfs_write(cs35l56_base, from, count, ppos);
sound/hda/codecs/side-codecs/cs35l56_hda.c
718
struct cs35l56_base *cs35l56_base = file->private_data;
sound/hda/codecs/side-codecs/cs35l56_hda.c
721
PM_RUNTIME_ACQUIRE_IF_ENABLED_AUTOSUSPEND(cs35l56_base->dev, pm);
sound/hda/codecs/side-codecs/cs35l56_hda.c
726
return cs35l56_cal_ambient_debugfs_write(cs35l56_base, from, count, ppos);
sound/hda/codecs/side-codecs/cs35l56_hda.c
733
struct cs35l56_base *cs35l56_base = file->private_data;
sound/hda/codecs/side-codecs/cs35l56_hda.c
736
PM_RUNTIME_ACQUIRE_IF_ENABLED_AUTOSUSPEND(cs35l56_base->dev, pm);
sound/hda/codecs/side-codecs/cs35l56_hda.c
741
return cs35l56_cal_data_debugfs_read(cs35l56_base, to, count, ppos);
sound/hda/codecs/side-codecs/cs35l56_hda.c
748
struct cs35l56_base *cs35l56_base = file->private_data;
sound/hda/codecs/side-codecs/cs35l56_hda.c
749
struct cs35l56_hda *cs35l56 = cs35l56_hda_from_base(cs35l56_base);
sound/hda/codecs/side-codecs/cs35l56_hda.c
752
ret = cs35l56_cal_data_debugfs_write(cs35l56_base, from, count, ppos);
sound/hda/codecs/side-codecs/cs35l56_hda.c
759
PM_RUNTIME_ACQUIRE_IF_ENABLED_AUTOSUSPEND(cs35l56_base->dev, pm);
sound/hda/codecs/side-codecs/cs35l56_hda.c
766
cs35l56_mbox_send(cs35l56_base, CS35L56_MBOX_CMD_AUDIO_REINIT);
sound/hda/codecs/side-codecs/cs35l56_hda.h
24
struct cs35l56_base base;
sound/hda/codecs/side-codecs/cs35l56_hda.h
46
static inline struct cs35l56_hda *cs35l56_hda_from_base(struct cs35l56_base *cs35l56_base)
sound/hda/codecs/side-codecs/cs35l56_hda.h
48
return container_of(cs35l56_base, struct cs35l56_hda, base);
sound/soc/codecs/cs35l56-shared-test.c
149
struct cs35l56_base *cs35l56_base = priv->cs35l56_base;
sound/soc/codecs/cs35l56-shared-test.c
162
KUNIT_ASSERT_EQ(test, 0, regmap_read(cs35l56_base->regmap, CS35L56_GPIO_STATUS1, &val));
sound/soc/codecs/cs35l56-shared-test.c
169
KUNIT_ASSERT_EQ(test, 0, regmap_read(cs35l56_base->regmap, CS35L56_GPIO_STATUS1, &val));
sound/soc/codecs/cs35l56-shared-test.c
176
KUNIT_ASSERT_EQ(test, 0, regmap_read(cs35l56_base->regmap, CS35L56_GPIO_STATUS1, &val));
sound/soc/codecs/cs35l56-shared-test.c
185
KUNIT_ASSERT_EQ(test, 0, regmap_read(cs35l56_base->regmap, CS35L56_GPIO_STATUS1, &val));
sound/soc/codecs/cs35l56-shared-test.c
192
KUNIT_ASSERT_EQ(test, 0, regmap_read(cs35l56_base->regmap, CS35L56_GPIO_STATUS1, &val));
sound/soc/codecs/cs35l56-shared-test.c
201
struct cs35l56_base *cs35l56_base = priv->cs35l56_base;
sound/soc/codecs/cs35l56-shared-test.c
216
cs35l56_base->onchip_spkid_gpios[i] = param->spkid_gpios[i] - 1;
sound/soc/codecs/cs35l56-shared-test.c
217
cs35l56_base->num_onchip_spkid_gpios++;
sound/soc/codecs/cs35l56-shared-test.c
220
cs35l56_base->num_onchip_spkid_pulls = 0;
sound/soc/codecs/cs35l56-shared-test.c
222
KUNIT_EXPECT_EQ(test, cs35l56_configure_onchip_spkid_pads(cs35l56_base), 0);
sound/soc/codecs/cs35l56-shared-test.c
223
KUNIT_EXPECT_EQ(test, cs35l56_read_onchip_spkid(cs35l56_base), param->spkid);
sound/soc/codecs/cs35l56-shared-test.c
231
struct cs35l56_base *cs35l56_base = priv->cs35l56_base;
sound/soc/codecs/cs35l56-shared-test.c
24
struct cs35l56_base *cs35l56_base;
sound/soc/codecs/cs35l56-shared-test.c
246
cs35l56_base->onchip_spkid_gpios[i] = param->spkid_gpios[i] - 1;
sound/soc/codecs/cs35l56-shared-test.c
247
cs35l56_base->num_onchip_spkid_gpios++;
sound/soc/codecs/cs35l56-shared-test.c
255
cs35l56_base->onchip_spkid_pulls[i] = param->spkid_pulls[i];
sound/soc/codecs/cs35l56-shared-test.c
256
cs35l56_base->num_onchip_spkid_pulls++;
sound/soc/codecs/cs35l56-shared-test.c
259
KUNIT_EXPECT_EQ(test, cs35l56_configure_onchip_spkid_pads(cs35l56_base), 0);
sound/soc/codecs/cs35l56-shared-test.c
271
if (i < cs35l56_base->num_onchip_spkid_pulls) {
sound/soc/codecs/cs35l56-shared-test.c
281
if (i < cs35l56_base->num_onchip_spkid_pulls) {
sound/soc/codecs/cs35l56-shared-test.c
298
struct cs35l56_base *cs35l56_base = priv->cs35l56_base;
sound/soc/codecs/cs35l56-shared-test.c
323
cs35l56_base->num_onchip_spkid_gpios = 0;
sound/soc/codecs/cs35l56-shared-test.c
324
cs35l56_base->num_onchip_spkid_pulls = 0;
sound/soc/codecs/cs35l56-shared-test.c
326
KUNIT_ASSERT_LE(test, num_gpios, ARRAY_SIZE(cs35l56_base->onchip_spkid_gpios));
sound/soc/codecs/cs35l56-shared-test.c
327
KUNIT_ASSERT_LE(test, num_pulls, ARRAY_SIZE(cs35l56_base->onchip_spkid_pulls));
sound/soc/codecs/cs35l56-shared-test.c
330
cs35l56_check_and_save_onchip_spkid_gpios(cs35l56_base,
sound/soc/codecs/cs35l56-shared-test.c
335
KUNIT_EXPECT_EQ(test, cs35l56_base->num_onchip_spkid_gpios, num_gpios);
sound/soc/codecs/cs35l56-shared-test.c
336
KUNIT_EXPECT_EQ(test, cs35l56_base->num_onchip_spkid_pulls, num_pulls);
sound/soc/codecs/cs35l56-shared-test.c
340
KUNIT_EXPECT_EQ(test, cs35l56_base->onchip_spkid_gpios[i], gpios[i] - 1);
sound/soc/codecs/cs35l56-shared-test.c
343
KUNIT_EXPECT_EQ(test, cs35l56_base->onchip_spkid_pulls[i], pulls[i]);
sound/soc/codecs/cs35l56-shared-test.c
350
struct cs35l56_base *cs35l56_base = priv->cs35l56_base;
sound/soc/codecs/cs35l56-shared-test.c
354
cs35l56_check_and_save_onchip_spkid_gpios(cs35l56_base,
sound/soc/codecs/cs35l56-shared-test.c
359
switch (cs35l56_base->type) {
sound/soc/codecs/cs35l56-shared-test.c
369
kunit_fail_current_test("Unsupported type:%#x\n", cs35l56_base->type);
sound/soc/codecs/cs35l56-shared-test.c
373
cs35l56_check_and_save_onchip_spkid_gpios(cs35l56_base,
sound/soc/codecs/cs35l56-shared-test.c
381
cs35l56_check_and_save_onchip_spkid_gpios(cs35l56_base,
sound/soc/codecs/cs35l56-shared-test.c
386
static_assert(ARRAY_SIZE(gpios) > ARRAY_SIZE(cs35l56_base->onchip_spkid_gpios));
sound/soc/codecs/cs35l56-shared-test.c
387
static_assert(ARRAY_SIZE(pulls) > ARRAY_SIZE(cs35l56_base->onchip_spkid_pulls));
sound/soc/codecs/cs35l56-shared-test.c
389
cs35l56_check_and_save_onchip_spkid_gpios(cs35l56_base,
sound/soc/codecs/cs35l56-shared-test.c
394
cs35l56_check_and_save_onchip_spkid_gpios(cs35l56_base,
sound/soc/codecs/cs35l56-shared-test.c
403
struct cs35l56_base *cs35l56_base = priv->cs35l56_base;
sound/soc/codecs/cs35l56-shared-test.c
405
memset(cs35l56_base->onchip_spkid_gpios, 0, sizeof(cs35l56_base->onchip_spkid_gpios));
sound/soc/codecs/cs35l56-shared-test.c
406
memset(cs35l56_base->onchip_spkid_pulls, 0, sizeof(cs35l56_base->onchip_spkid_pulls));
sound/soc/codecs/cs35l56-shared-test.c
407
cs35l56_base->num_onchip_spkid_gpios = 0;
sound/soc/codecs/cs35l56-shared-test.c
408
cs35l56_base->num_onchip_spkid_pulls = 0;
sound/soc/codecs/cs35l56-shared-test.c
409
KUNIT_EXPECT_EQ(test, cs35l56_configure_onchip_spkid_pads(cs35l56_base), 0);
sound/soc/codecs/cs35l56-shared-test.c
410
KUNIT_EXPECT_EQ(test, cs35l56_read_onchip_spkid(cs35l56_base), -ENOENT);
sound/soc/codecs/cs35l56-shared-test.c
417
struct cs35l56_base *cs35l56_base;
sound/soc/codecs/cs35l56-shared-test.c
434
cs35l56_base = priv->cs35l56_base;
sound/soc/codecs/cs35l56-shared-test.c
435
cs35l56_base->regmap = regmap_init(cs35l56_base->dev,
sound/soc/codecs/cs35l56-shared-test.c
439
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, cs35l56_base->regmap);
sound/soc/codecs/cs35l56-shared-test.c
442
cs35l56_base->regmap));
sound/soc/codecs/cs35l56-shared-test.c
470
priv->cs35l56_base = kunit_kzalloc(test, sizeof(*priv->cs35l56_base), GFP_KERNEL);
sound/soc/codecs/cs35l56-shared-test.c
471
KUNIT_ASSERT_NOT_NULL(test, priv->cs35l56_base);
sound/soc/codecs/cs35l56-shared-test.c
472
priv->cs35l56_base->dev = &priv->amp_dev->dev;
sound/soc/codecs/cs35l56-shared-test.c
473
priv->cs35l56_base->type = type;
sound/soc/codecs/cs35l56-shared-test.c
474
priv->cs35l56_base->rev = rev;
sound/soc/codecs/cs35l56-shared.c
1001
cs35l56_base->cal_data = *data;
sound/soc/codecs/cs35l56-shared.c
1002
cs35l56_base->cal_data_valid = true;
sound/soc/codecs/cs35l56-shared.c
1008
static int cs35l56_perform_calibration(struct cs35l56_base *cs35l56_base)
sound/soc/codecs/cs35l56-shared.c
1011
cs35l56_base->calibration_controls;
sound/soc/codecs/cs35l56-shared.c
1012
struct cs_dsp *dsp = cs35l56_base->dsp;
sound/soc/codecs/cs35l56-shared.c
1021
if (cs35l56_base->silicon_uid == 0) {
sound/soc/codecs/cs35l56-shared.c
1022
dev_err(cs35l56_base->dev, "Cannot calibrate: no silicon UID\n");
sound/soc/codecs/cs35l56-shared.c
1026
switch (cs35l56_base->type) {
sound/soc/codecs/cs35l56-shared.c
1030
if (cs35l56_base->rev < 0xb2) {
sound/soc/codecs/cs35l56-shared.c
1044
ret = pm_runtime_resume_and_get(cs35l56_base->dev);
sound/soc/codecs/cs35l56-shared.c
1048
ret = cs35l56_wait_for_ps3(cs35l56_base);
sound/soc/codecs/cs35l56-shared.c
1054
regmap_update_bits_check(cs35l56_base->regmap, CS35L56_MIXER_NGATE_CH1_CFG,
sound/soc/codecs/cs35l56-shared.c
1056
regmap_update_bits_check(cs35l56_base->regmap, CS35L56_MIXER_NGATE_CH2_CFG,
sound/soc/codecs/cs35l56-shared.c
1065
dev_err(cs35l56_base->dev, "Could not get %s control\n",
sound/soc/codecs/cs35l56-shared.c
1078
dev_err(cs35l56_base->dev, "Could not write %s: %d\n", "CALI_NORM_EN", ret);
sound/soc/codecs/cs35l56-shared.c
1083
ret = cs35l56_mbox_send(cs35l56_base, CS35L56_MBOX_CMD_AUDIO_CALIBRATION);
sound/soc/codecs/cs35l56-shared.c
1095
dev_err(cs35l56_base->dev, "Calibration timed out (CAL_STATUS: %u)\n",
sound/soc/codecs/cs35l56-shared.c
1108
cs35l56_base->cal_data_valid = false;
sound/soc/codecs/cs35l56-shared.c
1116
dev_info(cs35l56_base->dev, "Cal status:%d calR:%d ambient:%d\n",
sound/soc/codecs/cs35l56-shared.c
1119
cal_data.calTarget[0] = (u32)cs35l56_base->silicon_uid;
sound/soc/codecs/cs35l56-shared.c
1120
cal_data.calTarget[1] = (u32)(cs35l56_base->silicon_uid >> 32);
sound/soc/codecs/cs35l56-shared.c
1121
cs35l56_base->cal_data = cal_data;
sound/soc/codecs/cs35l56-shared.c
1122
cs35l56_base->cal_data_valid = true;
sound/soc/codecs/cs35l56-shared.c
1128
regmap_set_bits(cs35l56_base->regmap, CS35L56_MIXER_NGATE_CH1_CFG,
sound/soc/codecs/cs35l56-shared.c
1132
regmap_set_bits(cs35l56_base->regmap, CS35L56_MIXER_NGATE_CH2_CFG,
sound/soc/codecs/cs35l56-shared.c
1136
pm_runtime_put(cs35l56_base->dev);
sound/soc/codecs/cs35l56-shared.c
1141
ssize_t cs35l56_calibrate_debugfs_write(struct cs35l56_base *cs35l56_base,
sound/soc/codecs/cs35l56-shared.c
1161
ret = cs35l56_perform_calibration(cs35l56_base);
sound/soc/codecs/cs35l56-shared.c
1166
if (!cs35l56_base->cal_data_valid)
sound/soc/codecs/cs35l56-shared.c
1169
num_amps = cs35l56_base->num_amps;
sound/soc/codecs/cs35l56-shared.c
1173
ret = cs_amp_set_efi_calibration_data(cs35l56_base->dev,
sound/soc/codecs/cs35l56-shared.c
1174
cs35l56_base->cal_index,
sound/soc/codecs/cs35l56-shared.c
1176
&cs35l56_base->cal_data);
sound/soc/codecs/cs35l56-shared.c
1188
ssize_t cs35l56_cal_ambient_debugfs_write(struct cs35l56_base *cs35l56_base,
sound/soc/codecs/cs35l56-shared.c
1201
ret = pm_runtime_resume_and_get(cs35l56_base->dev);
sound/soc/codecs/cs35l56-shared.c
1209
ret = cs_amp_write_ambient_temp(cs35l56_base->dsp, cs35l56_base->calibration_controls, val);
sound/soc/codecs/cs35l56-shared.c
1213
pm_runtime_put(cs35l56_base->dev);
sound/soc/codecs/cs35l56-shared.c
1222
ssize_t cs35l56_cal_data_debugfs_read(struct cs35l56_base *cs35l56_base,
sound/soc/codecs/cs35l56-shared.c
1229
if (!cs35l56_base->cal_data_valid)
sound/soc/codecs/cs35l56-shared.c
1232
return simple_read_from_buffer(to, count, ppos, &cs35l56_base->cal_data,
sound/soc/codecs/cs35l56-shared.c
1233
sizeof(cs35l56_base->cal_data));
sound/soc/codecs/cs35l56-shared.c
1237
ssize_t cs35l56_cal_data_debugfs_write(struct cs35l56_base *cs35l56_base,
sound/soc/codecs/cs35l56-shared.c
1255
ret = cs35l56_stash_calibration(cs35l56_base, &cal_data);
sound/soc/codecs/cs35l56-shared.c
1263
void cs35l56_create_cal_debugfs(struct cs35l56_base *cs35l56_base,
sound/soc/codecs/cs35l56-shared.c
1269
cs35l56_base->debugfs = cs_amp_create_debugfs(cs35l56_base->dev);
sound/soc/codecs/cs35l56-shared.c
1272
0200, cs35l56_base->debugfs, cs35l56_base,
sound/soc/codecs/cs35l56-shared.c
1275
0200, cs35l56_base->debugfs, cs35l56_base,
sound/soc/codecs/cs35l56-shared.c
1278
0644, cs35l56_base->debugfs, cs35l56_base,
sound/soc/codecs/cs35l56-shared.c
1283
void cs35l56_remove_cal_debugfs(struct cs35l56_base *cs35l56_base)
sound/soc/codecs/cs35l56-shared.c
1285
debugfs_remove_recursive(cs35l56_base->debugfs);
sound/soc/codecs/cs35l56-shared.c
1294
int cs35l56_cal_set_status_get(struct cs35l56_base *cs35l56_base,
sound/soc/codecs/cs35l56-shared.c
1297
struct cs_dsp *dsp = cs35l56_base->dsp;
sound/soc/codecs/cs35l56-shared.c
1302
switch (cs35l56_base->type) {
sound/soc/codecs/cs35l56-shared.c
1337
int cs35l56_read_prot_status(struct cs35l56_base *cs35l56_base,
sound/soc/codecs/cs35l56-shared.c
1343
ret = regmap_read(cs35l56_base->regmap,
sound/soc/codecs/cs35l56-shared.c
1344
cs35l56_base->fw_reg->prot_sts, &prot_status);
sound/soc/codecs/cs35l56-shared.c
1346
dev_err(cs35l56_base->dev, "Get PROTECTION_STATUS failed: %d\n", ret);
sound/soc/codecs/cs35l56-shared.c
1352
ret = regmap_read(cs35l56_base->regmap,
sound/soc/codecs/cs35l56-shared.c
1353
cs35l56_base->fw_reg->fw_ver, fw_version);
sound/soc/codecs/cs35l56-shared.c
1355
dev_err(cs35l56_base->dev, "Get FW VER failed: %d\n", ret);
sound/soc/codecs/cs35l56-shared.c
1363
void cs35l56_warn_if_firmware_missing(struct cs35l56_base *cs35l56_base)
sound/soc/codecs/cs35l56-shared.c
1369
ret = cs35l56_read_prot_status(cs35l56_base, &firmware_missing, &firmware_version);
sound/soc/codecs/cs35l56-shared.c
1376
dev_warn(cs35l56_base->dev, "FIRMWARE_MISSING\n");
sound/soc/codecs/cs35l56-shared.c
1380
void cs35l56_log_tuning(struct cs35l56_base *cs35l56_base, struct cs_dsp *cs_dsp)
sound/soc/codecs/cs35l56-shared.c
1386
switch (cs35l56_base->type) {
sound/soc/codecs/cs35l56-shared.c
1412
dev_warn(cs35l56_base->dev, "Can't read tuning IDs");
sound/soc/codecs/cs35l56-shared.c
1414
dev_info(cs35l56_base->dev, "Tuning PID: %#x, SID: %#x, TID: %#x\n",
sound/soc/codecs/cs35l56-shared.c
1419
int cs35l56_hw_init(struct cs35l56_base *cs35l56_base)
sound/soc/codecs/cs35l56-shared.c
1430
if (!cs35l56_base->reset_gpio)
sound/soc/codecs/cs35l56-shared.c
1431
cs35l56_issue_wake_event(cs35l56_base);
sound/soc/codecs/cs35l56-shared.c
1435
ret = regmap_read_bypassed(cs35l56_base->regmap, CS35L56_REVID, &revid);
sound/soc/codecs/cs35l56-shared.c
1437
dev_err(cs35l56_base->dev, "Get Revision ID failed\n");
sound/soc/codecs/cs35l56-shared.c
1440
cs35l56_base->rev = revid & (CS35L56_AREVID_MASK | CS35L56_MTLREVID_MASK);
sound/soc/codecs/cs35l56-shared.c
1441
cs35l56_set_fw_reg_table(cs35l56_base);
sound/soc/codecs/cs35l56-shared.c
1443
ret = cs35l56_wait_for_firmware_boot(cs35l56_base);
sound/soc/codecs/cs35l56-shared.c
1447
ret = regmap_read_bypassed(cs35l56_base->regmap, CS35L56_DEVID, &devid);
sound/soc/codecs/cs35l56-shared.c
1449
dev_err(cs35l56_base->dev, "Get Device ID failed\n");
sound/soc/codecs/cs35l56-shared.c
1458
cs35l56_base->calibration_controls = &cs35l56_calibration_controls;
sound/soc/codecs/cs35l56-shared.c
1461
cs35l56_base->calibration_controls = &cs35l63_calibration_controls;
sound/soc/codecs/cs35l56-shared.c
1465
dev_err(cs35l56_base->dev, "Unknown device %x\n", devid);
sound/soc/codecs/cs35l56-shared.c
1469
cs35l56_base->type = devid & 0xFF;
sound/soc/codecs/cs35l56-shared.c
1472
regcache_cache_only(cs35l56_base->regmap, false);
sound/soc/codecs/cs35l56-shared.c
1474
ret = regmap_read(cs35l56_base->regmap, CS35L56_DSP_RESTRICT_STS1, &secured);
sound/soc/codecs/cs35l56-shared.c
1476
dev_err(cs35l56_base->dev, "Get Secure status failed\n");
sound/soc/codecs/cs35l56-shared.c
1482
cs35l56_base->secured = true;
sound/soc/codecs/cs35l56-shared.c
1484
ret = regmap_read(cs35l56_base->regmap, CS35L56_OTPID, &otpid);
sound/soc/codecs/cs35l56-shared.c
1486
dev_err(cs35l56_base->dev, "Get OTP ID failed\n");
sound/soc/codecs/cs35l56-shared.c
1490
ret = cs35l56_read_prot_status(cs35l56_base, &fw_missing, &fw_ver);
sound/soc/codecs/cs35l56-shared.c
1494
dev_info(cs35l56_base->dev, "Cirrus Logic CS35L%02X%s Rev %02X OTP%d fw:%d.%d.%d (patched=%u)\n",
sound/soc/codecs/cs35l56-shared.c
1495
cs35l56_base->type, cs35l56_base->secured ? "s" : "", cs35l56_base->rev, otpid,
sound/soc/codecs/cs35l56-shared.c
1499
regmap_write(cs35l56_base->regmap, CS35L56_IRQ1_MASK_20, 0xffffffff);
sound/soc/codecs/cs35l56-shared.c
1500
regmap_update_bits(cs35l56_base->regmap, CS35L56_IRQ1_MASK_1,
sound/soc/codecs/cs35l56-shared.c
1503
regmap_update_bits(cs35l56_base->regmap, CS35L56_IRQ1_MASK_8,
sound/soc/codecs/cs35l56-shared.c
1507
switch (cs35l56_base->type) {
sound/soc/codecs/cs35l56-shared.c
1511
ret = cs35l56_read_silicon_uid(cs35l56_base);
sound/soc/codecs/cs35l56-shared.c
1514
ret = cs35l63_read_silicon_uid(cs35l56_base);
sound/soc/codecs/cs35l56-shared.c
1520
dev_dbg(cs35l56_base->dev, "SiliconID = %#llx\n", cs35l56_base->silicon_uid);
sound/soc/codecs/cs35l56-shared.c
1526
int cs35l56_get_speaker_id(struct cs35l56_base *cs35l56_base)
sound/soc/codecs/cs35l56-shared.c
1533
ret = cs_amp_get_vendor_spkid(cs35l56_base->dev);
sound/soc/codecs/cs35l56-shared.c
1535
dev_dbg(cs35l56_base->dev, "Vendor Speaker ID = %d\n", ret);
sound/soc/codecs/cs35l56-shared.c
1538
dev_err(cs35l56_base->dev, "Error getting vendor Speaker ID: %d\n", ret);
sound/soc/codecs/cs35l56-shared.c
1543
ret = device_property_read_u32(cs35l56_base->dev, "cirrus,speaker-id", &speaker_id);
sound/soc/codecs/cs35l56-shared.c
1545
dev_dbg(cs35l56_base->dev, "Speaker ID = %d\n", speaker_id);
sound/soc/codecs/cs35l56-shared.c
1550
descs = gpiod_get_array_optional(cs35l56_base->dev, "spk-id", GPIOD_IN);
sound/soc/codecs/cs35l56-shared.c
1555
return dev_err_probe(cs35l56_base->dev, ret, "Failed to get spk-id-gpios\n");
sound/soc/codecs/cs35l56-shared.c
1562
dev_err_probe(cs35l56_base->dev, ret, "Failed to read spk-id[%d]\n", i);
sound/soc/codecs/cs35l56-shared.c
1569
dev_dbg(cs35l56_base->dev, "Speaker ID = %d\n", speaker_id);
sound/soc/codecs/cs35l56-shared.c
1578
int cs35l56_check_and_save_onchip_spkid_gpios(struct cs35l56_base *cs35l56_base,
sound/soc/codecs/cs35l56-shared.c
1586
if ((num_gpios > ARRAY_SIZE(cs35l56_base->onchip_spkid_gpios)) ||
sound/soc/codecs/cs35l56-shared.c
1587
(num_pulls > ARRAY_SIZE(cs35l56_base->onchip_spkid_pulls)))
sound/soc/codecs/cs35l56-shared.c
1590
switch (cs35l56_base->type) {
sound/soc/codecs/cs35l56-shared.c
1603
dev_err(cs35l56_base->dev, "Invalid spkid GPIO %d\n", gpios[i]);
sound/soc/codecs/cs35l56-shared.c
1609
cs35l56_base->onchip_spkid_gpios[i] = gpios[i] - 1;
sound/soc/codecs/cs35l56-shared.c
1615
cs35l56_base->onchip_spkid_pulls[i] = CS35L56_PAD_PULL_NONE;
sound/soc/codecs/cs35l56-shared.c
1618
cs35l56_base->onchip_spkid_pulls[i] = CS35L56_PAD_PULL_UP;
sound/soc/codecs/cs35l56-shared.c
1621
cs35l56_base->onchip_spkid_pulls[i] = CS35L56_PAD_PULL_DOWN;
sound/soc/codecs/cs35l56-shared.c
1624
dev_err(cs35l56_base->dev, "Invalid spkid pull %d\n", pulls[i]);
sound/soc/codecs/cs35l56-shared.c
1633
cs35l56_base->num_onchip_spkid_gpios = num_gpios;
sound/soc/codecs/cs35l56-shared.c
1634
cs35l56_base->num_onchip_spkid_pulls = num_pulls;
sound/soc/codecs/cs35l56-shared.c
1641
int cs35l56_configure_onchip_spkid_pads(struct cs35l56_base *cs35l56_base)
sound/soc/codecs/cs35l56-shared.c
1643
struct regmap *regmap = cs35l56_base->regmap;
sound/soc/codecs/cs35l56-shared.c
1648
KUNIT_STATIC_STUB_REDIRECT(cs35l56_configure_onchip_spkid_pads, cs35l56_base);
sound/soc/codecs/cs35l56-shared.c
1650
if (cs35l56_base->num_onchip_spkid_gpios == 0)
sound/soc/codecs/cs35l56-shared.c
1653
num_gpios = min(cs35l56_base->num_onchip_spkid_gpios,
sound/soc/codecs/cs35l56-shared.c
1654
ARRAY_SIZE(cs35l56_base->onchip_spkid_gpios));
sound/soc/codecs/cs35l56-shared.c
1655
num_pulls = min(cs35l56_base->num_onchip_spkid_pulls,
sound/soc/codecs/cs35l56-shared.c
1656
ARRAY_SIZE(cs35l56_base->onchip_spkid_pulls));
sound/soc/codecs/cs35l56-shared.c
1659
addr_offset = cs35l56_base->onchip_spkid_gpios[i] * sizeof(u32);
sound/soc/codecs/cs35l56-shared.c
1664
cs35l56_base->onchip_spkid_pulls[i]);
sound/soc/codecs/cs35l56-shared.c
1673
dev_err(cs35l56_base->dev, "GPIO%d set pad fail: %d\n",
sound/soc/codecs/cs35l56-shared.c
1674
cs35l56_base->onchip_spkid_gpios[i] + 1, ret);
sound/soc/codecs/cs35l56-shared.c
1681
dev_err(cs35l56_base->dev, "UPDT_GPIO_PRES failed:%d\n", ret);
sound/soc/codecs/cs35l56-shared.c
1692
int cs35l56_read_onchip_spkid(struct cs35l56_base *cs35l56_base)
sound/soc/codecs/cs35l56-shared.c
1694
struct regmap *regmap = cs35l56_base->regmap;
sound/soc/codecs/cs35l56-shared.c
1700
KUNIT_STATIC_STUB_REDIRECT(cs35l56_read_onchip_spkid, cs35l56_base);
sound/soc/codecs/cs35l56-shared.c
1702
if (cs35l56_base->num_onchip_spkid_gpios == 0)
sound/soc/codecs/cs35l56-shared.c
1705
num_gpios = min(cs35l56_base->num_onchip_spkid_gpios,
sound/soc/codecs/cs35l56-shared.c
1706
ARRAY_SIZE(cs35l56_base->onchip_spkid_gpios));
sound/soc/codecs/cs35l56-shared.c
1709
addr_offset = cs35l56_base->onchip_spkid_gpios[i] * sizeof(u32);
sound/soc/codecs/cs35l56-shared.c
1715
dev_err(cs35l56_base->dev, "GPIO%u set func fail: %d\n",
sound/soc/codecs/cs35l56-shared.c
1716
cs35l56_base->onchip_spkid_gpios[i] + 1, ret);
sound/soc/codecs/cs35l56-shared.c
1723
dev_err(cs35l56_base->dev, "GPIO%d status read failed: %d\n",
sound/soc/codecs/cs35l56-shared.c
1724
cs35l56_base->onchip_spkid_gpios[i] + 1, ret);
sound/soc/codecs/cs35l56-shared.c
1731
if (val & BIT(cs35l56_base->onchip_spkid_gpios[i]))
sound/soc/codecs/cs35l56-shared.c
1735
dev_dbg(cs35l56_base->dev, "Onchip GPIO Speaker ID = %d\n", speaker_id);
sound/soc/codecs/cs35l56-shared.c
379
static void cs35l56_set_fw_reg_table(struct cs35l56_base *cs35l56_base)
sound/soc/codecs/cs35l56-shared.c
381
switch (cs35l56_base->type) {
sound/soc/codecs/cs35l56-shared.c
383
switch (cs35l56_base->rev) {
sound/soc/codecs/cs35l56-shared.c
385
cs35l56_base->fw_reg = &cs35l56_fw_reg;
sound/soc/codecs/cs35l56-shared.c
388
cs35l56_base->fw_reg = &cs35l56_b2_fw_reg;
sound/soc/codecs/cs35l56-shared.c
393
cs35l56_base->fw_reg = &cs35l63_fw_reg;
sound/soc/codecs/cs35l56-shared.c
398
int cs35l56_mbox_send(struct cs35l56_base *cs35l56_base, unsigned int command)
sound/soc/codecs/cs35l56-shared.c
403
regmap_write(cs35l56_base->regmap, CS35L56_DSP_VIRTUAL1_MBOX_1, command);
sound/soc/codecs/cs35l56-shared.c
404
ret = regmap_read_poll_timeout(cs35l56_base->regmap, CS35L56_DSP_VIRTUAL1_MBOX_1,
sound/soc/codecs/cs35l56-shared.c
408
dev_warn(cs35l56_base->dev, "MBOX command %#x failed: %d\n", command, ret);
sound/soc/codecs/cs35l56-shared.c
416
int cs35l56_firmware_shutdown(struct cs35l56_base *cs35l56_base)
sound/soc/codecs/cs35l56-shared.c
421
ret = cs35l56_mbox_send(cs35l56_base, CS35L56_MBOX_CMD_SHUTDOWN);
sound/soc/codecs/cs35l56-shared.c
425
ret = regmap_read_poll_timeout(cs35l56_base->regmap,
sound/soc/codecs/cs35l56-shared.c
426
cs35l56_base->fw_reg->pm_cur_stat,
sound/soc/codecs/cs35l56-shared.c
431
dev_err(cs35l56_base->dev, "Failed to poll PM_CUR_STATE to 1 is %d (ret %d)\n",
sound/soc/codecs/cs35l56-shared.c
437
int cs35l56_wait_for_firmware_boot(struct cs35l56_base *cs35l56_base)
sound/soc/codecs/cs35l56-shared.c
451
cs35l56_base->regmap,
sound/soc/codecs/cs35l56-shared.c
452
cs35l56_base->fw_reg->halo_state,
sound/soc/codecs/cs35l56-shared.c
456
dev_err(cs35l56_base->dev, "Firmware boot timed out(%d): HALO_STATE=%#x\n",
sound/soc/codecs/cs35l56-shared.c
48
int cs35l56_set_asp_patch(struct cs35l56_base *cs35l56_base)
sound/soc/codecs/cs35l56-shared.c
488
static void cs35l56_spi_issue_bus_locked_reset(struct cs35l56_base *cs35l56_base,
sound/soc/codecs/cs35l56-shared.c
491
struct cs35l56_spi_payload *buf = cs35l56_base->spi_payload_buf;
sound/soc/codecs/cs35l56-shared.c
50
return regmap_register_patch(cs35l56_base->regmap, cs35l56_asp_patch,
sound/soc/codecs/cs35l56-shared.c
505
dev_warn(cs35l56_base->dev, "spi_sync failed: %d\n", ret);
sound/soc/codecs/cs35l56-shared.c
512
static void cs35l56_spi_system_reset(struct cs35l56_base *cs35l56_base)
sound/soc/codecs/cs35l56-shared.c
514
struct spi_device *spi = to_spi_device(cs35l56_base->dev);
sound/soc/codecs/cs35l56-shared.c
524
dev_warn(cs35l56_base->dev, "spi_bus_lock failed: %d\n", ret);
sound/soc/codecs/cs35l56-shared.c
528
cs35l56_spi_issue_bus_locked_reset(cs35l56_base, spi);
sound/soc/codecs/cs35l56-shared.c
543
cs35l56_base->regmap,
sound/soc/codecs/cs35l56-shared.c
547
dev_err(cs35l56_base->dev, "SPI reboot timed out(%d): MBOX2=%#x\n",
sound/soc/codecs/cs35l56-shared.c
567
void cs35l56_system_reset(struct cs35l56_base *cs35l56_base, bool is_soundwire)
sound/soc/codecs/cs35l56-shared.c
573
regcache_cache_only(cs35l56_base->regmap, true);
sound/soc/codecs/cs35l56-shared.c
575
if (cs35l56_is_spi(cs35l56_base)) {
sound/soc/codecs/cs35l56-shared.c
576
cs35l56_spi_system_reset(cs35l56_base);
sound/soc/codecs/cs35l56-shared.c
580
switch (cs35l56_base->type) {
sound/soc/codecs/cs35l56-shared.c
584
switch (cs35l56_base->rev) {
sound/soc/codecs/cs35l56-shared.c
586
regmap_multi_reg_write_bypassed(cs35l56_base->regmap,
sound/soc/codecs/cs35l56-shared.c
591
regmap_multi_reg_write_bypassed(cs35l56_base->regmap,
sound/soc/codecs/cs35l56-shared.c
598
regmap_multi_reg_write_bypassed(cs35l56_base->regmap,
sound/soc/codecs/cs35l56-shared.c
616
int cs35l56_irq_request(struct cs35l56_base *cs35l56_base, int irq)
sound/soc/codecs/cs35l56-shared.c
623
ret = devm_request_threaded_irq(cs35l56_base->dev, irq, NULL, cs35l56_irq,
sound/soc/codecs/cs35l56-shared.c
625
"cs35l56", cs35l56_base);
sound/soc/codecs/cs35l56-shared.c
627
cs35l56_base->irq = irq;
sound/soc/codecs/cs35l56-shared.c
629
dev_err(cs35l56_base->dev, "Failed to get IRQ: %d\n", ret);
sound/soc/codecs/cs35l56-shared.c
637
struct cs35l56_base *cs35l56_base = data;
sound/soc/codecs/cs35l56-shared.c
645
if (!cs35l56_base->init_done)
sound/soc/codecs/cs35l56-shared.c
648
mutex_lock(&cs35l56_base->irq_lock);
sound/soc/codecs/cs35l56-shared.c
650
rv = pm_runtime_resume_and_get(cs35l56_base->dev);
sound/soc/codecs/cs35l56-shared.c
652
dev_err(cs35l56_base->dev, "irq: failed to get pm_runtime: %d\n", rv);
sound/soc/codecs/cs35l56-shared.c
656
regmap_read(cs35l56_base->regmap, CS35L56_IRQ1_STATUS, &val);
sound/soc/codecs/cs35l56-shared.c
658
dev_dbg(cs35l56_base->dev, "Spurious IRQ: no pending interrupt\n");
sound/soc/codecs/cs35l56-shared.c
663
regmap_read(cs35l56_base->regmap, CS35L56_IRQ1_EINT_1, &status1);
sound/soc/codecs/cs35l56-shared.c
664
regmap_read(cs35l56_base->regmap, CS35L56_IRQ1_MASK_1, &mask1);
sound/soc/codecs/cs35l56-shared.c
666
regmap_write(cs35l56_base->regmap, CS35L56_IRQ1_EINT_1, status1);
sound/soc/codecs/cs35l56-shared.c
668
regmap_read(cs35l56_base->regmap, CS35L56_IRQ1_EINT_8, &status8);
sound/soc/codecs/cs35l56-shared.c
669
regmap_read(cs35l56_base->regmap, CS35L56_IRQ1_MASK_8, &mask8);
sound/soc/codecs/cs35l56-shared.c
671
regmap_write(cs35l56_base->regmap, CS35L56_IRQ1_EINT_8, status8);
sound/soc/codecs/cs35l56-shared.c
673
regmap_read(cs35l56_base->regmap, CS35L56_IRQ1_EINT_20, &status20);
sound/soc/codecs/cs35l56-shared.c
674
regmap_read(cs35l56_base->regmap, CS35L56_IRQ1_MASK_20, &mask20);
sound/soc/codecs/cs35l56-shared.c
677
regmap_write(cs35l56_base->regmap, CS35L56_IRQ1_MASK_20, 0xffffffff);
sound/soc/codecs/cs35l56-shared.c
679
dev_dbg(cs35l56_base->dev, "%s: %#x %#x\n", __func__, status1, status8);
sound/soc/codecs/cs35l56-shared.c
686
dev_crit(cs35l56_base->dev, "Amp short error\n");
sound/soc/codecs/cs35l56-shared.c
689
dev_crit(cs35l56_base->dev, "Overtemp error\n");
sound/soc/codecs/cs35l56-shared.c
694
pm_runtime_put(cs35l56_base->dev);
sound/soc/codecs/cs35l56-shared.c
696
mutex_unlock(&cs35l56_base->irq_lock);
sound/soc/codecs/cs35l56-shared.c
702
int cs35l56_is_fw_reload_needed(struct cs35l56_base *cs35l56_base)
sound/soc/codecs/cs35l56-shared.c
712
if (cs35l56_base->secured)
sound/soc/codecs/cs35l56-shared.c
715
ret = pm_runtime_resume_and_get(cs35l56_base->dev);
sound/soc/codecs/cs35l56-shared.c
717
dev_err(cs35l56_base->dev, "Failed to runtime_get: %d\n", ret);
sound/soc/codecs/cs35l56-shared.c
721
ret = regmap_read(cs35l56_base->regmap,
sound/soc/codecs/cs35l56-shared.c
722
cs35l56_base->fw_reg->prot_sts,
sound/soc/codecs/cs35l56-shared.c
725
dev_err(cs35l56_base->dev, "Failed to read PROTECTION_STATUS: %d\n", ret);
sound/soc/codecs/cs35l56-shared.c
729
pm_runtime_put_autosuspend(cs35l56_base->dev);
sound/soc/codecs/cs35l56-shared.c
740
static void cs35l56_issue_wake_event(struct cs35l56_base *cs35l56_base)
sound/soc/codecs/cs35l56-shared.c
752
regmap_read_bypassed(cs35l56_base->regmap, CS35L56_IRQ1_STATUS, &val);
sound/soc/codecs/cs35l56-shared.c
756
regmap_read_bypassed(cs35l56_base->regmap, CS35L56_IRQ1_STATUS, &val);
sound/soc/codecs/cs35l56-shared.c
761
static int cs35l56_wait_for_ps3(struct cs35l56_base *cs35l56_base)
sound/soc/codecs/cs35l56-shared.c
766
ret = regmap_read_poll_timeout(cs35l56_base->regmap,
sound/soc/codecs/cs35l56-shared.c
767
cs35l56_base->fw_reg->transducer_actual_ps,
sound/soc/codecs/cs35l56-shared.c
772
dev_warn(cs35l56_base->dev, "PS3 wait failed: %d\n", ret);
sound/soc/codecs/cs35l56-shared.c
777
int cs35l56_runtime_suspend_common(struct cs35l56_base *cs35l56_base)
sound/soc/codecs/cs35l56-shared.c
779
if (!cs35l56_base->init_done)
sound/soc/codecs/cs35l56-shared.c
783
cs35l56_wait_for_ps3(cs35l56_base);
sound/soc/codecs/cs35l56-shared.c
786
regmap_write(cs35l56_base->regmap, CS35L56_IRQ1_EINT_4, CS35L56_OTP_BOOT_DONE_MASK);
sound/soc/codecs/cs35l56-shared.c
788
if (!cs35l56_base->can_hibernate) {
sound/soc/codecs/cs35l56-shared.c
789
regcache_cache_only(cs35l56_base->regmap, true);
sound/soc/codecs/cs35l56-shared.c
790
dev_dbg(cs35l56_base->dev, "Suspended: no hibernate");
sound/soc/codecs/cs35l56-shared.c
799
regcache_cache_only(cs35l56_base->regmap, true);
sound/soc/codecs/cs35l56-shared.c
801
regmap_multi_reg_write_bypassed(cs35l56_base->regmap,
sound/soc/codecs/cs35l56-shared.c
805
dev_dbg(cs35l56_base->dev, "Suspended: hibernate");
sound/soc/codecs/cs35l56-shared.c
81
int cs35l56_set_patch(struct cs35l56_base *cs35l56_base)
sound/soc/codecs/cs35l56-shared.c
811
int cs35l56_runtime_resume_common(struct cs35l56_base *cs35l56_base, bool is_soundwire)
sound/soc/codecs/cs35l56-shared.c
816
if (!cs35l56_base->init_done)
sound/soc/codecs/cs35l56-shared.c
819
if (!cs35l56_base->can_hibernate)
sound/soc/codecs/cs35l56-shared.c
824
cs35l56_issue_wake_event(cs35l56_base);
sound/soc/codecs/cs35l56-shared.c
827
ret = cs35l56_wait_for_firmware_boot(cs35l56_base);
sound/soc/codecs/cs35l56-shared.c
829
dev_err(cs35l56_base->dev, "Hibernate wake failed: %d\n", ret);
sound/soc/codecs/cs35l56-shared.c
833
regcache_cache_only(cs35l56_base->regmap, false);
sound/soc/codecs/cs35l56-shared.c
835
ret = cs35l56_mbox_send(cs35l56_base, CS35L56_MBOX_CMD_PREVENT_AUTO_HIBERNATE);
sound/soc/codecs/cs35l56-shared.c
840
regmap_read(cs35l56_base->regmap, CS35L56_IRQ1_EINT_4, &val);
sound/soc/codecs/cs35l56-shared.c
842
dev_dbg(cs35l56_base->dev, "Registers reset in suspend\n");
sound/soc/codecs/cs35l56-shared.c
843
regcache_mark_dirty(cs35l56_base->regmap);
sound/soc/codecs/cs35l56-shared.c
846
regcache_sync(cs35l56_base->regmap);
sound/soc/codecs/cs35l56-shared.c
848
dev_dbg(cs35l56_base->dev, "Resumed");
sound/soc/codecs/cs35l56-shared.c
85
ret = regmap_register_patch(cs35l56_base->regmap, cs35l56_patch,
sound/soc/codecs/cs35l56-shared.c
853
regcache_cache_only(cs35l56_base->regmap, true);
sound/soc/codecs/cs35l56-shared.c
855
regmap_multi_reg_write_bypassed(cs35l56_base->regmap,
sound/soc/codecs/cs35l56-shared.c
871
void cs35l56_init_cs_dsp(struct cs35l56_base *cs35l56_base, struct cs_dsp *cs_dsp)
sound/soc/codecs/cs35l56-shared.c
876
cs_dsp->dev = cs35l56_base->dev;
sound/soc/codecs/cs35l56-shared.c
877
cs_dsp->regmap = cs35l56_base->regmap;
sound/soc/codecs/cs35l56-shared.c
884
cs35l56_base->dsp = cs_dsp;
sound/soc/codecs/cs35l56-shared.c
899
static int cs35l56_read_silicon_uid(struct cs35l56_base *cs35l56_base)
sound/soc/codecs/cs35l56-shared.c
905
ret = regmap_raw_read(cs35l56_base->regmap, CS35L56_OTP_MEM_53, &pte, sizeof(pte));
sound/soc/codecs/cs35l56-shared.c
907
dev_err(cs35l56_base->dev, "Failed to read OTP: %d\n", ret);
sound/soc/codecs/cs35l56-shared.c
91
switch (cs35l56_base->type) {
sound/soc/codecs/cs35l56-shared.c
916
cs35l56_base->silicon_uid = unique_id;
sound/soc/codecs/cs35l56-shared.c
921
static int cs35l63_read_silicon_uid(struct cs35l56_base *cs35l56_base)
sound/soc/codecs/cs35l56-shared.c
927
ret = regmap_bulk_read(cs35l56_base->regmap, CS35L56_DIE_STS1, tmp, ARRAY_SIZE(tmp));
sound/soc/codecs/cs35l56-shared.c
929
dev_err(cs35l56_base->dev, "Cannot obtain CS35L56_DIE_STS: %d\n", ret);
sound/soc/codecs/cs35l56-shared.c
937
cs35l56_base->silicon_uid = unique_id;
sound/soc/codecs/cs35l56-shared.c
95
ret = regmap_register_patch(cs35l56_base->regmap, cs35l56_patch_fw,
sound/soc/codecs/cs35l56-shared.c
962
int cs35l56_get_calibration(struct cs35l56_base *cs35l56_base)
sound/soc/codecs/cs35l56-shared.c
967
if (cs35l56_base->secured)
sound/soc/codecs/cs35l56-shared.c
970
ret = cs_amp_get_efi_calibration_data(cs35l56_base->dev,
sound/soc/codecs/cs35l56-shared.c
971
cs35l56_base->silicon_uid,
sound/soc/codecs/cs35l56-shared.c
972
cs35l56_base->cal_index,
sound/soc/codecs/cs35l56-shared.c
973
&cs35l56_base->cal_data);
sound/soc/codecs/cs35l56-shared.c
982
cs35l56_base->cal_data_valid = true;
sound/soc/codecs/cs35l56-shared.c
988
int cs35l56_stash_calibration(struct cs35l56_base *cs35l56_base,
sound/soc/codecs/cs35l56-shared.c
99
ret = regmap_register_patch(cs35l56_base->regmap, cs35l63_patch_fw,
sound/soc/codecs/cs35l56-shared.c
996
if (cs_amp_cal_target_u64(data) != cs35l56_base->silicon_uid) {
sound/soc/codecs/cs35l56-shared.c
997
dev_err(cs35l56_base->dev, "cal_data not for this silicon ID\n");
sound/soc/codecs/cs35l56-test.c
374
static int cs35l56_test_dummy_read_onchip_spkid(struct cs35l56_base *cs35l56_base)
sound/soc/codecs/cs35l56-test.c
384
static int cs35l56_test_dummy_configure_onchip_spkid_pads(struct cs35l56_base *cs35l56_base)
sound/soc/codecs/cs35l56.c
1028
struct cs35l56_base *cs35l56_base = file->private_data;
sound/soc/codecs/cs35l56.c
1029
struct cs35l56_private *cs35l56 = cs35l56_private_from_base(cs35l56_base);
sound/soc/codecs/cs35l56.c
938
struct cs35l56_base *cs35l56_base = file->private_data;
sound/soc/codecs/cs35l56.c
939
struct cs35l56_private *cs35l56 = cs35l56_private_from_base(cs35l56_base);
sound/soc/codecs/cs35l56.c
960
struct cs35l56_base *cs35l56_base = file->private_data;
sound/soc/codecs/cs35l56.c
961
struct cs35l56_private *cs35l56 = cs35l56_private_from_base(cs35l56_base);
sound/soc/codecs/cs35l56.c
979
struct cs35l56_base *cs35l56_base = file->private_data;
sound/soc/codecs/cs35l56.c
980
struct cs35l56_private *cs35l56 = cs35l56_private_from_base(cs35l56_base);
sound/soc/codecs/cs35l56.h
34
struct cs35l56_base base;
sound/soc/codecs/cs35l56.h
58
static inline struct cs35l56_private *cs35l56_private_from_base(struct cs35l56_base *cs35l56_base)
sound/soc/codecs/cs35l56.h
60
return container_of(cs35l56_base, struct cs35l56_private, base);
sound/soc/codecs/cs35l56.h
72
int cs35l56_irq_request(struct cs35l56_base *cs35l56_base, int irq);