diff options
author | Axel Lin <axel.lin@ingics.com> | 2015-07-28 01:30:14 -0400 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2015-07-29 09:53:55 -0400 |
commit | 5549ce82e29c6c1a45ad36a871096ae7c53e53b9 (patch) | |
tree | 5e948d9244816f6188626860e1c644ef13798b9f | |
parent | 402f2a4f808a5d284de724689751dcd018835579 (diff) |
ASoC: max98095: Get rid of max98095_access table
The max98095_access table is used for look up readable/writable
attributes of registers. The readable/writable/volatile registers are
mostly in continuous ranges, so we can replace the max98095_access table
entirely by using case range.
Below is a summary of the readable/writeable/volatile registers:
readable registers:
0x01 ~ 0x97, 0xFF
writeable registers:
0x0F ~ 0x97
volatile registers:
0x00 ~ 0x0E, 0x98 ~ 0xFF
This patch reworks the implement for .readable and .volatile and also add
implementation for .writable callback.
Signed-off-by: Axel Lin <axel.lin@ingics.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r-- | sound/soc/codecs/max98095.c | 309 |
1 files changed, 23 insertions, 286 deletions
diff --git a/sound/soc/codecs/max98095.c b/sound/soc/codecs/max98095.c index 66afd2b781e9..078533eff38b 100644 --- a/sound/soc/codecs/max98095.c +++ b/sound/soc/codecs/max98095.c | |||
@@ -202,300 +202,36 @@ static const struct reg_default max98095_reg_def[] = { | |||
202 | { 0xff, 0x00 }, /* FF */ | 202 | { 0xff, 0x00 }, /* FF */ |
203 | }; | 203 | }; |
204 | 204 | ||
205 | static struct { | ||
206 | int readable; | ||
207 | int writable; | ||
208 | } max98095_access[M98095_REG_CNT] = { | ||
209 | { 0x00, 0x00 }, /* 00 */ | ||
210 | { 0xFF, 0x00 }, /* 01 */ | ||
211 | { 0xFF, 0x00 }, /* 02 */ | ||
212 | { 0xFF, 0x00 }, /* 03 */ | ||
213 | { 0xFF, 0x00 }, /* 04 */ | ||
214 | { 0xFF, 0x00 }, /* 05 */ | ||
215 | { 0xFF, 0x00 }, /* 06 */ | ||
216 | { 0xFF, 0x00 }, /* 07 */ | ||
217 | { 0xFF, 0x00 }, /* 08 */ | ||
218 | { 0xFF, 0x00 }, /* 09 */ | ||
219 | { 0xFF, 0x00 }, /* 0A */ | ||
220 | { 0xFF, 0x00 }, /* 0B */ | ||
221 | { 0xFF, 0x00 }, /* 0C */ | ||
222 | { 0xFF, 0x00 }, /* 0D */ | ||
223 | { 0xFF, 0x00 }, /* 0E */ | ||
224 | { 0xFF, 0x9F }, /* 0F */ | ||
225 | { 0xFF, 0xFF }, /* 10 */ | ||
226 | { 0xFF, 0xFF }, /* 11 */ | ||
227 | { 0xFF, 0xFF }, /* 12 */ | ||
228 | { 0xFF, 0xFF }, /* 13 */ | ||
229 | { 0xFF, 0xFF }, /* 14 */ | ||
230 | { 0xFF, 0xFF }, /* 15 */ | ||
231 | { 0xFF, 0xFF }, /* 16 */ | ||
232 | { 0xFF, 0xFF }, /* 17 */ | ||
233 | { 0xFF, 0xFF }, /* 18 */ | ||
234 | { 0xFF, 0xFF }, /* 19 */ | ||
235 | { 0xFF, 0xFF }, /* 1A */ | ||
236 | { 0xFF, 0xFF }, /* 1B */ | ||
237 | { 0xFF, 0xFF }, /* 1C */ | ||
238 | { 0xFF, 0xFF }, /* 1D */ | ||
239 | { 0xFF, 0x77 }, /* 1E */ | ||
240 | { 0xFF, 0x77 }, /* 1F */ | ||
241 | { 0xFF, 0x77 }, /* 20 */ | ||
242 | { 0xFF, 0x77 }, /* 21 */ | ||
243 | { 0xFF, 0x77 }, /* 22 */ | ||
244 | { 0xFF, 0x77 }, /* 23 */ | ||
245 | { 0xFF, 0xFF }, /* 24 */ | ||
246 | { 0xFF, 0x7F }, /* 25 */ | ||
247 | { 0xFF, 0x31 }, /* 26 */ | ||
248 | { 0xFF, 0xFF }, /* 27 */ | ||
249 | { 0xFF, 0xFF }, /* 28 */ | ||
250 | { 0xFF, 0xFF }, /* 29 */ | ||
251 | { 0xFF, 0xF7 }, /* 2A */ | ||
252 | { 0xFF, 0x2F }, /* 2B */ | ||
253 | { 0xFF, 0xEF }, /* 2C */ | ||
254 | { 0xFF, 0xFF }, /* 2D */ | ||
255 | { 0xFF, 0xFF }, /* 2E */ | ||
256 | { 0xFF, 0xFF }, /* 2F */ | ||
257 | { 0xFF, 0xFF }, /* 30 */ | ||
258 | { 0xFF, 0xFF }, /* 31 */ | ||
259 | { 0xFF, 0xFF }, /* 32 */ | ||
260 | { 0xFF, 0xFF }, /* 33 */ | ||
261 | { 0xFF, 0xF7 }, /* 34 */ | ||
262 | { 0xFF, 0x2F }, /* 35 */ | ||
263 | { 0xFF, 0xCF }, /* 36 */ | ||
264 | { 0xFF, 0xFF }, /* 37 */ | ||
265 | { 0xFF, 0xFF }, /* 38 */ | ||
266 | { 0xFF, 0xFF }, /* 39 */ | ||
267 | { 0xFF, 0xFF }, /* 3A */ | ||
268 | { 0xFF, 0xFF }, /* 3B */ | ||
269 | { 0xFF, 0xFF }, /* 3C */ | ||
270 | { 0xFF, 0xFF }, /* 3D */ | ||
271 | { 0xFF, 0xF7 }, /* 3E */ | ||
272 | { 0xFF, 0x2F }, /* 3F */ | ||
273 | { 0xFF, 0xCF }, /* 40 */ | ||
274 | { 0xFF, 0xFF }, /* 41 */ | ||
275 | { 0xFF, 0x77 }, /* 42 */ | ||
276 | { 0xFF, 0xFF }, /* 43 */ | ||
277 | { 0xFF, 0xFF }, /* 44 */ | ||
278 | { 0xFF, 0xFF }, /* 45 */ | ||
279 | { 0xFF, 0xFF }, /* 46 */ | ||
280 | { 0xFF, 0xFF }, /* 47 */ | ||
281 | { 0xFF, 0xFF }, /* 48 */ | ||
282 | { 0xFF, 0x0F }, /* 49 */ | ||
283 | { 0xFF, 0xFF }, /* 4A */ | ||
284 | { 0xFF, 0xFF }, /* 4B */ | ||
285 | { 0xFF, 0x3F }, /* 4C */ | ||
286 | { 0xFF, 0x3F }, /* 4D */ | ||
287 | { 0xFF, 0x3F }, /* 4E */ | ||
288 | { 0xFF, 0xFF }, /* 4F */ | ||
289 | { 0xFF, 0x7F }, /* 50 */ | ||
290 | { 0xFF, 0x7F }, /* 51 */ | ||
291 | { 0xFF, 0x0F }, /* 52 */ | ||
292 | { 0xFF, 0x3F }, /* 53 */ | ||
293 | { 0xFF, 0x3F }, /* 54 */ | ||
294 | { 0xFF, 0x3F }, /* 55 */ | ||
295 | { 0xFF, 0xFF }, /* 56 */ | ||
296 | { 0xFF, 0xFF }, /* 57 */ | ||
297 | { 0xFF, 0xBF }, /* 58 */ | ||
298 | { 0xFF, 0x1F }, /* 59 */ | ||
299 | { 0xFF, 0xBF }, /* 5A */ | ||
300 | { 0xFF, 0x1F }, /* 5B */ | ||
301 | { 0xFF, 0xBF }, /* 5C */ | ||
302 | { 0xFF, 0x3F }, /* 5D */ | ||
303 | { 0xFF, 0x3F }, /* 5E */ | ||
304 | { 0xFF, 0x7F }, /* 5F */ | ||
305 | { 0xFF, 0x7F }, /* 60 */ | ||
306 | { 0xFF, 0x47 }, /* 61 */ | ||
307 | { 0xFF, 0x9F }, /* 62 */ | ||
308 | { 0xFF, 0x9F }, /* 63 */ | ||
309 | { 0xFF, 0x9F }, /* 64 */ | ||
310 | { 0xFF, 0x9F }, /* 65 */ | ||
311 | { 0xFF, 0x9F }, /* 66 */ | ||
312 | { 0xFF, 0xBF }, /* 67 */ | ||
313 | { 0xFF, 0xBF }, /* 68 */ | ||
314 | { 0xFF, 0xFF }, /* 69 */ | ||
315 | { 0xFF, 0xFF }, /* 6A */ | ||
316 | { 0xFF, 0x7F }, /* 6B */ | ||
317 | { 0xFF, 0xF7 }, /* 6C */ | ||
318 | { 0xFF, 0xFF }, /* 6D */ | ||
319 | { 0xFF, 0xFF }, /* 6E */ | ||
320 | { 0xFF, 0x1F }, /* 6F */ | ||
321 | { 0xFF, 0xF7 }, /* 70 */ | ||
322 | { 0xFF, 0xFF }, /* 71 */ | ||
323 | { 0xFF, 0xFF }, /* 72 */ | ||
324 | { 0xFF, 0x1F }, /* 73 */ | ||
325 | { 0xFF, 0xF7 }, /* 74 */ | ||
326 | { 0xFF, 0xFF }, /* 75 */ | ||
327 | { 0xFF, 0xFF }, /* 76 */ | ||
328 | { 0xFF, 0x1F }, /* 77 */ | ||
329 | { 0xFF, 0xF7 }, /* 78 */ | ||
330 | { 0xFF, 0xFF }, /* 79 */ | ||
331 | { 0xFF, 0xFF }, /* 7A */ | ||
332 | { 0xFF, 0x1F }, /* 7B */ | ||
333 | { 0xFF, 0xF7 }, /* 7C */ | ||
334 | { 0xFF, 0xFF }, /* 7D */ | ||
335 | { 0xFF, 0xFF }, /* 7E */ | ||
336 | { 0xFF, 0x1F }, /* 7F */ | ||
337 | { 0xFF, 0xF7 }, /* 80 */ | ||
338 | { 0xFF, 0xFF }, /* 81 */ | ||
339 | { 0xFF, 0xFF }, /* 82 */ | ||
340 | { 0xFF, 0x1F }, /* 83 */ | ||
341 | { 0xFF, 0x7F }, /* 84 */ | ||
342 | { 0xFF, 0x0F }, /* 85 */ | ||
343 | { 0xFF, 0xD8 }, /* 86 */ | ||
344 | { 0xFF, 0xFF }, /* 87 */ | ||
345 | { 0xFF, 0xEF }, /* 88 */ | ||
346 | { 0xFF, 0xFE }, /* 89 */ | ||
347 | { 0xFF, 0xFE }, /* 8A */ | ||
348 | { 0xFF, 0xFF }, /* 8B */ | ||
349 | { 0xFF, 0xFF }, /* 8C */ | ||
350 | { 0xFF, 0x3F }, /* 8D */ | ||
351 | { 0xFF, 0xFF }, /* 8E */ | ||
352 | { 0xFF, 0x3F }, /* 8F */ | ||
353 | { 0xFF, 0x8F }, /* 90 */ | ||
354 | { 0xFF, 0xFF }, /* 91 */ | ||
355 | { 0xFF, 0x3F }, /* 92 */ | ||
356 | { 0xFF, 0xFF }, /* 93 */ | ||
357 | { 0xFF, 0xFF }, /* 94 */ | ||
358 | { 0xFF, 0x0F }, /* 95 */ | ||
359 | { 0xFF, 0x3F }, /* 96 */ | ||
360 | { 0xFF, 0x8C }, /* 97 */ | ||
361 | { 0x00, 0x00 }, /* 98 */ | ||
362 | { 0x00, 0x00 }, /* 99 */ | ||
363 | { 0x00, 0x00 }, /* 9A */ | ||
364 | { 0x00, 0x00 }, /* 9B */ | ||
365 | { 0x00, 0x00 }, /* 9C */ | ||
366 | { 0x00, 0x00 }, /* 9D */ | ||
367 | { 0x00, 0x00 }, /* 9E */ | ||
368 | { 0x00, 0x00 }, /* 9F */ | ||
369 | { 0x00, 0x00 }, /* A0 */ | ||
370 | { 0x00, 0x00 }, /* A1 */ | ||
371 | { 0x00, 0x00 }, /* A2 */ | ||
372 | { 0x00, 0x00 }, /* A3 */ | ||
373 | { 0x00, 0x00 }, /* A4 */ | ||
374 | { 0x00, 0x00 }, /* A5 */ | ||
375 | { 0x00, 0x00 }, /* A6 */ | ||
376 | { 0x00, 0x00 }, /* A7 */ | ||
377 | { 0x00, 0x00 }, /* A8 */ | ||
378 | { 0x00, 0x00 }, /* A9 */ | ||
379 | { 0x00, 0x00 }, /* AA */ | ||
380 | { 0x00, 0x00 }, /* AB */ | ||
381 | { 0x00, 0x00 }, /* AC */ | ||
382 | { 0x00, 0x00 }, /* AD */ | ||
383 | { 0x00, 0x00 }, /* AE */ | ||
384 | { 0x00, 0x00 }, /* AF */ | ||
385 | { 0x00, 0x00 }, /* B0 */ | ||
386 | { 0x00, 0x00 }, /* B1 */ | ||
387 | { 0x00, 0x00 }, /* B2 */ | ||
388 | { 0x00, 0x00 }, /* B3 */ | ||
389 | { 0x00, 0x00 }, /* B4 */ | ||
390 | { 0x00, 0x00 }, /* B5 */ | ||
391 | { 0x00, 0x00 }, /* B6 */ | ||
392 | { 0x00, 0x00 }, /* B7 */ | ||
393 | { 0x00, 0x00 }, /* B8 */ | ||
394 | { 0x00, 0x00 }, /* B9 */ | ||
395 | { 0x00, 0x00 }, /* BA */ | ||
396 | { 0x00, 0x00 }, /* BB */ | ||
397 | { 0x00, 0x00 }, /* BC */ | ||
398 | { 0x00, 0x00 }, /* BD */ | ||
399 | { 0x00, 0x00 }, /* BE */ | ||
400 | { 0x00, 0x00 }, /* BF */ | ||
401 | { 0x00, 0x00 }, /* C0 */ | ||
402 | { 0x00, 0x00 }, /* C1 */ | ||
403 | { 0x00, 0x00 }, /* C2 */ | ||
404 | { 0x00, 0x00 }, /* C3 */ | ||
405 | { 0x00, 0x00 }, /* C4 */ | ||
406 | { 0x00, 0x00 }, /* C5 */ | ||
407 | { 0x00, 0x00 }, /* C6 */ | ||
408 | { 0x00, 0x00 }, /* C7 */ | ||
409 | { 0x00, 0x00 }, /* C8 */ | ||
410 | { 0x00, 0x00 }, /* C9 */ | ||
411 | { 0x00, 0x00 }, /* CA */ | ||
412 | { 0x00, 0x00 }, /* CB */ | ||
413 | { 0x00, 0x00 }, /* CC */ | ||
414 | { 0x00, 0x00 }, /* CD */ | ||
415 | { 0x00, 0x00 }, /* CE */ | ||
416 | { 0x00, 0x00 }, /* CF */ | ||
417 | { 0x00, 0x00 }, /* D0 */ | ||
418 | { 0x00, 0x00 }, /* D1 */ | ||
419 | { 0x00, 0x00 }, /* D2 */ | ||
420 | { 0x00, 0x00 }, /* D3 */ | ||
421 | { 0x00, 0x00 }, /* D4 */ | ||
422 | { 0x00, 0x00 }, /* D5 */ | ||
423 | { 0x00, 0x00 }, /* D6 */ | ||
424 | { 0x00, 0x00 }, /* D7 */ | ||
425 | { 0x00, 0x00 }, /* D8 */ | ||
426 | { 0x00, 0x00 }, /* D9 */ | ||
427 | { 0x00, 0x00 }, /* DA */ | ||
428 | { 0x00, 0x00 }, /* DB */ | ||
429 | { 0x00, 0x00 }, /* DC */ | ||
430 | { 0x00, 0x00 }, /* DD */ | ||
431 | { 0x00, 0x00 }, /* DE */ | ||
432 | { 0x00, 0x00 }, /* DF */ | ||
433 | { 0x00, 0x00 }, /* E0 */ | ||
434 | { 0x00, 0x00 }, /* E1 */ | ||
435 | { 0x00, 0x00 }, /* E2 */ | ||
436 | { 0x00, 0x00 }, /* E3 */ | ||
437 | { 0x00, 0x00 }, /* E4 */ | ||
438 | { 0x00, 0x00 }, /* E5 */ | ||
439 | { 0x00, 0x00 }, /* E6 */ | ||
440 | { 0x00, 0x00 }, /* E7 */ | ||
441 | { 0x00, 0x00 }, /* E8 */ | ||
442 | { 0x00, 0x00 }, /* E9 */ | ||
443 | { 0x00, 0x00 }, /* EA */ | ||
444 | { 0x00, 0x00 }, /* EB */ | ||
445 | { 0x00, 0x00 }, /* EC */ | ||
446 | { 0x00, 0x00 }, /* ED */ | ||
447 | { 0x00, 0x00 }, /* EE */ | ||
448 | { 0x00, 0x00 }, /* EF */ | ||
449 | { 0x00, 0x00 }, /* F0 */ | ||
450 | { 0x00, 0x00 }, /* F1 */ | ||
451 | { 0x00, 0x00 }, /* F2 */ | ||
452 | { 0x00, 0x00 }, /* F3 */ | ||
453 | { 0x00, 0x00 }, /* F4 */ | ||
454 | { 0x00, 0x00 }, /* F5 */ | ||
455 | { 0x00, 0x00 }, /* F6 */ | ||
456 | { 0x00, 0x00 }, /* F7 */ | ||
457 | { 0x00, 0x00 }, /* F8 */ | ||
458 | { 0x00, 0x00 }, /* F9 */ | ||
459 | { 0x00, 0x00 }, /* FA */ | ||
460 | { 0x00, 0x00 }, /* FB */ | ||
461 | { 0x00, 0x00 }, /* FC */ | ||
462 | { 0x00, 0x00 }, /* FD */ | ||
463 | { 0x00, 0x00 }, /* FE */ | ||
464 | { 0xFF, 0x00 }, /* FF */ | ||
465 | }; | ||
466 | |||
467 | static bool max98095_readable(struct device *dev, unsigned int reg) | 205 | static bool max98095_readable(struct device *dev, unsigned int reg) |
468 | { | 206 | { |
469 | if (reg >= M98095_REG_CNT) | 207 | switch (reg) { |
470 | return 0; | 208 | case M98095_001_HOST_INT_STS ... M98095_097_PWR_SYS: |
471 | return max98095_access[reg].readable != 0; | 209 | case M98095_0FF_REV_ID: |
210 | return true; | ||
211 | default: | ||
212 | return false; | ||
213 | } | ||
472 | } | 214 | } |
473 | 215 | ||
474 | static bool max98095_volatile(struct device *dev, unsigned int reg) | 216 | static bool max98095_writeable(struct device *dev, unsigned int reg) |
475 | { | 217 | { |
476 | if (reg > M98095_REG_MAX_CACHED) | ||
477 | return 1; | ||
478 | |||
479 | switch (reg) { | 218 | switch (reg) { |
480 | case M98095_000_HOST_DATA: | 219 | case M98095_00F_HOST_CFG ... M98095_097_PWR_SYS: |
481 | case M98095_001_HOST_INT_STS: | 220 | return true; |
482 | case M98095_002_HOST_RSP_STS: | 221 | default: |
483 | case M98095_003_HOST_CMD_STS: | 222 | return false; |
484 | case M98095_004_CODEC_STS: | ||
485 | case M98095_005_DAI1_ALC_STS: | ||
486 | case M98095_006_DAI2_ALC_STS: | ||
487 | case M98095_007_JACK_AUTO_STS: | ||
488 | case M98095_008_JACK_MANUAL_STS: | ||
489 | case M98095_009_JACK_VBAT_STS: | ||
490 | case M98095_00A_ACC_ADC_STS: | ||
491 | case M98095_00B_MIC_NG_AGC_STS: | ||
492 | case M98095_00C_SPK_L_VOLT_STS: | ||
493 | case M98095_00D_SPK_R_VOLT_STS: | ||
494 | case M98095_00E_TEMP_SENSOR_STS: | ||
495 | return 1; | ||
496 | } | 223 | } |
224 | } | ||
497 | 225 | ||
498 | return 0; | 226 | static bool max98095_volatile(struct device *dev, unsigned int reg) |
227 | { | ||
228 | switch (reg) { | ||
229 | case M98095_000_HOST_DATA ... M98095_00E_TEMP_SENSOR_STS: | ||
230 | case M98095_REG_MAX_CACHED + 1 ... M98095_0FF_REV_ID: | ||
231 | return true; | ||
232 | default: | ||
233 | return false; | ||
234 | } | ||
499 | } | 235 | } |
500 | 236 | ||
501 | static const struct regmap_config max98095_regmap = { | 237 | static const struct regmap_config max98095_regmap = { |
@@ -508,6 +244,7 @@ static const struct regmap_config max98095_regmap = { | |||
508 | .cache_type = REGCACHE_RBTREE, | 244 | .cache_type = REGCACHE_RBTREE, |
509 | 245 | ||
510 | .readable_reg = max98095_readable, | 246 | .readable_reg = max98095_readable, |
247 | .writeable_reg = max98095_writeable, | ||
511 | .volatile_reg = max98095_volatile, | 248 | .volatile_reg = max98095_volatile, |
512 | }; | 249 | }; |
513 | 250 | ||