diff options
| -rw-r--r-- | sound/soc/codecs/wm8993.c | 152 |
1 files changed, 43 insertions, 109 deletions
diff --git a/sound/soc/codecs/wm8993.c b/sound/soc/codecs/wm8993.c index 61239e0e9556..3c9336cd4eeb 100644 --- a/sound/soc/codecs/wm8993.c +++ b/sound/soc/codecs/wm8993.c | |||
| @@ -231,34 +231,6 @@ struct wm8993_priv { | |||
| 231 | int fll_src; | 231 | int fll_src; |
| 232 | }; | 232 | }; |
| 233 | 233 | ||
| 234 | static unsigned int wm8993_read_hw(struct snd_soc_codec *codec, u8 reg) | ||
| 235 | { | ||
| 236 | struct i2c_msg xfer[2]; | ||
| 237 | u16 data; | ||
| 238 | int ret; | ||
| 239 | struct i2c_client *i2c = codec->control_data; | ||
| 240 | |||
| 241 | /* Write register */ | ||
| 242 | xfer[0].addr = i2c->addr; | ||
| 243 | xfer[0].flags = 0; | ||
| 244 | xfer[0].len = 1; | ||
| 245 | xfer[0].buf = ® | ||
| 246 | |||
| 247 | /* Read data */ | ||
| 248 | xfer[1].addr = i2c->addr; | ||
| 249 | xfer[1].flags = I2C_M_RD; | ||
| 250 | xfer[1].len = 2; | ||
| 251 | xfer[1].buf = (u8 *)&data; | ||
| 252 | |||
| 253 | ret = i2c_transfer(i2c->adapter, xfer, 2); | ||
| 254 | if (ret != 2) { | ||
| 255 | dev_err(codec->dev, "Failed to read 0x%x: %d\n", reg, ret); | ||
| 256 | return 0; | ||
| 257 | } | ||
| 258 | |||
| 259 | return (data >> 8) | ((data & 0xff) << 8); | ||
| 260 | } | ||
| 261 | |||
| 262 | static int wm8993_volatile(unsigned int reg) | 234 | static int wm8993_volatile(unsigned int reg) |
| 263 | { | 235 | { |
| 264 | switch (reg) { | 236 | switch (reg) { |
| @@ -273,48 +245,6 @@ static int wm8993_volatile(unsigned int reg) | |||
| 273 | } | 245 | } |
| 274 | } | 246 | } |
| 275 | 247 | ||
| 276 | static unsigned int wm8993_read(struct snd_soc_codec *codec, | ||
| 277 | unsigned int reg) | ||
| 278 | { | ||
| 279 | u16 *reg_cache = codec->reg_cache; | ||
| 280 | |||
| 281 | BUG_ON(reg > WM8993_MAX_REGISTER); | ||
| 282 | |||
| 283 | if (wm8993_volatile(reg)) | ||
| 284 | return wm8993_read_hw(codec, reg); | ||
| 285 | else | ||
| 286 | return reg_cache[reg]; | ||
| 287 | } | ||
| 288 | |||
| 289 | static int wm8993_write(struct snd_soc_codec *codec, unsigned int reg, | ||
| 290 | unsigned int value) | ||
| 291 | { | ||
| 292 | u16 *reg_cache = codec->reg_cache; | ||
| 293 | u8 data[3]; | ||
| 294 | int ret; | ||
| 295 | |||
| 296 | BUG_ON(reg > WM8993_MAX_REGISTER); | ||
| 297 | |||
| 298 | /* data is | ||
| 299 | * D15..D9 WM8993 register offset | ||
| 300 | * D8...D0 register data | ||
| 301 | */ | ||
| 302 | data[0] = reg; | ||
| 303 | data[1] = value >> 8; | ||
| 304 | data[2] = value & 0x00ff; | ||
| 305 | |||
| 306 | if (!wm8993_volatile(reg)) | ||
| 307 | reg_cache[reg] = value; | ||
| 308 | |||
| 309 | ret = codec->hw_write(codec->control_data, data, 3); | ||
| 310 | |||
| 311 | if (ret == 3) | ||
| 312 | return 0; | ||
| 313 | if (ret < 0) | ||
| 314 | return ret; | ||
| 315 | return -EIO; | ||
| 316 | } | ||
| 317 | |||
| 318 | struct _fll_div { | 248 | struct _fll_div { |
| 319 | u16 fll_fratio; | 249 | u16 fll_fratio; |
| 320 | u16 fll_outdiv; | 250 | u16 fll_outdiv; |
| @@ -443,9 +373,9 @@ static int wm8993_set_fll(struct snd_soc_dai *dai, int fll_id, int source, | |||
| 443 | wm8993->fll_fref = 0; | 373 | wm8993->fll_fref = 0; |
| 444 | wm8993->fll_fout = 0; | 374 | wm8993->fll_fout = 0; |
| 445 | 375 | ||
| 446 | reg1 = wm8993_read(codec, WM8993_FLL_CONTROL_1); | 376 | reg1 = snd_soc_read(codec, WM8993_FLL_CONTROL_1); |
| 447 | reg1 &= ~WM8993_FLL_ENA; | 377 | reg1 &= ~WM8993_FLL_ENA; |
| 448 | wm8993_write(codec, WM8993_FLL_CONTROL_1, reg1); | 378 | snd_soc_write(codec, WM8993_FLL_CONTROL_1, reg1); |
| 449 | 379 | ||
| 450 | return 0; | 380 | return 0; |
| 451 | } | 381 | } |
| @@ -454,7 +384,7 @@ static int wm8993_set_fll(struct snd_soc_dai *dai, int fll_id, int source, | |||
| 454 | if (ret != 0) | 384 | if (ret != 0) |
| 455 | return ret; | 385 | return ret; |
| 456 | 386 | ||
| 457 | reg5 = wm8993_read(codec, WM8993_FLL_CONTROL_5); | 387 | reg5 = snd_soc_read(codec, WM8993_FLL_CONTROL_5); |
| 458 | reg5 &= ~WM8993_FLL_CLK_SRC_MASK; | 388 | reg5 &= ~WM8993_FLL_CLK_SRC_MASK; |
| 459 | 389 | ||
| 460 | switch (fll_id) { | 390 | switch (fll_id) { |
| @@ -476,33 +406,33 @@ static int wm8993_set_fll(struct snd_soc_dai *dai, int fll_id, int source, | |||
| 476 | 406 | ||
| 477 | /* Any FLL configuration change requires that the FLL be | 407 | /* Any FLL configuration change requires that the FLL be |
| 478 | * disabled first. */ | 408 | * disabled first. */ |
| 479 | reg1 = wm8993_read(codec, WM8993_FLL_CONTROL_1); | 409 | reg1 = snd_soc_read(codec, WM8993_FLL_CONTROL_1); |
| 480 | reg1 &= ~WM8993_FLL_ENA; | 410 | reg1 &= ~WM8993_FLL_ENA; |
| 481 | wm8993_write(codec, WM8993_FLL_CONTROL_1, reg1); | 411 | snd_soc_write(codec, WM8993_FLL_CONTROL_1, reg1); |
| 482 | 412 | ||
| 483 | /* Apply the configuration */ | 413 | /* Apply the configuration */ |
| 484 | if (fll_div.k) | 414 | if (fll_div.k) |
| 485 | reg1 |= WM8993_FLL_FRAC_MASK; | 415 | reg1 |= WM8993_FLL_FRAC_MASK; |
| 486 | else | 416 | else |
| 487 | reg1 &= ~WM8993_FLL_FRAC_MASK; | 417 | reg1 &= ~WM8993_FLL_FRAC_MASK; |
| 488 | wm8993_write(codec, WM8993_FLL_CONTROL_1, reg1); | 418 | snd_soc_write(codec, WM8993_FLL_CONTROL_1, reg1); |
| 489 | 419 | ||
| 490 | wm8993_write(codec, WM8993_FLL_CONTROL_2, | 420 | snd_soc_write(codec, WM8993_FLL_CONTROL_2, |
| 491 | (fll_div.fll_outdiv << WM8993_FLL_OUTDIV_SHIFT) | | 421 | (fll_div.fll_outdiv << WM8993_FLL_OUTDIV_SHIFT) | |
| 492 | (fll_div.fll_fratio << WM8993_FLL_FRATIO_SHIFT)); | 422 | (fll_div.fll_fratio << WM8993_FLL_FRATIO_SHIFT)); |
| 493 | wm8993_write(codec, WM8993_FLL_CONTROL_3, fll_div.k); | 423 | snd_soc_write(codec, WM8993_FLL_CONTROL_3, fll_div.k); |
| 494 | 424 | ||
| 495 | reg4 = wm8993_read(codec, WM8993_FLL_CONTROL_4); | 425 | reg4 = snd_soc_read(codec, WM8993_FLL_CONTROL_4); |
| 496 | reg4 &= ~WM8993_FLL_N_MASK; | 426 | reg4 &= ~WM8993_FLL_N_MASK; |
| 497 | reg4 |= fll_div.n << WM8993_FLL_N_SHIFT; | 427 | reg4 |= fll_div.n << WM8993_FLL_N_SHIFT; |
| 498 | wm8993_write(codec, WM8993_FLL_CONTROL_4, reg4); | 428 | snd_soc_write(codec, WM8993_FLL_CONTROL_4, reg4); |
| 499 | 429 | ||
| 500 | reg5 &= ~WM8993_FLL_CLK_REF_DIV_MASK; | 430 | reg5 &= ~WM8993_FLL_CLK_REF_DIV_MASK; |
| 501 | reg5 |= fll_div.fll_clk_ref_div << WM8993_FLL_CLK_REF_DIV_SHIFT; | 431 | reg5 |= fll_div.fll_clk_ref_div << WM8993_FLL_CLK_REF_DIV_SHIFT; |
| 502 | wm8993_write(codec, WM8993_FLL_CONTROL_5, reg5); | 432 | snd_soc_write(codec, WM8993_FLL_CONTROL_5, reg5); |
| 503 | 433 | ||
| 504 | /* Enable the FLL */ | 434 | /* Enable the FLL */ |
| 505 | wm8993_write(codec, WM8993_FLL_CONTROL_1, reg1 | WM8993_FLL_ENA); | 435 | snd_soc_write(codec, WM8993_FLL_CONTROL_1, reg1 | WM8993_FLL_ENA); |
| 506 | 436 | ||
| 507 | dev_dbg(codec->dev, "FLL enabled at %dHz->%dHz\n", Fref, Fout); | 437 | dev_dbg(codec->dev, "FLL enabled at %dHz->%dHz\n", Fref, Fout); |
| 508 | 438 | ||
| @@ -523,7 +453,7 @@ static int configure_clock(struct snd_soc_codec *codec) | |||
| 523 | case WM8993_SYSCLK_MCLK: | 453 | case WM8993_SYSCLK_MCLK: |
| 524 | dev_dbg(codec->dev, "Using %dHz MCLK\n", wm8993->mclk_rate); | 454 | dev_dbg(codec->dev, "Using %dHz MCLK\n", wm8993->mclk_rate); |
| 525 | 455 | ||
| 526 | reg = wm8993_read(codec, WM8993_CLOCKING_2); | 456 | reg = snd_soc_read(codec, WM8993_CLOCKING_2); |
| 527 | reg &= ~(WM8993_MCLK_DIV | WM8993_SYSCLK_SRC); | 457 | reg &= ~(WM8993_MCLK_DIV | WM8993_SYSCLK_SRC); |
| 528 | if (wm8993->mclk_rate > 13500000) { | 458 | if (wm8993->mclk_rate > 13500000) { |
| 529 | reg |= WM8993_MCLK_DIV; | 459 | reg |= WM8993_MCLK_DIV; |
| @@ -532,14 +462,14 @@ static int configure_clock(struct snd_soc_codec *codec) | |||
| 532 | reg &= ~WM8993_MCLK_DIV; | 462 | reg &= ~WM8993_MCLK_DIV; |
| 533 | wm8993->sysclk_rate = wm8993->mclk_rate; | 463 | wm8993->sysclk_rate = wm8993->mclk_rate; |
| 534 | } | 464 | } |
| 535 | wm8993_write(codec, WM8993_CLOCKING_2, reg); | 465 | snd_soc_write(codec, WM8993_CLOCKING_2, reg); |
| 536 | break; | 466 | break; |
| 537 | 467 | ||
| 538 | case WM8993_SYSCLK_FLL: | 468 | case WM8993_SYSCLK_FLL: |
| 539 | dev_dbg(codec->dev, "Using %dHz FLL clock\n", | 469 | dev_dbg(codec->dev, "Using %dHz FLL clock\n", |
| 540 | wm8993->fll_fout); | 470 | wm8993->fll_fout); |
| 541 | 471 | ||
| 542 | reg = wm8993_read(codec, WM8993_CLOCKING_2); | 472 | reg = snd_soc_read(codec, WM8993_CLOCKING_2); |
| 543 | reg |= WM8993_SYSCLK_SRC; | 473 | reg |= WM8993_SYSCLK_SRC; |
| 544 | if (wm8993->fll_fout > 13500000) { | 474 | if (wm8993->fll_fout > 13500000) { |
| 545 | reg |= WM8993_MCLK_DIV; | 475 | reg |= WM8993_MCLK_DIV; |
| @@ -548,7 +478,7 @@ static int configure_clock(struct snd_soc_codec *codec) | |||
| 548 | reg &= ~WM8993_MCLK_DIV; | 478 | reg &= ~WM8993_MCLK_DIV; |
| 549 | wm8993->sysclk_rate = wm8993->fll_fout; | 479 | wm8993->sysclk_rate = wm8993->fll_fout; |
| 550 | } | 480 | } |
| 551 | wm8993_write(codec, WM8993_CLOCKING_2, reg); | 481 | snd_soc_write(codec, WM8993_CLOCKING_2, reg); |
| 552 | break; | 482 | break; |
| 553 | 483 | ||
| 554 | default: | 484 | default: |
| @@ -1083,8 +1013,8 @@ static int wm8993_set_dai_fmt(struct snd_soc_dai *dai, | |||
| 1083 | { | 1013 | { |
| 1084 | struct snd_soc_codec *codec = dai->codec; | 1014 | struct snd_soc_codec *codec = dai->codec; |
| 1085 | struct wm8993_priv *wm8993 = codec->private_data; | 1015 | struct wm8993_priv *wm8993 = codec->private_data; |
| 1086 | unsigned int aif1 = wm8993_read(codec, WM8993_AUDIO_INTERFACE_1); | 1016 | unsigned int aif1 = snd_soc_read(codec, WM8993_AUDIO_INTERFACE_1); |
| 1087 | unsigned int aif4 = wm8993_read(codec, WM8993_AUDIO_INTERFACE_4); | 1017 | unsigned int aif4 = snd_soc_read(codec, WM8993_AUDIO_INTERFACE_4); |
| 1088 | 1018 | ||
| 1089 | aif1 &= ~(WM8993_BCLK_DIR | WM8993_AIF_BCLK_INV | | 1019 | aif1 &= ~(WM8993_BCLK_DIR | WM8993_AIF_BCLK_INV | |
| 1090 | WM8993_AIF_LRCLK_INV | WM8993_AIF_FMT_MASK); | 1020 | WM8993_AIF_LRCLK_INV | WM8993_AIF_FMT_MASK); |
| @@ -1167,8 +1097,8 @@ static int wm8993_set_dai_fmt(struct snd_soc_dai *dai, | |||
| 1167 | return -EINVAL; | 1097 | return -EINVAL; |
| 1168 | } | 1098 | } |
| 1169 | 1099 | ||
| 1170 | wm8993_write(codec, WM8993_AUDIO_INTERFACE_1, aif1); | 1100 | snd_soc_write(codec, WM8993_AUDIO_INTERFACE_1, aif1); |
| 1171 | wm8993_write(codec, WM8993_AUDIO_INTERFACE_4, aif4); | 1101 | snd_soc_write(codec, WM8993_AUDIO_INTERFACE_4, aif4); |
| 1172 | 1102 | ||
| 1173 | return 0; | 1103 | return 0; |
| 1174 | } | 1104 | } |
| @@ -1182,16 +1112,16 @@ static int wm8993_hw_params(struct snd_pcm_substream *substream, | |||
| 1182 | int ret, i, best, best_val, cur_val; | 1112 | int ret, i, best, best_val, cur_val; |
| 1183 | unsigned int clocking1, clocking3, aif1, aif4; | 1113 | unsigned int clocking1, clocking3, aif1, aif4; |
| 1184 | 1114 | ||
| 1185 | clocking1 = wm8993_read(codec, WM8993_CLOCKING_1); | 1115 | clocking1 = snd_soc_read(codec, WM8993_CLOCKING_1); |
| 1186 | clocking1 &= ~WM8993_BCLK_DIV_MASK; | 1116 | clocking1 &= ~WM8993_BCLK_DIV_MASK; |
| 1187 | 1117 | ||
| 1188 | clocking3 = wm8993_read(codec, WM8993_CLOCKING_3); | 1118 | clocking3 = snd_soc_read(codec, WM8993_CLOCKING_3); |
| 1189 | clocking3 &= ~(WM8993_CLK_SYS_RATE_MASK | WM8993_SAMPLE_RATE_MASK); | 1119 | clocking3 &= ~(WM8993_CLK_SYS_RATE_MASK | WM8993_SAMPLE_RATE_MASK); |
| 1190 | 1120 | ||
| 1191 | aif1 = wm8993_read(codec, WM8993_AUDIO_INTERFACE_1); | 1121 | aif1 = snd_soc_read(codec, WM8993_AUDIO_INTERFACE_1); |
| 1192 | aif1 &= ~WM8993_AIF_WL_MASK; | 1122 | aif1 &= ~WM8993_AIF_WL_MASK; |
| 1193 | 1123 | ||
| 1194 | aif4 = wm8993_read(codec, WM8993_AUDIO_INTERFACE_4); | 1124 | aif4 = snd_soc_read(codec, WM8993_AUDIO_INTERFACE_4); |
| 1195 | aif4 &= ~WM8993_LRCLK_RATE_MASK; | 1125 | aif4 &= ~WM8993_LRCLK_RATE_MASK; |
| 1196 | 1126 | ||
| 1197 | /* What BCLK do we need? */ | 1127 | /* What BCLK do we need? */ |
| @@ -1284,14 +1214,14 @@ static int wm8993_hw_params(struct snd_pcm_substream *substream, | |||
| 1284 | dev_dbg(codec->dev, "LRCLK_RATE is %d\n", wm8993->bclk / wm8993->fs); | 1214 | dev_dbg(codec->dev, "LRCLK_RATE is %d\n", wm8993->bclk / wm8993->fs); |
| 1285 | aif4 |= wm8993->bclk / wm8993->fs; | 1215 | aif4 |= wm8993->bclk / wm8993->fs; |
| 1286 | 1216 | ||
| 1287 | wm8993_write(codec, WM8993_CLOCKING_1, clocking1); | 1217 | snd_soc_write(codec, WM8993_CLOCKING_1, clocking1); |
| 1288 | wm8993_write(codec, WM8993_CLOCKING_3, clocking3); | 1218 | snd_soc_write(codec, WM8993_CLOCKING_3, clocking3); |
| 1289 | wm8993_write(codec, WM8993_AUDIO_INTERFACE_1, aif1); | 1219 | snd_soc_write(codec, WM8993_AUDIO_INTERFACE_1, aif1); |
| 1290 | wm8993_write(codec, WM8993_AUDIO_INTERFACE_4, aif4); | 1220 | snd_soc_write(codec, WM8993_AUDIO_INTERFACE_4, aif4); |
| 1291 | 1221 | ||
| 1292 | /* ReTune Mobile? */ | 1222 | /* ReTune Mobile? */ |
| 1293 | if (wm8993->pdata.num_retune_configs) { | 1223 | if (wm8993->pdata.num_retune_configs) { |
| 1294 | u16 eq1 = wm8993_read(codec, WM8993_EQ1); | 1224 | u16 eq1 = snd_soc_read(codec, WM8993_EQ1); |
| 1295 | struct wm8993_retune_mobile_setting *s; | 1225 | struct wm8993_retune_mobile_setting *s; |
| 1296 | 1226 | ||
| 1297 | best = 0; | 1227 | best = 0; |
| @@ -1314,7 +1244,7 @@ static int wm8993_hw_params(struct snd_pcm_substream *substream, | |||
| 1314 | snd_soc_update_bits(codec, WM8993_EQ1, WM8993_EQ_ENA, 0); | 1244 | snd_soc_update_bits(codec, WM8993_EQ1, WM8993_EQ_ENA, 0); |
| 1315 | 1245 | ||
| 1316 | for (i = 1; i < ARRAY_SIZE(s->config); i++) | 1246 | for (i = 1; i < ARRAY_SIZE(s->config); i++) |
| 1317 | wm8993_write(codec, WM8993_EQ1 + i, s->config[i]); | 1247 | snd_soc_write(codec, WM8993_EQ1 + i, s->config[i]); |
| 1318 | 1248 | ||
| 1319 | snd_soc_update_bits(codec, WM8993_EQ1, WM8993_EQ_ENA, eq1); | 1249 | snd_soc_update_bits(codec, WM8993_EQ1, WM8993_EQ_ENA, eq1); |
| 1320 | } | 1250 | } |
| @@ -1327,14 +1257,14 @@ static int wm8993_digital_mute(struct snd_soc_dai *codec_dai, int mute) | |||
| 1327 | struct snd_soc_codec *codec = codec_dai->codec; | 1257 | struct snd_soc_codec *codec = codec_dai->codec; |
| 1328 | unsigned int reg; | 1258 | unsigned int reg; |
| 1329 | 1259 | ||
| 1330 | reg = wm8993_read(codec, WM8993_DAC_CTRL); | 1260 | reg = snd_soc_read(codec, WM8993_DAC_CTRL); |
| 1331 | 1261 | ||
| 1332 | if (mute) | 1262 | if (mute) |
| 1333 | reg |= WM8993_DAC_MUTE; | 1263 | reg |= WM8993_DAC_MUTE; |
| 1334 | else | 1264 | else |
| 1335 | reg &= ~WM8993_DAC_MUTE; | 1265 | reg &= ~WM8993_DAC_MUTE; |
| 1336 | 1266 | ||
| 1337 | wm8993_write(codec, WM8993_DAC_CTRL, reg); | 1267 | snd_soc_write(codec, WM8993_DAC_CTRL, reg); |
| 1338 | 1268 | ||
| 1339 | return 0; | 1269 | return 0; |
| 1340 | } | 1270 | } |
| @@ -1586,9 +1516,7 @@ static int wm8993_i2c_probe(struct i2c_client *i2c, | |||
| 1586 | INIT_LIST_HEAD(&codec->dapm_paths); | 1516 | INIT_LIST_HEAD(&codec->dapm_paths); |
| 1587 | 1517 | ||
| 1588 | codec->name = "WM8993"; | 1518 | codec->name = "WM8993"; |
| 1589 | codec->read = wm8993_read; | 1519 | codec->volatile_register = wm8993_volatile; |
| 1590 | codec->write = wm8993_write; | ||
| 1591 | codec->hw_write = (hw_write_t)i2c_master_send; | ||
| 1592 | codec->reg_cache = wm8993->reg_cache; | 1520 | codec->reg_cache = wm8993->reg_cache; |
| 1593 | codec->reg_cache_size = ARRAY_SIZE(wm8993->reg_cache); | 1521 | codec->reg_cache_size = ARRAY_SIZE(wm8993->reg_cache); |
| 1594 | codec->bias_level = SND_SOC_BIAS_OFF; | 1522 | codec->bias_level = SND_SOC_BIAS_OFF; |
| @@ -1603,20 +1531,26 @@ static int wm8993_i2c_probe(struct i2c_client *i2c, | |||
| 1603 | memcpy(wm8993->reg_cache, wm8993_reg_defaults, | 1531 | memcpy(wm8993->reg_cache, wm8993_reg_defaults, |
| 1604 | sizeof(wm8993->reg_cache)); | 1532 | sizeof(wm8993->reg_cache)); |
| 1605 | 1533 | ||
| 1534 | ret = snd_soc_codec_set_cache_io(codec, 8, 16, SND_SOC_I2C); | ||
| 1535 | if (ret != 0) { | ||
| 1536 | dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret); | ||
| 1537 | goto err; | ||
| 1538 | } | ||
| 1539 | |||
| 1606 | i2c_set_clientdata(i2c, wm8993); | 1540 | i2c_set_clientdata(i2c, wm8993); |
| 1607 | codec->control_data = i2c; | 1541 | codec->control_data = i2c; |
| 1608 | wm8993_codec = codec; | 1542 | wm8993_codec = codec; |
| 1609 | 1543 | ||
| 1610 | codec->dev = &i2c->dev; | 1544 | codec->dev = &i2c->dev; |
| 1611 | 1545 | ||
| 1612 | val = wm8993_read_hw(codec, WM8993_SOFTWARE_RESET); | 1546 | val = snd_soc_read(codec, WM8993_SOFTWARE_RESET); |
| 1613 | if (val != wm8993_reg_defaults[WM8993_SOFTWARE_RESET]) { | 1547 | if (val != wm8993_reg_defaults[WM8993_SOFTWARE_RESET]) { |
| 1614 | dev_err(codec->dev, "Invalid ID register value %x\n", val); | 1548 | dev_err(codec->dev, "Invalid ID register value %x\n", val); |
| 1615 | ret = -EINVAL; | 1549 | ret = -EINVAL; |
| 1616 | goto err; | 1550 | goto err; |
| 1617 | } | 1551 | } |
| 1618 | 1552 | ||
| 1619 | ret = wm8993_write(codec, WM8993_SOFTWARE_RESET, 0xffff); | 1553 | ret = snd_soc_write(codec, WM8993_SOFTWARE_RESET, 0xffff); |
| 1620 | if (ret != 0) | 1554 | if (ret != 0) |
| 1621 | goto err; | 1555 | goto err; |
| 1622 | 1556 | ||
