Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

ASoC: cs35l56: Remove obsolete and redundant code

Merge series from Richard Fitzgerald <rf@opensource.cirrus.com>:

These commits remove various code that is either no longer needed,
or is redundant.

+45 -370
+6 -5
include/sound/cs35l56.h
··· 80 80 #define CS35L56_DSP1_AHBM_WINDOW_DEBUG_1 0x25E2044 81 81 #define CS35L56_DSP1_XMEM_UNPACKED24_0 0x2800000 82 82 #define CS35L56_DSP1_FW_VER 0x2800010 83 - #define CS35L56_DSP1_HALO_STATE_A1 0x2801E58 84 83 #define CS35L56_DSP1_HALO_STATE 0x28021E0 85 - #define CS35L56_DSP1_PM_CUR_STATE_A1 0x2804000 86 84 #define CS35L56_DSP1_PM_CUR_STATE 0x2804308 87 85 #define CS35L56_DSP1_XMEM_UNPACKED24_8191 0x2807FFC 88 86 #define CS35L56_DSP1_CORE_BASE 0x2B80000 ··· 265 267 bool fw_patched; 266 268 bool secured; 267 269 bool can_hibernate; 268 - bool fw_owns_asp1; 269 270 bool cal_data_valid; 270 271 s8 cal_index; 271 272 struct cirrus_amp_cal_data cal_data; 272 273 struct gpio_desc *reset_gpio; 273 274 }; 275 + 276 + /* Temporary to avoid a build break with the HDA driver */ 277 + static inline int cs35l56_force_sync_asp1_registers_from_cache(struct cs35l56_base *cs35l56_base) 278 + { 279 + return 0; 280 + } 274 281 275 282 extern struct regmap_config cs35l56_regmap_i2c; 276 283 extern struct regmap_config cs35l56_regmap_spi; ··· 287 284 extern const unsigned int cs35l56_tx_input_values[CS35L56_NUM_INPUT_SRC]; 288 285 289 286 int cs35l56_set_patch(struct cs35l56_base *cs35l56_base); 290 - int cs35l56_init_asp1_regs_for_driver_control(struct cs35l56_base *cs35l56_base); 291 - int cs35l56_force_sync_asp1_registers_from_cache(struct cs35l56_base *cs35l56_base); 292 287 int cs35l56_mbox_send(struct cs35l56_base *cs35l56_base, unsigned int command); 293 288 int cs35l56_firmware_shutdown(struct cs35l56_base *cs35l56_base); 294 289 int cs35l56_wait_for_firmware_boot(struct cs35l56_base *cs35l56_base);
-75
sound/soc/codecs/cs35l56-sdw.c
··· 271 271 prop->source_ports = BIT(CS35L56_SDW1_CAPTURE_PORT); 272 272 prop->sink_ports = BIT(CS35L56_SDW1_PLAYBACK_PORT); 273 273 prop->paging_support = true; 274 - prop->clk_stop_mode1 = false; 275 274 prop->quirks = SDW_SLAVE_QUIRKS_INVALID_INITIAL_PARITY; 276 275 prop->scp_int1_mask = SDW_SCP_INT1_BUS_CLASH | SDW_SCP_INT1_PARITY | SDW_SCP_INT1_IMPL_DEF; 277 276 ··· 316 317 return 0; 317 318 } 318 319 319 - static int cs35l56_a1_kick_divider(struct cs35l56_private *cs35l56, 320 - struct sdw_slave *peripheral) 321 - { 322 - unsigned int curr_scale_reg, next_scale_reg; 323 - int curr_scale, next_scale, ret; 324 - 325 - if (!cs35l56->base.init_done) 326 - return 0; 327 - 328 - if (peripheral->bus->params.curr_bank) { 329 - curr_scale_reg = SDW_SCP_BUSCLOCK_SCALE_B1; 330 - next_scale_reg = SDW_SCP_BUSCLOCK_SCALE_B0; 331 - } else { 332 - curr_scale_reg = SDW_SCP_BUSCLOCK_SCALE_B0; 333 - next_scale_reg = SDW_SCP_BUSCLOCK_SCALE_B1; 334 - } 335 - 336 - /* 337 - * Current clock scale value must be different to new value. 338 - * Modify current to guarantee this. If next still has the dummy 339 - * value we wrote when it was current, the core code has not set 340 - * a new scale so restore its original good value 341 - */ 342 - curr_scale = sdw_read_no_pm(peripheral, curr_scale_reg); 343 - if (curr_scale < 0) { 344 - dev_err(cs35l56->base.dev, "Failed to read current clock scale: %d\n", curr_scale); 345 - return curr_scale; 346 - } 347 - 348 - next_scale = sdw_read_no_pm(peripheral, next_scale_reg); 349 - if (next_scale < 0) { 350 - dev_err(cs35l56->base.dev, "Failed to read next clock scale: %d\n", next_scale); 351 - return next_scale; 352 - } 353 - 354 - if (next_scale == CS35L56_SDW_INVALID_BUS_SCALE) { 355 - next_scale = cs35l56->old_sdw_clock_scale; 356 - ret = sdw_write_no_pm(peripheral, next_scale_reg, next_scale); 357 - if (ret < 0) { 358 - dev_err(cs35l56->base.dev, "Failed to modify current clock scale: %d\n", 359 - ret); 360 - return ret; 361 - } 362 - } 363 - 364 - cs35l56->old_sdw_clock_scale = curr_scale; 365 - ret = sdw_write_no_pm(peripheral, curr_scale_reg, CS35L56_SDW_INVALID_BUS_SCALE); 366 - if (ret < 0) { 367 - dev_err(cs35l56->base.dev, "Failed to modify current clock scale: %d\n", ret); 368 - return ret; 369 - } 370 - 371 - dev_dbg(cs35l56->base.dev, "Next bus scale: %#x\n", next_scale); 372 - 373 - return 0; 374 - } 375 - 376 - static int cs35l56_sdw_bus_config(struct sdw_slave *peripheral, 377 - struct sdw_bus_params *params) 378 - { 379 - struct cs35l56_private *cs35l56 = dev_get_drvdata(&peripheral->dev); 380 - int sclk; 381 - 382 - sclk = params->curr_dr_freq / 2; 383 - dev_dbg(cs35l56->base.dev, "%s: sclk=%u c=%u r=%u\n", 384 - __func__, sclk, params->col, params->row); 385 - 386 - if ((cs35l56->base.type == 0x56) && (cs35l56->base.rev < 0xb0)) 387 - return cs35l56_a1_kick_divider(cs35l56, peripheral); 388 - 389 - return 0; 390 - } 391 - 392 320 static int __maybe_unused cs35l56_sdw_clk_stop(struct sdw_slave *peripheral, 393 321 enum sdw_clk_stop_mode mode, 394 322 enum sdw_clk_stop_type type) ··· 331 405 .read_prop = cs35l56_sdw_read_prop, 332 406 .interrupt_callback = cs35l56_sdw_interrupt, 333 407 .update_status = cs35l56_sdw_update_status, 334 - .bus_config = cs35l56_sdw_bus_config, 335 408 #ifdef DEBUG 336 409 .clk_stop = cs35l56_sdw_clk_stop, 337 410 #endif
+26 -96
sound/soc/codecs/cs35l56-shared.c
··· 20 20 * Firmware can change these to non-defaults to satisfy SDCA. 21 21 * Ensure that they are at known defaults. 22 22 */ 23 + { CS35L56_ASP1_ENABLES1, 0x00000000 }, 24 + { CS35L56_ASP1_CONTROL1, 0x00000028 }, 25 + { CS35L56_ASP1_CONTROL2, 0x18180200 }, 26 + { CS35L56_ASP1_CONTROL3, 0x00000002 }, 27 + { CS35L56_ASP1_FRAME_CONTROL1, 0x03020100 }, 28 + { CS35L56_ASP1_FRAME_CONTROL5, 0x00020100 }, 29 + { CS35L56_ASP1_DATA_CONTROL1, 0x00000018 }, 30 + { CS35L56_ASP1_DATA_CONTROL5, 0x00000018 }, 31 + { CS35L56_ASP1TX1_INPUT, 0x00000000 }, 32 + { CS35L56_ASP1TX2_INPUT, 0x00000000 }, 33 + { CS35L56_ASP1TX3_INPUT, 0x00000000 }, 34 + { CS35L56_ASP1TX4_INPUT, 0x00000000 }, 23 35 { CS35L56_SWIRE_DP3_CH1_INPUT, 0x00000018 }, 24 36 { CS35L56_SWIRE_DP3_CH2_INPUT, 0x00000019 }, 25 37 { CS35L56_SWIRE_DP3_CH3_INPUT, 0x00000029 }, ··· 53 41 static const struct reg_default cs35l56_reg_defaults[] = { 54 42 /* no defaults for OTP_MEM - first read populates cache */ 55 43 56 - /* 57 - * No defaults for ASP1 control or ASP1TX mixer. See 58 - * cs35l56_populate_asp1_register_defaults() and 59 - * cs35l56_sync_asp1_mixer_widgets_with_firmware(). 60 - */ 61 - 44 + { CS35L56_ASP1_ENABLES1, 0x00000000 }, 45 + { CS35L56_ASP1_CONTROL1, 0x00000028 }, 46 + { CS35L56_ASP1_CONTROL2, 0x18180200 }, 47 + { CS35L56_ASP1_CONTROL3, 0x00000002 }, 48 + { CS35L56_ASP1_FRAME_CONTROL1, 0x03020100 }, 49 + { CS35L56_ASP1_FRAME_CONTROL5, 0x00020100 }, 50 + { CS35L56_ASP1_DATA_CONTROL1, 0x00000018 }, 51 + { CS35L56_ASP1_DATA_CONTROL5, 0x00000018 }, 52 + { CS35L56_ASP1TX1_INPUT, 0x00000000 }, 53 + { CS35L56_ASP1TX2_INPUT, 0x00000000 }, 54 + { CS35L56_ASP1TX3_INPUT, 0x00000000 }, 55 + { CS35L56_ASP1TX4_INPUT, 0x00000000 }, 62 56 { CS35L56_SWIRE_DP3_CH1_INPUT, 0x00000018 }, 63 57 { CS35L56_SWIRE_DP3_CH2_INPUT, 0x00000019 }, 64 58 { CS35L56_SWIRE_DP3_CH3_INPUT, 0x00000029 }, ··· 224 206 } 225 207 } 226 208 227 - static const struct reg_sequence cs35l56_asp1_defaults[] = { 228 - REG_SEQ0(CS35L56_ASP1_ENABLES1, 0x00000000), 229 - REG_SEQ0(CS35L56_ASP1_CONTROL1, 0x00000028), 230 - REG_SEQ0(CS35L56_ASP1_CONTROL2, 0x18180200), 231 - REG_SEQ0(CS35L56_ASP1_CONTROL3, 0x00000002), 232 - REG_SEQ0(CS35L56_ASP1_FRAME_CONTROL1, 0x03020100), 233 - REG_SEQ0(CS35L56_ASP1_FRAME_CONTROL5, 0x00020100), 234 - REG_SEQ0(CS35L56_ASP1_DATA_CONTROL1, 0x00000018), 235 - REG_SEQ0(CS35L56_ASP1_DATA_CONTROL5, 0x00000018), 236 - REG_SEQ0(CS35L56_ASP1TX1_INPUT, 0x00000000), 237 - REG_SEQ0(CS35L56_ASP1TX2_INPUT, 0x00000000), 238 - REG_SEQ0(CS35L56_ASP1TX3_INPUT, 0x00000000), 239 - REG_SEQ0(CS35L56_ASP1TX4_INPUT, 0x00000000), 240 - }; 241 - 242 - /* 243 - * The firmware can have control of the ASP so we don't provide regmap 244 - * with defaults for these registers, to prevent a regcache_sync() from 245 - * overwriting the firmware settings. But if the machine driver hooks up 246 - * the ASP it means the driver is taking control of the ASP, so then the 247 - * registers are populated with the defaults. 248 - */ 249 - int cs35l56_init_asp1_regs_for_driver_control(struct cs35l56_base *cs35l56_base) 250 - { 251 - if (!cs35l56_base->fw_owns_asp1) 252 - return 0; 253 - 254 - cs35l56_base->fw_owns_asp1 = false; 255 - 256 - return regmap_multi_reg_write(cs35l56_base->regmap, cs35l56_asp1_defaults, 257 - ARRAY_SIZE(cs35l56_asp1_defaults)); 258 - } 259 - EXPORT_SYMBOL_NS_GPL(cs35l56_init_asp1_regs_for_driver_control, SND_SOC_CS35L56_SHARED); 260 - 261 - /* 262 - * The firmware boot sequence can overwrite the ASP1 config registers so that 263 - * they don't match regmap's view of their values. Rewrite the values from the 264 - * regmap cache into the hardware registers. 265 - */ 266 - int cs35l56_force_sync_asp1_registers_from_cache(struct cs35l56_base *cs35l56_base) 267 - { 268 - struct reg_sequence asp1_regs[ARRAY_SIZE(cs35l56_asp1_defaults)]; 269 - int i, ret; 270 - 271 - if (cs35l56_base->fw_owns_asp1) 272 - return 0; 273 - 274 - memcpy(asp1_regs, cs35l56_asp1_defaults, sizeof(asp1_regs)); 275 - 276 - /* Read current values from regmap cache into the write sequence */ 277 - for (i = 0; i < ARRAY_SIZE(asp1_regs); ++i) { 278 - ret = regmap_read(cs35l56_base->regmap, asp1_regs[i].reg, &asp1_regs[i].def); 279 - if (ret) 280 - goto err; 281 - } 282 - 283 - /* Write the values cache-bypassed so that they will be written to silicon */ 284 - ret = regmap_multi_reg_write_bypassed(cs35l56_base->regmap, asp1_regs, 285 - ARRAY_SIZE(asp1_regs)); 286 - if (ret) 287 - goto err; 288 - 289 - return 0; 290 - 291 - err: 292 - dev_err(cs35l56_base->dev, "Failed to sync ASP1 registers: %d\n", ret); 293 - 294 - return ret; 295 - } 296 - EXPORT_SYMBOL_NS_GPL(cs35l56_force_sync_asp1_registers_from_cache, SND_SOC_CS35L56_SHARED); 297 - 298 209 int cs35l56_mbox_send(struct cs35l56_base *cs35l56_base, unsigned int command) 299 210 { 300 211 unsigned int val; ··· 245 298 int cs35l56_firmware_shutdown(struct cs35l56_base *cs35l56_base) 246 299 { 247 300 int ret; 248 - unsigned int reg; 249 301 unsigned int val; 250 302 251 303 ret = cs35l56_mbox_send(cs35l56_base, CS35L56_MBOX_CMD_SHUTDOWN); 252 304 if (ret) 253 305 return ret; 254 306 255 - if (cs35l56_base->rev < CS35L56_REVID_B0) 256 - reg = CS35L56_DSP1_PM_CUR_STATE_A1; 257 - else 258 - reg = CS35L56_DSP1_PM_CUR_STATE; 259 - 260 - ret = regmap_read_poll_timeout(cs35l56_base->regmap, reg, 307 + ret = regmap_read_poll_timeout(cs35l56_base->regmap, CS35L56_DSP1_PM_CUR_STATE, 261 308 val, (val == CS35L56_HALO_STATE_SHUTDOWN), 262 309 CS35L56_HALO_STATE_POLL_US, 263 310 CS35L56_HALO_STATE_TIMEOUT_US); ··· 264 323 265 324 int cs35l56_wait_for_firmware_boot(struct cs35l56_base *cs35l56_base) 266 325 { 267 - unsigned int reg; 268 326 unsigned int val = 0; 269 327 int read_ret, poll_ret; 270 - 271 - if (cs35l56_base->rev < CS35L56_REVID_B0) 272 - reg = CS35L56_DSP1_HALO_STATE_A1; 273 - else 274 - reg = CS35L56_DSP1_HALO_STATE; 275 328 276 329 /* 277 330 * The regmap must remain in cache-only until the chip has ··· 276 341 CS35L56_HALO_STATE_POLL_US, 277 342 CS35L56_HALO_STATE_TIMEOUT_US, 278 343 false, 279 - cs35l56_base->regmap, reg, &val); 344 + cs35l56_base->regmap, CS35L56_DSP1_HALO_STATE, &val); 280 345 281 346 if (poll_ret) { 282 347 dev_err(cs35l56_base->dev, "Firmware boot timed out(%d): HALO_STATE=%#x\n", ··· 714 779 else 715 780 cs35l56_wait_control_port_ready(); 716 781 717 - /* 718 - * The HALO_STATE register is in different locations on Ax and B0 719 - * devices so the REVID needs to be determined before waiting for the 720 - * firmware to boot. 721 - */ 722 782 ret = regmap_read_bypassed(cs35l56_base->regmap, CS35L56_REVID, &revid); 723 783 if (ret < 0) { 724 784 dev_err(cs35l56_base->dev, "Get Revision ID failed\n");
+13 -192
sound/soc/codecs/cs35l56.c
··· 63 63 return snd_soc_put_volsw(kcontrol, ucontrol); 64 64 } 65 65 66 - static const unsigned short cs35l56_asp1_mixer_regs[] = { 67 - CS35L56_ASP1TX1_INPUT, CS35L56_ASP1TX2_INPUT, 68 - CS35L56_ASP1TX3_INPUT, CS35L56_ASP1TX4_INPUT, 69 - }; 70 - 71 - static const char * const cs35l56_asp1_mux_control_names[] = { 72 - "ASP1 TX1 Source", "ASP1 TX2 Source", "ASP1 TX3 Source", "ASP1 TX4 Source" 73 - }; 74 - 75 - static int cs35l56_sync_asp1_mixer_widgets_with_firmware(struct cs35l56_private *cs35l56) 76 - { 77 - struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(cs35l56->component); 78 - const char *prefix = cs35l56->component->name_prefix; 79 - char full_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; 80 - const char *name; 81 - struct snd_kcontrol *kcontrol; 82 - struct soc_enum *e; 83 - unsigned int val[4]; 84 - int i, item, ret; 85 - 86 - if (cs35l56->asp1_mixer_widgets_initialized) 87 - return 0; 88 - 89 - /* 90 - * Resume so we can read the registers from silicon if the regmap 91 - * cache has not yet been populated. 92 - */ 93 - ret = pm_runtime_resume_and_get(cs35l56->base.dev); 94 - if (ret < 0) 95 - return ret; 96 - 97 - /* Wait for firmware download and reboot */ 98 - cs35l56_wait_dsp_ready(cs35l56); 99 - 100 - ret = regmap_bulk_read(cs35l56->base.regmap, CS35L56_ASP1TX1_INPUT, 101 - val, ARRAY_SIZE(val)); 102 - 103 - pm_runtime_mark_last_busy(cs35l56->base.dev); 104 - pm_runtime_put_autosuspend(cs35l56->base.dev); 105 - 106 - if (ret) { 107 - dev_err(cs35l56->base.dev, "Failed to read ASP1 mixer regs: %d\n", ret); 108 - return ret; 109 - } 110 - 111 - for (i = 0; i < ARRAY_SIZE(cs35l56_asp1_mux_control_names); ++i) { 112 - name = cs35l56_asp1_mux_control_names[i]; 113 - 114 - if (prefix) { 115 - snprintf(full_name, sizeof(full_name), "%s %s", prefix, name); 116 - name = full_name; 117 - } 118 - 119 - kcontrol = snd_soc_card_get_kcontrol_locked(dapm->card, name); 120 - if (!kcontrol) { 121 - dev_warn(cs35l56->base.dev, "Could not find control %s\n", name); 122 - continue; 123 - } 124 - 125 - e = (struct soc_enum *)kcontrol->private_value; 126 - item = snd_soc_enum_val_to_item(e, val[i] & CS35L56_ASP_TXn_SRC_MASK); 127 - snd_soc_dapm_mux_update_power(dapm, kcontrol, item, e, NULL); 128 - } 129 - 130 - cs35l56->asp1_mixer_widgets_initialized = true; 131 - 132 - return 0; 133 - } 134 - 135 - static int cs35l56_dspwait_asp1tx_get(struct snd_kcontrol *kcontrol, 136 - struct snd_ctl_elem_value *ucontrol) 137 - { 138 - struct snd_soc_component *component = snd_soc_dapm_kcontrol_component(kcontrol); 139 - struct cs35l56_private *cs35l56 = snd_soc_component_get_drvdata(component); 140 - struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; 141 - int index = e->shift_l; 142 - unsigned int addr, val; 143 - int ret; 144 - 145 - ret = cs35l56_sync_asp1_mixer_widgets_with_firmware(cs35l56); 146 - if (ret) 147 - return ret; 148 - 149 - addr = cs35l56_asp1_mixer_regs[index]; 150 - ret = regmap_read(cs35l56->base.regmap, addr, &val); 151 - if (ret) 152 - return ret; 153 - 154 - val &= CS35L56_ASP_TXn_SRC_MASK; 155 - ucontrol->value.enumerated.item[0] = snd_soc_enum_val_to_item(e, val); 156 - 157 - return 0; 158 - } 159 - 160 - static int cs35l56_dspwait_asp1tx_put(struct snd_kcontrol *kcontrol, 161 - struct snd_ctl_elem_value *ucontrol) 162 - { 163 - struct snd_soc_component *component = snd_soc_dapm_kcontrol_component(kcontrol); 164 - struct snd_soc_dapm_context *dapm = snd_soc_dapm_kcontrol_dapm(kcontrol); 165 - struct cs35l56_private *cs35l56 = snd_soc_component_get_drvdata(component); 166 - struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; 167 - int item = ucontrol->value.enumerated.item[0]; 168 - int index = e->shift_l; 169 - unsigned int addr, val; 170 - bool changed; 171 - int ret; 172 - 173 - ret = cs35l56_sync_asp1_mixer_widgets_with_firmware(cs35l56); 174 - if (ret) 175 - return ret; 176 - 177 - addr = cs35l56_asp1_mixer_regs[index]; 178 - val = snd_soc_enum_item_to_val(e, item); 179 - 180 - ret = regmap_update_bits_check(cs35l56->base.regmap, addr, 181 - CS35L56_ASP_TXn_SRC_MASK, val, &changed); 182 - if (ret) 183 - return ret; 184 - 185 - if (changed) 186 - snd_soc_dapm_mux_update_power(dapm, kcontrol, item, e, NULL); 187 - 188 - return changed; 189 - } 190 - 191 66 static DECLARE_TLV_DB_SCALE(vol_tlv, -10000, 25, 0); 192 67 193 68 static const struct snd_kcontrol_new cs35l56_controls[] = { ··· 81 206 }; 82 207 83 208 static SOC_VALUE_ENUM_SINGLE_DECL(cs35l56_asp1tx1_enum, 84 - SND_SOC_NOPM, 85 - 0, 0, 209 + CS35L56_ASP1TX1_INPUT, 210 + 0, CS35L56_ASP_TXn_SRC_MASK, 86 211 cs35l56_tx_input_texts, 87 212 cs35l56_tx_input_values); 88 213 89 214 static const struct snd_kcontrol_new asp1_tx1_mux = 90 - SOC_DAPM_ENUM_EXT("ASP1TX1 SRC", cs35l56_asp1tx1_enum, 91 - cs35l56_dspwait_asp1tx_get, cs35l56_dspwait_asp1tx_put); 215 + SOC_DAPM_ENUM("ASP1TX1 SRC", cs35l56_asp1tx1_enum); 92 216 93 217 static SOC_VALUE_ENUM_SINGLE_DECL(cs35l56_asp1tx2_enum, 94 - SND_SOC_NOPM, 95 - 1, 0, 218 + CS35L56_ASP1TX2_INPUT, 219 + 0, CS35L56_ASP_TXn_SRC_MASK, 96 220 cs35l56_tx_input_texts, 97 221 cs35l56_tx_input_values); 98 222 99 223 static const struct snd_kcontrol_new asp1_tx2_mux = 100 - SOC_DAPM_ENUM_EXT("ASP1TX2 SRC", cs35l56_asp1tx2_enum, 101 - cs35l56_dspwait_asp1tx_get, cs35l56_dspwait_asp1tx_put); 224 + SOC_DAPM_ENUM("ASP1TX2 SRC", cs35l56_asp1tx2_enum); 102 225 103 226 static SOC_VALUE_ENUM_SINGLE_DECL(cs35l56_asp1tx3_enum, 104 - SND_SOC_NOPM, 105 - 2, 0, 227 + CS35L56_ASP1TX3_INPUT, 228 + 0, CS35L56_ASP_TXn_SRC_MASK, 106 229 cs35l56_tx_input_texts, 107 230 cs35l56_tx_input_values); 108 231 109 232 static const struct snd_kcontrol_new asp1_tx3_mux = 110 - SOC_DAPM_ENUM_EXT("ASP1TX3 SRC", cs35l56_asp1tx3_enum, 111 - cs35l56_dspwait_asp1tx_get, cs35l56_dspwait_asp1tx_put); 233 + SOC_DAPM_ENUM("ASP1TX3 SRC", cs35l56_asp1tx3_enum); 112 234 113 235 static SOC_VALUE_ENUM_SINGLE_DECL(cs35l56_asp1tx4_enum, 114 - SND_SOC_NOPM, 115 - 3, 0, 236 + CS35L56_ASP1TX4_INPUT, 237 + 0, CS35L56_ASP_TXn_SRC_MASK, 116 238 cs35l56_tx_input_texts, 117 239 cs35l56_tx_input_values); 118 240 119 241 static const struct snd_kcontrol_new asp1_tx4_mux = 120 - SOC_DAPM_ENUM_EXT("ASP1TX4 SRC", cs35l56_asp1tx4_enum, 121 - cs35l56_dspwait_asp1tx_get, cs35l56_dspwait_asp1tx_put); 242 + SOC_DAPM_ENUM("ASP1TX4 SRC", cs35l56_asp1tx4_enum); 122 243 123 244 static SOC_VALUE_ENUM_SINGLE_DECL(cs35l56_sdw1tx1_enum, 124 245 CS35L56_SWIRE_DP3_CH1_INPUT, ··· 152 281 static const struct snd_kcontrol_new sdw1_tx4_mux = 153 282 SOC_DAPM_ENUM("SDW1TX4 SRC", cs35l56_sdw1tx4_enum); 154 283 155 - static int cs35l56_asp1_cfg_event(struct snd_soc_dapm_widget *w, 156 - struct snd_kcontrol *kcontrol, int event) 157 - { 158 - struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); 159 - struct cs35l56_private *cs35l56 = snd_soc_component_get_drvdata(component); 160 - 161 - switch (event) { 162 - case SND_SOC_DAPM_PRE_PMU: 163 - /* Override register values set by firmware boot */ 164 - return cs35l56_force_sync_asp1_registers_from_cache(&cs35l56->base); 165 - default: 166 - return 0; 167 - } 168 - } 169 - 170 284 static int cs35l56_play_event(struct snd_soc_dapm_widget *w, 171 285 struct snd_kcontrol *kcontrol, int event) 172 286 { ··· 187 331 static const struct snd_soc_dapm_widget cs35l56_dapm_widgets[] = { 188 332 SND_SOC_DAPM_REGULATOR_SUPPLY("VDD_B", 0, 0), 189 333 SND_SOC_DAPM_REGULATOR_SUPPLY("VDD_AMP", 0, 0), 190 - 191 - SND_SOC_DAPM_SUPPLY("ASP1 CFG", SND_SOC_NOPM, 0, 0, cs35l56_asp1_cfg_event, 192 - SND_SOC_DAPM_PRE_PMU), 193 334 194 335 SND_SOC_DAPM_SUPPLY("PLAY", SND_SOC_NOPM, 0, 0, cs35l56_play_event, 195 336 SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), ··· 255 402 { "AMP", NULL, "VDD_B" }, 256 403 { "AMP", NULL, "VDD_AMP" }, 257 404 258 - { "ASP1 Playback", NULL, "ASP1 CFG" }, 259 - { "ASP1 Capture", NULL, "ASP1 CFG" }, 260 - 261 405 { "ASP1 Playback", NULL, "PLAY" }, 262 406 { "SDW1 Playback", NULL, "PLAY" }, 263 407 ··· 305 455 { 306 456 struct cs35l56_private *cs35l56 = snd_soc_component_get_drvdata(codec_dai->component); 307 457 unsigned int val; 308 - int ret; 309 458 310 459 dev_dbg(cs35l56->base.dev, "%s: %#x\n", __func__, fmt); 311 - 312 - ret = cs35l56_init_asp1_regs_for_driver_control(&cs35l56->base); 313 - if (ret) 314 - return ret; 315 460 316 461 switch (fmt & SND_SOC_DAIFMT_CLOCK_PROVIDER_MASK) { 317 462 case SND_SOC_DAIFMT_CBC_CFC: ··· 381 536 unsigned int rx_mask, int slots, int slot_width) 382 537 { 383 538 struct cs35l56_private *cs35l56 = snd_soc_component_get_drvdata(dai->component); 384 - int ret; 385 - 386 - ret = cs35l56_init_asp1_regs_for_driver_control(&cs35l56->base); 387 - if (ret) 388 - return ret; 389 539 390 540 if ((slots == 0) || (slot_width == 0)) { 391 541 dev_dbg(cs35l56->base.dev, "tdm config cleared\n"); ··· 429 589 struct cs35l56_private *cs35l56 = snd_soc_component_get_drvdata(dai->component); 430 590 unsigned int rate = params_rate(params); 431 591 u8 asp_width, asp_wl; 432 - int ret; 433 - 434 - ret = cs35l56_init_asp1_regs_for_driver_control(&cs35l56->base); 435 - if (ret) 436 - return ret; 437 592 438 593 asp_wl = params_width(params); 439 594 if (cs35l56->asp_slot_width) ··· 485 650 int clk_id, unsigned int freq, int dir) 486 651 { 487 652 struct cs35l56_private *cs35l56 = snd_soc_component_get_drvdata(dai->component); 488 - int freq_id, ret; 489 - 490 - ret = cs35l56_init_asp1_regs_for_driver_control(&cs35l56->base); 491 - if (ret) 492 - return ret; 653 + int freq_id; 493 654 494 655 if (freq == 0) { 495 656 cs35l56->sysclk_set = false; ··· 865 1034 debugfs_create_bool("init_done", 0444, debugfs_root, &cs35l56->base.init_done); 866 1035 debugfs_create_bool("can_hibernate", 0444, debugfs_root, &cs35l56->base.can_hibernate); 867 1036 debugfs_create_bool("fw_patched", 0444, debugfs_root, &cs35l56->base.fw_patched); 868 - 869 - /* 870 - * The widgets for the ASP1TX mixer can't be initialized 871 - * until the firmware has been downloaded and rebooted. 872 - */ 873 - regcache_drop_region(cs35l56->base.regmap, CS35L56_ASP1TX1_INPUT, CS35L56_ASP1TX4_INPUT); 874 - cs35l56->asp1_mixer_widgets_initialized = false; 875 1037 876 1038 queue_work(cs35l56->dsp_wq, &cs35l56->dsp_work); 877 1039 ··· 1255 1431 mutex_init(&cs35l56->base.irq_lock); 1256 1432 cs35l56->base.cal_index = -1; 1257 1433 cs35l56->speaker_id = -ENOENT; 1258 - 1259 - /* Assume that the firmware owns ASP1 until we know different */ 1260 - cs35l56->base.fw_owns_asp1 = true; 1261 1434 1262 1435 dev_set_drvdata(cs35l56->base.dev, cs35l56); 1263 1436
-2
sound/soc/codecs/cs35l56.h
··· 51 51 u8 asp_slot_count; 52 52 bool tdm_mode; 53 53 bool sysclk_set; 54 - bool asp1_mixer_widgets_initialized; 55 - u8 old_sdw_clock_scale; 56 54 }; 57 55 58 56 extern const struct dev_pm_ops cs35l56_pm_ops_i2c_spi;