0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #include <linux/init.h>
0014 #include <linux/module.h>
0015 #include <linux/clk.h>
0016 #include <linux/kernel.h>
0017 #include <linux/pm_runtime.h>
0018 #include <linux/regmap.h>
0019 #include <linux/i2c.h>
0020 #include <linux/regulator/consumer.h>
0021 #include <sound/soc.h>
0022 #include <sound/soc-dapm.h>
0023 #include <sound/pcm_params.h>
0024 #include <sound/tlv.h>
0025
0026 #include "max9860.h"
0027
0028 struct max9860_priv {
0029 struct regmap *regmap;
0030 struct regulator *dvddio;
0031 struct notifier_block dvddio_nb;
0032 u8 psclk;
0033 unsigned long pclk_rate;
0034 int fmt;
0035 };
0036
0037 static int max9860_dvddio_event(struct notifier_block *nb,
0038 unsigned long event, void *data)
0039 {
0040 struct max9860_priv *max9860 = container_of(nb, struct max9860_priv,
0041 dvddio_nb);
0042 if (event & REGULATOR_EVENT_DISABLE) {
0043 regcache_mark_dirty(max9860->regmap);
0044 regcache_cache_only(max9860->regmap, true);
0045 }
0046
0047 return 0;
0048 }
0049
0050 static const struct reg_default max9860_reg_defaults[] = {
0051 { MAX9860_PWRMAN, 0x00 },
0052 { MAX9860_INTEN, 0x00 },
0053 { MAX9860_SYSCLK, 0x00 },
0054 { MAX9860_AUDIOCLKHIGH, 0x00 },
0055 { MAX9860_AUDIOCLKLOW, 0x00 },
0056 { MAX9860_IFC1A, 0x00 },
0057 { MAX9860_IFC1B, 0x00 },
0058 { MAX9860_VOICEFLTR, 0x00 },
0059 { MAX9860_DACATTN, 0x00 },
0060 { MAX9860_ADCLEVEL, 0x00 },
0061 { MAX9860_DACGAIN, 0x00 },
0062 { MAX9860_MICGAIN, 0x00 },
0063 { MAX9860_MICADC, 0x00 },
0064 { MAX9860_NOISEGATE, 0x00 },
0065 };
0066
0067 static bool max9860_readable(struct device *dev, unsigned int reg)
0068 {
0069 switch (reg) {
0070 case MAX9860_INTRSTATUS ... MAX9860_MICGAIN:
0071 case MAX9860_MICADC ... MAX9860_PWRMAN:
0072 case MAX9860_REVISION:
0073 return true;
0074 }
0075
0076 return false;
0077 }
0078
0079 static bool max9860_writeable(struct device *dev, unsigned int reg)
0080 {
0081 switch (reg) {
0082 case MAX9860_INTEN ... MAX9860_MICGAIN:
0083 case MAX9860_MICADC ... MAX9860_PWRMAN:
0084 return true;
0085 }
0086
0087 return false;
0088 }
0089
0090 static bool max9860_volatile(struct device *dev, unsigned int reg)
0091 {
0092 switch (reg) {
0093 case MAX9860_INTRSTATUS:
0094 case MAX9860_MICREADBACK:
0095 return true;
0096 }
0097
0098 return false;
0099 }
0100
0101 static bool max9860_precious(struct device *dev, unsigned int reg)
0102 {
0103 switch (reg) {
0104 case MAX9860_INTRSTATUS:
0105 return true;
0106 }
0107
0108 return false;
0109 }
0110
0111 static const struct regmap_config max9860_regmap = {
0112 .reg_bits = 8,
0113 .val_bits = 8,
0114
0115 .readable_reg = max9860_readable,
0116 .writeable_reg = max9860_writeable,
0117 .volatile_reg = max9860_volatile,
0118 .precious_reg = max9860_precious,
0119
0120 .max_register = MAX9860_MAX_REGISTER,
0121 .reg_defaults = max9860_reg_defaults,
0122 .num_reg_defaults = ARRAY_SIZE(max9860_reg_defaults),
0123 .cache_type = REGCACHE_RBTREE,
0124 };
0125
0126 static const DECLARE_TLV_DB_SCALE(dva_tlv, -9100, 100, 1);
0127 static const DECLARE_TLV_DB_SCALE(dvg_tlv, 0, 600, 0);
0128 static const DECLARE_TLV_DB_SCALE(adc_tlv, -1200, 100, 0);
0129 static const DECLARE_TLV_DB_RANGE(pam_tlv,
0130 0, MAX9860_PAM_MAX - 1, TLV_DB_SCALE_ITEM(-2000, 2000, 1),
0131 MAX9860_PAM_MAX, MAX9860_PAM_MAX, TLV_DB_SCALE_ITEM(3000, 0, 0));
0132 static const DECLARE_TLV_DB_SCALE(pgam_tlv, 0, 100, 0);
0133 static const DECLARE_TLV_DB_SCALE(anth_tlv, -7600, 400, 1);
0134 static const DECLARE_TLV_DB_SCALE(agcth_tlv, -1800, 100, 0);
0135
0136 static const char * const agchld_text[] = {
0137 "AGC Disabled", "50ms", "100ms", "400ms"
0138 };
0139
0140 static SOC_ENUM_SINGLE_DECL(agchld_enum, MAX9860_MICADC,
0141 MAX9860_AGCHLD_SHIFT, agchld_text);
0142
0143 static const char * const agcsrc_text[] = {
0144 "Left ADC", "Left/Right ADC"
0145 };
0146
0147 static SOC_ENUM_SINGLE_DECL(agcsrc_enum, MAX9860_MICADC,
0148 MAX9860_AGCSRC_SHIFT, agcsrc_text);
0149
0150 static const char * const agcatk_text[] = {
0151 "3ms", "12ms", "50ms", "200ms"
0152 };
0153
0154 static SOC_ENUM_SINGLE_DECL(agcatk_enum, MAX9860_MICADC,
0155 MAX9860_AGCATK_SHIFT, agcatk_text);
0156
0157 static const char * const agcrls_text[] = {
0158 "78ms", "156ms", "312ms", "625ms",
0159 "1.25s", "2.5s", "5s", "10s"
0160 };
0161
0162 static SOC_ENUM_SINGLE_DECL(agcrls_enum, MAX9860_MICADC,
0163 MAX9860_AGCRLS_SHIFT, agcrls_text);
0164
0165 static const char * const filter_text[] = {
0166 "Disabled",
0167 "Elliptical HP 217Hz notch (16kHz)",
0168 "Butterworth HP 500Hz (16kHz)",
0169 "Elliptical HP 217Hz notch (8kHz)",
0170 "Butterworth HP 500Hz (8kHz)",
0171 "Butterworth HP 200Hz (48kHz)"
0172 };
0173
0174 static SOC_ENUM_SINGLE_DECL(avflt_enum, MAX9860_VOICEFLTR,
0175 MAX9860_AVFLT_SHIFT, filter_text);
0176
0177 static SOC_ENUM_SINGLE_DECL(dvflt_enum, MAX9860_VOICEFLTR,
0178 MAX9860_DVFLT_SHIFT, filter_text);
0179
0180 static const struct snd_kcontrol_new max9860_controls[] = {
0181 SOC_SINGLE_TLV("Master Playback Volume", MAX9860_DACATTN,
0182 MAX9860_DVA_SHIFT, MAX9860_DVA_MUTE, 1, dva_tlv),
0183 SOC_SINGLE_TLV("DAC Gain Volume", MAX9860_DACGAIN,
0184 MAX9860_DVG_SHIFT, MAX9860_DVG_MAX, 0, dvg_tlv),
0185 SOC_DOUBLE_TLV("Line Capture Volume", MAX9860_ADCLEVEL,
0186 MAX9860_ADCLL_SHIFT, MAX9860_ADCRL_SHIFT, MAX9860_ADCxL_MIN, 1,
0187 adc_tlv),
0188
0189 SOC_ENUM("AGC Hold Time", agchld_enum),
0190 SOC_ENUM("AGC/Noise Gate Source", agcsrc_enum),
0191 SOC_ENUM("AGC Attack Time", agcatk_enum),
0192 SOC_ENUM("AGC Release Time", agcrls_enum),
0193
0194 SOC_SINGLE_TLV("Noise Gate Threshold Volume", MAX9860_NOISEGATE,
0195 MAX9860_ANTH_SHIFT, MAX9860_ANTH_MAX, 0, anth_tlv),
0196 SOC_SINGLE_TLV("AGC Signal Threshold Volume", MAX9860_NOISEGATE,
0197 MAX9860_AGCTH_SHIFT, MAX9860_AGCTH_MIN, 1, agcth_tlv),
0198
0199 SOC_SINGLE_TLV("Mic PGA Volume", MAX9860_MICGAIN,
0200 MAX9860_PGAM_SHIFT, MAX9860_PGAM_MIN, 1, pgam_tlv),
0201 SOC_SINGLE_TLV("Mic Preamp Volume", MAX9860_MICGAIN,
0202 MAX9860_PAM_SHIFT, MAX9860_PAM_MAX, 0, pam_tlv),
0203
0204 SOC_ENUM("ADC Filter", avflt_enum),
0205 SOC_ENUM("DAC Filter", dvflt_enum),
0206 };
0207
0208 static const struct snd_soc_dapm_widget max9860_dapm_widgets[] = {
0209 SND_SOC_DAPM_INPUT("MICL"),
0210 SND_SOC_DAPM_INPUT("MICR"),
0211
0212 SND_SOC_DAPM_ADC("ADCL", NULL, MAX9860_PWRMAN, MAX9860_ADCLEN_SHIFT, 0),
0213 SND_SOC_DAPM_ADC("ADCR", NULL, MAX9860_PWRMAN, MAX9860_ADCREN_SHIFT, 0),
0214
0215 SND_SOC_DAPM_AIF_OUT("AIFOUTL", "Capture", 0, SND_SOC_NOPM, 0, 0),
0216 SND_SOC_DAPM_AIF_OUT("AIFOUTR", "Capture", 1, SND_SOC_NOPM, 0, 0),
0217
0218 SND_SOC_DAPM_AIF_IN("AIFINL", "Playback", 0, SND_SOC_NOPM, 0, 0),
0219 SND_SOC_DAPM_AIF_IN("AIFINR", "Playback", 1, SND_SOC_NOPM, 0, 0),
0220
0221 SND_SOC_DAPM_DAC("DAC", NULL, MAX9860_PWRMAN, MAX9860_DACEN_SHIFT, 0),
0222
0223 SND_SOC_DAPM_OUTPUT("OUT"),
0224
0225 SND_SOC_DAPM_SUPPLY("Supply", SND_SOC_NOPM, 0, 0,
0226 NULL, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
0227 SND_SOC_DAPM_REGULATOR_SUPPLY("AVDD", 0, 0),
0228 SND_SOC_DAPM_REGULATOR_SUPPLY("DVDD", 0, 0),
0229 SND_SOC_DAPM_CLOCK_SUPPLY("mclk"),
0230 };
0231
0232 static const struct snd_soc_dapm_route max9860_dapm_routes[] = {
0233 { "ADCL", NULL, "MICL" },
0234 { "ADCR", NULL, "MICR" },
0235 { "AIFOUTL", NULL, "ADCL" },
0236 { "AIFOUTR", NULL, "ADCR" },
0237
0238 { "DAC", NULL, "AIFINL" },
0239 { "DAC", NULL, "AIFINR" },
0240 { "OUT", NULL, "DAC" },
0241
0242 { "Supply", NULL, "AVDD" },
0243 { "Supply", NULL, "DVDD" },
0244 { "Supply", NULL, "mclk" },
0245
0246 { "DAC", NULL, "Supply" },
0247 { "ADCL", NULL, "Supply" },
0248 { "ADCR", NULL, "Supply" },
0249 };
0250
0251 static int max9860_hw_params(struct snd_pcm_substream *substream,
0252 struct snd_pcm_hw_params *params,
0253 struct snd_soc_dai *dai)
0254 {
0255 struct snd_soc_component *component = dai->component;
0256 struct max9860_priv *max9860 = snd_soc_component_get_drvdata(component);
0257 u8 master;
0258 u8 ifc1a = 0;
0259 u8 ifc1b = 0;
0260 u8 sysclk = 0;
0261 unsigned long n;
0262 int ret;
0263
0264 dev_dbg(component->dev, "hw_params %u Hz, %u channels\n",
0265 params_rate(params),
0266 params_channels(params));
0267
0268 if (params_channels(params) == 2)
0269 ifc1b |= MAX9860_ST;
0270
0271 switch (max9860->fmt & SND_SOC_DAIFMT_CLOCK_PROVIDER_MASK) {
0272 case SND_SOC_DAIFMT_CBC_CFC:
0273 master = 0;
0274 break;
0275 case SND_SOC_DAIFMT_CBP_CFP:
0276 master = MAX9860_MASTER;
0277 break;
0278 default:
0279 return -EINVAL;
0280 }
0281 ifc1a |= master;
0282
0283 if (master) {
0284 if (params_width(params) * params_channels(params) > 48)
0285 ifc1b |= MAX9860_BSEL_64X;
0286 else
0287 ifc1b |= MAX9860_BSEL_48X;
0288 }
0289
0290 switch (max9860->fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
0291 case SND_SOC_DAIFMT_I2S:
0292 ifc1a |= MAX9860_DDLY;
0293 ifc1b |= MAX9860_ADLY;
0294 break;
0295 case SND_SOC_DAIFMT_LEFT_J:
0296 ifc1a |= MAX9860_WCI;
0297 break;
0298 case SND_SOC_DAIFMT_DSP_A:
0299 if (params_width(params) != 16) {
0300 dev_err(component->dev,
0301 "DSP_A works for 16 bits per sample only.\n");
0302 return -EINVAL;
0303 }
0304 ifc1a |= MAX9860_DDLY | MAX9860_WCI | MAX9860_HIZ | MAX9860_TDM;
0305 ifc1b |= MAX9860_ADLY;
0306 break;
0307 case SND_SOC_DAIFMT_DSP_B:
0308 if (params_width(params) != 16) {
0309 dev_err(component->dev,
0310 "DSP_B works for 16 bits per sample only.\n");
0311 return -EINVAL;
0312 }
0313 ifc1a |= MAX9860_WCI | MAX9860_HIZ | MAX9860_TDM;
0314 break;
0315 default:
0316 return -EINVAL;
0317 }
0318
0319 switch (max9860->fmt & SND_SOC_DAIFMT_INV_MASK) {
0320 case SND_SOC_DAIFMT_NB_NF:
0321 break;
0322 case SND_SOC_DAIFMT_NB_IF:
0323 switch (max9860->fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
0324 case SND_SOC_DAIFMT_DSP_A:
0325 case SND_SOC_DAIFMT_DSP_B:
0326 return -EINVAL;
0327 }
0328 ifc1a ^= MAX9860_WCI;
0329 break;
0330 case SND_SOC_DAIFMT_IB_IF:
0331 switch (max9860->fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
0332 case SND_SOC_DAIFMT_DSP_A:
0333 case SND_SOC_DAIFMT_DSP_B:
0334 return -EINVAL;
0335 }
0336 ifc1a ^= MAX9860_WCI;
0337 fallthrough;
0338 case SND_SOC_DAIFMT_IB_NF:
0339 ifc1a ^= MAX9860_DBCI;
0340 ifc1b ^= MAX9860_ABCI;
0341 break;
0342 default:
0343 return -EINVAL;
0344 }
0345
0346 dev_dbg(component->dev, "IFC1A %02x\n", ifc1a);
0347 ret = regmap_write(max9860->regmap, MAX9860_IFC1A, ifc1a);
0348 if (ret) {
0349 dev_err(component->dev, "Failed to set IFC1A: %d\n", ret);
0350 return ret;
0351 }
0352 dev_dbg(component->dev, "IFC1B %02x\n", ifc1b);
0353 ret = regmap_write(max9860->regmap, MAX9860_IFC1B, ifc1b);
0354 if (ret) {
0355 dev_err(component->dev, "Failed to set IFC1B: %d\n", ret);
0356 return ret;
0357 }
0358
0359
0360
0361
0362
0363
0364
0365 if (params_rate(params) == 8000 || params_rate(params) == 16000) {
0366 if (master) {
0367 switch (max9860->pclk_rate) {
0368 case 12000000:
0369 sysclk = MAX9860_FREQ_12MHZ;
0370 break;
0371 case 13000000:
0372 sysclk = MAX9860_FREQ_13MHZ;
0373 break;
0374 case 19200000:
0375 sysclk = MAX9860_FREQ_19_2MHZ;
0376 break;
0377 default:
0378
0379
0380
0381
0382
0383 break;
0384 }
0385
0386 if (sysclk && params_rate(params) == 16000)
0387 sysclk |= MAX9860_16KHZ;
0388 }
0389 }
0390
0391
0392
0393
0394
0395
0396
0397
0398 n = DIV_ROUND_CLOSEST_ULL(65536ULL * 96 * params_rate(params),
0399 max9860->pclk_rate);
0400
0401 if (!sysclk) {
0402
0403 if (params_rate(params) > 24000)
0404 sysclk |= MAX9860_16KHZ;
0405
0406 if (!master)
0407 n |= 1;
0408 }
0409
0410 sysclk |= max9860->psclk;
0411 dev_dbg(component->dev, "SYSCLK %02x\n", sysclk);
0412 ret = regmap_write(max9860->regmap,
0413 MAX9860_SYSCLK, sysclk);
0414 if (ret) {
0415 dev_err(component->dev, "Failed to set SYSCLK: %d\n", ret);
0416 return ret;
0417 }
0418 dev_dbg(component->dev, "N %lu\n", n);
0419 ret = regmap_write(max9860->regmap,
0420 MAX9860_AUDIOCLKHIGH, n >> 8);
0421 if (ret) {
0422 dev_err(component->dev, "Failed to set NHI: %d\n", ret);
0423 return ret;
0424 }
0425 ret = regmap_write(max9860->regmap,
0426 MAX9860_AUDIOCLKLOW, n & 0xff);
0427 if (ret) {
0428 dev_err(component->dev, "Failed to set NLO: %d\n", ret);
0429 return ret;
0430 }
0431
0432 if (!master) {
0433 dev_dbg(component->dev, "Enable PLL\n");
0434 ret = regmap_update_bits(max9860->regmap, MAX9860_AUDIOCLKHIGH,
0435 MAX9860_PLL, MAX9860_PLL);
0436 if (ret) {
0437 dev_err(component->dev, "Failed to enable PLL: %d\n",
0438 ret);
0439 return ret;
0440 }
0441 }
0442
0443 return 0;
0444 }
0445
0446 static int max9860_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
0447 {
0448 struct snd_soc_component *component = dai->component;
0449 struct max9860_priv *max9860 = snd_soc_component_get_drvdata(component);
0450
0451 switch (fmt & SND_SOC_DAIFMT_CLOCK_PROVIDER_MASK) {
0452 case SND_SOC_DAIFMT_CBP_CFP:
0453 case SND_SOC_DAIFMT_CBC_CFC:
0454 max9860->fmt = fmt;
0455 return 0;
0456
0457 default:
0458 return -EINVAL;
0459 }
0460 }
0461
0462 static const struct snd_soc_dai_ops max9860_dai_ops = {
0463 .hw_params = max9860_hw_params,
0464 .set_fmt = max9860_set_fmt,
0465 };
0466
0467 static struct snd_soc_dai_driver max9860_dai = {
0468 .name = "max9860-hifi",
0469 .playback = {
0470 .stream_name = "Playback",
0471 .channels_min = 1,
0472 .channels_max = 2,
0473 .rates = SNDRV_PCM_RATE_CONTINUOUS,
0474 .rate_min = 8000,
0475 .rate_max = 48000,
0476 .formats = SNDRV_PCM_FMTBIT_S16_LE |
0477 SNDRV_PCM_FMTBIT_S24_LE |
0478 SNDRV_PCM_FMTBIT_S32_LE,
0479 },
0480 .capture = {
0481 .stream_name = "Capture",
0482 .channels_min = 1,
0483 .channels_max = 2,
0484 .rates = SNDRV_PCM_RATE_CONTINUOUS,
0485 .rate_min = 8000,
0486 .rate_max = 48000,
0487 .formats = SNDRV_PCM_FMTBIT_S16_LE |
0488 SNDRV_PCM_FMTBIT_S24_LE |
0489 SNDRV_PCM_FMTBIT_S32_LE,
0490 },
0491 .ops = &max9860_dai_ops,
0492 .symmetric_rate = 1,
0493 };
0494
0495 static int max9860_set_bias_level(struct snd_soc_component *component,
0496 enum snd_soc_bias_level level)
0497 {
0498 struct max9860_priv *max9860 = dev_get_drvdata(component->dev);
0499 int ret;
0500
0501 switch (level) {
0502 case SND_SOC_BIAS_ON:
0503 case SND_SOC_BIAS_PREPARE:
0504 break;
0505
0506 case SND_SOC_BIAS_STANDBY:
0507 ret = regmap_update_bits(max9860->regmap, MAX9860_PWRMAN,
0508 MAX9860_SHDN, MAX9860_SHDN);
0509 if (ret) {
0510 dev_err(component->dev, "Failed to remove SHDN: %d\n",
0511 ret);
0512 return ret;
0513 }
0514 break;
0515
0516 case SND_SOC_BIAS_OFF:
0517 ret = regmap_update_bits(max9860->regmap, MAX9860_PWRMAN,
0518 MAX9860_SHDN, 0);
0519 if (ret) {
0520 dev_err(component->dev, "Failed to request SHDN: %d\n",
0521 ret);
0522 return ret;
0523 }
0524 break;
0525 }
0526
0527 return 0;
0528 }
0529
0530 static const struct snd_soc_component_driver max9860_component_driver = {
0531 .set_bias_level = max9860_set_bias_level,
0532 .controls = max9860_controls,
0533 .num_controls = ARRAY_SIZE(max9860_controls),
0534 .dapm_widgets = max9860_dapm_widgets,
0535 .num_dapm_widgets = ARRAY_SIZE(max9860_dapm_widgets),
0536 .dapm_routes = max9860_dapm_routes,
0537 .num_dapm_routes = ARRAY_SIZE(max9860_dapm_routes),
0538 .use_pmdown_time = 1,
0539 .endianness = 1,
0540 };
0541
0542 #ifdef CONFIG_PM
0543 static int max9860_suspend(struct device *dev)
0544 {
0545 struct max9860_priv *max9860 = dev_get_drvdata(dev);
0546 int ret;
0547
0548 ret = regmap_update_bits(max9860->regmap, MAX9860_SYSCLK,
0549 MAX9860_PSCLK, MAX9860_PSCLK_OFF);
0550 if (ret) {
0551 dev_err(dev, "Failed to disable clock: %d\n", ret);
0552 return ret;
0553 }
0554
0555 regulator_disable(max9860->dvddio);
0556
0557 return 0;
0558 }
0559
0560 static int max9860_resume(struct device *dev)
0561 {
0562 struct max9860_priv *max9860 = dev_get_drvdata(dev);
0563 int ret;
0564
0565 ret = regulator_enable(max9860->dvddio);
0566 if (ret) {
0567 dev_err(dev, "Failed to enable DVDDIO: %d\n", ret);
0568 return ret;
0569 }
0570
0571 regcache_cache_only(max9860->regmap, false);
0572 ret = regcache_sync(max9860->regmap);
0573 if (ret) {
0574 dev_err(dev, "Failed to sync cache: %d\n", ret);
0575 return ret;
0576 }
0577
0578 ret = regmap_update_bits(max9860->regmap, MAX9860_SYSCLK,
0579 MAX9860_PSCLK, max9860->psclk);
0580 if (ret) {
0581 dev_err(dev, "Failed to enable clock: %d\n", ret);
0582 return ret;
0583 }
0584
0585 return 0;
0586 }
0587 #endif
0588
0589 static const struct dev_pm_ops max9860_pm_ops = {
0590 SET_RUNTIME_PM_OPS(max9860_suspend, max9860_resume, NULL)
0591 };
0592
0593 static int max9860_probe(struct i2c_client *i2c)
0594 {
0595 struct device *dev = &i2c->dev;
0596 struct max9860_priv *max9860;
0597 int ret;
0598 struct clk *mclk;
0599 unsigned long mclk_rate;
0600 int i;
0601 int intr;
0602
0603 max9860 = devm_kzalloc(dev, sizeof(struct max9860_priv), GFP_KERNEL);
0604 if (!max9860)
0605 return -ENOMEM;
0606
0607 max9860->dvddio = devm_regulator_get(dev, "DVDDIO");
0608 if (IS_ERR(max9860->dvddio))
0609 return dev_err_probe(dev, PTR_ERR(max9860->dvddio),
0610 "Failed to get DVDDIO supply\n");
0611
0612 max9860->dvddio_nb.notifier_call = max9860_dvddio_event;
0613
0614 ret = devm_regulator_register_notifier(max9860->dvddio,
0615 &max9860->dvddio_nb);
0616 if (ret)
0617 dev_err(dev, "Failed to register DVDDIO notifier: %d\n", ret);
0618
0619 ret = regulator_enable(max9860->dvddio);
0620 if (ret != 0) {
0621 dev_err(dev, "Failed to enable DVDDIO: %d\n", ret);
0622 return ret;
0623 }
0624
0625 max9860->regmap = devm_regmap_init_i2c(i2c, &max9860_regmap);
0626 if (IS_ERR(max9860->regmap)) {
0627 ret = PTR_ERR(max9860->regmap);
0628 goto err_regulator;
0629 }
0630
0631 dev_set_drvdata(dev, max9860);
0632
0633
0634
0635
0636
0637
0638 mclk = clk_get(dev, "mclk");
0639
0640 if (IS_ERR(mclk)) {
0641 ret = PTR_ERR(mclk);
0642 dev_err_probe(dev, ret, "Failed to get MCLK\n");
0643 goto err_regulator;
0644 }
0645
0646 mclk_rate = clk_get_rate(mclk);
0647 clk_put(mclk);
0648
0649 if (mclk_rate > 60000000 || mclk_rate < 10000000) {
0650 dev_err(dev, "Bad mclk %luHz (needs 10MHz - 60MHz)\n",
0651 mclk_rate);
0652 ret = -EINVAL;
0653 goto err_regulator;
0654 }
0655 if (mclk_rate >= 40000000)
0656 max9860->psclk = 3;
0657 else if (mclk_rate >= 20000000)
0658 max9860->psclk = 2;
0659 else
0660 max9860->psclk = 1;
0661 max9860->pclk_rate = mclk_rate >> (max9860->psclk - 1);
0662 max9860->psclk <<= MAX9860_PSCLK_SHIFT;
0663 dev_dbg(dev, "mclk %lu pclk %lu\n", mclk_rate, max9860->pclk_rate);
0664
0665 regcache_cache_bypass(max9860->regmap, true);
0666 for (i = 0; i < max9860_regmap.num_reg_defaults; ++i) {
0667 ret = regmap_write(max9860->regmap,
0668 max9860_regmap.reg_defaults[i].reg,
0669 max9860_regmap.reg_defaults[i].def);
0670 if (ret) {
0671 dev_err(dev, "Failed to initialize register %u: %d\n",
0672 max9860_regmap.reg_defaults[i].reg, ret);
0673 goto err_regulator;
0674 }
0675 }
0676 regcache_cache_bypass(max9860->regmap, false);
0677
0678 ret = regmap_read(max9860->regmap, MAX9860_INTRSTATUS, &intr);
0679 if (ret) {
0680 dev_err(dev, "Failed to clear INTRSTATUS: %d\n", ret);
0681 goto err_regulator;
0682 }
0683
0684 pm_runtime_set_active(dev);
0685 pm_runtime_enable(dev);
0686 pm_runtime_idle(dev);
0687
0688 ret = devm_snd_soc_register_component(dev, &max9860_component_driver,
0689 &max9860_dai, 1);
0690 if (ret) {
0691 dev_err(dev, "Failed to register CODEC: %d\n", ret);
0692 goto err_pm;
0693 }
0694
0695 return 0;
0696
0697 err_pm:
0698 pm_runtime_disable(dev);
0699 err_regulator:
0700 regulator_disable(max9860->dvddio);
0701 return ret;
0702 }
0703
0704 static int max9860_remove(struct i2c_client *i2c)
0705 {
0706 struct device *dev = &i2c->dev;
0707 struct max9860_priv *max9860 = dev_get_drvdata(dev);
0708
0709 pm_runtime_disable(dev);
0710 regulator_disable(max9860->dvddio);
0711 return 0;
0712 }
0713
0714 static const struct i2c_device_id max9860_i2c_id[] = {
0715 { "max9860", },
0716 { }
0717 };
0718 MODULE_DEVICE_TABLE(i2c, max9860_i2c_id);
0719
0720 static const struct of_device_id max9860_of_match[] = {
0721 { .compatible = "maxim,max9860", },
0722 { }
0723 };
0724 MODULE_DEVICE_TABLE(of, max9860_of_match);
0725
0726 static struct i2c_driver max9860_i2c_driver = {
0727 .probe_new = max9860_probe,
0728 .remove = max9860_remove,
0729 .id_table = max9860_i2c_id,
0730 .driver = {
0731 .name = "max9860",
0732 .of_match_table = max9860_of_match,
0733 .pm = &max9860_pm_ops,
0734 },
0735 };
0736
0737 module_i2c_driver(max9860_i2c_driver);
0738
0739 MODULE_DESCRIPTION("ASoC MAX9860 Mono Audio Voice Codec driver");
0740 MODULE_AUTHOR("Peter Rosin <peda@axentia.se>");
0741 MODULE_LICENSE("GPL v2");