1/* 2 * Driver for the PCM512x CODECs 3 * 4 * Author: Mark Brown <broonie@linaro.org> 5 * Copyright 2014 Linaro Ltd 6 * 7 * This program is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU General Public License 9 * version 2 as published by the Free Software Foundation. 10 * 11 * This program is distributed in the hope that it will be useful, but 12 * WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * General Public License for more details. 15 */ 16 17 18#include <linux/init.h> 19#include <linux/module.h> 20#include <linux/clk.h> 21#include <linux/kernel.h> 22#include <linux/pm_runtime.h> 23#include <linux/regmap.h> 24#include <linux/regulator/consumer.h> 25#include <linux/gcd.h> 26#include <sound/soc.h> 27#include <sound/soc-dapm.h> 28#include <sound/pcm_params.h> 29#include <sound/tlv.h> 30 31#include "pcm512x.h" 32 33#define DIV_ROUND_DOWN_ULL(ll, d) \ 34 ({ unsigned long long _tmp = (ll); do_div(_tmp, d); _tmp; }) 35 36#define PCM512x_NUM_SUPPLIES 3 37static const char * const pcm512x_supply_names[PCM512x_NUM_SUPPLIES] = { 38 "AVDD", 39 "DVDD", 40 "CPVDD", 41}; 42 43struct pcm512x_priv { 44 struct regmap *regmap; 45 struct clk *sclk; 46 struct regulator_bulk_data supplies[PCM512x_NUM_SUPPLIES]; 47 struct notifier_block supply_nb[PCM512x_NUM_SUPPLIES]; 48 int fmt; 49 int pll_in; 50 int pll_out; 51 int pll_r; 52 int pll_j; 53 int pll_d; 54 int pll_p; 55 unsigned long real_pll; 56 unsigned long overclock_pll; 57 unsigned long overclock_dac; 58 unsigned long overclock_dsp; 59}; 60 61/* 62 * We can't use the same notifier block for more than one supply and 63 * there's no way I can see to get from a callback to the caller 64 * except container_of(). 65 */ 66#define PCM512x_REGULATOR_EVENT(n) \ 67static int pcm512x_regulator_event_##n(struct notifier_block *nb, \ 68 unsigned long event, void *data) \ 69{ \ 70 struct pcm512x_priv *pcm512x = container_of(nb, struct pcm512x_priv, \ 71 supply_nb[n]); \ 72 if (event & REGULATOR_EVENT_DISABLE) { \ 73 regcache_mark_dirty(pcm512x->regmap); \ 74 regcache_cache_only(pcm512x->regmap, true); \ 75 } \ 76 return 0; \ 77} 78 79PCM512x_REGULATOR_EVENT(0) 80PCM512x_REGULATOR_EVENT(1) 81PCM512x_REGULATOR_EVENT(2) 82 83static const struct reg_default pcm512x_reg_defaults[] = { 84 { PCM512x_RESET, 0x00 }, 85 { PCM512x_POWER, 0x00 }, 86 { PCM512x_MUTE, 0x00 }, 87 { PCM512x_DSP, 0x00 }, 88 { PCM512x_PLL_REF, 0x00 }, 89 { PCM512x_DAC_REF, 0x00 }, 90 { PCM512x_DAC_ROUTING, 0x11 }, 91 { PCM512x_DSP_PROGRAM, 0x01 }, 92 { PCM512x_CLKDET, 0x00 }, 93 { PCM512x_AUTO_MUTE, 0x00 }, 94 { PCM512x_ERROR_DETECT, 0x00 }, 95 { PCM512x_DIGITAL_VOLUME_1, 0x00 }, 96 { PCM512x_DIGITAL_VOLUME_2, 0x30 }, 97 { PCM512x_DIGITAL_VOLUME_3, 0x30 }, 98 { PCM512x_DIGITAL_MUTE_1, 0x22 }, 99 { PCM512x_DIGITAL_MUTE_2, 0x00 }, 100 { PCM512x_DIGITAL_MUTE_3, 0x07 }, 101 { PCM512x_OUTPUT_AMPLITUDE, 0x00 }, 102 { PCM512x_ANALOG_GAIN_CTRL, 0x00 }, 103 { PCM512x_UNDERVOLTAGE_PROT, 0x00 }, 104 { PCM512x_ANALOG_MUTE_CTRL, 0x00 }, 105 { PCM512x_ANALOG_GAIN_BOOST, 0x00 }, 106 { PCM512x_VCOM_CTRL_1, 0x00 }, 107 { PCM512x_VCOM_CTRL_2, 0x01 }, 108 { PCM512x_BCLK_LRCLK_CFG, 0x00 }, 109 { PCM512x_MASTER_MODE, 0x7c }, 110 { PCM512x_GPIO_DACIN, 0x00 }, 111 { PCM512x_GPIO_PLLIN, 0x00 }, 112 { PCM512x_SYNCHRONIZE, 0x10 }, 113 { PCM512x_PLL_COEFF_0, 0x00 }, 114 { PCM512x_PLL_COEFF_1, 0x00 }, 115 { PCM512x_PLL_COEFF_2, 0x00 }, 116 { PCM512x_PLL_COEFF_3, 0x00 }, 117 { PCM512x_PLL_COEFF_4, 0x00 }, 118 { PCM512x_DSP_CLKDIV, 0x00 }, 119 { PCM512x_DAC_CLKDIV, 0x00 }, 120 { PCM512x_NCP_CLKDIV, 0x00 }, 121 { PCM512x_OSR_CLKDIV, 0x00 }, 122 { PCM512x_MASTER_CLKDIV_1, 0x00 }, 123 { PCM512x_MASTER_CLKDIV_2, 0x00 }, 124 { PCM512x_FS_SPEED_MODE, 0x00 }, 125 { PCM512x_IDAC_1, 0x01 }, 126 { PCM512x_IDAC_2, 0x00 }, 127}; 128 129static bool pcm512x_readable(struct device *dev, unsigned int reg) 130{ 131 switch (reg) { 132 case PCM512x_RESET: 133 case PCM512x_POWER: 134 case PCM512x_MUTE: 135 case PCM512x_PLL_EN: 136 case PCM512x_SPI_MISO_FUNCTION: 137 case PCM512x_DSP: 138 case PCM512x_GPIO_EN: 139 case PCM512x_BCLK_LRCLK_CFG: 140 case PCM512x_DSP_GPIO_INPUT: 141 case PCM512x_MASTER_MODE: 142 case PCM512x_PLL_REF: 143 case PCM512x_DAC_REF: 144 case PCM512x_GPIO_DACIN: 145 case PCM512x_GPIO_PLLIN: 146 case PCM512x_SYNCHRONIZE: 147 case PCM512x_PLL_COEFF_0: 148 case PCM512x_PLL_COEFF_1: 149 case PCM512x_PLL_COEFF_2: 150 case PCM512x_PLL_COEFF_3: 151 case PCM512x_PLL_COEFF_4: 152 case PCM512x_DSP_CLKDIV: 153 case PCM512x_DAC_CLKDIV: 154 case PCM512x_NCP_CLKDIV: 155 case PCM512x_OSR_CLKDIV: 156 case PCM512x_MASTER_CLKDIV_1: 157 case PCM512x_MASTER_CLKDIV_2: 158 case PCM512x_FS_SPEED_MODE: 159 case PCM512x_IDAC_1: 160 case PCM512x_IDAC_2: 161 case PCM512x_ERROR_DETECT: 162 case PCM512x_I2S_1: 163 case PCM512x_I2S_2: 164 case PCM512x_DAC_ROUTING: 165 case PCM512x_DSP_PROGRAM: 166 case PCM512x_CLKDET: 167 case PCM512x_AUTO_MUTE: 168 case PCM512x_DIGITAL_VOLUME_1: 169 case PCM512x_DIGITAL_VOLUME_2: 170 case PCM512x_DIGITAL_VOLUME_3: 171 case PCM512x_DIGITAL_MUTE_1: 172 case PCM512x_DIGITAL_MUTE_2: 173 case PCM512x_DIGITAL_MUTE_3: 174 case PCM512x_GPIO_OUTPUT_1: 175 case PCM512x_GPIO_OUTPUT_2: 176 case PCM512x_GPIO_OUTPUT_3: 177 case PCM512x_GPIO_OUTPUT_4: 178 case PCM512x_GPIO_OUTPUT_5: 179 case PCM512x_GPIO_OUTPUT_6: 180 case PCM512x_GPIO_CONTROL_1: 181 case PCM512x_GPIO_CONTROL_2: 182 case PCM512x_OVERFLOW: 183 case PCM512x_RATE_DET_1: 184 case PCM512x_RATE_DET_2: 185 case PCM512x_RATE_DET_3: 186 case PCM512x_RATE_DET_4: 187 case PCM512x_CLOCK_STATUS: 188 case PCM512x_ANALOG_MUTE_DET: 189 case PCM512x_GPIN: 190 case PCM512x_DIGITAL_MUTE_DET: 191 case PCM512x_OUTPUT_AMPLITUDE: 192 case PCM512x_ANALOG_GAIN_CTRL: 193 case PCM512x_UNDERVOLTAGE_PROT: 194 case PCM512x_ANALOG_MUTE_CTRL: 195 case PCM512x_ANALOG_GAIN_BOOST: 196 case PCM512x_VCOM_CTRL_1: 197 case PCM512x_VCOM_CTRL_2: 198 case PCM512x_CRAM_CTRL: 199 case PCM512x_FLEX_A: 200 case PCM512x_FLEX_B: 201 return true; 202 default: 203 /* There are 256 raw register addresses */ 204 return reg < 0xff; 205 } 206} 207 208static bool pcm512x_volatile(struct device *dev, unsigned int reg) 209{ 210 switch (reg) { 211 case PCM512x_PLL_EN: 212 case PCM512x_OVERFLOW: 213 case PCM512x_RATE_DET_1: 214 case PCM512x_RATE_DET_2: 215 case PCM512x_RATE_DET_3: 216 case PCM512x_RATE_DET_4: 217 case PCM512x_CLOCK_STATUS: 218 case PCM512x_ANALOG_MUTE_DET: 219 case PCM512x_GPIN: 220 case PCM512x_DIGITAL_MUTE_DET: 221 case PCM512x_CRAM_CTRL: 222 return true; 223 default: 224 /* There are 256 raw register addresses */ 225 return reg < 0xff; 226 } 227} 228 229static int pcm512x_overclock_pll_get(struct snd_kcontrol *kcontrol, 230 struct snd_ctl_elem_value *ucontrol) 231{ 232 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol); 233 struct pcm512x_priv *pcm512x = snd_soc_codec_get_drvdata(codec); 234 235 ucontrol->value.integer.value[0] = pcm512x->overclock_pll; 236 return 0; 237} 238 239static int pcm512x_overclock_pll_put(struct snd_kcontrol *kcontrol, 240 struct snd_ctl_elem_value *ucontrol) 241{ 242 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol); 243 struct pcm512x_priv *pcm512x = snd_soc_codec_get_drvdata(codec); 244 245 switch (codec->dapm.bias_level) { 246 case SND_SOC_BIAS_OFF: 247 case SND_SOC_BIAS_STANDBY: 248 break; 249 default: 250 return -EBUSY; 251 } 252 253 pcm512x->overclock_pll = ucontrol->value.integer.value[0]; 254 return 0; 255} 256 257static int pcm512x_overclock_dsp_get(struct snd_kcontrol *kcontrol, 258 struct snd_ctl_elem_value *ucontrol) 259{ 260 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol); 261 struct pcm512x_priv *pcm512x = snd_soc_codec_get_drvdata(codec); 262 263 ucontrol->value.integer.value[0] = pcm512x->overclock_dsp; 264 return 0; 265} 266 267static int pcm512x_overclock_dsp_put(struct snd_kcontrol *kcontrol, 268 struct snd_ctl_elem_value *ucontrol) 269{ 270 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol); 271 struct pcm512x_priv *pcm512x = snd_soc_codec_get_drvdata(codec); 272 273 switch (codec->dapm.bias_level) { 274 case SND_SOC_BIAS_OFF: 275 case SND_SOC_BIAS_STANDBY: 276 break; 277 default: 278 return -EBUSY; 279 } 280 281 pcm512x->overclock_dsp = ucontrol->value.integer.value[0]; 282 return 0; 283} 284 285static int pcm512x_overclock_dac_get(struct snd_kcontrol *kcontrol, 286 struct snd_ctl_elem_value *ucontrol) 287{ 288 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol); 289 struct pcm512x_priv *pcm512x = snd_soc_codec_get_drvdata(codec); 290 291 ucontrol->value.integer.value[0] = pcm512x->overclock_dac; 292 return 0; 293} 294 295static int pcm512x_overclock_dac_put(struct snd_kcontrol *kcontrol, 296 struct snd_ctl_elem_value *ucontrol) 297{ 298 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol); 299 struct pcm512x_priv *pcm512x = snd_soc_codec_get_drvdata(codec); 300 301 switch (codec->dapm.bias_level) { 302 case SND_SOC_BIAS_OFF: 303 case SND_SOC_BIAS_STANDBY: 304 break; 305 default: 306 return -EBUSY; 307 } 308 309 pcm512x->overclock_dac = ucontrol->value.integer.value[0]; 310 return 0; 311} 312 313static const DECLARE_TLV_DB_SCALE(digital_tlv, -10350, 50, 1); 314static const DECLARE_TLV_DB_SCALE(analog_tlv, -600, 600, 0); 315static const DECLARE_TLV_DB_SCALE(boost_tlv, 0, 80, 0); 316 317static const char * const pcm512x_dsp_program_texts[] = { 318 "FIR interpolation with de-emphasis", 319 "Low latency IIR with de-emphasis", 320 "High attenuation with de-emphasis", 321 "Fixed process flow", 322 "Ringing-less low latency FIR", 323}; 324 325static const unsigned int pcm512x_dsp_program_values[] = { 326 1, 327 2, 328 3, 329 5, 330 7, 331}; 332 333static SOC_VALUE_ENUM_SINGLE_DECL(pcm512x_dsp_program, 334 PCM512x_DSP_PROGRAM, 0, 0x1f, 335 pcm512x_dsp_program_texts, 336 pcm512x_dsp_program_values); 337 338static const char * const pcm512x_clk_missing_text[] = { 339 "1s", "2s", "3s", "4s", "5s", "6s", "7s", "8s" 340}; 341 342static const struct soc_enum pcm512x_clk_missing = 343 SOC_ENUM_SINGLE(PCM512x_CLKDET, 0, 8, pcm512x_clk_missing_text); 344 345static const char * const pcm512x_autom_text[] = { 346 "21ms", "106ms", "213ms", "533ms", "1.07s", "2.13s", "5.33s", "10.66s" 347}; 348 349static const struct soc_enum pcm512x_autom_l = 350 SOC_ENUM_SINGLE(PCM512x_AUTO_MUTE, PCM512x_ATML_SHIFT, 8, 351 pcm512x_autom_text); 352 353static const struct soc_enum pcm512x_autom_r = 354 SOC_ENUM_SINGLE(PCM512x_AUTO_MUTE, PCM512x_ATMR_SHIFT, 8, 355 pcm512x_autom_text); 356 357static const char * const pcm512x_ramp_rate_text[] = { 358 "1 sample/update", "2 samples/update", "4 samples/update", 359 "Immediate" 360}; 361 362static const struct soc_enum pcm512x_vndf = 363 SOC_ENUM_SINGLE(PCM512x_DIGITAL_MUTE_1, PCM512x_VNDF_SHIFT, 4, 364 pcm512x_ramp_rate_text); 365 366static const struct soc_enum pcm512x_vnuf = 367 SOC_ENUM_SINGLE(PCM512x_DIGITAL_MUTE_1, PCM512x_VNUF_SHIFT, 4, 368 pcm512x_ramp_rate_text); 369 370static const struct soc_enum pcm512x_vedf = 371 SOC_ENUM_SINGLE(PCM512x_DIGITAL_MUTE_2, PCM512x_VEDF_SHIFT, 4, 372 pcm512x_ramp_rate_text); 373 374static const char * const pcm512x_ramp_step_text[] = { 375 "4dB/step", "2dB/step", "1dB/step", "0.5dB/step" 376}; 377 378static const struct soc_enum pcm512x_vnds = 379 SOC_ENUM_SINGLE(PCM512x_DIGITAL_MUTE_1, PCM512x_VNDS_SHIFT, 4, 380 pcm512x_ramp_step_text); 381 382static const struct soc_enum pcm512x_vnus = 383 SOC_ENUM_SINGLE(PCM512x_DIGITAL_MUTE_1, PCM512x_VNUS_SHIFT, 4, 384 pcm512x_ramp_step_text); 385 386static const struct soc_enum pcm512x_veds = 387 SOC_ENUM_SINGLE(PCM512x_DIGITAL_MUTE_2, PCM512x_VEDS_SHIFT, 4, 388 pcm512x_ramp_step_text); 389 390static const struct snd_kcontrol_new pcm512x_controls[] = { 391SOC_DOUBLE_R_TLV("Digital Playback Volume", PCM512x_DIGITAL_VOLUME_2, 392 PCM512x_DIGITAL_VOLUME_3, 0, 255, 1, digital_tlv), 393SOC_DOUBLE_TLV("Analogue Playback Volume", PCM512x_ANALOG_GAIN_CTRL, 394 PCM512x_LAGN_SHIFT, PCM512x_RAGN_SHIFT, 1, 1, analog_tlv), 395SOC_DOUBLE_TLV("Analogue Playback Boost Volume", PCM512x_ANALOG_GAIN_BOOST, 396 PCM512x_AGBL_SHIFT, PCM512x_AGBR_SHIFT, 1, 0, boost_tlv), 397SOC_DOUBLE("Digital Playback Switch", PCM512x_MUTE, PCM512x_RQML_SHIFT, 398 PCM512x_RQMR_SHIFT, 1, 1), 399 400SOC_SINGLE("Deemphasis Switch", PCM512x_DSP, PCM512x_DEMP_SHIFT, 1, 1), 401SOC_ENUM("DSP Program", pcm512x_dsp_program), 402 403SOC_ENUM("Clock Missing Period", pcm512x_clk_missing), 404SOC_ENUM("Auto Mute Time Left", pcm512x_autom_l), 405SOC_ENUM("Auto Mute Time Right", pcm512x_autom_r), 406SOC_SINGLE("Auto Mute Mono Switch", PCM512x_DIGITAL_MUTE_3, 407 PCM512x_ACTL_SHIFT, 1, 0), 408SOC_DOUBLE("Auto Mute Switch", PCM512x_DIGITAL_MUTE_3, PCM512x_AMLE_SHIFT, 409 PCM512x_AMRE_SHIFT, 1, 0), 410 411SOC_ENUM("Volume Ramp Down Rate", pcm512x_vndf), 412SOC_ENUM("Volume Ramp Down Step", pcm512x_vnds), 413SOC_ENUM("Volume Ramp Up Rate", pcm512x_vnuf), 414SOC_ENUM("Volume Ramp Up Step", pcm512x_vnus), 415SOC_ENUM("Volume Ramp Down Emergency Rate", pcm512x_vedf), 416SOC_ENUM("Volume Ramp Down Emergency Step", pcm512x_veds), 417 418SOC_SINGLE_EXT("Max Overclock PLL", SND_SOC_NOPM, 0, 20, 0, 419 pcm512x_overclock_pll_get, pcm512x_overclock_pll_put), 420SOC_SINGLE_EXT("Max Overclock DSP", SND_SOC_NOPM, 0, 40, 0, 421 pcm512x_overclock_dsp_get, pcm512x_overclock_dsp_put), 422SOC_SINGLE_EXT("Max Overclock DAC", SND_SOC_NOPM, 0, 40, 0, 423 pcm512x_overclock_dac_get, pcm512x_overclock_dac_put), 424}; 425 426static const struct snd_soc_dapm_widget pcm512x_dapm_widgets[] = { 427SND_SOC_DAPM_DAC("DACL", NULL, SND_SOC_NOPM, 0, 0), 428SND_SOC_DAPM_DAC("DACR", NULL, SND_SOC_NOPM, 0, 0), 429 430SND_SOC_DAPM_OUTPUT("OUTL"), 431SND_SOC_DAPM_OUTPUT("OUTR"), 432}; 433 434static const struct snd_soc_dapm_route pcm512x_dapm_routes[] = { 435 { "DACL", NULL, "Playback" }, 436 { "DACR", NULL, "Playback" }, 437 438 { "OUTL", NULL, "DACL" }, 439 { "OUTR", NULL, "DACR" }, 440}; 441 442static unsigned long pcm512x_pll_max(struct pcm512x_priv *pcm512x) 443{ 444 return 25000000 + 25000000 * pcm512x->overclock_pll / 100; 445} 446 447static unsigned long pcm512x_dsp_max(struct pcm512x_priv *pcm512x) 448{ 449 return 50000000 + 50000000 * pcm512x->overclock_dsp / 100; 450} 451 452static unsigned long pcm512x_dac_max(struct pcm512x_priv *pcm512x, 453 unsigned long rate) 454{ 455 return rate + rate * pcm512x->overclock_dac / 100; 456} 457 458static unsigned long pcm512x_sck_max(struct pcm512x_priv *pcm512x) 459{ 460 if (!pcm512x->pll_out) 461 return 25000000; 462 return pcm512x_pll_max(pcm512x); 463} 464 465static unsigned long pcm512x_ncp_target(struct pcm512x_priv *pcm512x, 466 unsigned long dac_rate) 467{ 468 /* 469 * If the DAC is not actually overclocked, use the good old 470 * NCP target rate... 471 */ 472 if (dac_rate <= 6144000) 473 return 1536000; 474 /* 475 * ...but if the DAC is in fact overclocked, bump the NCP target 476 * rate to get the recommended dividers even when overclocking. 477 */ 478 return pcm512x_dac_max(pcm512x, 1536000); 479} 480 481static const u32 pcm512x_dai_rates[] = { 482 8000, 11025, 16000, 22050, 32000, 44100, 48000, 64000, 483 88200, 96000, 176400, 192000, 384000, 484}; 485 486static const struct snd_pcm_hw_constraint_list constraints_slave = { 487 .count = ARRAY_SIZE(pcm512x_dai_rates), 488 .list = pcm512x_dai_rates, 489}; 490 491static int pcm512x_hw_rule_rate(struct snd_pcm_hw_params *params, 492 struct snd_pcm_hw_rule *rule) 493{ 494 struct pcm512x_priv *pcm512x = rule->private; 495 struct snd_interval ranges[2]; 496 int frame_size; 497 498 frame_size = snd_soc_params_to_frame_size(params); 499 if (frame_size < 0) 500 return frame_size; 501 502 switch (frame_size) { 503 case 32: 504 /* No hole when the frame size is 32. */ 505 return 0; 506 case 48: 507 case 64: 508 /* There is only one hole in the range of supported 509 * rates, but it moves with the frame size. 510 */ 511 memset(ranges, 0, sizeof(ranges)); 512 ranges[0].min = 8000; 513 ranges[0].max = pcm512x_sck_max(pcm512x) / frame_size / 2; 514 ranges[1].min = DIV_ROUND_UP(16000000, frame_size); 515 ranges[1].max = 384000; 516 break; 517 default: 518 return -EINVAL; 519 } 520 521 return snd_interval_ranges(hw_param_interval(params, rule->var), 522 ARRAY_SIZE(ranges), ranges, 0); 523} 524 525static int pcm512x_dai_startup_master(struct snd_pcm_substream *substream, 526 struct snd_soc_dai *dai) 527{ 528 struct snd_soc_codec *codec = dai->codec; 529 struct pcm512x_priv *pcm512x = snd_soc_codec_get_drvdata(codec); 530 struct device *dev = dai->dev; 531 struct snd_pcm_hw_constraint_ratnums *constraints_no_pll; 532 struct snd_ratnum *rats_no_pll; 533 534 if (IS_ERR(pcm512x->sclk)) { 535 dev_err(dev, "Need SCLK for master mode: %ld\n", 536 PTR_ERR(pcm512x->sclk)); 537 return PTR_ERR(pcm512x->sclk); 538 } 539 540 if (pcm512x->pll_out) 541 return snd_pcm_hw_rule_add(substream->runtime, 0, 542 SNDRV_PCM_HW_PARAM_RATE, 543 pcm512x_hw_rule_rate, 544 pcm512x, 545 SNDRV_PCM_HW_PARAM_FRAME_BITS, 546 SNDRV_PCM_HW_PARAM_CHANNELS, -1); 547 548 constraints_no_pll = devm_kzalloc(dev, sizeof(*constraints_no_pll), 549 GFP_KERNEL); 550 if (!constraints_no_pll) 551 return -ENOMEM; 552 constraints_no_pll->nrats = 1; 553 rats_no_pll = devm_kzalloc(dev, sizeof(*rats_no_pll), GFP_KERNEL); 554 if (!rats_no_pll) 555 return -ENOMEM; 556 constraints_no_pll->rats = rats_no_pll; 557 rats_no_pll->num = clk_get_rate(pcm512x->sclk) / 64; 558 rats_no_pll->den_min = 1; 559 rats_no_pll->den_max = 128; 560 rats_no_pll->den_step = 1; 561 562 return snd_pcm_hw_constraint_ratnums(substream->runtime, 0, 563 SNDRV_PCM_HW_PARAM_RATE, 564 constraints_no_pll); 565} 566 567static int pcm512x_dai_startup_slave(struct snd_pcm_substream *substream, 568 struct snd_soc_dai *dai) 569{ 570 struct snd_soc_codec *codec = dai->codec; 571 struct pcm512x_priv *pcm512x = snd_soc_codec_get_drvdata(codec); 572 struct device *dev = dai->dev; 573 struct regmap *regmap = pcm512x->regmap; 574 575 if (IS_ERR(pcm512x->sclk)) { 576 dev_info(dev, "No SCLK, using BCLK: %ld\n", 577 PTR_ERR(pcm512x->sclk)); 578 579 /* Disable reporting of missing SCLK as an error */ 580 regmap_update_bits(regmap, PCM512x_ERROR_DETECT, 581 PCM512x_IDCH, PCM512x_IDCH); 582 583 /* Switch PLL input to BCLK */ 584 regmap_update_bits(regmap, PCM512x_PLL_REF, 585 PCM512x_SREF, PCM512x_SREF_BCK); 586 } 587 588 return snd_pcm_hw_constraint_list(substream->runtime, 0, 589 SNDRV_PCM_HW_PARAM_RATE, 590 &constraints_slave); 591} 592 593static int pcm512x_dai_startup(struct snd_pcm_substream *substream, 594 struct snd_soc_dai *dai) 595{ 596 struct snd_soc_codec *codec = dai->codec; 597 struct pcm512x_priv *pcm512x = snd_soc_codec_get_drvdata(codec); 598 599 switch (pcm512x->fmt & SND_SOC_DAIFMT_MASTER_MASK) { 600 case SND_SOC_DAIFMT_CBM_CFM: 601 case SND_SOC_DAIFMT_CBM_CFS: 602 return pcm512x_dai_startup_master(substream, dai); 603 604 case SND_SOC_DAIFMT_CBS_CFS: 605 return pcm512x_dai_startup_slave(substream, dai); 606 607 default: 608 return -EINVAL; 609 } 610} 611 612static int pcm512x_set_bias_level(struct snd_soc_codec *codec, 613 enum snd_soc_bias_level level) 614{ 615 struct pcm512x_priv *pcm512x = dev_get_drvdata(codec->dev); 616 int ret; 617 618 switch (level) { 619 case SND_SOC_BIAS_ON: 620 case SND_SOC_BIAS_PREPARE: 621 break; 622 623 case SND_SOC_BIAS_STANDBY: 624 ret = regmap_update_bits(pcm512x->regmap, PCM512x_POWER, 625 PCM512x_RQST, 0); 626 if (ret != 0) { 627 dev_err(codec->dev, "Failed to remove standby: %d\n", 628 ret); 629 return ret; 630 } 631 break; 632 633 case SND_SOC_BIAS_OFF: 634 ret = regmap_update_bits(pcm512x->regmap, PCM512x_POWER, 635 PCM512x_RQST, PCM512x_RQST); 636 if (ret != 0) { 637 dev_err(codec->dev, "Failed to request standby: %d\n", 638 ret); 639 return ret; 640 } 641 break; 642 } 643 644 codec->dapm.bias_level = level; 645 646 return 0; 647} 648 649static unsigned long pcm512x_find_sck(struct snd_soc_dai *dai, 650 unsigned long bclk_rate) 651{ 652 struct device *dev = dai->dev; 653 struct snd_soc_codec *codec = dai->codec; 654 struct pcm512x_priv *pcm512x = snd_soc_codec_get_drvdata(codec); 655 unsigned long sck_rate; 656 int pow2; 657 658 /* 64 MHz <= pll_rate <= 100 MHz, VREF mode */ 659 /* 16 MHz <= sck_rate <= 25 MHz, VREF mode */ 660 661 /* select sck_rate as a multiple of bclk_rate but still with 662 * as many factors of 2 as possible, as that makes it easier 663 * to find a fast DAC rate 664 */ 665 pow2 = 1 << fls((pcm512x_pll_max(pcm512x) - 16000000) / bclk_rate); 666 for (; pow2; pow2 >>= 1) { 667 sck_rate = rounddown(pcm512x_pll_max(pcm512x), 668 bclk_rate * pow2); 669 if (sck_rate >= 16000000) 670 break; 671 } 672 if (!pow2) { 673 dev_err(dev, "Impossible to generate a suitable SCK\n"); 674 return 0; 675 } 676 677 dev_dbg(dev, "sck_rate %lu\n", sck_rate); 678 return sck_rate; 679} 680 681/* pll_rate = pllin_rate * R * J.D / P 682 * 1 <= R <= 16 683 * 1 <= J <= 63 684 * 0 <= D <= 9999 685 * 1 <= P <= 15 686 * 64 MHz <= pll_rate <= 100 MHz 687 * if D == 0 688 * 1 MHz <= pllin_rate / P <= 20 MHz 689 * else if D > 0 690 * 6.667 MHz <= pllin_rate / P <= 20 MHz 691 * 4 <= J <= 11 692 * R = 1 693 */ 694static int pcm512x_find_pll_coeff(struct snd_soc_dai *dai, 695 unsigned long pllin_rate, 696 unsigned long pll_rate) 697{ 698 struct device *dev = dai->dev; 699 struct snd_soc_codec *codec = dai->codec; 700 struct pcm512x_priv *pcm512x = snd_soc_codec_get_drvdata(codec); 701 unsigned long common; 702 int R, J, D, P; 703 unsigned long K; /* 10000 * J.D */ 704 unsigned long num; 705 unsigned long den; 706 707 common = gcd(pll_rate, pllin_rate); 708 dev_dbg(dev, "pll %lu pllin %lu common %lu\n", 709 pll_rate, pllin_rate, common); 710 num = pll_rate / common; 711 den = pllin_rate / common; 712 713 /* pllin_rate / P (or here, den) cannot be greater than 20 MHz */ 714 if (pllin_rate / den > 20000000 && num < 8) { 715 num *= DIV_ROUND_UP(pllin_rate / den, 20000000); 716 den *= DIV_ROUND_UP(pllin_rate / den, 20000000); 717 } 718 dev_dbg(dev, "num / den = %lu / %lu\n", num, den); 719 720 P = den; 721 if (den <= 15 && num <= 16 * 63 722 && 1000000 <= pllin_rate / P && pllin_rate / P <= 20000000) { 723 /* Try the case with D = 0 */ 724 D = 0; 725 /* factor 'num' into J and R, such that R <= 16 and J <= 63 */ 726 for (R = 16; R; R--) { 727 if (num % R) 728 continue; 729 J = num / R; 730 if (J == 0 || J > 63) 731 continue; 732 733 dev_dbg(dev, "R * J / P = %d * %d / %d\n", R, J, P); 734 pcm512x->real_pll = pll_rate; 735 goto done; 736 } 737 /* no luck */ 738 } 739 740 R = 1; 741 742 if (num > 0xffffffffUL / 10000) 743 goto fallback; 744 745 /* Try to find an exact pll_rate using the D > 0 case */ 746 common = gcd(10000 * num, den); 747 num = 10000 * num / common; 748 den /= common; 749 dev_dbg(dev, "num %lu den %lu common %lu\n", num, den, common); 750 751 for (P = den; P <= 15; P++) { 752 if (pllin_rate / P < 6667000 || 200000000 < pllin_rate / P) 753 continue; 754 if (num * P % den) 755 continue; 756 K = num * P / den; 757 /* J == 12 is ok if D == 0 */ 758 if (K < 40000 || K > 120000) 759 continue; 760 761 J = K / 10000; 762 D = K % 10000; 763 dev_dbg(dev, "J.D / P = %d.%04d / %d\n", J, D, P); 764 pcm512x->real_pll = pll_rate; 765 goto done; 766 } 767 768 /* Fall back to an approximate pll_rate */ 769 770fallback: 771 /* find smallest possible P */ 772 P = DIV_ROUND_UP(pllin_rate, 20000000); 773 if (!P) 774 P = 1; 775 else if (P > 15) { 776 dev_err(dev, "Need a slower clock as pll-input\n"); 777 return -EINVAL; 778 } 779 if (pllin_rate / P < 6667000) { 780 dev_err(dev, "Need a faster clock as pll-input\n"); 781 return -EINVAL; 782 } 783 K = DIV_ROUND_CLOSEST_ULL(10000ULL * pll_rate * P, pllin_rate); 784 if (K < 40000) 785 K = 40000; 786 /* J == 12 is ok if D == 0 */ 787 if (K > 120000) 788 K = 120000; 789 J = K / 10000; 790 D = K % 10000; 791 dev_dbg(dev, "J.D / P ~ %d.%04d / %d\n", J, D, P); 792 pcm512x->real_pll = DIV_ROUND_DOWN_ULL((u64)K * pllin_rate, 10000 * P); 793 794done: 795 pcm512x->pll_r = R; 796 pcm512x->pll_j = J; 797 pcm512x->pll_d = D; 798 pcm512x->pll_p = P; 799 return 0; 800} 801 802static unsigned long pcm512x_pllin_dac_rate(struct snd_soc_dai *dai, 803 unsigned long osr_rate, 804 unsigned long pllin_rate) 805{ 806 struct snd_soc_codec *codec = dai->codec; 807 struct pcm512x_priv *pcm512x = snd_soc_codec_get_drvdata(codec); 808 unsigned long dac_rate; 809 810 if (!pcm512x->pll_out) 811 return 0; /* no PLL to bypass, force SCK as DAC input */ 812 813 if (pllin_rate % osr_rate) 814 return 0; /* futile, quit early */ 815 816 /* run DAC no faster than 6144000 Hz */ 817 for (dac_rate = rounddown(pcm512x_dac_max(pcm512x, 6144000), osr_rate); 818 dac_rate; 819 dac_rate -= osr_rate) { 820 821 if (pllin_rate / dac_rate > 128) 822 return 0; /* DAC divider would be too big */ 823 824 if (!(pllin_rate % dac_rate)) 825 return dac_rate; 826 827 dac_rate -= osr_rate; 828 } 829 830 return 0; 831} 832 833static int pcm512x_set_dividers(struct snd_soc_dai *dai, 834 struct snd_pcm_hw_params *params) 835{ 836 struct device *dev = dai->dev; 837 struct snd_soc_codec *codec = dai->codec; 838 struct pcm512x_priv *pcm512x = snd_soc_codec_get_drvdata(codec); 839 unsigned long pllin_rate = 0; 840 unsigned long pll_rate; 841 unsigned long sck_rate; 842 unsigned long mck_rate; 843 unsigned long bclk_rate; 844 unsigned long sample_rate; 845 unsigned long osr_rate; 846 unsigned long dacsrc_rate; 847 int bclk_div; 848 int lrclk_div; 849 int dsp_div; 850 int dac_div; 851 unsigned long dac_rate; 852 int ncp_div; 853 int osr_div; 854 int ret; 855 int idac; 856 int fssp; 857 int gpio; 858 859 lrclk_div = snd_soc_params_to_frame_size(params); 860 if (lrclk_div == 0) { 861 dev_err(dev, "No LRCLK?\n"); 862 return -EINVAL; 863 } 864 865 if (!pcm512x->pll_out) { 866 sck_rate = clk_get_rate(pcm512x->sclk); 867 bclk_div = params->rate_den * 64 / lrclk_div; 868 bclk_rate = DIV_ROUND_CLOSEST(sck_rate, bclk_div); 869 870 mck_rate = sck_rate; 871 } else { 872 ret = snd_soc_params_to_bclk(params); 873 if (ret < 0) { 874 dev_err(dev, "Failed to find suitable BCLK: %d\n", ret); 875 return ret; 876 } 877 if (ret == 0) { 878 dev_err(dev, "No BCLK?\n"); 879 return -EINVAL; 880 } 881 bclk_rate = ret; 882 883 pllin_rate = clk_get_rate(pcm512x->sclk); 884 885 sck_rate = pcm512x_find_sck(dai, bclk_rate); 886 if (!sck_rate) 887 return -EINVAL; 888 pll_rate = 4 * sck_rate; 889 890 ret = pcm512x_find_pll_coeff(dai, pllin_rate, pll_rate); 891 if (ret != 0) 892 return ret; 893 894 ret = regmap_write(pcm512x->regmap, 895 PCM512x_PLL_COEFF_0, pcm512x->pll_p - 1); 896 if (ret != 0) { 897 dev_err(dev, "Failed to write PLL P: %d\n", ret); 898 return ret; 899 } 900 901 ret = regmap_write(pcm512x->regmap, 902 PCM512x_PLL_COEFF_1, pcm512x->pll_j); 903 if (ret != 0) { 904 dev_err(dev, "Failed to write PLL J: %d\n", ret); 905 return ret; 906 } 907 908 ret = regmap_write(pcm512x->regmap, 909 PCM512x_PLL_COEFF_2, pcm512x->pll_d >> 8); 910 if (ret != 0) { 911 dev_err(dev, "Failed to write PLL D msb: %d\n", ret); 912 return ret; 913 } 914 915 ret = regmap_write(pcm512x->regmap, 916 PCM512x_PLL_COEFF_3, pcm512x->pll_d & 0xff); 917 if (ret != 0) { 918 dev_err(dev, "Failed to write PLL D lsb: %d\n", ret); 919 return ret; 920 } 921 922 ret = regmap_write(pcm512x->regmap, 923 PCM512x_PLL_COEFF_4, pcm512x->pll_r - 1); 924 if (ret != 0) { 925 dev_err(dev, "Failed to write PLL R: %d\n", ret); 926 return ret; 927 } 928 929 mck_rate = pcm512x->real_pll; 930 931 bclk_div = DIV_ROUND_CLOSEST(sck_rate, bclk_rate); 932 } 933 934 if (bclk_div > 128) { 935 dev_err(dev, "Failed to find BCLK divider\n"); 936 return -EINVAL; 937 } 938 939 /* the actual rate */ 940 sample_rate = sck_rate / bclk_div / lrclk_div; 941 osr_rate = 16 * sample_rate; 942 943 /* run DSP no faster than 50 MHz */ 944 dsp_div = mck_rate > pcm512x_dsp_max(pcm512x) ? 2 : 1; 945 946 dac_rate = pcm512x_pllin_dac_rate(dai, osr_rate, pllin_rate); 947 if (dac_rate) { 948 /* the desired clock rate is "compatible" with the pll input 949 * clock, so use that clock as dac input instead of the pll 950 * output clock since the pll will introduce jitter and thus 951 * noise. 952 */ 953 dev_dbg(dev, "using pll input as dac input\n"); 954 ret = regmap_update_bits(pcm512x->regmap, PCM512x_DAC_REF, 955 PCM512x_SDAC, PCM512x_SDAC_GPIO); 956 if (ret != 0) { 957 dev_err(codec->dev, 958 "Failed to set gpio as dacref: %d\n", ret); 959 return ret; 960 } 961 962 gpio = PCM512x_GREF_GPIO1 + pcm512x->pll_in - 1; 963 ret = regmap_update_bits(pcm512x->regmap, PCM512x_GPIO_DACIN, 964 PCM512x_GREF, gpio); 965 if (ret != 0) { 966 dev_err(codec->dev, 967 "Failed to set gpio %d as dacin: %d\n", 968 pcm512x->pll_in, ret); 969 return ret; 970 } 971 972 dacsrc_rate = pllin_rate; 973 } else { 974 /* run DAC no faster than 6144000 Hz */ 975 unsigned long dac_mul = pcm512x_dac_max(pcm512x, 6144000) 976 / osr_rate; 977 unsigned long sck_mul = sck_rate / osr_rate; 978 979 for (; dac_mul; dac_mul--) { 980 if (!(sck_mul % dac_mul)) 981 break; 982 } 983 if (!dac_mul) { 984 dev_err(dev, "Failed to find DAC rate\n"); 985 return -EINVAL; 986 } 987 988 dac_rate = dac_mul * osr_rate; 989 dev_dbg(dev, "dac_rate %lu sample_rate %lu\n", 990 dac_rate, sample_rate); 991 992 ret = regmap_update_bits(pcm512x->regmap, PCM512x_DAC_REF, 993 PCM512x_SDAC, PCM512x_SDAC_SCK); 994 if (ret != 0) { 995 dev_err(codec->dev, 996 "Failed to set sck as dacref: %d\n", ret); 997 return ret; 998 } 999 1000 dacsrc_rate = sck_rate; 1001 } 1002 1003 osr_div = DIV_ROUND_CLOSEST(dac_rate, osr_rate); 1004 if (osr_div > 128) { 1005 dev_err(dev, "Failed to find OSR divider\n"); 1006 return -EINVAL; 1007 } 1008 1009 dac_div = DIV_ROUND_CLOSEST(dacsrc_rate, dac_rate); 1010 if (dac_div > 128) { 1011 dev_err(dev, "Failed to find DAC divider\n"); 1012 return -EINVAL; 1013 } 1014 dac_rate = dacsrc_rate / dac_div; 1015 1016 ncp_div = DIV_ROUND_CLOSEST(dac_rate, 1017 pcm512x_ncp_target(pcm512x, dac_rate)); 1018 if (ncp_div > 128 || dac_rate / ncp_div > 2048000) { 1019 /* run NCP no faster than 2048000 Hz, but why? */ 1020 ncp_div = DIV_ROUND_UP(dac_rate, 2048000); 1021 if (ncp_div > 128) { 1022 dev_err(dev, "Failed to find NCP divider\n"); 1023 return -EINVAL; 1024 } 1025 } 1026 1027 idac = mck_rate / (dsp_div * sample_rate); 1028 1029 ret = regmap_write(pcm512x->regmap, PCM512x_DSP_CLKDIV, dsp_div - 1); 1030 if (ret != 0) { 1031 dev_err(dev, "Failed to write DSP divider: %d\n", ret); 1032 return ret; 1033 } 1034 1035 ret = regmap_write(pcm512x->regmap, PCM512x_DAC_CLKDIV, dac_div - 1); 1036 if (ret != 0) { 1037 dev_err(dev, "Failed to write DAC divider: %d\n", ret); 1038 return ret; 1039 } 1040 1041 ret = regmap_write(pcm512x->regmap, PCM512x_NCP_CLKDIV, ncp_div - 1); 1042 if (ret != 0) { 1043 dev_err(dev, "Failed to write NCP divider: %d\n", ret); 1044 return ret; 1045 } 1046 1047 ret = regmap_write(pcm512x->regmap, PCM512x_OSR_CLKDIV, osr_div - 1); 1048 if (ret != 0) { 1049 dev_err(dev, "Failed to write OSR divider: %d\n", ret); 1050 return ret; 1051 } 1052 1053 ret = regmap_write(pcm512x->regmap, 1054 PCM512x_MASTER_CLKDIV_1, bclk_div - 1); 1055 if (ret != 0) { 1056 dev_err(dev, "Failed to write BCLK divider: %d\n", ret); 1057 return ret; 1058 } 1059 1060 ret = regmap_write(pcm512x->regmap, 1061 PCM512x_MASTER_CLKDIV_2, lrclk_div - 1); 1062 if (ret != 0) { 1063 dev_err(dev, "Failed to write LRCLK divider: %d\n", ret); 1064 return ret; 1065 } 1066 1067 ret = regmap_write(pcm512x->regmap, PCM512x_IDAC_1, idac >> 8); 1068 if (ret != 0) { 1069 dev_err(dev, "Failed to write IDAC msb divider: %d\n", ret); 1070 return ret; 1071 } 1072 1073 ret = regmap_write(pcm512x->regmap, PCM512x_IDAC_2, idac & 0xff); 1074 if (ret != 0) { 1075 dev_err(dev, "Failed to write IDAC lsb divider: %d\n", ret); 1076 return ret; 1077 } 1078 1079 if (sample_rate <= pcm512x_dac_max(pcm512x, 48000)) 1080 fssp = PCM512x_FSSP_48KHZ; 1081 else if (sample_rate <= pcm512x_dac_max(pcm512x, 96000)) 1082 fssp = PCM512x_FSSP_96KHZ; 1083 else if (sample_rate <= pcm512x_dac_max(pcm512x, 192000)) 1084 fssp = PCM512x_FSSP_192KHZ; 1085 else 1086 fssp = PCM512x_FSSP_384KHZ; 1087 ret = regmap_update_bits(pcm512x->regmap, PCM512x_FS_SPEED_MODE, 1088 PCM512x_FSSP, fssp); 1089 if (ret != 0) { 1090 dev_err(codec->dev, "Failed to set fs speed: %d\n", ret); 1091 return ret; 1092 } 1093 1094 dev_dbg(codec->dev, "DSP divider %d\n", dsp_div); 1095 dev_dbg(codec->dev, "DAC divider %d\n", dac_div); 1096 dev_dbg(codec->dev, "NCP divider %d\n", ncp_div); 1097 dev_dbg(codec->dev, "OSR divider %d\n", osr_div); 1098 dev_dbg(codec->dev, "BCK divider %d\n", bclk_div); 1099 dev_dbg(codec->dev, "LRCK divider %d\n", lrclk_div); 1100 dev_dbg(codec->dev, "IDAC %d\n", idac); 1101 dev_dbg(codec->dev, "1<<FSSP %d\n", 1 << fssp); 1102 1103 return 0; 1104} 1105 1106static int pcm512x_hw_params(struct snd_pcm_substream *substream, 1107 struct snd_pcm_hw_params *params, 1108 struct snd_soc_dai *dai) 1109{ 1110 struct snd_soc_codec *codec = dai->codec; 1111 struct pcm512x_priv *pcm512x = snd_soc_codec_get_drvdata(codec); 1112 int alen; 1113 int gpio; 1114 int clock_output; 1115 int master_mode; 1116 int ret; 1117 1118 dev_dbg(codec->dev, "hw_params %u Hz, %u channels\n", 1119 params_rate(params), 1120 params_channels(params)); 1121 1122 switch (snd_pcm_format_width(params_format(params))) { 1123 case 16: 1124 alen = PCM512x_ALEN_16; 1125 break; 1126 case 20: 1127 alen = PCM512x_ALEN_20; 1128 break; 1129 case 24: 1130 alen = PCM512x_ALEN_24; 1131 break; 1132 case 32: 1133 alen = PCM512x_ALEN_32; 1134 break; 1135 default: 1136 dev_err(codec->dev, "Bad frame size: %d\n", 1137 snd_pcm_format_width(params_format(params))); 1138 return -EINVAL; 1139 } 1140 1141 switch (pcm512x->fmt & SND_SOC_DAIFMT_MASTER_MASK) { 1142 case SND_SOC_DAIFMT_CBS_CFS: 1143 ret = regmap_update_bits(pcm512x->regmap, 1144 PCM512x_BCLK_LRCLK_CFG, 1145 PCM512x_BCKP 1146 | PCM512x_BCKO | PCM512x_LRKO, 1147 0); 1148 if (ret != 0) { 1149 dev_err(codec->dev, 1150 "Failed to enable slave mode: %d\n", ret); 1151 return ret; 1152 } 1153 1154 ret = regmap_update_bits(pcm512x->regmap, PCM512x_ERROR_DETECT, 1155 PCM512x_DCAS, 0); 1156 if (ret != 0) { 1157 dev_err(codec->dev, 1158 "Failed to enable clock divider autoset: %d\n", 1159 ret); 1160 return ret; 1161 } 1162 return 0; 1163 case SND_SOC_DAIFMT_CBM_CFM: 1164 clock_output = PCM512x_BCKO | PCM512x_LRKO; 1165 master_mode = PCM512x_RLRK | PCM512x_RBCK; 1166 break; 1167 case SND_SOC_DAIFMT_CBM_CFS: 1168 clock_output = PCM512x_BCKO; 1169 master_mode = PCM512x_RBCK; 1170 break; 1171 default: 1172 return -EINVAL; 1173 } 1174 1175 ret = regmap_update_bits(pcm512x->regmap, PCM512x_I2S_1, 1176 PCM512x_ALEN, alen); 1177 if (ret != 0) { 1178 dev_err(codec->dev, "Failed to set frame size: %d\n", ret); 1179 return ret; 1180 } 1181 1182 if (pcm512x->pll_out) { 1183 ret = regmap_write(pcm512x->regmap, PCM512x_FLEX_A, 0x11); 1184 if (ret != 0) { 1185 dev_err(codec->dev, "Failed to set FLEX_A: %d\n", ret); 1186 return ret; 1187 } 1188 1189 ret = regmap_write(pcm512x->regmap, PCM512x_FLEX_B, 0xff); 1190 if (ret != 0) { 1191 dev_err(codec->dev, "Failed to set FLEX_B: %d\n", ret); 1192 return ret; 1193 } 1194 1195 ret = regmap_update_bits(pcm512x->regmap, PCM512x_ERROR_DETECT, 1196 PCM512x_IDFS | PCM512x_IDBK 1197 | PCM512x_IDSK | PCM512x_IDCH 1198 | PCM512x_IDCM | PCM512x_DCAS 1199 | PCM512x_IPLK, 1200 PCM512x_IDFS | PCM512x_IDBK 1201 | PCM512x_IDSK | PCM512x_IDCH 1202 | PCM512x_DCAS); 1203 if (ret != 0) { 1204 dev_err(codec->dev, 1205 "Failed to ignore auto-clock failures: %d\n", 1206 ret); 1207 return ret; 1208 } 1209 } else { 1210 ret = regmap_update_bits(pcm512x->regmap, PCM512x_ERROR_DETECT, 1211 PCM512x_IDFS | PCM512x_IDBK 1212 | PCM512x_IDSK | PCM512x_IDCH 1213 | PCM512x_IDCM | PCM512x_DCAS 1214 | PCM512x_IPLK, 1215 PCM512x_IDFS | PCM512x_IDBK 1216 | PCM512x_IDSK | PCM512x_IDCH 1217 | PCM512x_DCAS | PCM512x_IPLK); 1218 if (ret != 0) { 1219 dev_err(codec->dev, 1220 "Failed to ignore auto-clock failures: %d\n", 1221 ret); 1222 return ret; 1223 } 1224 1225 ret = regmap_update_bits(pcm512x->regmap, PCM512x_PLL_EN, 1226 PCM512x_PLLE, 0); 1227 if (ret != 0) { 1228 dev_err(codec->dev, "Failed to disable pll: %d\n", ret); 1229 return ret; 1230 } 1231 } 1232 1233 ret = pcm512x_set_dividers(dai, params); 1234 if (ret != 0) 1235 return ret; 1236 1237 if (pcm512x->pll_out) { 1238 ret = regmap_update_bits(pcm512x->regmap, PCM512x_PLL_REF, 1239 PCM512x_SREF, PCM512x_SREF_GPIO); 1240 if (ret != 0) { 1241 dev_err(codec->dev, 1242 "Failed to set gpio as pllref: %d\n", ret); 1243 return ret; 1244 } 1245 1246 gpio = PCM512x_GREF_GPIO1 + pcm512x->pll_in - 1; 1247 ret = regmap_update_bits(pcm512x->regmap, PCM512x_GPIO_PLLIN, 1248 PCM512x_GREF, gpio); 1249 if (ret != 0) { 1250 dev_err(codec->dev, 1251 "Failed to set gpio %d as pllin: %d\n", 1252 pcm512x->pll_in, ret); 1253 return ret; 1254 } 1255 1256 ret = regmap_update_bits(pcm512x->regmap, PCM512x_PLL_EN, 1257 PCM512x_PLLE, PCM512x_PLLE); 1258 if (ret != 0) { 1259 dev_err(codec->dev, "Failed to enable pll: %d\n", ret); 1260 return ret; 1261 } 1262 } 1263 1264 ret = regmap_update_bits(pcm512x->regmap, PCM512x_BCLK_LRCLK_CFG, 1265 PCM512x_BCKP | PCM512x_BCKO | PCM512x_LRKO, 1266 clock_output); 1267 if (ret != 0) { 1268 dev_err(codec->dev, "Failed to enable clock output: %d\n", ret); 1269 return ret; 1270 } 1271 1272 ret = regmap_update_bits(pcm512x->regmap, PCM512x_MASTER_MODE, 1273 PCM512x_RLRK | PCM512x_RBCK, 1274 master_mode); 1275 if (ret != 0) { 1276 dev_err(codec->dev, "Failed to enable master mode: %d\n", ret); 1277 return ret; 1278 } 1279 1280 if (pcm512x->pll_out) { 1281 gpio = PCM512x_G1OE << (pcm512x->pll_out - 1); 1282 ret = regmap_update_bits(pcm512x->regmap, PCM512x_GPIO_EN, 1283 gpio, gpio); 1284 if (ret != 0) { 1285 dev_err(codec->dev, "Failed to enable gpio %d: %d\n", 1286 pcm512x->pll_out, ret); 1287 return ret; 1288 } 1289 1290 gpio = PCM512x_GPIO_OUTPUT_1 + pcm512x->pll_out - 1; 1291 ret = regmap_update_bits(pcm512x->regmap, gpio, 1292 PCM512x_GxSL, PCM512x_GxSL_PLLCK); 1293 if (ret != 0) { 1294 dev_err(codec->dev, "Failed to output pll on %d: %d\n", 1295 ret, pcm512x->pll_out); 1296 return ret; 1297 } 1298 } 1299 1300 ret = regmap_update_bits(pcm512x->regmap, PCM512x_SYNCHRONIZE, 1301 PCM512x_RQSY, PCM512x_RQSY_HALT); 1302 if (ret != 0) { 1303 dev_err(codec->dev, "Failed to halt clocks: %d\n", ret); 1304 return ret; 1305 } 1306 1307 ret = regmap_update_bits(pcm512x->regmap, PCM512x_SYNCHRONIZE, 1308 PCM512x_RQSY, PCM512x_RQSY_RESUME); 1309 if (ret != 0) { 1310 dev_err(codec->dev, "Failed to resume clocks: %d\n", ret); 1311 return ret; 1312 } 1313 1314 return 0; 1315} 1316 1317static int pcm512x_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) 1318{ 1319 struct snd_soc_codec *codec = dai->codec; 1320 struct pcm512x_priv *pcm512x = snd_soc_codec_get_drvdata(codec); 1321 1322 pcm512x->fmt = fmt; 1323 1324 return 0; 1325} 1326 1327static const struct snd_soc_dai_ops pcm512x_dai_ops = { 1328 .startup = pcm512x_dai_startup, 1329 .hw_params = pcm512x_hw_params, 1330 .set_fmt = pcm512x_set_fmt, 1331}; 1332 1333static struct snd_soc_dai_driver pcm512x_dai = { 1334 .name = "pcm512x-hifi", 1335 .playback = { 1336 .stream_name = "Playback", 1337 .channels_min = 2, 1338 .channels_max = 2, 1339 .rates = SNDRV_PCM_RATE_CONTINUOUS, 1340 .rate_min = 8000, 1341 .rate_max = 384000, 1342 .formats = SNDRV_PCM_FMTBIT_S16_LE | 1343 SNDRV_PCM_FMTBIT_S24_LE | 1344 SNDRV_PCM_FMTBIT_S32_LE 1345 }, 1346 .ops = &pcm512x_dai_ops, 1347}; 1348 1349static struct snd_soc_codec_driver pcm512x_codec_driver = { 1350 .set_bias_level = pcm512x_set_bias_level, 1351 .idle_bias_off = true, 1352 1353 .controls = pcm512x_controls, 1354 .num_controls = ARRAY_SIZE(pcm512x_controls), 1355 .dapm_widgets = pcm512x_dapm_widgets, 1356 .num_dapm_widgets = ARRAY_SIZE(pcm512x_dapm_widgets), 1357 .dapm_routes = pcm512x_dapm_routes, 1358 .num_dapm_routes = ARRAY_SIZE(pcm512x_dapm_routes), 1359}; 1360 1361static const struct regmap_range_cfg pcm512x_range = { 1362 .name = "Pages", .range_min = PCM512x_VIRT_BASE, 1363 .range_max = PCM512x_MAX_REGISTER, 1364 .selector_reg = PCM512x_PAGE, 1365 .selector_mask = 0xff, 1366 .window_start = 0, .window_len = 0x100, 1367}; 1368 1369const struct regmap_config pcm512x_regmap = { 1370 .reg_bits = 8, 1371 .val_bits = 8, 1372 1373 .readable_reg = pcm512x_readable, 1374 .volatile_reg = pcm512x_volatile, 1375 1376 .ranges = &pcm512x_range, 1377 .num_ranges = 1, 1378 1379 .max_register = PCM512x_MAX_REGISTER, 1380 .reg_defaults = pcm512x_reg_defaults, 1381 .num_reg_defaults = ARRAY_SIZE(pcm512x_reg_defaults), 1382 .cache_type = REGCACHE_RBTREE, 1383}; 1384EXPORT_SYMBOL_GPL(pcm512x_regmap); 1385 1386int pcm512x_probe(struct device *dev, struct regmap *regmap) 1387{ 1388 struct pcm512x_priv *pcm512x; 1389 int i, ret; 1390 1391 pcm512x = devm_kzalloc(dev, sizeof(struct pcm512x_priv), GFP_KERNEL); 1392 if (!pcm512x) 1393 return -ENOMEM; 1394 1395 dev_set_drvdata(dev, pcm512x); 1396 pcm512x->regmap = regmap; 1397 1398 for (i = 0; i < ARRAY_SIZE(pcm512x->supplies); i++) 1399 pcm512x->supplies[i].supply = pcm512x_supply_names[i]; 1400 1401 ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(pcm512x->supplies), 1402 pcm512x->supplies); 1403 if (ret != 0) { 1404 dev_err(dev, "Failed to get supplies: %d\n", ret); 1405 return ret; 1406 } 1407 1408 pcm512x->supply_nb[0].notifier_call = pcm512x_regulator_event_0; 1409 pcm512x->supply_nb[1].notifier_call = pcm512x_regulator_event_1; 1410 pcm512x->supply_nb[2].notifier_call = pcm512x_regulator_event_2; 1411 1412 for (i = 0; i < ARRAY_SIZE(pcm512x->supplies); i++) { 1413 ret = regulator_register_notifier(pcm512x->supplies[i].consumer, 1414 &pcm512x->supply_nb[i]); 1415 if (ret != 0) { 1416 dev_err(dev, 1417 "Failed to register regulator notifier: %d\n", 1418 ret); 1419 } 1420 } 1421 1422 ret = regulator_bulk_enable(ARRAY_SIZE(pcm512x->supplies), 1423 pcm512x->supplies); 1424 if (ret != 0) { 1425 dev_err(dev, "Failed to enable supplies: %d\n", ret); 1426 return ret; 1427 } 1428 1429 /* Reset the device, verifying I/O in the process for I2C */ 1430 ret = regmap_write(regmap, PCM512x_RESET, 1431 PCM512x_RSTM | PCM512x_RSTR); 1432 if (ret != 0) { 1433 dev_err(dev, "Failed to reset device: %d\n", ret); 1434 goto err; 1435 } 1436 1437 ret = regmap_write(regmap, PCM512x_RESET, 0); 1438 if (ret != 0) { 1439 dev_err(dev, "Failed to reset device: %d\n", ret); 1440 goto err; 1441 } 1442 1443 pcm512x->sclk = devm_clk_get(dev, NULL); 1444 if (PTR_ERR(pcm512x->sclk) == -EPROBE_DEFER) 1445 return -EPROBE_DEFER; 1446 if (!IS_ERR(pcm512x->sclk)) { 1447 ret = clk_prepare_enable(pcm512x->sclk); 1448 if (ret != 0) { 1449 dev_err(dev, "Failed to enable SCLK: %d\n", ret); 1450 return ret; 1451 } 1452 } 1453 1454 /* Default to standby mode */ 1455 ret = regmap_update_bits(pcm512x->regmap, PCM512x_POWER, 1456 PCM512x_RQST, PCM512x_RQST); 1457 if (ret != 0) { 1458 dev_err(dev, "Failed to request standby: %d\n", 1459 ret); 1460 goto err_clk; 1461 } 1462 1463 pm_runtime_set_active(dev); 1464 pm_runtime_enable(dev); 1465 pm_runtime_idle(dev); 1466 1467#ifdef CONFIG_OF 1468 if (dev->of_node) { 1469 const struct device_node *np = dev->of_node; 1470 u32 val; 1471 1472 if (of_property_read_u32(np, "pll-in", &val) >= 0) { 1473 if (val > 6) { 1474 dev_err(dev, "Invalid pll-in\n"); 1475 ret = -EINVAL; 1476 goto err_clk; 1477 } 1478 pcm512x->pll_in = val; 1479 } 1480 1481 if (of_property_read_u32(np, "pll-out", &val) >= 0) { 1482 if (val > 6) { 1483 dev_err(dev, "Invalid pll-out\n"); 1484 ret = -EINVAL; 1485 goto err_clk; 1486 } 1487 pcm512x->pll_out = val; 1488 } 1489 1490 if (!pcm512x->pll_in != !pcm512x->pll_out) { 1491 dev_err(dev, 1492 "Error: both pll-in and pll-out, or none\n"); 1493 ret = -EINVAL; 1494 goto err_clk; 1495 } 1496 if (pcm512x->pll_in && pcm512x->pll_in == pcm512x->pll_out) { 1497 dev_err(dev, "Error: pll-in == pll-out\n"); 1498 ret = -EINVAL; 1499 goto err_clk; 1500 } 1501 } 1502#endif 1503 1504 ret = snd_soc_register_codec(dev, &pcm512x_codec_driver, 1505 &pcm512x_dai, 1); 1506 if (ret != 0) { 1507 dev_err(dev, "Failed to register CODEC: %d\n", ret); 1508 goto err_pm; 1509 } 1510 1511 return 0; 1512 1513err_pm: 1514 pm_runtime_disable(dev); 1515err_clk: 1516 if (!IS_ERR(pcm512x->sclk)) 1517 clk_disable_unprepare(pcm512x->sclk); 1518err: 1519 regulator_bulk_disable(ARRAY_SIZE(pcm512x->supplies), 1520 pcm512x->supplies); 1521 return ret; 1522} 1523EXPORT_SYMBOL_GPL(pcm512x_probe); 1524 1525void pcm512x_remove(struct device *dev) 1526{ 1527 struct pcm512x_priv *pcm512x = dev_get_drvdata(dev); 1528 1529 snd_soc_unregister_codec(dev); 1530 pm_runtime_disable(dev); 1531 if (!IS_ERR(pcm512x->sclk)) 1532 clk_disable_unprepare(pcm512x->sclk); 1533 regulator_bulk_disable(ARRAY_SIZE(pcm512x->supplies), 1534 pcm512x->supplies); 1535} 1536EXPORT_SYMBOL_GPL(pcm512x_remove); 1537 1538#ifdef CONFIG_PM 1539static int pcm512x_suspend(struct device *dev) 1540{ 1541 struct pcm512x_priv *pcm512x = dev_get_drvdata(dev); 1542 int ret; 1543 1544 ret = regmap_update_bits(pcm512x->regmap, PCM512x_POWER, 1545 PCM512x_RQPD, PCM512x_RQPD); 1546 if (ret != 0) { 1547 dev_err(dev, "Failed to request power down: %d\n", ret); 1548 return ret; 1549 } 1550 1551 ret = regulator_bulk_disable(ARRAY_SIZE(pcm512x->supplies), 1552 pcm512x->supplies); 1553 if (ret != 0) { 1554 dev_err(dev, "Failed to disable supplies: %d\n", ret); 1555 return ret; 1556 } 1557 1558 if (!IS_ERR(pcm512x->sclk)) 1559 clk_disable_unprepare(pcm512x->sclk); 1560 1561 return 0; 1562} 1563 1564static int pcm512x_resume(struct device *dev) 1565{ 1566 struct pcm512x_priv *pcm512x = dev_get_drvdata(dev); 1567 int ret; 1568 1569 if (!IS_ERR(pcm512x->sclk)) { 1570 ret = clk_prepare_enable(pcm512x->sclk); 1571 if (ret != 0) { 1572 dev_err(dev, "Failed to enable SCLK: %d\n", ret); 1573 return ret; 1574 } 1575 } 1576 1577 ret = regulator_bulk_enable(ARRAY_SIZE(pcm512x->supplies), 1578 pcm512x->supplies); 1579 if (ret != 0) { 1580 dev_err(dev, "Failed to enable supplies: %d\n", ret); 1581 return ret; 1582 } 1583 1584 regcache_cache_only(pcm512x->regmap, false); 1585 ret = regcache_sync(pcm512x->regmap); 1586 if (ret != 0) { 1587 dev_err(dev, "Failed to sync cache: %d\n", ret); 1588 return ret; 1589 } 1590 1591 ret = regmap_update_bits(pcm512x->regmap, PCM512x_POWER, 1592 PCM512x_RQPD, 0); 1593 if (ret != 0) { 1594 dev_err(dev, "Failed to remove power down: %d\n", ret); 1595 return ret; 1596 } 1597 1598 return 0; 1599} 1600#endif 1601 1602const struct dev_pm_ops pcm512x_pm_ops = { 1603 SET_RUNTIME_PM_OPS(pcm512x_suspend, pcm512x_resume, NULL) 1604}; 1605EXPORT_SYMBOL_GPL(pcm512x_pm_ops); 1606 1607MODULE_DESCRIPTION("ASoC PCM512x codec driver"); 1608MODULE_AUTHOR("Mark Brown <broonie@linaro.org>"); 1609MODULE_LICENSE("GPL v2"); 1610