Symbol: cs42l43
drivers/mfd/cs42l43-i2c.c
40
struct cs42l43 *cs42l43;
drivers/mfd/cs42l43-i2c.c
42
cs42l43 = devm_kzalloc(&i2c->dev, sizeof(*cs42l43), GFP_KERNEL);
drivers/mfd/cs42l43-i2c.c
43
if (!cs42l43)
drivers/mfd/cs42l43-i2c.c
46
cs42l43->dev = &i2c->dev;
drivers/mfd/cs42l43-i2c.c
47
cs42l43->irq = i2c->irq;
drivers/mfd/cs42l43-i2c.c
49
cs42l43->attached = true;
drivers/mfd/cs42l43-i2c.c
51
cs42l43->regmap = devm_regmap_init_i2c(i2c, &cs42l43_i2c_regmap);
drivers/mfd/cs42l43-i2c.c
52
if (IS_ERR(cs42l43->regmap))
drivers/mfd/cs42l43-i2c.c
53
return dev_err_probe(cs42l43->dev, PTR_ERR(cs42l43->regmap),
drivers/mfd/cs42l43-i2c.c
56
return cs42l43_dev_probe(cs42l43);
drivers/mfd/cs42l43-sdw.c
104
cs42l43->attached = true;
drivers/mfd/cs42l43-sdw.c
106
complete(&cs42l43->device_attach);
drivers/mfd/cs42l43-sdw.c
109
dev_dbg(cs42l43->dev, "Device detach\n");
drivers/mfd/cs42l43-sdw.c
111
cs42l43->attached = false;
drivers/mfd/cs42l43-sdw.c
113
reinit_completion(&cs42l43->device_attach);
drivers/mfd/cs42l43-sdw.c
114
complete(&cs42l43->device_detach);
drivers/mfd/cs42l43-sdw.c
143
struct cs42l43 *cs42l43 = dev_get_drvdata(&sdw->dev);
drivers/mfd/cs42l43-sdw.c
146
mutex_lock(&cs42l43->pll_lock);
drivers/mfd/cs42l43-sdw.c
148
if (cs42l43->sdw_freq != params->curr_dr_freq / 2) {
drivers/mfd/cs42l43-sdw.c
149
if (cs42l43->sdw_pll_active) {
drivers/mfd/cs42l43-sdw.c
150
dev_err(cs42l43->dev,
drivers/mfd/cs42l43-sdw.c
154
cs42l43->sdw_freq = params->curr_dr_freq / 2;
drivers/mfd/cs42l43-sdw.c
158
mutex_unlock(&cs42l43->pll_lock);
drivers/mfd/cs42l43-sdw.c
172
struct cs42l43 *cs42l43;
drivers/mfd/cs42l43-sdw.c
175
cs42l43 = devm_kzalloc(dev, sizeof(*cs42l43), GFP_KERNEL);
drivers/mfd/cs42l43-sdw.c
176
if (!cs42l43)
drivers/mfd/cs42l43-sdw.c
179
cs42l43->dev = dev;
drivers/mfd/cs42l43-sdw.c
180
cs42l43->sdw = sdw;
drivers/mfd/cs42l43-sdw.c
182
cs42l43->regmap = devm_regmap_init_sdw(sdw, &cs42l43_sdw_regmap);
drivers/mfd/cs42l43-sdw.c
183
if (IS_ERR(cs42l43->regmap))
drivers/mfd/cs42l43-sdw.c
184
return dev_err_probe(cs42l43->dev, PTR_ERR(cs42l43->regmap),
drivers/mfd/cs42l43-sdw.c
187
return cs42l43_dev_probe(cs42l43);
drivers/mfd/cs42l43-sdw.c
95
struct cs42l43 *cs42l43 = dev_get_drvdata(&sdw->dev);
drivers/mfd/cs42l43-sdw.c
99
dev_dbg(cs42l43->dev, "Device attach\n");
drivers/mfd/cs42l43.c
1005
regulator_bulk_disable(CS42L43_N_SUPPLIES, cs42l43->core_supplies);
drivers/mfd/cs42l43.c
1007
gpiod_set_raw_value_cansleep(cs42l43->reset, 0);
drivers/mfd/cs42l43.c
1008
regulator_disable(cs42l43->vdd_p);
drivers/mfd/cs42l43.c
1013
static int cs42l43_power_down(struct cs42l43 *cs42l43)
drivers/mfd/cs42l43.c
1017
ret = regulator_disable(cs42l43->vdd_d);
drivers/mfd/cs42l43.c
1019
dev_err(cs42l43->dev, "Failed to disable vdd-d: %d\n", ret);
drivers/mfd/cs42l43.c
1023
ret = regulator_bulk_disable(CS42L43_N_SUPPLIES, cs42l43->core_supplies);
drivers/mfd/cs42l43.c
1025
dev_err(cs42l43->dev, "Failed to disable core supplies: %d\n", ret);
drivers/mfd/cs42l43.c
1029
gpiod_set_raw_value_cansleep(cs42l43->reset, 0);
drivers/mfd/cs42l43.c
1031
ret = regulator_disable(cs42l43->vdd_p);
drivers/mfd/cs42l43.c
1033
dev_err(cs42l43->dev, "Failed to disable vdd-p: %d\n", ret);
drivers/mfd/cs42l43.c
1042
struct cs42l43 *cs42l43 = data;
drivers/mfd/cs42l43.c
1044
cancel_work_sync(&cs42l43->boot_work);
drivers/mfd/cs42l43.c
1046
cs42l43_power_down(cs42l43);
drivers/mfd/cs42l43.c
1049
int cs42l43_dev_probe(struct cs42l43 *cs42l43)
drivers/mfd/cs42l43.c
1053
dev_set_drvdata(cs42l43->dev, cs42l43);
drivers/mfd/cs42l43.c
1055
mutex_init(&cs42l43->pll_lock);
drivers/mfd/cs42l43.c
1056
init_completion(&cs42l43->device_attach);
drivers/mfd/cs42l43.c
1057
init_completion(&cs42l43->device_detach);
drivers/mfd/cs42l43.c
1058
init_completion(&cs42l43->firmware_download);
drivers/mfd/cs42l43.c
1059
INIT_WORK(&cs42l43->boot_work, cs42l43_boot_work);
drivers/mfd/cs42l43.c
1061
regcache_cache_only(cs42l43->regmap, true);
drivers/mfd/cs42l43.c
1063
cs42l43->reset = devm_gpiod_get_optional(cs42l43->dev, "reset", GPIOD_OUT_HIGH);
drivers/mfd/cs42l43.c
1064
if (IS_ERR(cs42l43->reset))
drivers/mfd/cs42l43.c
1065
return dev_err_probe(cs42l43->dev, PTR_ERR(cs42l43->reset),
drivers/mfd/cs42l43.c
1068
gpiod_set_raw_value_cansleep(cs42l43->reset, 0);
drivers/mfd/cs42l43.c
1070
cs42l43->vdd_p = devm_regulator_get(cs42l43->dev, "vdd-p");
drivers/mfd/cs42l43.c
1071
if (IS_ERR(cs42l43->vdd_p))
drivers/mfd/cs42l43.c
1072
return dev_err_probe(cs42l43->dev, PTR_ERR(cs42l43->vdd_p),
drivers/mfd/cs42l43.c
1075
cs42l43->vdd_d = devm_regulator_get(cs42l43->dev, "vdd-d");
drivers/mfd/cs42l43.c
1076
if (IS_ERR(cs42l43->vdd_d))
drivers/mfd/cs42l43.c
1077
return dev_err_probe(cs42l43->dev, PTR_ERR(cs42l43->vdd_d),
drivers/mfd/cs42l43.c
1083
cs42l43->core_supplies[i].supply = cs42l43_core_supplies[i];
drivers/mfd/cs42l43.c
1085
ret = devm_regulator_bulk_get(cs42l43->dev, CS42L43_N_SUPPLIES,
drivers/mfd/cs42l43.c
1086
cs42l43->core_supplies);
drivers/mfd/cs42l43.c
1088
return dev_err_probe(cs42l43->dev, ret,
drivers/mfd/cs42l43.c
1091
ret = cs42l43_power_up(cs42l43);
drivers/mfd/cs42l43.c
1095
ret = devm_add_action_or_reset(cs42l43->dev, cs42l43_dev_remove, cs42l43);
drivers/mfd/cs42l43.c
1099
pm_runtime_set_autosuspend_delay(cs42l43->dev, CS42L43_AUTOSUSPEND_TIME_MS);
drivers/mfd/cs42l43.c
1100
pm_runtime_use_autosuspend(cs42l43->dev);
drivers/mfd/cs42l43.c
1101
pm_runtime_set_active(cs42l43->dev);
drivers/mfd/cs42l43.c
1106
pm_runtime_get_noresume(cs42l43->dev);
drivers/mfd/cs42l43.c
1107
ret = devm_pm_runtime_enable(cs42l43->dev);
drivers/mfd/cs42l43.c
1111
queue_work(system_long_wq, &cs42l43->boot_work);
drivers/mfd/cs42l43.c
1119
struct cs42l43 *cs42l43 = dev_get_drvdata(dev);
drivers/mfd/cs42l43.c
1124
dev_err(cs42l43->dev, "Failed to resume for suspend: %d\n", ret);
drivers/mfd/cs42l43.c
1128
disable_irq(cs42l43->irq);
drivers/mfd/cs42l43.c
1132
dev_err(cs42l43->dev, "Failed to force suspend: %d\n", ret);
drivers/mfd/cs42l43.c
1139
ret = cs42l43_power_down(cs42l43);
drivers/mfd/cs42l43.c
1148
struct cs42l43 *cs42l43 = dev_get_drvdata(dev);
drivers/mfd/cs42l43.c
1150
enable_irq(cs42l43->irq);
drivers/mfd/cs42l43.c
1157
struct cs42l43 *cs42l43 = dev_get_drvdata(dev);
drivers/mfd/cs42l43.c
1159
disable_irq(cs42l43->irq);
drivers/mfd/cs42l43.c
1166
struct cs42l43 *cs42l43 = dev_get_drvdata(dev);
drivers/mfd/cs42l43.c
1169
ret = cs42l43_power_up(cs42l43);
drivers/mfd/cs42l43.c
1175
dev_err(cs42l43->dev, "Failed to force resume: %d\n", ret);
drivers/mfd/cs42l43.c
1179
enable_irq(cs42l43->irq);
drivers/mfd/cs42l43.c
1186
struct cs42l43 *cs42l43 = dev_get_drvdata(dev);
drivers/mfd/cs42l43.c
1193
regcache_cache_only(cs42l43->regmap, true);
drivers/mfd/cs42l43.c
1200
struct cs42l43 *cs42l43 = dev_get_drvdata(dev);
drivers/mfd/cs42l43.c
1204
ret = cs42l43_wait_for_attach(cs42l43);
drivers/mfd/cs42l43.c
1208
ret = regmap_read(cs42l43->regmap, CS42L43_RELID, &reset_canary);
drivers/mfd/cs42l43.c
1210
dev_err(cs42l43->dev, "Failed to check reset canary: %d\n", ret);
drivers/mfd/cs42l43.c
1219
ret = cs42l43_mcu_update(cs42l43);
drivers/mfd/cs42l43.c
1223
regcache_mark_dirty(cs42l43->regmap);
drivers/mfd/cs42l43.c
1226
ret = regcache_sync(cs42l43->regmap);
drivers/mfd/cs42l43.c
1228
dev_err(cs42l43->dev, "Failed to restore register cache: %d\n", ret);
drivers/mfd/cs42l43.c
1235
regcache_cache_only(cs42l43->regmap, true);
drivers/mfd/cs42l43.c
530
static int cs42l43_soft_reset(struct cs42l43 *cs42l43)
drivers/mfd/cs42l43.c
536
reinit_completion(&cs42l43->device_detach);
drivers/mfd/cs42l43.c
542
regcache_cache_only(cs42l43->regmap, true);
drivers/mfd/cs42l43.c
543
regmap_multi_reg_write_bypassed(cs42l43->regmap, reset, ARRAY_SIZE(reset));
drivers/mfd/cs42l43.c
547
if (cs42l43->sdw) {
drivers/mfd/cs42l43.c
551
time = wait_for_completion_timeout(&cs42l43->device_detach, timeout);
drivers/mfd/cs42l43.c
553
dev_err(cs42l43->dev, "Timed out waiting for device detach\n");
drivers/mfd/cs42l43.c
565
static int cs42l43_wait_for_attach(struct cs42l43 *cs42l43)
drivers/mfd/cs42l43.c
567
if (!cs42l43->attached) {
drivers/mfd/cs42l43.c
571
time = wait_for_completion_timeout(&cs42l43->device_attach, timeout);
drivers/mfd/cs42l43.c
573
dev_err(cs42l43->dev, "Timed out waiting for device re-attach\n");
drivers/mfd/cs42l43.c
578
regcache_cache_only(cs42l43->regmap, false);
drivers/mfd/cs42l43.c
581
if (cs42l43->sdw)
drivers/mfd/cs42l43.c
582
regmap_write(cs42l43->regmap, CS42L43_OSC_DIV_SEL,
drivers/mfd/cs42l43.c
597
static int cs42l43_mcu_stage_2_3(struct cs42l43 *cs42l43, bool shadow)
drivers/mfd/cs42l43.c
606
regmap_write(cs42l43->regmap, need_reg, 0);
drivers/mfd/cs42l43.c
608
ret = regmap_read_poll_timeout(cs42l43->regmap, CS42L43_BOOT_STATUS,
drivers/mfd/cs42l43.c
612
dev_err(cs42l43->dev, "Failed to move to stage 3: %d, 0x%x\n", ret, val);
drivers/mfd/cs42l43.c
632
static int cs42l43_mcu_stage_3_2(struct cs42l43 *cs42l43)
drivers/mfd/cs42l43.c
634
regmap_write(cs42l43->regmap, CS42L43_FW_MISSION_CTRL_NEED_CONFIGS,
drivers/mfd/cs42l43.c
636
regmap_write(cs42l43->regmap, CS42L43_FW_MISSION_CTRL_HAVE_CONFIGS, 0);
drivers/mfd/cs42l43.c
638
return cs42l43_soft_reset(cs42l43);
drivers/mfd/cs42l43.c
645
static int cs42l43_mcu_disable(struct cs42l43 *cs42l43)
drivers/mfd/cs42l43.c
650
regmap_write(cs42l43->regmap, CS42L43_FW_MISSION_CTRL_MM_MCU_CFG_REG,
drivers/mfd/cs42l43.c
652
regmap_write(cs42l43->regmap, CS42L43_FW_MISSION_CTRL_MM_CTRL_SELECTION,
drivers/mfd/cs42l43.c
654
regmap_write(cs42l43->regmap, CS42L43_MCU_SW_INTERRUPT, CS42L43_CONTROL_IND_MASK);
drivers/mfd/cs42l43.c
655
regmap_write(cs42l43->regmap, CS42L43_MCU_SW_INTERRUPT, 0);
drivers/mfd/cs42l43.c
657
ret = regmap_read_poll_timeout(cs42l43->regmap, CS42L43_SOFT_INT_SHADOW, val,
drivers/mfd/cs42l43.c
661
dev_err(cs42l43->dev, "Failed to disable firmware: %d, 0x%x\n", ret, val);
drivers/mfd/cs42l43.c
666
return cs42l43_soft_reset(cs42l43);
drivers/mfd/cs42l43.c
674
struct cs42l43 *cs42l43 = context;
drivers/mfd/cs42l43.c
680
dev_err(cs42l43->dev, "Failed to load firmware\n");
drivers/mfd/cs42l43.c
681
cs42l43->firmware_error = -ENODEV;
drivers/mfd/cs42l43.c
689
dev_err(cs42l43->dev, "Bad firmware file format: %d\n", hdr->version);
drivers/mfd/cs42l43.c
690
cs42l43->firmware_error = -EINVAL;
drivers/mfd/cs42l43.c
694
regmap_write(cs42l43->regmap, CS42L43_PATCH_START_ADDR, loadaddr);
drivers/mfd/cs42l43.c
695
regmap_bulk_write(cs42l43->regmap, loadaddr + CS42L43_MCU_UPDATE_OFFSET,
drivers/mfd/cs42l43.c
698
regmap_write(cs42l43->regmap, CS42L43_MCU_SW_INTERRUPT, CS42L43_PATCH_IND_MASK);
drivers/mfd/cs42l43.c
699
regmap_write(cs42l43->regmap, CS42L43_MCU_SW_INTERRUPT, 0);
drivers/mfd/cs42l43.c
701
ret = regmap_read_poll_timeout(cs42l43->regmap, CS42L43_SOFT_INT_SHADOW, val,
drivers/mfd/cs42l43.c
705
dev_err(cs42l43->dev, "Failed to update firmware: %d, 0x%x\n", ret, val);
drivers/mfd/cs42l43.c
706
cs42l43->firmware_error = ret;
drivers/mfd/cs42l43.c
713
complete(&cs42l43->firmware_download);
drivers/mfd/cs42l43.c
716
static int cs42l43_mcu_is_hw_compatible(struct cs42l43 *cs42l43,
drivers/mfd/cs42l43.c
726
dev_err(cs42l43->dev, "Firmware too old to support disable\n");
drivers/mfd/cs42l43.c
739
static int cs42l43_mcu_update_step(struct cs42l43 *cs42l43)
drivers/mfd/cs42l43.c
746
regmap_read(cs42l43->regmap, CS42L43_SOFT_INT, &mcu_rev);
drivers/mfd/cs42l43.c
748
ret = regmap_read(cs42l43->regmap, CS42L43_BOOT_STATUS, &boot_status);
drivers/mfd/cs42l43.c
750
dev_err(cs42l43->dev, "Failed to read boot status: %d\n", ret);
drivers/mfd/cs42l43.c
754
ret = regmap_read(cs42l43->regmap, CS42L43_MCU_SW_REV, &mcu_rev);
drivers/mfd/cs42l43.c
756
dev_err(cs42l43->dev, "Failed to read firmware revision: %d\n", ret);
drivers/mfd/cs42l43.c
780
ret = regmap_read(cs42l43->regmap, CS42L43_BOOT_CONTROL, &secure_cfg);
drivers/mfd/cs42l43.c
782
dev_err(cs42l43->dev, "Failed to read security settings: %d\n", ret);
drivers/mfd/cs42l43.c
786
cs42l43->hw_lock = secure_cfg & CS42L43_LOCK_HW_STS_MASK;
drivers/mfd/cs42l43.c
788
if (!patched && cs42l43->hw_lock) {
drivers/mfd/cs42l43.c
789
dev_err(cs42l43->dev, "Unpatched secure device\n");
drivers/mfd/cs42l43.c
793
dev_dbg(cs42l43->dev, "Firmware(0x%x, 0x%x) in boot stage %d\n",
drivers/mfd/cs42l43.c
800
"cs42l43.bin", cs42l43->dev,
drivers/mfd/cs42l43.c
801
GFP_KERNEL, cs42l43,
drivers/mfd/cs42l43.c
804
dev_err(cs42l43->dev, "Failed to request firmware: %d\n", ret);
drivers/mfd/cs42l43.c
808
wait_for_completion(&cs42l43->firmware_download);
drivers/mfd/cs42l43.c
810
if (cs42l43->firmware_error)
drivers/mfd/cs42l43.c
811
return cs42l43->firmware_error;
drivers/mfd/cs42l43.c
815
return cs42l43_mcu_stage_2_3(cs42l43, shadow);
drivers/mfd/cs42l43.c
819
ret = cs42l43_mcu_is_hw_compatible(cs42l43, mcu_rev, bios_rev);
drivers/mfd/cs42l43.c
823
return cs42l43_mcu_disable(cs42l43);
drivers/mfd/cs42l43.c
825
return cs42l43_mcu_stage_3_2(cs42l43);
drivers/mfd/cs42l43.c
830
dev_err(cs42l43->dev, "Invalid boot status: %d\n", boot_status);
drivers/mfd/cs42l43.c
838
static int cs42l43_mcu_update(struct cs42l43 *cs42l43)
drivers/mfd/cs42l43.c
843
ret = cs42l43_mcu_update_step(cs42l43);
drivers/mfd/cs42l43.c
847
ret = cs42l43_wait_for_attach(cs42l43);
drivers/mfd/cs42l43.c
852
dev_err(cs42l43->dev, "Failed retrying update\n");
drivers/mfd/cs42l43.c
856
static int cs42l43_irq_config(struct cs42l43 *cs42l43)
drivers/mfd/cs42l43.c
862
if (cs42l43->sdw)
drivers/mfd/cs42l43.c
863
cs42l43->irq = cs42l43->sdw->irq;
drivers/mfd/cs42l43.c
865
cs42l43->irq_chip = cs42l43_irq_chip;
drivers/mfd/cs42l43.c
866
cs42l43->irq_chip.irq_drv_data = cs42l43;
drivers/mfd/cs42l43.c
868
irq_data = irq_get_irq_data(cs42l43->irq);
drivers/mfd/cs42l43.c
870
dev_err(cs42l43->dev, "Invalid IRQ: %d\n", cs42l43->irq);
drivers/mfd/cs42l43.c
889
ret = devm_regmap_add_irq_chip(cs42l43->dev, cs42l43->regmap,
drivers/mfd/cs42l43.c
890
cs42l43->irq, irq_flags, 0,
drivers/mfd/cs42l43.c
891
&cs42l43->irq_chip, &cs42l43->irq_data);
drivers/mfd/cs42l43.c
893
dev_err(cs42l43->dev, "Failed to add IRQ chip: %d\n", ret);
drivers/mfd/cs42l43.c
897
dev_dbg(cs42l43->dev, "Configured IRQ %d with flags 0x%lx\n",
drivers/mfd/cs42l43.c
898
cs42l43->irq, irq_flags);
drivers/mfd/cs42l43.c
905
struct cs42l43 *cs42l43 = container_of(work, struct cs42l43, boot_work);
drivers/mfd/cs42l43.c
909
ret = cs42l43_wait_for_attach(cs42l43);
drivers/mfd/cs42l43.c
913
ret = regmap_read(cs42l43->regmap, CS42L43_DEVID, &devid);
drivers/mfd/cs42l43.c
915
dev_err(cs42l43->dev, "Failed to read devid: %d\n", ret);
drivers/mfd/cs42l43.c
923
dev_err(cs42l43->dev, "Unrecognised devid: 0x%06x\n", devid);
drivers/mfd/cs42l43.c
927
ret = regmap_read(cs42l43->regmap, CS42L43_REVID, &revid);
drivers/mfd/cs42l43.c
929
dev_err(cs42l43->dev, "Failed to read rev: %d\n", ret);
drivers/mfd/cs42l43.c
933
ret = regmap_read(cs42l43->regmap, CS42L43_OTP_REVISION_ID, &otp);
drivers/mfd/cs42l43.c
935
dev_err(cs42l43->dev, "Failed to read otp rev: %d\n", ret);
drivers/mfd/cs42l43.c
939
dev_info(cs42l43->dev,
drivers/mfd/cs42l43.c
942
ret = cs42l43_mcu_update(cs42l43);
drivers/mfd/cs42l43.c
946
ret = regmap_register_patch(cs42l43->regmap, cs42l43_reva_patch,
drivers/mfd/cs42l43.c
949
dev_err(cs42l43->dev, "Failed to apply register patch: %d\n", ret);
drivers/mfd/cs42l43.c
953
ret = cs42l43_irq_config(cs42l43);
drivers/mfd/cs42l43.c
957
ret = devm_mfd_add_devices(cs42l43->dev, PLATFORM_DEVID_NONE,
drivers/mfd/cs42l43.c
961
dev_err(cs42l43->dev, "Failed to add subdevices: %d\n", ret);
drivers/mfd/cs42l43.c
965
pm_runtime_put_autosuspend(cs42l43->dev);
drivers/mfd/cs42l43.c
970
pm_runtime_put_sync(cs42l43->dev);
drivers/mfd/cs42l43.c
973
static int cs42l43_power_up(struct cs42l43 *cs42l43)
drivers/mfd/cs42l43.c
977
ret = regulator_enable(cs42l43->vdd_p);
drivers/mfd/cs42l43.c
979
dev_err(cs42l43->dev, "Failed to enable vdd-p: %d\n", ret);
drivers/mfd/cs42l43.c
986
gpiod_set_raw_value_cansleep(cs42l43->reset, 1);
drivers/mfd/cs42l43.c
988
ret = regulator_bulk_enable(CS42L43_N_SUPPLIES, cs42l43->core_supplies);
drivers/mfd/cs42l43.c
990
dev_err(cs42l43->dev, "Failed to enable core supplies: %d\n", ret);
drivers/mfd/cs42l43.c
994
ret = regulator_enable(cs42l43->vdd_d);
drivers/mfd/cs42l43.c
996
dev_err(cs42l43->dev, "Failed to enable vdd-d: %d\n", ret);
drivers/mfd/cs42l43.h
18
struct cs42l43;
drivers/mfd/cs42l43.h
27
int cs42l43_dev_probe(struct cs42l43 *cs42l43);
drivers/pinctrl/cirrus/pinctrl-cs42l43.c
542
struct cs42l43 *cs42l43 = dev_get_drvdata(pdev->dev.parent);
drivers/pinctrl/cirrus/pinctrl-cs42l43.c
545
struct fwnode_handle *fwnode = dev_fwnode(cs42l43->dev);
drivers/pinctrl/cirrus/pinctrl-cs42l43.c
553
priv->regmap = cs42l43->regmap;
drivers/pinctrl/cirrus/pinctrl-cs42l43.c
555
priv->shutters_locked = cs42l43->hw_lock;
drivers/spi/spi-cs42l43.c
315
struct cs42l43 *cs42l43 = dev_get_drvdata(pdev->dev.parent);
drivers/spi/spi-cs42l43.c
317
struct fwnode_handle *fwnode = dev_fwnode(cs42l43->dev);
drivers/spi/spi-cs42l43.c
334
priv->regmap = cs42l43->regmap;
sound/soc/codecs/cs42l43-jack.c
110
ret = device_property_read_u32_array(cs42l43->dev, "cirrus,buttons-ohms",
sound/soc/codecs/cs42l43-jack.c
131
priv->bias_low = device_property_read_bool(cs42l43->dev, "cirrus,bias-low");
sound/soc/codecs/cs42l43-jack.c
150
if (!device_property_read_bool(cs42l43->dev, "cirrus,button-automute"))
sound/soc/codecs/cs42l43-jack.c
153
ret = device_property_read_u32(cs42l43->dev, "cirrus,tip-debounce-ms",
sound/soc/codecs/cs42l43-jack.c
161
if (device_property_read_bool(cs42l43->dev, "cirrus,tip-invert"))
sound/soc/codecs/cs42l43-jack.c
164
if (device_property_read_bool(cs42l43->dev, "cirrus,tip-disable-pullup"))
sound/soc/codecs/cs42l43-jack.c
185
if (device_property_read_bool(cs42l43->dev, "cirrus,use-ring-sense")) {
sound/soc/codecs/cs42l43-jack.c
191
if (!device_property_read_bool(cs42l43->dev, "cirrus,ring-invert"))
sound/soc/codecs/cs42l43-jack.c
194
if (!device_property_read_bool(cs42l43->dev,
sound/soc/codecs/cs42l43-jack.c
215
regmap_update_bits(cs42l43->regmap, CS42L43_RINGSENSE_DEB_CTRL,
sound/soc/codecs/cs42l43-jack.c
223
regmap_update_bits(cs42l43->regmap, CS42L43_TIPSENSE_DEB_CTRL,
sound/soc/codecs/cs42l43-jack.c
227
regmap_update_bits(cs42l43->regmap, CS42L43_HS2,
sound/soc/codecs/cs42l43-jack.c
234
regmap_update_bits(cs42l43->regmap, CS42L43_HS_BIAS_SENSE_AND_CLAMP_AUTOCONTROL,
sound/soc/codecs/cs42l43-jack.c
237
regmap_update_bits(cs42l43->regmap, CS42L43_PDNCNTL,
sound/soc/codecs/cs42l43-jack.c
252
struct cs42l43 *cs42l43 = priv->core;
sound/soc/codecs/cs42l43-jack.c
257
regmap_update_bits(cs42l43->regmap, CS42L43_HS2,
sound/soc/codecs/cs42l43-jack.c
265
regmap_update_bits(cs42l43->regmap,
sound/soc/codecs/cs42l43-jack.c
273
regmap_update_bits(cs42l43->regmap, CS42L43_MIC_DETECT_CONTROL_1,
sound/soc/codecs/cs42l43-jack.c
281
struct cs42l43 *cs42l43 = priv->core;
sound/soc/codecs/cs42l43-jack.c
285
regmap_update_bits(cs42l43->regmap, CS42L43_MIC_DETECT_CONTROL_1,
sound/soc/codecs/cs42l43-jack.c
288
regmap_update_bits(cs42l43->regmap, CS42L43_HS2,
sound/soc/codecs/cs42l43-jack.c
292
regmap_update_bits(cs42l43->regmap,
sound/soc/codecs/cs42l43-jack.c
323
struct cs42l43 *cs42l43 = priv->core;
sound/soc/codecs/cs42l43-jack.c
326
regmap_read(cs42l43->regmap, CS42L43_TIP_RING_SENSE_INTERRUPT_STATUS, &sts);
sound/soc/codecs/cs42l43-jack.c
335
struct cs42l43 *cs42l43 = priv->core;
sound/soc/codecs/cs42l43-jack.c
345
regmap_update_bits(cs42l43->regmap, CS42L43_MIC_DETECT_CONTROL_1,
sound/soc/codecs/cs42l43-jack.c
352
struct cs42l43 *cs42l43 = priv->core;
sound/soc/codecs/cs42l43-jack.c
356
regmap_update_bits(cs42l43->regmap, CS42L43_MIC_DETECT_CONTROL_1,
sound/soc/codecs/cs42l43-jack.c
371
struct cs42l43 *cs42l43 = priv->core;
sound/soc/codecs/cs42l43-jack.c
393
regmap_read(cs42l43->regmap, CS42L43_DETECT_STATUS_1, &val);
sound/soc/codecs/cs42l43-jack.c
471
struct cs42l43 *cs42l43 = priv->core;
sound/soc/codecs/cs42l43-jack.c
485
regmap_update_bits(cs42l43->regmap,
sound/soc/codecs/cs42l43-jack.c
488
regmap_update_bits(cs42l43->regmap,
sound/soc/codecs/cs42l43-jack.c
50
struct cs42l43 *cs42l43 = priv->core;
sound/soc/codecs/cs42l43-jack.c
517
struct cs42l43 *cs42l43 = priv->core;
sound/soc/codecs/cs42l43-jack.c
53
ret = device_property_read_u32(cs42l43->dev, prop, &defval);
sound/soc/codecs/cs42l43-jack.c
530
regmap_update_bits(cs42l43->regmap, CS42L43_BLOCK_EN8,
sound/soc/codecs/cs42l43-jack.c
540
regmap_multi_reg_write_bypassed(cs42l43->regmap,
sound/soc/codecs/cs42l43-jack.c
544
regmap_multi_reg_write_bypassed(cs42l43->regmap,
sound/soc/codecs/cs42l43-jack.c
548
regmap_update_bits(cs42l43->regmap, CS42L43_BLOCK_EN3,
sound/soc/codecs/cs42l43-jack.c
550
regmap_update_bits(cs42l43->regmap, CS42L43_DACCNFG2, CS42L43_HP_HPF_EN_MASK, 0);
sound/soc/codecs/cs42l43-jack.c
551
regmap_update_bits(cs42l43->regmap, CS42L43_MIC_DETECT_CONTROL_1,
sound/soc/codecs/cs42l43-jack.c
553
regmap_update_bits(cs42l43->regmap, CS42L43_CTRL,
sound/soc/codecs/cs42l43-jack.c
555
regmap_update_bits(cs42l43->regmap, CS42L43_PGAVOL,
sound/soc/codecs/cs42l43-jack.c
557
regmap_update_bits(cs42l43->regmap, CS42L43_DACCNFG1,
sound/soc/codecs/cs42l43-jack.c
560
regmap_update_bits(cs42l43->regmap, CS42L43_HS2,
sound/soc/codecs/cs42l43-jack.c
563
regmap_update_bits(cs42l43->regmap, CS42L43_LOADDETENA,
sound/soc/codecs/cs42l43-jack.c
572
struct cs42l43 *cs42l43 = priv->core;
sound/soc/codecs/cs42l43-jack.c
578
regmap_update_bits(cs42l43->regmap, CS42L43_LOADDETENA,
sound/soc/codecs/cs42l43-jack.c
580
regmap_update_bits(cs42l43->regmap, CS42L43_HS2,
sound/soc/codecs/cs42l43-jack.c
582
regmap_update_bits(cs42l43->regmap, CS42L43_DACCNFG1,
sound/soc/codecs/cs42l43-jack.c
585
regmap_update_bits(cs42l43->regmap, CS42L43_PGAVOL,
sound/soc/codecs/cs42l43-jack.c
588
regmap_update_bits(cs42l43->regmap, CS42L43_CTRL,
sound/soc/codecs/cs42l43-jack.c
590
regmap_update_bits(cs42l43->regmap, CS42L43_MIC_DETECT_CONTROL_1,
sound/soc/codecs/cs42l43-jack.c
592
regmap_update_bits(cs42l43->regmap, CS42L43_DACCNFG2,
sound/soc/codecs/cs42l43-jack.c
595
regmap_update_bits(cs42l43->regmap, CS42L43_BLOCK_EN3,
sound/soc/codecs/cs42l43-jack.c
604
regmap_update_bits(cs42l43->regmap, CS42L43_BLOCK_EN8,
sound/soc/codecs/cs42l43-jack.c
620
struct cs42l43 *cs42l43 = priv->core;
sound/soc/codecs/cs42l43-jack.c
634
regmap_read(cs42l43->regmap, CS42L43_LOADDETRESULTS, &val);
sound/soc/codecs/cs42l43-jack.c
663
struct cs42l43 *cs42l43 = priv->core;
sound/soc/codecs/cs42l43-jack.c
670
regmap_update_bits(cs42l43->regmap, CS42L43_STEREO_MIC_CLAMP_CTRL,
sound/soc/codecs/cs42l43-jack.c
675
regmap_update_bits(cs42l43->regmap, CS42L43_HS2,
sound/soc/codecs/cs42l43-jack.c
681
regmap_update_bits(cs42l43->regmap, CS42L43_HS2,
sound/soc/codecs/cs42l43-jack.c
685
regmap_update_bits(cs42l43->regmap, CS42L43_STEREO_MIC_CLAMP_CTRL,
sound/soc/codecs/cs42l43-jack.c
691
regmap_read(cs42l43->regmap, CS42L43_HS_STAT, &type);
sound/soc/codecs/cs42l43-jack.c
715
struct cs42l43 *cs42l43 = priv->core;
sound/soc/codecs/cs42l43-jack.c
720
regmap_update_bits(cs42l43->regmap, CS42L43_ADC_B_CTRL1,
sound/soc/codecs/cs42l43-jack.c
722
regmap_update_bits(cs42l43->regmap, CS42L43_ADC_B_CTRL2,
sound/soc/codecs/cs42l43-jack.c
724
regmap_update_bits(cs42l43->regmap, CS42L43_STEREO_MIC_CTRL,
sound/soc/codecs/cs42l43-jack.c
726
regmap_update_bits(cs42l43->regmap, CS42L43_STEREO_MIC_CLAMP_CTRL,
sound/soc/codecs/cs42l43-jack.c
729
regmap_update_bits(cs42l43->regmap, CS42L43_HS2,
sound/soc/codecs/cs42l43-jack.c
738
struct cs42l43 *cs42l43 = priv->core;
sound/soc/codecs/cs42l43-jack.c
74
struct cs42l43 *cs42l43 = priv->core;
sound/soc/codecs/cs42l43-jack.c
751
regmap_read(cs42l43->regmap, CS42L43_TIP_RING_SENSE_INTERRUPT_STATUS, &sts);
sound/soc/codecs/cs42l43-jack.c
759
if (cs42l43->sdw && !priv->jack_present) {
sound/soc/codecs/cs42l43-jack.c
782
if (cs42l43->sdw && priv->jack_present) {
sound/soc/codecs/cs42l43-jack.c
909
struct cs42l43 *cs42l43 = priv->core;
sound/soc/codecs/cs42l43-jack.c
939
regmap_update_bits(cs42l43->regmap, CS42L43_HS2,
sound/soc/codecs/cs42l43-jack.c
951
regmap_update_bits(cs42l43->regmap, CS42L43_STEREO_MIC_CTRL,
sound/soc/codecs/cs42l43-jack.c
955
regmap_update_bits(cs42l43->regmap, CS42L43_STEREO_MIC_CLAMP_CTRL,
sound/soc/codecs/cs42l43-jack.c
96
ret = device_property_count_u32(cs42l43->dev, "cirrus,buttons-ohms");
sound/soc/codecs/cs42l43-jack.c
966
regmap_update_bits(cs42l43->regmap, CS42L43_ADC_B_CTRL1,
sound/soc/codecs/cs42l43-jack.c
969
regmap_update_bits(cs42l43->regmap, CS42L43_ADC_B_CTRL2,
sound/soc/codecs/cs42l43.c
1034
struct cs42l43 *cs42l43 = priv->core;
sound/soc/codecs/cs42l43.c
1038
regmap_update_bits(cs42l43->regmap, CS42L43_INTP_VOLUME_CTRL1,
sound/soc/codecs/cs42l43.c
1040
regmap_update_bits(cs42l43->regmap, CS42L43_INTP_VOLUME_CTRL1,
sound/soc/codecs/cs42l43.c
1048
struct cs42l43 *cs42l43 = priv->core;
sound/soc/codecs/cs42l43.c
1063
ret = regcache_drop_region(cs42l43->regmap, CS42L43_SHUTTER_CONTROL,
sound/soc/codecs/cs42l43.c
1070
ret = regmap_read(cs42l43->regmap, CS42L43_SHUTTER_CONTROL, &val);
sound/soc/codecs/cs42l43.c
1268
struct cs42l43 *cs42l43 = priv->core;
sound/soc/codecs/cs42l43.c
1274
regmap_update_bits(cs42l43->regmap, CS42L43_MUTE_EQ_IN0,
sound/soc/codecs/cs42l43.c
1278
regmap_update_bits(cs42l43->regmap, CS42L43_COEFF_RD_WR0,
sound/soc/codecs/cs42l43.c
1282
regmap_write(cs42l43->regmap, CS42L43_COEFF_DATA_IN0,
sound/soc/codecs/cs42l43.c
1285
regmap_update_bits(cs42l43->regmap, CS42L43_COEFF_RD_WR0,
sound/soc/codecs/cs42l43.c
1290
ret = regmap_read_poll_timeout(cs42l43->regmap, CS42L43_INIT_DONE0,
sound/soc/codecs/cs42l43.c
1296
regmap_update_bits(cs42l43->regmap, CS42L43_MUTE_EQ_IN0,
sound/soc/codecs/cs42l43.c
1321
struct cs42l43 *cs42l43 = priv->core;
sound/soc/codecs/cs42l43.c
1323
lockdep_assert_held(&cs42l43->pll_lock);
sound/soc/codecs/cs42l43.c
1328
if (regmap_test_bits(cs42l43->regmap, CS42L43_CTRL_REG, CS42L43_PLL_EN_MASK)) {
sound/soc/codecs/cs42l43.c
1355
struct cs42l43 *cs42l43 = priv->core;
sound/soc/codecs/cs42l43.c
1361
lockdep_assert_held(&cs42l43->pll_lock);
sound/soc/codecs/cs42l43.c
1365
freq = cs42l43->sdw_freq;
sound/soc/codecs/cs42l43.c
1366
else if (!cs42l43->sdw_freq)
sound/soc/codecs/cs42l43.c
1367
cs42l43->sdw_freq = freq;
sound/soc/codecs/cs42l43.c
1392
regmap_update_bits(cs42l43->regmap, CS42L43_PLL_CONTROL,
sound/soc/codecs/cs42l43.c
1396
regmap_write(cs42l43->regmap, CS42L43_FDIV_FRAC, config->div);
sound/soc/codecs/cs42l43.c
1397
regmap_update_bits(cs42l43->regmap, CS42L43_CTRL_REG,
sound/soc/codecs/cs42l43.c
1401
regmap_update_bits(cs42l43->regmap, CS42L43_CAL_RATIO,
sound/soc/codecs/cs42l43.c
1403
regmap_update_bits(cs42l43->regmap, CS42L43_PLL_CONTROL,
sound/soc/codecs/cs42l43.c
1408
regmap_update_bits(cs42l43->regmap, CS42L43_CTRL_REG,
sound/soc/codecs/cs42l43.c
1414
regmap_update_bits(cs42l43->regmap, CS42L43_CTRL_REG,
sound/soc/codecs/cs42l43.c
1416
regmap_update_bits(cs42l43->regmap, CS42L43_PLL_CONTROL,
sound/soc/codecs/cs42l43.c
1424
cs42l43->sdw_pll_active = true;
sound/soc/codecs/cs42l43.c
1433
regmap_multi_reg_write(cs42l43->regmap, enable_seq, ARRAY_SIZE(enable_seq));
sound/soc/codecs/cs42l43.c
1444
struct cs42l43 *cs42l43 = priv->core;
sound/soc/codecs/cs42l43.c
1448
lockdep_assert_held(&cs42l43->pll_lock);
sound/soc/codecs/cs42l43.c
1450
regmap_multi_reg_write(cs42l43->regmap, disable_seq, ARRAY_SIZE(disable_seq));
sound/soc/codecs/cs42l43.c
1451
regmap_update_bits(cs42l43->regmap, CS42L43_CTRL_REG, CS42L43_PLL_EN_MASK, 0);
sound/soc/codecs/cs42l43.c
1452
regmap_update_bits(cs42l43->regmap, CS42L43_PLL_CONTROL,
sound/soc/codecs/cs42l43.c
1455
cs42l43->sdw_pll_active = false;
sound/soc/codecs/cs42l43.c
1465
struct cs42l43 *cs42l43 = priv->core;
sound/soc/codecs/cs42l43.c
1468
mutex_lock(&cs42l43->pll_lock);
sound/soc/codecs/cs42l43.c
1493
mutex_unlock(&cs42l43->pll_lock);
sound/soc/codecs/cs42l43.c
1553
struct cs42l43 *cs42l43 = priv->core;
sound/soc/codecs/cs42l43.c
1573
regmap_update_bits(cs42l43->regmap, CS42L43_BLOCK_EN8,
sound/soc/codecs/cs42l43.c
1599
struct cs42l43 *cs42l43 = priv->core;
sound/soc/codecs/cs42l43.c
1638
ret = regmap_read(cs42l43->regmap, reg, val);
sound/soc/codecs/cs42l43.c
1646
regmap_update_bits(cs42l43->regmap, reg, mute | ramp, mute);
sound/soc/codecs/cs42l43.c
1649
regmap_update_bits(cs42l43->regmap, reg, mute | ramp, *val);
sound/soc/codecs/cs42l43.c
1663
struct cs42l43 *cs42l43 = priv->core;
sound/soc/codecs/cs42l43.c
1681
regmap_update_bits(cs42l43->regmap, CS42L43_BLOCK_EN3,
sound/soc/codecs/cs42l43.c
174
struct cs42l43 *cs42l43 = priv->core;
sound/soc/codecs/cs42l43.c
196
regmap_update_bits(cs42l43->regmap, CS42L43_BLOCK_EN8,
sound/soc/codecs/cs42l43.c
210
regmap_update_bits(cs42l43->regmap, CS42L43_BLOCK_EN8,
sound/soc/codecs/cs42l43.c
2117
struct cs42l43 *cs42l43 = priv->core;
sound/soc/codecs/cs42l43.c
2120
mutex_lock(&cs42l43->pll_lock);
sound/soc/codecs/cs42l43.c
2122
mutex_unlock(&cs42l43->pll_lock);
sound/soc/codecs/cs42l43.c
2130
struct cs42l43 *cs42l43 = priv->core;
sound/soc/codecs/cs42l43.c
2132
snd_soc_component_init_regmap(component, cs42l43->regmap);
sound/soc/codecs/cs42l43.c
2286
struct cs42l43 *cs42l43 = dev_get_drvdata(pdev->dev.parent);
sound/soc/codecs/cs42l43.c
2296
priv->core = cs42l43;
sound/soc/codecs/cs42l43.c
2298
priv->dom = irq_find_matching_fwnode(dev_fwnode(cs42l43->dev), DOMAIN_BUS_ANY);
sound/soc/codecs/cs42l43.c
2338
ret = regmap_read(cs42l43->regmap, CS42L43_SHUTTER_CONTROL, &val);
sound/soc/codecs/cs42l43.c
2360
priv->mclk = clk_get_optional(cs42l43->dev, "mclk");
sound/soc/codecs/cs42l43.c
302
struct cs42l43 *cs42l43 = priv->core;
sound/soc/codecs/cs42l43.c
303
int provider = !dai->id || !!regmap_test_bits(cs42l43->regmap,
sound/soc/codecs/cs42l43.c
346
struct cs42l43 *cs42l43 = priv->core;
sound/soc/codecs/cs42l43.c
356
regmap_update_bits(cs42l43->regmap, CS42L43_SAMPLE_RATE1,
sound/soc/codecs/cs42l43.c
367
struct cs42l43 *cs42l43 = priv->core;
sound/soc/codecs/cs42l43.c
368
int dsp_mode = !!regmap_test_bits(cs42l43->regmap, CS42L43_ASP_CTRL,
sound/soc/codecs/cs42l43.c
370
int provider = !!regmap_test_bits(cs42l43->regmap, CS42L43_ASP_CLK_CONFIG2,
sound/soc/codecs/cs42l43.c
407
regmap_update_bits(cs42l43->regmap, CS42L43_ASP_CLK_CONFIG1,
sound/soc/codecs/cs42l43.c
411
regmap_update_bits(cs42l43->regmap, CS42L43_ASP_FSYNC_CTRL1,
sound/soc/codecs/cs42l43.c
415
regmap_update_bits(cs42l43->regmap, CS42L43_ASP_FSYNC_CTRL4,
sound/soc/codecs/cs42l43.c
439
regmap_update_bits(cs42l43->regmap, reg,
sound/soc/codecs/cs42l43.c
456
struct cs42l43 *cs42l43 = priv->core;
sound/soc/codecs/cs42l43.c
457
int provider = regmap_test_bits(cs42l43->regmap, CS42L43_ASP_CLK_CONFIG2,
sound/soc/codecs/cs42l43.c
524
regmap_update_bits(cs42l43->regmap, CS42L43_ASP_CTRL,
sound/soc/codecs/cs42l43.c
527
regmap_update_bits(cs42l43->regmap, CS42L43_ASP_DATA_CTRL,
sound/soc/codecs/cs42l43.c
531
regmap_update_bits(cs42l43->regmap, CS42L43_ASP_CLK_CONFIG2,
sound/soc/codecs/cs42l43.c
535
regmap_update_bits(cs42l43->regmap, CS42L43_ASP_FSYNC_CTRL3,
sound/soc/codecs/cs42l43.h
41
struct cs42l43;
sound/soc/codecs/cs42l43.h
45
struct cs42l43 *core;