Symbol: cs40l50
drivers/input/misc/cs40l50-vibra.c
486
struct cs40l50 *cs40l50 = dev_get_drvdata(pdev->dev.parent);
drivers/input/misc/cs40l50-vibra.c
494
vib->dev = cs40l50->dev;
drivers/input/misc/cs40l50-vibra.c
495
vib->regmap = cs40l50->regmap;
drivers/input/misc/cs40l50-vibra.c
502
vib->input->id.product = cs40l50->devid;
drivers/input/misc/cs40l50-vibra.c
503
vib->input->id.version = cs40l50->revid;
drivers/mfd/cs40l50-core.c
114
static int cs40l50_wseq_init(struct cs40l50 *cs40l50)
drivers/mfd/cs40l50-core.c
116
struct cs_dsp *dsp = &cs40l50->dsp;
drivers/mfd/cs40l50-core.c
118
cs40l50->wseqs[CS40L50_STANDBY].ctl = cs_dsp_get_ctl(dsp, "STANDBY_SEQUENCE",
drivers/mfd/cs40l50-core.c
121
if (!cs40l50->wseqs[CS40L50_STANDBY].ctl) {
drivers/mfd/cs40l50-core.c
122
dev_err(cs40l50->dev, "Control not found for standby sequence\n");
drivers/mfd/cs40l50-core.c
126
cs40l50->wseqs[CS40L50_ACTIVE].ctl = cs_dsp_get_ctl(dsp, "ACTIVE_SEQUENCE",
drivers/mfd/cs40l50-core.c
129
if (!cs40l50->wseqs[CS40L50_ACTIVE].ctl) {
drivers/mfd/cs40l50-core.c
130
dev_err(cs40l50->dev, "Control not found for active sequence\n");
drivers/mfd/cs40l50-core.c
134
cs40l50->wseqs[CS40L50_PWR_ON].ctl = cs_dsp_get_ctl(dsp, "PM_PWR_ON_SEQ",
drivers/mfd/cs40l50-core.c
137
if (!cs40l50->wseqs[CS40L50_PWR_ON].ctl) {
drivers/mfd/cs40l50-core.c
138
dev_err(cs40l50->dev, "Control not found for power-on sequence\n");
drivers/mfd/cs40l50-core.c
142
return cs_dsp_wseq_init(&cs40l50->dsp, cs40l50->wseqs, ARRAY_SIZE(cs40l50->wseqs));
drivers/mfd/cs40l50-core.c
145
static int cs40l50_dsp_config(struct cs40l50 *cs40l50)
drivers/mfd/cs40l50-core.c
150
ret = regmap_multi_reg_write(cs40l50->regmap, cs40l50_internal_vamp_config,
drivers/mfd/cs40l50-core.c
155
ret = cs_dsp_wseq_multi_write(&cs40l50->dsp, &cs40l50->wseqs[CS40L50_PWR_ON],
drivers/mfd/cs40l50-core.c
162
ret = regmap_multi_reg_write(cs40l50->regmap, cs40l50_irq_mask_override,
drivers/mfd/cs40l50-core.c
167
return cs_dsp_wseq_multi_write(&cs40l50->dsp, &cs40l50->wseqs[CS40L50_PWR_ON],
drivers/mfd/cs40l50-core.c
174
struct cs40l50 *cs40l50 = container_of(dsp, struct cs40l50, dsp);
drivers/mfd/cs40l50-core.c
177
ret = cs40l50_wseq_init(cs40l50);
drivers/mfd/cs40l50-core.c
181
ret = cs40l50_dsp_config(cs40l50);
drivers/mfd/cs40l50-core.c
183
dev_err(cs40l50->dev, "Failed to configure DSP: %d\n", ret);
drivers/mfd/cs40l50-core.c
187
ret = devm_mfd_add_devices(cs40l50->dev, PLATFORM_DEVID_NONE, cs40l50_devs,
drivers/mfd/cs40l50-core.c
190
dev_err(cs40l50->dev, "Failed to add child devices: %d\n", ret);
drivers/mfd/cs40l50-core.c
204
static int cs40l50_dsp_init(struct cs40l50 *cs40l50)
drivers/mfd/cs40l50-core.c
208
cs40l50->dsp.num = 1;
drivers/mfd/cs40l50-core.c
209
cs40l50->dsp.type = WMFW_HALO;
drivers/mfd/cs40l50-core.c
210
cs40l50->dsp.dev = cs40l50->dev;
drivers/mfd/cs40l50-core.c
211
cs40l50->dsp.regmap = cs40l50->regmap;
drivers/mfd/cs40l50-core.c
212
cs40l50->dsp.base = CS40L50_CORE_BASE;
drivers/mfd/cs40l50-core.c
213
cs40l50->dsp.base_sysinfo = CS40L50_SYS_INFO_ID;
drivers/mfd/cs40l50-core.c
214
cs40l50->dsp.mem = cs40l50_dsp_regions;
drivers/mfd/cs40l50-core.c
215
cs40l50->dsp.num_mems = ARRAY_SIZE(cs40l50_dsp_regions);
drivers/mfd/cs40l50-core.c
216
cs40l50->dsp.no_core_startstop = true;
drivers/mfd/cs40l50-core.c
217
cs40l50->dsp.client_ops = &client_ops;
drivers/mfd/cs40l50-core.c
219
ret = cs_dsp_halo_init(&cs40l50->dsp);
drivers/mfd/cs40l50-core.c
223
return devm_add_action_or_reset(cs40l50->dev, cs40l50_dsp_remove,
drivers/mfd/cs40l50-core.c
224
&cs40l50->dsp);
drivers/mfd/cs40l50-core.c
227
static int cs40l50_reset_dsp(struct cs40l50 *cs40l50)
drivers/mfd/cs40l50-core.c
231
mutex_lock(&cs40l50->lock);
drivers/mfd/cs40l50-core.c
233
if (cs40l50->dsp.running)
drivers/mfd/cs40l50-core.c
234
cs_dsp_stop(&cs40l50->dsp);
drivers/mfd/cs40l50-core.c
236
if (cs40l50->dsp.booted)
drivers/mfd/cs40l50-core.c
237
cs_dsp_power_down(&cs40l50->dsp);
drivers/mfd/cs40l50-core.c
239
ret = cs40l50_dsp_write(cs40l50->dev, cs40l50->regmap, CS40L50_SHUTDOWN);
drivers/mfd/cs40l50-core.c
243
ret = cs_dsp_power_up(&cs40l50->dsp, cs40l50->fw, "cs40l50.wmfw",
drivers/mfd/cs40l50-core.c
244
cs40l50->bin, "cs40l50.bin", "cs40l50");
drivers/mfd/cs40l50-core.c
248
ret = cs40l50_dsp_write(cs40l50->dev, cs40l50->regmap, CS40L50_SYSTEM_RESET);
drivers/mfd/cs40l50-core.c
252
ret = cs40l50_dsp_write(cs40l50->dev, cs40l50->regmap, CS40L50_PREVENT_HIBER);
drivers/mfd/cs40l50-core.c
256
ret = cs_dsp_run(&cs40l50->dsp);
drivers/mfd/cs40l50-core.c
258
mutex_unlock(&cs40l50->lock);
drivers/mfd/cs40l50-core.c
275
struct cs40l50 *cs40l50 = context;
drivers/mfd/cs40l50-core.c
280
cs40l50->bin = bin;
drivers/mfd/cs40l50-core.c
282
ret = cs40l50_reset_dsp(cs40l50);
drivers/mfd/cs40l50-core.c
284
dev_err(cs40l50->dev, "Failed to reset DSP: %d\n", ret);
drivers/mfd/cs40l50-core.c
288
ret = regmap_read(cs40l50->regmap, CS40L50_NUM_WAVES, &nwaves);
drivers/mfd/cs40l50-core.c
292
dev_info(cs40l50->dev, "%u RAM effects loaded\n", nwaves);
drivers/mfd/cs40l50-core.c
295
ret = devm_add_action_or_reset(cs40l50->dev, cs40l50_dsp_power_down,
drivers/mfd/cs40l50-core.c
296
&cs40l50->dsp);
drivers/mfd/cs40l50-core.c
298
dev_err(cs40l50->dev, "Failed to add power down action: %d\n", ret);
drivers/mfd/cs40l50-core.c
302
ret = devm_add_action_or_reset(cs40l50->dev, cs40l50_dsp_stop, &cs40l50->dsp);
drivers/mfd/cs40l50-core.c
304
dev_err(cs40l50->dev, "Failed to add stop action: %d\n", ret);
drivers/mfd/cs40l50-core.c
306
release_firmware(cs40l50->bin);
drivers/mfd/cs40l50-core.c
307
release_firmware(cs40l50->fw);
drivers/mfd/cs40l50-core.c
312
struct cs40l50 *cs40l50 = context;
drivers/mfd/cs40l50-core.c
316
dev_err(cs40l50->dev, "No firmware file found\n");
drivers/mfd/cs40l50-core.c
320
cs40l50->fw = fw;
drivers/mfd/cs40l50-core.c
323
cs40l50->dev, GFP_KERNEL, cs40l50,
drivers/mfd/cs40l50-core.c
326
dev_err(cs40l50->dev, "Failed to request %s: %d\n", CS40L50_WT, ret);
drivers/mfd/cs40l50-core.c
327
release_firmware(cs40l50->fw);
drivers/mfd/cs40l50-core.c
354
struct cs40l50 *cs40l50 = data;
drivers/mfd/cs40l50-core.c
357
mutex_lock(&cs40l50->lock);
drivers/mfd/cs40l50-core.c
362
dev_err(cs40l50->dev, "%s error\n", cs40l50_irqs[i].name);
drivers/mfd/cs40l50-core.c
363
ret = regmap_multi_reg_write(cs40l50->regmap, cs40l50_err_rls,
drivers/mfd/cs40l50-core.c
369
mutex_unlock(&cs40l50->lock);
drivers/mfd/cs40l50-core.c
375
struct cs40l50 *cs40l50 = data;
drivers/mfd/cs40l50-core.c
379
mutex_lock(&cs40l50->lock);
drivers/mfd/cs40l50-core.c
383
ret = regmap_read(cs40l50->regmap, CS40L50_DSP_QUEUE_WT, &wt_ptr);
drivers/mfd/cs40l50-core.c
387
ret = regmap_read(cs40l50->regmap, CS40L50_DSP_QUEUE_RD, &rd_ptr);
drivers/mfd/cs40l50-core.c
395
ret = regmap_read(cs40l50->regmap, rd_ptr, &val);
drivers/mfd/cs40l50-core.c
399
dev_dbg(cs40l50->dev, "DSP payload: %#X", val);
drivers/mfd/cs40l50-core.c
406
ret = regmap_write(cs40l50->regmap, CS40L50_DSP_QUEUE_RD, rd_ptr);
drivers/mfd/cs40l50-core.c
409
mutex_unlock(&cs40l50->lock);
drivers/mfd/cs40l50-core.c
414
static int cs40l50_irq_init(struct cs40l50 *cs40l50)
drivers/mfd/cs40l50-core.c
418
ret = devm_regmap_add_irq_chip(cs40l50->dev, cs40l50->regmap, cs40l50->irq,
drivers/mfd/cs40l50-core.c
420
&cs40l50_irq_chip, &cs40l50->irq_data);
drivers/mfd/cs40l50-core.c
422
dev_err(cs40l50->dev, "Failed adding IRQ chip\n");
drivers/mfd/cs40l50-core.c
427
virq = regmap_irq_get_virq(cs40l50->irq_data, i);
drivers/mfd/cs40l50-core.c
429
dev_err(cs40l50->dev, "Failed getting virq for %s\n",
drivers/mfd/cs40l50-core.c
437
ret = devm_request_threaded_irq(cs40l50->dev, virq, NULL,
drivers/mfd/cs40l50-core.c
440
cs40l50_irqs[i].name, cs40l50);
drivers/mfd/cs40l50-core.c
442
return dev_err_probe(cs40l50->dev, ret,
drivers/mfd/cs40l50-core.c
451
static int cs40l50_get_model(struct cs40l50 *cs40l50)
drivers/mfd/cs40l50-core.c
455
ret = regmap_read(cs40l50->regmap, CS40L50_DEVID, &cs40l50->devid);
drivers/mfd/cs40l50-core.c
459
if (cs40l50->devid != CS40L50_DEVID_A)
drivers/mfd/cs40l50-core.c
462
ret = regmap_read(cs40l50->regmap, CS40L50_REVID, &cs40l50->revid);
drivers/mfd/cs40l50-core.c
466
if (cs40l50->revid < CS40L50_REVID_B0)
drivers/mfd/cs40l50-core.c
469
dev_dbg(cs40l50->dev, "Cirrus Logic CS40L50 rev. %02X\n", cs40l50->revid);
drivers/mfd/cs40l50-core.c
488
int cs40l50_probe(struct cs40l50 *cs40l50)
drivers/mfd/cs40l50-core.c
490
struct device *dev = cs40l50->dev;
drivers/mfd/cs40l50-core.c
493
mutex_init(&cs40l50->lock);
drivers/mfd/cs40l50-core.c
495
cs40l50->reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
drivers/mfd/cs40l50-core.c
496
if (IS_ERR(cs40l50->reset_gpio))
drivers/mfd/cs40l50-core.c
497
return dev_err_probe(dev, PTR_ERR(cs40l50->reset_gpio),
drivers/mfd/cs40l50-core.c
508
gpiod_set_value_cansleep(cs40l50->reset_gpio, 0);
drivers/mfd/cs40l50-core.c
513
ret = cs40l50_get_model(cs40l50);
drivers/mfd/cs40l50-core.c
517
ret = cs40l50_dsp_init(cs40l50);
drivers/mfd/cs40l50-core.c
525
ret = cs40l50_irq_init(cs40l50);
drivers/mfd/cs40l50-core.c
530
dev, GFP_KERNEL, cs40l50, cs40l50_request_firmware);
drivers/mfd/cs40l50-core.c
540
int cs40l50_remove(struct cs40l50 *cs40l50)
drivers/mfd/cs40l50-core.c
542
gpiod_set_value_cansleep(cs40l50->reset_gpio, 1);
drivers/mfd/cs40l50-core.c
550
struct cs40l50 *cs40l50 = dev_get_drvdata(dev);
drivers/mfd/cs40l50-core.c
552
return regmap_write(cs40l50->regmap, CS40L50_DSP_QUEUE, CS40L50_ALLOW_HIBER);
drivers/mfd/cs40l50-core.c
557
struct cs40l50 *cs40l50 = dev_get_drvdata(dev);
drivers/mfd/cs40l50-core.c
559
return cs40l50_dsp_write(dev, cs40l50->regmap, CS40L50_PREVENT_HIBER);
drivers/mfd/cs40l50-i2c.c
16
struct cs40l50 *cs40l50;
drivers/mfd/cs40l50-i2c.c
18
cs40l50 = devm_kzalloc(&i2c->dev, sizeof(*cs40l50), GFP_KERNEL);
drivers/mfd/cs40l50-i2c.c
19
if (!cs40l50)
drivers/mfd/cs40l50-i2c.c
22
i2c_set_clientdata(i2c, cs40l50);
drivers/mfd/cs40l50-i2c.c
24
cs40l50->dev = &i2c->dev;
drivers/mfd/cs40l50-i2c.c
25
cs40l50->irq = i2c->irq;
drivers/mfd/cs40l50-i2c.c
27
cs40l50->regmap = devm_regmap_init_i2c(i2c, &cs40l50_regmap);
drivers/mfd/cs40l50-i2c.c
28
if (IS_ERR(cs40l50->regmap))
drivers/mfd/cs40l50-i2c.c
29
return dev_err_probe(cs40l50->dev, PTR_ERR(cs40l50->regmap),
drivers/mfd/cs40l50-i2c.c
32
return cs40l50_probe(cs40l50);
drivers/mfd/cs40l50-i2c.c
37
struct cs40l50 *cs40l50 = i2c_get_clientdata(i2c);
drivers/mfd/cs40l50-i2c.c
39
cs40l50_remove(cs40l50);
drivers/mfd/cs40l50-spi.c
16
struct cs40l50 *cs40l50;
drivers/mfd/cs40l50-spi.c
18
cs40l50 = devm_kzalloc(&spi->dev, sizeof(*cs40l50), GFP_KERNEL);
drivers/mfd/cs40l50-spi.c
19
if (!cs40l50)
drivers/mfd/cs40l50-spi.c
22
spi_set_drvdata(spi, cs40l50);
drivers/mfd/cs40l50-spi.c
24
cs40l50->dev = &spi->dev;
drivers/mfd/cs40l50-spi.c
25
cs40l50->irq = spi->irq;
drivers/mfd/cs40l50-spi.c
27
cs40l50->regmap = devm_regmap_init_spi(spi, &cs40l50_regmap);
drivers/mfd/cs40l50-spi.c
28
if (IS_ERR(cs40l50->regmap))
drivers/mfd/cs40l50-spi.c
29
return dev_err_probe(cs40l50->dev, PTR_ERR(cs40l50->regmap),
drivers/mfd/cs40l50-spi.c
32
return cs40l50_probe(cs40l50);
drivers/mfd/cs40l50-spi.c
37
struct cs40l50 *cs40l50 = spi_get_drvdata(spi);
drivers/mfd/cs40l50-spi.c
39
cs40l50_remove(cs40l50);
include/linux/mfd/cs40l50.h
131
int cs40l50_probe(struct cs40l50 *cs40l50);
include/linux/mfd/cs40l50.h
132
int cs40l50_remove(struct cs40l50 *cs40l50);
sound/soc/codecs/cs40l50-codec.c
276
struct cs40l50 *cs40l50 = dev_get_drvdata(pdev->dev.parent);
sound/soc/codecs/cs40l50-codec.c
283
codec->regmap = cs40l50->regmap;