0001
0002
0003
0004
0005
0006
0007
0008 #include <linux/delay.h>
0009 #include <linux/gpio/consumer.h>
0010 #include <linux/i2c.h>
0011 #include <linux/module.h>
0012 #include <linux/of_device.h>
0013 #include <linux/pm_runtime.h>
0014 #include <linux/regulator/consumer.h>
0015 #include <sound/soc.h>
0016 #include <sound/tlv.h>
0017
0018
0019 #define AK4375_00_POWER_MANAGEMENT1 0x00
0020 #define PMPLL BIT(0)
0021 #define AK4375_01_POWER_MANAGEMENT2 0x01
0022 #define PMCP1 BIT(0)
0023 #define PMCP2 BIT(1)
0024 #define PMLDO1P BIT(4)
0025 #define PMLDO1N BIT(5)
0026 #define PMLDO (PMLDO1P | PMLDO1N)
0027 #define AK4375_02_POWER_MANAGEMENT3 0x02
0028 #define AK4375_03_POWER_MANAGEMENT4 0x03
0029 #define AK4375_04_OUTPUT_MODE_SETTING 0x04
0030 #define AK4375_05_CLOCK_MODE_SELECT 0x05
0031 #define FS_MASK GENMASK(4, 0)
0032 #define FS_8KHZ 0x00
0033 #define FS_11_025KHZ 0x01
0034 #define FS_16KHZ 0x04
0035 #define FS_22_05KHZ 0x05
0036 #define FS_32KHZ 0x08
0037 #define FS_44_1KHZ 0x09
0038 #define FS_48KHZ 0x0a
0039 #define FS_88_2KHZ 0x0d
0040 #define FS_96KHZ 0x0e
0041 #define FS_176_4KHZ 0x11
0042 #define FS_192KHZ 0x12
0043 #define CM_MASK GENMASK(6, 5)
0044 #define CM_0 (0x0 << 5)
0045 #define CM_1 (0x1 << 5)
0046 #define CM_2 (0x2 << 5)
0047 #define CM_3 (0x3 << 5)
0048 #define AK4375_06_DIGITAL_FILTER_SELECT 0x06
0049 #define DADFSEL BIT(5)
0050 #define DASL BIT(6)
0051 #define DASD BIT(7)
0052 #define AK4375_07_DAC_MONO_MIXING 0x07
0053 #define DACMUTE_MASK (GENMASK(5, 4) | GENMASK(1, 0))
0054 #define AK4375_08_JITTER_CLEANER_SETTING1 0x08
0055 #define AK4375_09_JITTER_CLEANER_SETTING2 0x09
0056 #define AK4375_0A_JITTER_CLEANER_SETTING3 0x0a
0057 #define SELDAIN BIT(1)
0058 #define XCKSEL BIT(6)
0059 #define XCKCPSEL BIT(7)
0060 #define AK4375_0B_LCH_OUTPUT_VOLUME 0x0b
0061 #define AK4375_0C_RCH_OUTPUT_VOLUME 0x0c
0062 #define AK4375_0D_HP_VOLUME_CONTROL 0x0d
0063 #define AK4375_0E_PLL_CLK_SOURCE_SELECT 0x0e
0064 #define PLS BIT(0)
0065 #define AK4375_0F_PLL_REF_CLK_DIVIDER1 0x0f
0066 #define AK4375_10_PLL_REF_CLK_DIVIDER2 0x10
0067 #define AK4375_11_PLL_FB_CLK_DIVIDER1 0x11
0068 #define AK4375_12_PLL_FB_CLK_DIVIDER2 0x12
0069 #define AK4375_13_SRC_CLK_SOURCE 0x13
0070 #define SRCCKS BIT(0)
0071 #define DIV BIT(4)
0072 #define AK4375_14_DAC_CLK_DIVIDER 0x14
0073 #define AK4375_15_AUDIO_IF_FORMAT 0x15
0074 #define DEVICEID_MASK GENMASK(7, 5)
0075 #define AK4375_24_MODE_CONTROL 0x24
0076
0077 #define AK4375_PLL_FREQ_OUT_112896000 112896000
0078 #define AK4375_PLL_FREQ_OUT_122880000 122880000
0079
0080 #define DEVICEID_AK4375 0x00
0081 #define DEVICEID_AK4375A 0x01
0082 #define DEVICEID_AK4376A 0x02
0083 #define DEVICEID_AK4377 0x03
0084 #define DEVICEID_AK4331 0x07
0085
0086 static const char * const supply_names[] = {
0087 "avdd", "tvdd"
0088 };
0089
0090 struct ak4375_drvdata {
0091 struct snd_soc_dai_driver *dai_drv;
0092 const struct snd_soc_component_driver *comp_drv;
0093 };
0094
0095 struct ak4375_priv {
0096 struct device *dev;
0097 struct regmap *regmap;
0098 struct gpio_desc *pdn_gpiod;
0099 struct regulator_bulk_data supplies[ARRAY_SIZE(supply_names)];
0100 unsigned int rate;
0101 unsigned int pld;
0102 u8 mute_save;
0103 };
0104
0105 static const struct reg_default ak4375_reg_defaults[] = {
0106 { 0x00, 0x00 }, { 0x01, 0x00 }, { 0x02, 0x00 },
0107 { 0x03, 0x00 }, { 0x04, 0x00 }, { 0x05, 0x00 },
0108 { 0x06, 0x00 }, { 0x07, 0x00 }, { 0x08, 0x00 },
0109 { 0x09, 0x00 }, { 0x0a, 0x00 }, { 0x0b, 0x19 },
0110 { 0x0c, 0x19 }, { 0x0d, 0x75 }, { 0x0e, 0x01 },
0111 { 0x0f, 0x00 }, { 0x10, 0x00 }, { 0x11, 0x00 },
0112 { 0x12, 0x00 }, { 0x13, 0x00 }, { 0x14, 0x00 },
0113 { 0x15, 0x00 }, { 0x24, 0x00 },
0114 };
0115
0116
0117
0118
0119
0120 static DECLARE_TLV_DB_SCALE(dac_tlv, -1250, 50, 0);
0121
0122
0123
0124
0125
0126 static DECLARE_TLV_DB_SCALE(hpg_tlv, -4200, 20, 0);
0127
0128 static const char * const ak4375_ovolcn_select_texts[] = { "Dependent", "Independent" };
0129 static const char * const ak4375_mdac_select_texts[] = { "x1", "x1/2" };
0130 static const char * const ak4375_cpmode_select_texts[] = {
0131 "Automatic Switching",
0132 "+-VDD Operation",
0133 "+-1/2VDD Operation"
0134 };
0135
0136
0137
0138
0139
0140
0141
0142
0143 static const char * const ak4375_digfil_select_texts[] = {
0144 "Sharp Roll-Off Filter",
0145 "Slow Roll-Off Filter",
0146 "Short delay Sharp Roll-Off Filter",
0147 "Short delay Slow Roll-Off Filter",
0148 };
0149
0150 static const struct soc_enum ak4375_ovolcn_enum =
0151 SOC_ENUM_SINGLE(AK4375_0B_LCH_OUTPUT_VOLUME, 7,
0152 ARRAY_SIZE(ak4375_ovolcn_select_texts), ak4375_ovolcn_select_texts);
0153 static const struct soc_enum ak4375_mdacl_enum =
0154 SOC_ENUM_SINGLE(AK4375_07_DAC_MONO_MIXING, 2,
0155 ARRAY_SIZE(ak4375_mdac_select_texts), ak4375_mdac_select_texts);
0156 static const struct soc_enum ak4375_mdacr_enum =
0157 SOC_ENUM_SINGLE(AK4375_07_DAC_MONO_MIXING, 6,
0158 ARRAY_SIZE(ak4375_mdac_select_texts), ak4375_mdac_select_texts);
0159 static const struct soc_enum ak4375_cpmode_enum =
0160 SOC_ENUM_SINGLE(AK4375_03_POWER_MANAGEMENT4, 2,
0161 ARRAY_SIZE(ak4375_cpmode_select_texts), ak4375_cpmode_select_texts);
0162 static const struct soc_enum ak4375_digfil_enum =
0163 SOC_ENUM_SINGLE(AK4375_06_DIGITAL_FILTER_SELECT, 6,
0164 ARRAY_SIZE(ak4375_digfil_select_texts), ak4375_digfil_select_texts);
0165
0166 static const struct snd_kcontrol_new ak4375_snd_controls[] = {
0167 SOC_DOUBLE_R_TLV("Digital Output Volume", AK4375_0B_LCH_OUTPUT_VOLUME,
0168 AK4375_0C_RCH_OUTPUT_VOLUME, 0, 0x1f, 0, dac_tlv),
0169 SOC_SINGLE_TLV("HP-Amp Analog Volume",
0170 AK4375_0D_HP_VOLUME_CONTROL, 0, 0x1f, 0, hpg_tlv),
0171
0172 SOC_DOUBLE("DAC Signal Invert Switch", AK4375_07_DAC_MONO_MIXING, 3, 7, 1, 0),
0173
0174 SOC_ENUM("Digital Volume Control", ak4375_ovolcn_enum),
0175 SOC_ENUM("DACL Signal Level", ak4375_mdacl_enum),
0176 SOC_ENUM("DACR Signal Level", ak4375_mdacr_enum),
0177 SOC_ENUM("Charge Pump Mode", ak4375_cpmode_enum),
0178 SOC_ENUM("DAC Digital Filter Mode", ak4375_digfil_enum),
0179 };
0180
0181 static const struct snd_kcontrol_new ak4375_hpl_mixer_controls[] = {
0182 SOC_DAPM_SINGLE("LDACL Switch", AK4375_07_DAC_MONO_MIXING, 0, 1, 0),
0183 SOC_DAPM_SINGLE("RDACL Switch", AK4375_07_DAC_MONO_MIXING, 1, 1, 0),
0184 };
0185
0186 static const struct snd_kcontrol_new ak4375_hpr_mixer_controls[] = {
0187 SOC_DAPM_SINGLE("LDACR Switch", AK4375_07_DAC_MONO_MIXING, 4, 1, 0),
0188 SOC_DAPM_SINGLE("RDACR Switch", AK4375_07_DAC_MONO_MIXING, 5, 1, 0),
0189 };
0190
0191 static int ak4375_dac_event(struct snd_soc_dapm_widget *w,
0192 struct snd_kcontrol *kcontrol, int event)
0193 {
0194 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
0195
0196 switch (event) {
0197 case SND_SOC_DAPM_PRE_PMU:
0198 snd_soc_component_update_bits(component, AK4375_00_POWER_MANAGEMENT1, PMPLL, PMPLL);
0199 snd_soc_component_update_bits(component, AK4375_01_POWER_MANAGEMENT2, PMCP1, PMCP1);
0200 usleep_range(6500, 7000);
0201 snd_soc_component_update_bits(component, AK4375_01_POWER_MANAGEMENT2, PMLDO, PMLDO);
0202 usleep_range(1000, 2000);
0203 break;
0204 case SND_SOC_DAPM_POST_PMU:
0205 snd_soc_component_update_bits(component, AK4375_01_POWER_MANAGEMENT2, PMCP2, PMCP2);
0206 usleep_range(4500, 5000);
0207 break;
0208 case SND_SOC_DAPM_PRE_PMD:
0209 snd_soc_component_update_bits(component, AK4375_01_POWER_MANAGEMENT2, PMCP2, 0x0);
0210 break;
0211 case SND_SOC_DAPM_POST_PMD:
0212 snd_soc_component_update_bits(component, AK4375_01_POWER_MANAGEMENT2, PMLDO, 0x0);
0213 snd_soc_component_update_bits(component, AK4375_01_POWER_MANAGEMENT2, PMCP1, 0x0);
0214 snd_soc_component_update_bits(component, AK4375_00_POWER_MANAGEMENT1, PMPLL, 0x0);
0215 break;
0216 }
0217
0218 return 0;
0219 }
0220
0221 static const struct snd_soc_dapm_widget ak4375_dapm_widgets[] = {
0222 SND_SOC_DAPM_DAC_E("DAC", NULL, AK4375_02_POWER_MANAGEMENT3, 0, 0, ak4375_dac_event,
0223 SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
0224 SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD),
0225
0226 SND_SOC_DAPM_AIF_IN("SDTI", "HiFi Playback", 0, SND_SOC_NOPM, 0, 0),
0227
0228 SND_SOC_DAPM_OUTPUT("HPL"),
0229 SND_SOC_DAPM_OUTPUT("HPR"),
0230
0231 SND_SOC_DAPM_MIXER("HPR Mixer", AK4375_03_POWER_MANAGEMENT4, 1, 0,
0232 &ak4375_hpr_mixer_controls[0], ARRAY_SIZE(ak4375_hpr_mixer_controls)),
0233 SND_SOC_DAPM_MIXER("HPL Mixer", AK4375_03_POWER_MANAGEMENT4, 0, 0,
0234 &ak4375_hpl_mixer_controls[0], ARRAY_SIZE(ak4375_hpl_mixer_controls)),
0235 };
0236
0237 static const struct snd_soc_dapm_route ak4375_intercon[] = {
0238 { "DAC", NULL, "SDTI" },
0239
0240 { "HPL Mixer", "LDACL Switch", "DAC" },
0241 { "HPL Mixer", "RDACL Switch", "DAC" },
0242 { "HPR Mixer", "LDACR Switch", "DAC" },
0243 { "HPR Mixer", "RDACR Switch", "DAC" },
0244
0245 { "HPL", NULL, "HPL Mixer" },
0246 { "HPR", NULL, "HPR Mixer" },
0247 };
0248
0249 static int ak4375_hw_params(struct snd_pcm_substream *substream,
0250 struct snd_pcm_hw_params *params,
0251 struct snd_soc_dai *dai)
0252 {
0253 struct snd_soc_component *component = dai->component;
0254 struct ak4375_priv *ak4375 = snd_soc_component_get_drvdata(component);
0255 unsigned int freq_in, freq_out;
0256
0257 ak4375->rate = params_rate(params);
0258
0259 if (ak4375->rate <= 96000)
0260 ak4375->pld = 0;
0261 else
0262 ak4375->pld = 1;
0263
0264 freq_in = 32 * ak4375->rate / (ak4375->pld + 1);
0265
0266 if ((ak4375->rate % 8000) == 0)
0267 freq_out = AK4375_PLL_FREQ_OUT_122880000;
0268 else
0269 freq_out = AK4375_PLL_FREQ_OUT_112896000;
0270
0271 return snd_soc_dai_set_pll(dai, 0, 0, freq_in, freq_out);
0272 }
0273
0274 static int ak4375_dai_set_pll(struct snd_soc_dai *dai, int pll_id, int source,
0275 unsigned int freq_in, unsigned int freq_out)
0276 {
0277 struct snd_soc_component *component = dai->component;
0278 struct ak4375_priv *ak4375 = snd_soc_component_get_drvdata(component);
0279 unsigned int mclk, plm, mdiv, div;
0280 u8 cms, fs, cm;
0281
0282 cms = snd_soc_component_read(component, AK4375_05_CLOCK_MODE_SELECT);
0283 fs = cms & ~FS_MASK;
0284 cm = cms & ~CM_MASK;
0285
0286 switch (ak4375->rate) {
0287 case 8000:
0288 fs |= FS_8KHZ;
0289 break;
0290 case 11025:
0291 fs |= FS_11_025KHZ;
0292 break;
0293 case 16000:
0294 fs |= FS_16KHZ;
0295 break;
0296 case 22050:
0297 fs |= FS_22_05KHZ;
0298 break;
0299 case 32000:
0300 fs |= FS_32KHZ;
0301 break;
0302 case 44100:
0303 fs |= FS_44_1KHZ;
0304 break;
0305 case 48000:
0306 fs |= FS_48KHZ;
0307 break;
0308 case 88200:
0309 fs |= FS_88_2KHZ;
0310 break;
0311 case 96000:
0312 fs |= FS_96KHZ;
0313 break;
0314 case 176400:
0315 fs |= FS_176_4KHZ;
0316 break;
0317 case 192000:
0318 fs |= FS_192KHZ;
0319 break;
0320 default:
0321 return -EINVAL;
0322 }
0323
0324 if (ak4375->rate <= 24000) {
0325 cm |= CM_1;
0326 mclk = 512 * ak4375->rate;
0327 mdiv = freq_out / mclk - 1;
0328 div = 0;
0329 } else if (ak4375->rate <= 96000) {
0330 cm |= CM_0;
0331 mclk = 256 * ak4375->rate;
0332 mdiv = freq_out / mclk - 1;
0333 div = 0;
0334 } else {
0335 cm |= CM_3;
0336 mclk = 128 * ak4375->rate;
0337 mdiv = 4;
0338 div = 1;
0339 }
0340
0341
0342 snd_soc_component_update_bits(component, AK4375_05_CLOCK_MODE_SELECT, FS_MASK, fs);
0343 snd_soc_component_update_bits(component, AK4375_05_CLOCK_MODE_SELECT, CM_MASK, cm);
0344
0345 snd_soc_component_write(component, AK4375_0F_PLL_REF_CLK_DIVIDER1,
0346 (ak4375->pld & 0xff00) >> 8);
0347 snd_soc_component_write(component, AK4375_10_PLL_REF_CLK_DIVIDER2,
0348 ak4375->pld & 0x00ff);
0349
0350 plm = freq_out / freq_in - 1;
0351 snd_soc_component_write(component, AK4375_11_PLL_FB_CLK_DIVIDER1, (plm & 0xff00) >> 8);
0352 snd_soc_component_write(component, AK4375_12_PLL_FB_CLK_DIVIDER2, plm & 0x00ff);
0353
0354 snd_soc_component_update_bits(component, AK4375_13_SRC_CLK_SOURCE, DIV, div);
0355
0356
0357 snd_soc_component_update_bits(component, AK4375_13_SRC_CLK_SOURCE, SRCCKS, SRCCKS);
0358
0359 snd_soc_component_write(component, AK4375_14_DAC_CLK_DIVIDER, mdiv);
0360
0361 dev_dbg(ak4375->dev, "rate=%d mclk=%d f_in=%d f_out=%d PLD=%d PLM=%d MDIV=%d DIV=%d\n",
0362 ak4375->rate, mclk, freq_in, freq_out, ak4375->pld, plm, mdiv, div);
0363
0364 return 0;
0365 }
0366
0367 static int ak4375_mute(struct snd_soc_dai *dai, int mute, int direction)
0368 {
0369 struct snd_soc_component *component = dai->component;
0370 struct ak4375_priv *ak4375 = snd_soc_component_get_drvdata(component);
0371 u8 val = snd_soc_component_read(component, AK4375_07_DAC_MONO_MIXING);
0372
0373 dev_dbg(ak4375->dev, "mute=%d val=%d\n", mute, val);
0374
0375 if (mute) {
0376 ak4375->mute_save = val & DACMUTE_MASK;
0377 val &= ~DACMUTE_MASK;
0378 } else {
0379 val |= ak4375->mute_save;
0380 }
0381
0382 snd_soc_component_write(component, AK4375_07_DAC_MONO_MIXING, val);
0383
0384 return 0;
0385 }
0386
0387 #define AK4375_RATES (SNDRV_PCM_RATE_8000_48000 |\
0388 SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000 |\
0389 SNDRV_PCM_RATE_176400 | SNDRV_PCM_RATE_192000)
0390
0391 #define AK4375_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\
0392 SNDRV_PCM_FMTBIT_S24_LE |\
0393 SNDRV_PCM_FMTBIT_S32_LE)
0394
0395 static const struct snd_soc_dai_ops ak4375_dai_ops = {
0396 .hw_params = ak4375_hw_params,
0397 .mute_stream = ak4375_mute,
0398 .set_pll = ak4375_dai_set_pll,
0399 };
0400
0401 static struct snd_soc_dai_driver ak4375_dai = {
0402 .name = "ak4375-hifi",
0403 .playback = {
0404 .stream_name = "HiFi Playback",
0405 .channels_min = 1,
0406 .channels_max = 2,
0407 .rates = AK4375_RATES,
0408 .rate_min = 8000,
0409 .rate_max = 192000,
0410 .formats = AK4375_FORMATS,
0411 },
0412 .ops = &ak4375_dai_ops,
0413 };
0414
0415 static void ak4375_power_off(struct ak4375_priv *ak4375)
0416 {
0417 gpiod_set_value_cansleep(ak4375->pdn_gpiod, 0);
0418 usleep_range(1000, 2000);
0419
0420 regulator_bulk_disable(ARRAY_SIZE(ak4375->supplies), ak4375->supplies);
0421 }
0422
0423 static int ak4375_power_on(struct ak4375_priv *ak4375)
0424 {
0425 int ret;
0426
0427 ret = regulator_bulk_enable(ARRAY_SIZE(ak4375->supplies), ak4375->supplies);
0428 if (ret < 0) {
0429 dev_err(ak4375->dev, "Failed to enable regulators: %d\n", ret);
0430 return ret;
0431 }
0432
0433 usleep_range(3000, 4000);
0434
0435 gpiod_set_value_cansleep(ak4375->pdn_gpiod, 1);
0436 usleep_range(1000, 2000);
0437
0438 return 0;
0439 }
0440
0441 static int __maybe_unused ak4375_runtime_suspend(struct device *dev)
0442 {
0443 struct ak4375_priv *ak4375 = dev_get_drvdata(dev);
0444
0445 regcache_cache_only(ak4375->regmap, true);
0446 ak4375_power_off(ak4375);
0447
0448 return 0;
0449 }
0450
0451 static int __maybe_unused ak4375_runtime_resume(struct device *dev)
0452 {
0453 struct ak4375_priv *ak4375 = dev_get_drvdata(dev);
0454 int ret;
0455
0456 ret = ak4375_power_on(ak4375);
0457 if (ret < 0)
0458 return ret;
0459
0460 regcache_cache_only(ak4375->regmap, false);
0461 regcache_mark_dirty(ak4375->regmap);
0462
0463 return regcache_sync(ak4375->regmap);
0464 }
0465
0466 static const struct snd_soc_component_driver soc_codec_dev_ak4375 = {
0467 .controls = ak4375_snd_controls,
0468 .num_controls = ARRAY_SIZE(ak4375_snd_controls),
0469 .dapm_widgets = ak4375_dapm_widgets,
0470 .num_dapm_widgets = ARRAY_SIZE(ak4375_dapm_widgets),
0471 .dapm_routes = ak4375_intercon,
0472 .num_dapm_routes = ARRAY_SIZE(ak4375_intercon),
0473 .idle_bias_on = 1,
0474 .use_pmdown_time = 1,
0475 .endianness = 1,
0476 };
0477
0478 static const struct regmap_config ak4375_regmap = {
0479 .reg_bits = 8,
0480 .val_bits = 8,
0481 .max_register = AK4375_24_MODE_CONTROL,
0482 .reg_defaults = ak4375_reg_defaults,
0483 .num_reg_defaults = ARRAY_SIZE(ak4375_reg_defaults),
0484 .cache_type = REGCACHE_RBTREE,
0485 };
0486
0487 static const struct ak4375_drvdata ak4375_drvdata = {
0488 .dai_drv = &ak4375_dai,
0489 .comp_drv = &soc_codec_dev_ak4375,
0490 };
0491
0492 static const struct dev_pm_ops ak4375_pm = {
0493 SET_RUNTIME_PM_OPS(ak4375_runtime_suspend, ak4375_runtime_resume, NULL)
0494 SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
0495 pm_runtime_force_resume)
0496 };
0497
0498 static int ak4375_i2c_probe(struct i2c_client *i2c)
0499 {
0500 struct ak4375_priv *ak4375;
0501 const struct ak4375_drvdata *drvdata;
0502 unsigned int deviceid;
0503 int ret, i;
0504
0505 ak4375 = devm_kzalloc(&i2c->dev, sizeof(*ak4375), GFP_KERNEL);
0506 if (!ak4375)
0507 return -ENOMEM;
0508
0509 ak4375->regmap = devm_regmap_init_i2c(i2c, &ak4375_regmap);
0510 if (IS_ERR(ak4375->regmap))
0511 return PTR_ERR(ak4375->regmap);
0512
0513 i2c_set_clientdata(i2c, ak4375);
0514 ak4375->dev = &i2c->dev;
0515
0516 drvdata = of_device_get_match_data(&i2c->dev);
0517
0518 for (i = 0; i < ARRAY_SIZE(supply_names); i++)
0519 ak4375->supplies[i].supply = supply_names[i];
0520
0521 ret = devm_regulator_bulk_get(ak4375->dev, ARRAY_SIZE(ak4375->supplies), ak4375->supplies);
0522 if (ret < 0) {
0523 dev_err(ak4375->dev, "Failed to get regulators: %d\n", ret);
0524 return ret;
0525 }
0526
0527 ak4375->pdn_gpiod = devm_gpiod_get_optional(ak4375->dev, "pdn", GPIOD_OUT_LOW);
0528 if (IS_ERR(ak4375->pdn_gpiod))
0529 return dev_err_probe(ak4375->dev, PTR_ERR(ak4375->pdn_gpiod),
0530 "failed to get pdn\n");
0531
0532 ret = ak4375_power_on(ak4375);
0533 if (ret < 0)
0534 return ret;
0535
0536
0537 regcache_cache_bypass(ak4375->regmap, true);
0538
0539 ret = regmap_read(ak4375->regmap, AK4375_15_AUDIO_IF_FORMAT, &deviceid);
0540 if (ret < 0) {
0541 dev_err(ak4375->dev, "unable to read DEVICEID!\n");
0542 return ret;
0543 }
0544
0545 regcache_cache_bypass(ak4375->regmap, false);
0546
0547 deviceid = (deviceid & DEVICEID_MASK) >> 5;
0548
0549 switch (deviceid) {
0550 case DEVICEID_AK4331:
0551 dev_err(ak4375->dev, "found untested AK4331\n");
0552 return -EINVAL;
0553 case DEVICEID_AK4375:
0554 dev_dbg(ak4375->dev, "found AK4375\n");
0555 break;
0556 case DEVICEID_AK4375A:
0557 dev_dbg(ak4375->dev, "found AK4375A\n");
0558 break;
0559 case DEVICEID_AK4376A:
0560 dev_err(ak4375->dev, "found unsupported AK4376/A!\n");
0561 return -EINVAL;
0562 case DEVICEID_AK4377:
0563 dev_err(ak4375->dev, "found unsupported AK4377!\n");
0564 return -EINVAL;
0565 default:
0566 dev_err(ak4375->dev, "unrecognized DEVICEID!\n");
0567 return -EINVAL;
0568 }
0569
0570 pm_runtime_set_active(ak4375->dev);
0571 pm_runtime_enable(ak4375->dev);
0572
0573 ret = devm_snd_soc_register_component(ak4375->dev, drvdata->comp_drv,
0574 drvdata->dai_drv, 1);
0575 if (ret < 0) {
0576 dev_err(ak4375->dev, "Failed to register CODEC: %d\n", ret);
0577 return ret;
0578 }
0579
0580 return 0;
0581 }
0582
0583 static int ak4375_i2c_remove(struct i2c_client *i2c)
0584 {
0585 pm_runtime_disable(&i2c->dev);
0586
0587 return 0;
0588 }
0589
0590 static const struct of_device_id ak4375_of_match[] = {
0591 { .compatible = "asahi-kasei,ak4375", .data = &ak4375_drvdata },
0592 { },
0593 };
0594 MODULE_DEVICE_TABLE(of, ak4375_of_match);
0595
0596 static struct i2c_driver ak4375_i2c_driver = {
0597 .driver = {
0598 .name = "ak4375",
0599 .pm = &ak4375_pm,
0600 .of_match_table = ak4375_of_match,
0601 },
0602 .probe_new = ak4375_i2c_probe,
0603 .remove = ak4375_i2c_remove,
0604 };
0605 module_i2c_driver(ak4375_i2c_driver);
0606
0607 MODULE_AUTHOR("Vincent Knecht <vincent.knecht@mailoo.org>");
0608 MODULE_DESCRIPTION("ASoC AK4375 DAC driver");
0609 MODULE_LICENSE("GPL");