|
10 | 10 | #ifndef __CS43130_H__
|
11 | 11 | #define __CS43130_H__
|
12 | 12 |
|
| 13 | +#include <linux/math.h> |
| 14 | + |
13 | 15 | /* CS43130 registers addresses */
|
14 | 16 | /* all reg address is shifted by a byte for control byte to be LSB */
|
15 | 17 | #define CS43130_FIRSTREG 0x010000
|
@@ -372,97 +374,96 @@ enum cs43130_dai_id {
|
372 | 374 | };
|
373 | 375 |
|
374 | 376 | struct cs43130_clk_gen {
|
375 |
| - unsigned int mclk_int; |
376 |
| - int fs; |
377 |
| - u16 den; |
378 |
| - u16 num; |
| 377 | + unsigned int mclk_int; |
| 378 | + int fs; |
| 379 | + struct u16_fract v; |
379 | 380 | };
|
380 | 381 |
|
381 | 382 | /* frm_size = 16 */
|
382 | 383 | static const struct cs43130_clk_gen cs43130_16_clk_gen[] = {
|
383 |
| - {22579200, 32000, 441, 10,}, |
384 |
| - {22579200, 44100, 32, 1,}, |
385 |
| - {22579200, 48000, 147, 5,}, |
386 |
| - {22579200, 88200, 16, 1,}, |
387 |
| - {22579200, 96000, 147, 10,}, |
388 |
| - {22579200, 176400, 8, 1,}, |
389 |
| - {22579200, 192000, 147, 20,}, |
390 |
| - {22579200, 352800, 4, 1,}, |
391 |
| - {22579200, 384000, 147, 40,}, |
392 |
| - {24576000, 32000, 48, 1,}, |
393 |
| - {24576000, 44100, 5120, 147,}, |
394 |
| - {24576000, 48000, 32, 1,}, |
395 |
| - {24576000, 88200, 2560, 147,}, |
396 |
| - {24576000, 96000, 16, 1,}, |
397 |
| - {24576000, 176400, 1280, 147,}, |
398 |
| - {24576000, 192000, 8, 1,}, |
399 |
| - {24576000, 352800, 640, 147,}, |
400 |
| - {24576000, 384000, 4, 1,}, |
| 384 | + { 22579200, 32000, .v = { 441, 10, }, }, |
| 385 | + { 22579200, 44100, .v = { 32, 1, }, }, |
| 386 | + { 22579200, 48000, .v = { 147, 5, }, }, |
| 387 | + { 22579200, 88200, .v = { 16, 1, }, }, |
| 388 | + { 22579200, 96000, .v = { 147, 10, }, }, |
| 389 | + { 22579200, 176400, .v = { 8, 1, }, }, |
| 390 | + { 22579200, 192000, .v = { 147, 20, }, }, |
| 391 | + { 22579200, 352800, .v = { 4, 1, }, }, |
| 392 | + { 22579200, 384000, .v = { 147, 40, }, }, |
| 393 | + { 24576000, 32000, .v = { 48, 1, }, }, |
| 394 | + { 24576000, 44100, .v = { 5120, 147, }, }, |
| 395 | + { 24576000, 48000, .v = { 32, 1, }, }, |
| 396 | + { 24576000, 88200, .v = { 2560, 147, }, }, |
| 397 | + { 24576000, 96000, .v = { 16, 1, }, }, |
| 398 | + { 24576000, 176400, .v = { 1280, 147, }, }, |
| 399 | + { 24576000, 192000, .v = { 8, 1, }, }, |
| 400 | + { 24576000, 352800, .v = { 640, 147, }, }, |
| 401 | + { 24576000, 384000, .v = { 4, 1, }, }, |
401 | 402 | };
|
402 | 403 |
|
403 | 404 | /* frm_size = 32 */
|
404 | 405 | static const struct cs43130_clk_gen cs43130_32_clk_gen[] = {
|
405 |
| - {22579200, 32000, 441, 20,}, |
406 |
| - {22579200, 44100, 16, 1,}, |
407 |
| - {22579200, 48000, 147, 10,}, |
408 |
| - {22579200, 88200, 8, 1,}, |
409 |
| - {22579200, 96000, 147, 20,}, |
410 |
| - {22579200, 176400, 4, 1,}, |
411 |
| - {22579200, 192000, 147, 40,}, |
412 |
| - {22579200, 352800, 2, 1,}, |
413 |
| - {22579200, 384000, 147, 80,}, |
414 |
| - {24576000, 32000, 24, 1,}, |
415 |
| - {24576000, 44100, 2560, 147,}, |
416 |
| - {24576000, 48000, 16, 1,}, |
417 |
| - {24576000, 88200, 1280, 147,}, |
418 |
| - {24576000, 96000, 8, 1,}, |
419 |
| - {24576000, 176400, 640, 147,}, |
420 |
| - {24576000, 192000, 4, 1,}, |
421 |
| - {24576000, 352800, 320, 147,}, |
422 |
| - {24576000, 384000, 2, 1,}, |
| 406 | + { 22579200, 32000, .v = { 441, 20, }, }, |
| 407 | + { 22579200, 44100, .v = { 16, 1, }, }, |
| 408 | + { 22579200, 48000, .v = { 147, 10, }, }, |
| 409 | + { 22579200, 88200, .v = { 8, 1, }, }, |
| 410 | + { 22579200, 96000, .v = { 147, 20, }, }, |
| 411 | + { 22579200, 176400, .v = { 4, 1, }, }, |
| 412 | + { 22579200, 192000, .v = { 147, 40, }, }, |
| 413 | + { 22579200, 352800, .v = { 2, 1, }, }, |
| 414 | + { 22579200, 384000, .v = { 147, 80, }, }, |
| 415 | + { 24576000, 32000, .v = { 24, 1, }, }, |
| 416 | + { 24576000, 44100, .v = { 2560, 147, }, }, |
| 417 | + { 24576000, 48000, .v = { 16, 1, }, }, |
| 418 | + { 24576000, 88200, .v = { 1280, 147, }, }, |
| 419 | + { 24576000, 96000, .v = { 8, 1, }, }, |
| 420 | + { 24576000, 176400, .v = { 640, 147, }, }, |
| 421 | + { 24576000, 192000, .v = { 4, 1, }, }, |
| 422 | + { 24576000, 352800, .v = { 320, 147, }, }, |
| 423 | + { 24576000, 384000, .v = { 2, 1, }, }, |
423 | 424 | };
|
424 | 425 |
|
425 | 426 | /* frm_size = 48 */
|
426 | 427 | static const struct cs43130_clk_gen cs43130_48_clk_gen[] = {
|
427 |
| - {22579200, 32000, 147, 100,}, |
428 |
| - {22579200, 44100, 32, 3,}, |
429 |
| - {22579200, 48000, 49, 5,}, |
430 |
| - {22579200, 88200, 16, 3,}, |
431 |
| - {22579200, 96000, 49, 10,}, |
432 |
| - {22579200, 176400, 8, 3,}, |
433 |
| - {22579200, 192000, 49, 20,}, |
434 |
| - {22579200, 352800, 4, 3,}, |
435 |
| - {22579200, 384000, 49, 40,}, |
436 |
| - {24576000, 32000, 16, 1,}, |
437 |
| - {24576000, 44100, 5120, 441,}, |
438 |
| - {24576000, 48000, 32, 3,}, |
439 |
| - {24576000, 88200, 2560, 441,}, |
440 |
| - {24576000, 96000, 16, 3,}, |
441 |
| - {24576000, 176400, 1280, 441,}, |
442 |
| - {24576000, 192000, 8, 3,}, |
443 |
| - {24576000, 352800, 640, 441,}, |
444 |
| - {24576000, 384000, 4, 3,}, |
| 428 | + { 22579200, 32000, .v = { 147, 100, }, }, |
| 429 | + { 22579200, 44100, .v = { 32, 3, }, }, |
| 430 | + { 22579200, 48000, .v = { 49, 5, }, }, |
| 431 | + { 22579200, 88200, .v = { 16, 3, }, }, |
| 432 | + { 22579200, 96000, .v = { 49, 10, }, }, |
| 433 | + { 22579200, 176400, .v = { 8, 3, }, }, |
| 434 | + { 22579200, 192000, .v = { 49, 20, }, }, |
| 435 | + { 22579200, 352800, .v = { 4, 3, }, }, |
| 436 | + { 22579200, 384000, .v = { 49, 40, }, }, |
| 437 | + { 24576000, 32000, .v = { 16, 1, }, }, |
| 438 | + { 24576000, 44100, .v = { 5120, 441, }, }, |
| 439 | + { 24576000, 48000, .v = { 32, 3, }, }, |
| 440 | + { 24576000, 88200, .v = { 2560, 441, }, }, |
| 441 | + { 24576000, 96000, .v = { 16, 3, }, }, |
| 442 | + { 24576000, 176400, .v = { 1280, 441, }, }, |
| 443 | + { 24576000, 192000, .v = { 8, 3, }, }, |
| 444 | + { 24576000, 352800, .v = { 640, 441, }, }, |
| 445 | + { 24576000, 384000, .v = { 4, 3, }, }, |
445 | 446 | };
|
446 | 447 |
|
447 | 448 | /* frm_size = 64 */
|
448 | 449 | static const struct cs43130_clk_gen cs43130_64_clk_gen[] = {
|
449 |
| - {22579200, 32000, 441, 40,}, |
450 |
| - {22579200, 44100, 8, 1,}, |
451 |
| - {22579200, 48000, 147, 20,}, |
452 |
| - {22579200, 88200, 4, 1,}, |
453 |
| - {22579200, 96000, 147, 40,}, |
454 |
| - {22579200, 176400, 2, 1,}, |
455 |
| - {22579200, 192000, 147, 80,}, |
456 |
| - {22579200, 352800, 1, 1,}, |
457 |
| - {24576000, 32000, 12, 1,}, |
458 |
| - {24576000, 44100, 1280, 147,}, |
459 |
| - {24576000, 48000, 8, 1,}, |
460 |
| - {24576000, 88200, 640, 147,}, |
461 |
| - {24576000, 96000, 4, 1,}, |
462 |
| - {24576000, 176400, 320, 147,}, |
463 |
| - {24576000, 192000, 2, 1,}, |
464 |
| - {24576000, 352800, 160, 147,}, |
465 |
| - {24576000, 384000, 1, 1,}, |
| 450 | + { 22579200, 32000, .v = { 441, 40, }, }, |
| 451 | + { 22579200, 44100, .v = { 8, 1, }, }, |
| 452 | + { 22579200, 48000, .v = { 147, 20, }, }, |
| 453 | + { 22579200, 88200, .v = { 4, 1, }, }, |
| 454 | + { 22579200, 96000, .v = { 147, 40, }, }, |
| 455 | + { 22579200, 176400, .v = { 2, 1, }, }, |
| 456 | + { 22579200, 192000, .v = { 147, 80, }, }, |
| 457 | + { 22579200, 352800, .v = { 1, 1, }, }, |
| 458 | + { 24576000, 32000, .v = { 12, 1, }, }, |
| 459 | + { 24576000, 44100, .v = { 1280, 147, }, }, |
| 460 | + { 24576000, 48000, .v = { 8, 1, }, }, |
| 461 | + { 24576000, 88200, .v = { 640, 147, }, }, |
| 462 | + { 24576000, 96000, .v = { 4, 1, }, }, |
| 463 | + { 24576000, 176400, .v = { 320, 147, }, }, |
| 464 | + { 24576000, 192000, .v = { 2, 1, }, }, |
| 465 | + { 24576000, 352800, .v = { 160, 147, }, }, |
| 466 | + { 24576000, 384000, .v = { 1, 1, }, }, |
466 | 467 | };
|
467 | 468 |
|
468 | 469 | struct cs43130_bitwidth_map {
|
|
0 commit comments