Lines Matching refs:madera
18 #include <linux/irqchip/irq-madera.h>
19 #include <linux/mfd/madera/core.h>
20 #include <linux/mfd/madera/registers.h>
21 #include <linux/mfd/madera/pdata.h>
22 #include <sound/madera-pdata.h>
24 #include <dt-bindings/sound/madera.h>
26 #include "madera.h"
143 dev_err(_fll->madera->dev, "FLL%d: " fmt, _fll->id, ##__VA_ARGS__)
145 dev_warn(_fll->madera->dev, "FLL%d: " fmt, _fll->id, ##__VA_ARGS__)
147 dev_dbg(_fll->madera->dev, "FLL%d: " fmt, _fll->id, ##__VA_ARGS__)
171 struct madera *madera = priv->madera;
176 ret = regmap_read(madera->regmap, w->reg, &val);
178 dev_err(madera->dev, "Failed to check clock source: %d\n", ret);
198 return clk_prepare_enable(madera->mclk[clk_idx].clk);
200 clk_disable_unprepare(madera->mclk[clk_idx].clk);
210 struct madera *madera = priv->madera;
215 if (pm_runtime_suspended(madera->dev))
223 ret = regmap_read(madera->regmap, MADERA_SOFTWARE_RESET, &val);
225 dev_err(madera->dev,
251 static int madera_check_speaker_overheat(struct madera *madera,
257 ret = regmap_read(madera->regmap, MADERA_IRQ1_RAW_STATUS_15, &val);
259 dev_err(madera->dev, "Failed to read thermal status: %d\n",
275 struct madera *madera = priv->madera;
281 ret = madera_check_speaker_overheat(madera, &warn, &shutdown);
286 dev_crit(madera->dev,
291 regmap_update_bits(madera->regmap, MADERA_OUTPUT_ENABLES_1,
295 regmap_update_bits(madera->regmap, MADERA_OUTPUT_ENABLES_1,
308 struct madera *madera = data;
312 ret = madera_check_speaker_overheat(madera, &warn, &shutdown);
314 dev_crit(madera->dev, "Thermal shutdown\n");
315 ret = regmap_update_bits(madera->regmap,
320 dev_crit(madera->dev,
324 dev_alert(madera->dev, "Thermal warning\n");
326 dev_info(madera->dev, "Spurious thermal warning\n");
335 struct madera *madera = priv->madera;
336 struct device *dev = madera->dev;
339 ret = madera_request_irq(madera, MADERA_IRQ_SPK_OVERHEAT_WARN,
341 madera);
345 ret = madera_request_irq(madera, MADERA_IRQ_SPK_OVERHEAT,
347 madera);
357 struct madera *madera = priv->madera;
359 madera_free_irq(madera, MADERA_IRQ_SPK_OVERHEAT_WARN, madera);
360 madera_free_irq(madera, MADERA_IRQ_SPK_OVERHEAT, madera);
400 struct madera *madera = priv->madera;
401 struct madera_codec_pdata *pdata = &madera->pdata.codec;
408 n = madera_get_variable_u32_array(madera->dev, "cirrus,inmode",
428 struct madera *madera = priv->madera;
429 struct madera_codec_pdata *pdata = &madera->pdata.codec;
435 n = madera_get_variable_u32_array(madera->dev, "cirrus,out-mono",
441 madera_get_variable_u32_array(madera->dev,
447 madera_get_variable_u32_array(madera->dev, "cirrus,pdm-fmt",
451 madera_get_variable_u32_array(madera->dev, "cirrus,pdm-mute",
455 madera_get_variable_u32_array(madera->dev, "cirrus,dmic-ref",
468 if (!dev_get_platdata(priv->madera->dev))
474 priv->madera->out_clamp[i] = true;
490 struct madera *madera = priv->madera;
494 dev_dbg(madera->dev, "domain_grp_ref[%d]=%d\n", i,
519 dev_dbg(priv->madera->dev, "Inc ref on domain group %d\n",
524 dev_dbg(priv->madera->dev, "Dec ref on domain group %d\n",
548 struct madera *madera = priv->madera;
570 ret = regmap_update_bits(madera->regmap, MADERA_OUTPUT_ENABLES_1,
573 dev_warn(madera->dev, "Failed to disable outputs: %d\n", ret);
579 if (madera->out_clamp[0])
580 ret = regmap_update_bits(madera->regmap,
584 dev_err(madera->dev, "Failed to set OUT1 demux: %d\n", ret);
587 if (!ep_sel && !madera->pdata.codec.out_mono[0])
594 dev_warn(madera->dev,
603 (madera->out_clamp[0] && !madera->out_shorted[0])) {
604 ret = regmap_update_bits(madera->regmap,
607 madera->hp_ena);
609 dev_warn(madera->dev,
612 else if (madera->hp_ena)
623 dev_err(madera->dev, "Failed to update demux power state: %d\n", ret);
655 struct madera *madera = priv->madera;
656 struct regmap *regmap = madera->regmap;
672 inmode = madera->pdata.codec.inmode[0][2 * mux];
675 inmode = madera->pdata.codec.inmode[0][1 + (2 * mux)];
678 inmode = madera->pdata.codec.inmode[1][2 * mux];
681 inmode = madera->pdata.codec.inmode[1][1 + (2 * mux)];
690 dev_dbg(madera->dev, "mux=%u reg=0x%x inmode=0x%x mask=0x%x val=0x%x\n",
864 dev_dbg(priv->madera->dev, "Rate reg 0x%x group ref %d\n", reg, count);
915 dev_warn(priv->madera->dev,
975 switch (priv->madera->type) {
985 dev_dbg(priv->madera->dev, "Set DSP frequency to 0x%x\n", freq);
1000 dev_dbg(priv->madera->dev, "Set DSP clocking to 0x%x\n", val);
1014 struct madera *madera = priv->madera;
1029 dev_err(madera->dev,
1039 dev_dbg(madera->dev, "DSP rate not changed\n");
1042 dev_dbg(madera->dev, "DSP rate changed\n");
1082 dev_warn(priv->madera->dev,
1099 static void madera_configure_input_mode(struct madera *madera)
1104 switch (madera->type) {
1134 dev_dbg(madera->dev, "IN%d mode %u:%u:%u:%u\n", i + 1,
1135 madera->pdata.codec.inmode[i][0],
1136 madera->pdata.codec.inmode[i][1],
1137 madera->pdata.codec.inmode[i][2],
1138 madera->pdata.codec.inmode[i][3]);
1140 dig_mode = madera->pdata.codec.dmic_ref[i] <<
1143 switch (madera->pdata.codec.inmode[i][0]) {
1151 dev_warn(madera->dev,
1153 i + 1, madera->pdata.codec.inmode[i][0]);
1157 switch (madera->pdata.codec.inmode[i][1]) {
1165 dev_warn(madera->dev,
1167 i + 1, madera->pdata.codec.inmode[i][1]);
1171 dev_dbg(madera->dev,
1175 regmap_update_bits(madera->regmap,
1182 regmap_update_bits(madera->regmap,
1186 regmap_update_bits(madera->regmap,
1195 struct madera *madera = priv->madera;
1197 madera_configure_input_mode(madera);
1219 struct madera *madera = priv->madera;
1220 const struct madera_codec_pdata *pdata = &madera->pdata.codec;
1225 dev_warn(madera->dev,
1246 regmap_update_bits(madera->regmap,
1250 dev_dbg(madera->dev, "OUT%d mono=0x%x\n", i + 1, val);
1254 dev_dbg(madera->dev, "PDM%d fmt=0x%x mute=0x%x\n", i + 1,
1258 regmap_update_bits(madera->regmap,
1265 regmap_update_bits(madera->regmap,
1278 struct madera *madera = priv->madera;
1281 ret = madera_request_irq(madera,
1287 dev_err(madera->dev,
1296 struct madera *madera = priv->madera;
1298 madera_free_irq(madera,
2256 ret = regmap_update_bits(priv->madera->regmap,
2260 dev_warn(priv->madera->dev,
2316 struct madera *madera = priv->madera;
2319 switch (madera->type) {
2416 struct madera *madera = priv->madera;
2437 madera->hp_ena &= ~mask;
2438 madera->hp_ena |= val;
2440 switch (madera->type) {
2447 regmap_read(madera->regmap, MADERA_OUTPUT_ENABLES_1, &ep_sel);
2454 (!madera->out_clamp[out_num] || madera->out_shorted[out_num]))
2457 regmap_update_bits(madera->regmap, MADERA_OUTPUT_ENABLES_1, mask, val);
2579 static int madera_get_legacy_dspclk_setting(struct madera *madera,
2587 switch (madera->type) {
2590 if (madera->rev < 3)
2606 static int madera_get_dspclk_setting(struct madera *madera,
2610 switch (madera->type) {
2615 return madera_get_legacy_dspclk_setting(madera, freq);
2682 struct madera *madera = priv->madera;
2708 clk_freq_sel = madera_get_dspclk_setting(madera, freq,
2721 dev_err(madera->dev,
2729 dev_dbg(madera->dev, "%s cleared\n", name);
2736 ret = regmap_write(madera->regmap, MADERA_DSP_CLOCK_2,
2739 dev_err(madera->dev,
2754 dev_dbg(madera->dev, "%s set to %uHz\n", name, freq);
2756 return regmap_update_bits(madera->regmap, reg, mask, val);
2764 struct madera *madera = priv->madera;
2839 regmap_update_bits(madera->regmap, base + MADERA_AIF_BCLK_CTRL,
2842 regmap_update_bits(madera->regmap, base + MADERA_AIF_TX_PIN_CTRL,
2845 regmap_update_bits(madera->regmap, base + MADERA_AIF_RX_PIN_CTRL,
2848 regmap_update_bits(madera->regmap, base + MADERA_AIF_FORMAT,
2945 struct madera *madera = priv->madera;
2965 switch (madera->type) {
3046 ret = regmap_read(priv->madera->regmap,
3103 struct madera *madera = priv->madera;
3111 madera->pdata.codec.max_channels_clocked[dai->id - 1];
3178 regmap_read(madera->regmap, base + MADERA_AIF_TX_ENABLES,
3180 regmap_read(madera->regmap, base + MADERA_AIF_RX_ENABLES,
3183 regmap_update_bits(madera->regmap,
3185 regmap_update_bits(madera->regmap,
3194 regmap_update_bits(madera->regmap,
3197 regmap_update_bits(madera->regmap,
3200 regmap_update_bits(madera->regmap,
3204 regmap_update_bits(madera->regmap,
3213 regmap_update_bits(madera->regmap,
3216 regmap_update_bits(madera->regmap,
3315 struct madera *madera = priv->madera;
3323 regmap_write(madera->regmap, base + i, slot);
3477 switch (fll->madera->type) {
3479 switch (fll->madera->rev) {
3534 switch (fll->madera->type) {
3536 switch (fll->madera->rev) {
3665 switch (fll->madera->type) {
3667 switch (fll->madera->rev) {
3714 static bool madera_write_fll(struct madera *madera, unsigned int base,
3721 regmap_update_bits_check(madera->regmap,
3726 regmap_update_bits_check(madera->regmap,
3731 regmap_update_bits_check(madera->regmap,
3737 regmap_update_bits_check(madera->regmap,
3747 regmap_update_bits_check(madera->regmap,
3754 regmap_update_bits_check(madera->regmap,
3762 regmap_update_bits_check(madera->regmap,
3773 struct madera *madera = fll->madera;
3777 ret = regmap_read(madera->regmap,
3789 struct madera *madera = fll->madera;
3797 regmap_read(madera->regmap, MADERA_IRQ1_RAW_STATUS_2, &val);
3833 regmap_update_bits_check(fll->madera->regmap,
3846 struct madera *madera = fll->madera;
3851 ret = regmap_read(madera->regmap, reg, &src);
3862 clk = madera->mclk[MADERA_MCLK1].clk;
3865 clk = madera->mclk[MADERA_MCLK2].clk;
3868 clk = madera->mclk[MADERA_MCLK3].clk;
3908 struct madera *madera = fll->madera;
3912 switch (madera->type) {
3923 regmap_update_bits(madera->regmap,
3926 regmap_update_bits_check(madera->regmap,
3929 regmap_update_bits_check(madera->regmap,
3932 regmap_update_bits(madera->regmap,
3943 pm_runtime_put_autosuspend(madera->dev);
3949 struct madera *madera = fll->madera;
3977 switch (madera->type) {
3992 regmap_update_bits(fll->madera->regmap,
3997 regmap_update_bits(fll->madera->regmap,
4012 fll_change |= madera_write_fll(madera, sync_base,
4030 switch (fll->madera->type) {
4032 switch (fll->madera->rev) {
4061 fll_change |= madera_write_fll(madera, fll->base,
4070 regmap_update_bits(madera->regmap,
4074 regmap_update_bits(madera->regmap,
4080 pm_runtime_get_sync(madera->dev);
4084 regmap_update_bits(madera->regmap,
4091 regmap_update_bits(madera->regmap,
4096 regmap_update_bits(madera->regmap,
4173 int madera_init_fll(struct madera *madera, int id, int base,
4178 fll->madera = madera;
4182 regmap_update_bits(madera->regmap,
4243 struct madera *madera = fll->madera;
4252 pm_runtime_get_sync(madera->dev);
4258 regmap_update_bits(fll->madera->regmap,
4275 regmap_write(madera->regmap, patch[i].reg, val);
4280 regmap_update_bits(madera->regmap,
4285 regmap_update_bits(madera->regmap,
4297 struct madera *madera = fll->madera;
4302 regmap_update_bits(madera->regmap,
4305 regmap_update_bits_check(madera->regmap,
4319 regmap_update_bits(madera->regmap,
4325 pm_runtime_put_autosuspend(madera->dev);
4378 struct madera *madera = fll->madera;
4389 regmap_update_bits(madera->regmap,
4392 regmap_update_bits(madera->regmap,
4395 regmap_update_bits_check(madera->regmap,
4408 regmap_update_bits(madera->regmap,
4414 pm_runtime_put_autosuspend(madera->dev);
4422 struct madera *madera = fll->madera;
4524 regmap_write(madera->regmap,
4527 regmap_update_bits(madera->regmap,
4531 regmap_update_bits(madera->regmap,
4535 regmap_update_bits(madera->regmap,
4539 regmap_update_bits(madera->regmap,
4543 regmap_update_bits(madera->regmap,
4549 regmap_update_bits(madera->regmap,
4553 regmap_update_bits(madera->regmap,
4557 regmap_update_bits(madera->regmap,
4568 struct madera *madera = fll->madera;
4576 pm_runtime_get_sync(madera->dev);
4582 regmap_update_bits(fll->madera->regmap,
4596 regmap_update_bits(madera->regmap,
4603 regmap_update_bits(madera->regmap,
4609 regmap_update_bits(madera->regmap,
4614 regmap_update_bits(madera->regmap,
4620 regmap_update_bits(madera->regmap,
4747 struct madera *madera = priv->madera;
4754 len = params->num_regs * regmap_get_val_bytes(madera->regmap);
4767 dev_err(madera->dev, "Rejecting unstable EQ coefficients\n");
4772 ret = regmap_read(madera->regmap, params->base, &val);
4779 ret = regmap_raw_write(madera->regmap, params->base, data, len);
4794 struct madera *madera = priv->madera;
4799 dev_err(madera->dev, "Rejecting unstable LHPF coefficients\n");
4807 MODULE_SOFTDEP("pre: madera");