diff options
author | Mark Brown <broonie@linaro.org> | 2013-06-17 12:20:14 -0400 |
---|---|---|
committer | Mark Brown <broonie@linaro.org> | 2013-06-17 12:20:14 -0400 |
commit | 9912b30f95e22d5722abc225c1c3784a51643aef (patch) | |
tree | f73c69fd2406c63743716b2f8ff4937a5cb340cd | |
parent | e768f4e12f6aaa991fb07e9ac05073bd8cb280cd (diff) | |
parent | 7c470373e097822ce6ca7bbac44b3afec0e7c1f8 (diff) |
Merge remote-tracking branch 'asoc/topic/arizona' into asoc-next
-rw-r--r-- | Documentation/devicetree/bindings/mfd/arizona.txt | 62 | ||||
-rw-r--r-- | drivers/mfd/arizona-core.c | 234 | ||||
-rw-r--r-- | drivers/mfd/arizona-i2c.c | 10 | ||||
-rw-r--r-- | drivers/mfd/arizona-spi.c | 10 | ||||
-rw-r--r-- | drivers/mfd/arizona.h | 12 | ||||
-rw-r--r-- | drivers/mfd/wm5102-tables.c | 9 | ||||
-rw-r--r-- | drivers/mfd/wm5110-tables.c | 8 | ||||
-rw-r--r-- | include/linux/mfd/arizona/core.h | 2 | ||||
-rw-r--r-- | include/linux/mfd/arizona/pdata.h | 2 | ||||
-rw-r--r-- | include/linux/mfd/arizona/registers.h | 47 | ||||
-rw-r--r-- | sound/soc/codecs/arizona.c | 7 | ||||
-rw-r--r-- | sound/soc/codecs/arizona.h | 3 | ||||
-rw-r--r-- | sound/soc/codecs/wm5102.c | 205 | ||||
-rw-r--r-- | sound/soc/codecs/wm5110.c | 192 |
14 files changed, 762 insertions, 41 deletions
diff --git a/Documentation/devicetree/bindings/mfd/arizona.txt b/Documentation/devicetree/bindings/mfd/arizona.txt new file mode 100644 index 000000000000..0e295c9d8937 --- /dev/null +++ b/Documentation/devicetree/bindings/mfd/arizona.txt | |||
@@ -0,0 +1,62 @@ | |||
1 | Wolfson Arizona class audio SoCs | ||
2 | |||
3 | These devices are audio SoCs with extensive digital capabilites and a range | ||
4 | of analogue I/O. | ||
5 | |||
6 | Required properties: | ||
7 | |||
8 | - compatible : one of the following chip-specific strings: | ||
9 | "wlf,wm5102" | ||
10 | "wlf,wm5110" | ||
11 | - reg : I2C slave address when connected using I2C, chip select number when | ||
12 | using SPI. | ||
13 | |||
14 | - interrupts : The interrupt line the /IRQ signal for the device is | ||
15 | connected to. | ||
16 | - interrupt-controller : Arizona class devices contain interrupt controllers | ||
17 | and may provide interrupt services to other devices. | ||
18 | - interrupt-parent : The parent interrupt controller. | ||
19 | - #interrupt-cells: the number of cells to describe an IRQ, this should be 2. | ||
20 | The first cell is the IRQ number. | ||
21 | The second cell is the flags, encoded as the trigger masks from | ||
22 | Documentation/devicetree/bindings/interrupts.txt | ||
23 | |||
24 | - gpio-controller : Indicates this device is a GPIO controller. | ||
25 | - #gpio-cells : Must be 2. The first cell is the pin number and the | ||
26 | second cell is used to specify optional parameters (currently unused). | ||
27 | |||
28 | - AVDD1-supply, DBVDD1-supply, DBVDD2-supply, DBVDD3-supply, CPVDD-supply, | ||
29 | SPKVDDL-supply, SPKVDDR-supply : power supplies for the device, as covered | ||
30 | in Documentation/devicetree/bindings/regulator/regulator.txt | ||
31 | |||
32 | Optional properties: | ||
33 | |||
34 | - wlf,reset : GPIO specifier for the GPIO controlling /RESET | ||
35 | - wlf,ldoena : GPIO specifier for the GPIO controlling LDOENA | ||
36 | |||
37 | - wlf,gpio-defaults : A list of GPIO configuration register values. If | ||
38 | absent, no configuration of these registers is performed. If any | ||
39 | entry has a value that is out of range for a 16 bit register then | ||
40 | the chip default will be used. If present exactly five values must | ||
41 | be specified. | ||
42 | |||
43 | Example: | ||
44 | |||
45 | codec: wm5102@1a { | ||
46 | compatible = "wlf,wm5102"; | ||
47 | reg = <0x1a>; | ||
48 | interrupts = <347>; | ||
49 | #interrupt-cells = <2>; | ||
50 | interrupt-parent = <&gic>; | ||
51 | |||
52 | gpio-controller; | ||
53 | #gpio-cells = <2>; | ||
54 | |||
55 | wlf,gpio-defaults = < | ||
56 | 0x00000000, /* AIF1TXLRCLK */ | ||
57 | 0xffffffff, | ||
58 | 0xffffffff, | ||
59 | 0xffffffff, | ||
60 | 0xffffffff, | ||
61 | >; | ||
62 | }; | ||
diff --git a/drivers/mfd/arizona-core.c b/drivers/mfd/arizona-core.c index 6ab03043fd60..74b4481754fd 100644 --- a/drivers/mfd/arizona-core.c +++ b/drivers/mfd/arizona-core.c | |||
@@ -16,9 +16,13 @@ | |||
16 | #include <linux/interrupt.h> | 16 | #include <linux/interrupt.h> |
17 | #include <linux/mfd/core.h> | 17 | #include <linux/mfd/core.h> |
18 | #include <linux/module.h> | 18 | #include <linux/module.h> |
19 | #include <linux/of.h> | ||
20 | #include <linux/of_device.h> | ||
21 | #include <linux/of_gpio.h> | ||
19 | #include <linux/pm_runtime.h> | 22 | #include <linux/pm_runtime.h> |
20 | #include <linux/regmap.h> | 23 | #include <linux/regmap.h> |
21 | #include <linux/regulator/consumer.h> | 24 | #include <linux/regulator/consumer.h> |
25 | #include <linux/regulator/machine.h> | ||
22 | #include <linux/slab.h> | 26 | #include <linux/slab.h> |
23 | 27 | ||
24 | #include <linux/mfd/arizona/core.h> | 28 | #include <linux/mfd/arizona/core.h> |
@@ -344,6 +348,17 @@ static int arizona_runtime_resume(struct device *dev) | |||
344 | 348 | ||
345 | switch (arizona->type) { | 349 | switch (arizona->type) { |
346 | case WM5102: | 350 | case WM5102: |
351 | if (arizona->external_dcvdd) { | ||
352 | ret = regmap_update_bits(arizona->regmap, | ||
353 | ARIZONA_ISOLATION_CONTROL, | ||
354 | ARIZONA_ISOLATE_DCVDD1, 0); | ||
355 | if (ret != 0) { | ||
356 | dev_err(arizona->dev, | ||
357 | "Failed to connect DCVDD: %d\n", ret); | ||
358 | goto err; | ||
359 | } | ||
360 | } | ||
361 | |||
347 | ret = wm5102_patch(arizona); | 362 | ret = wm5102_patch(arizona); |
348 | if (ret != 0) { | 363 | if (ret != 0) { |
349 | dev_err(arizona->dev, "Failed to apply patch: %d\n", | 364 | dev_err(arizona->dev, "Failed to apply patch: %d\n", |
@@ -365,6 +380,28 @@ static int arizona_runtime_resume(struct device *dev) | |||
365 | goto err; | 380 | goto err; |
366 | } | 381 | } |
367 | 382 | ||
383 | if (arizona->external_dcvdd) { | ||
384 | ret = regmap_update_bits(arizona->regmap, | ||
385 | ARIZONA_ISOLATION_CONTROL, | ||
386 | ARIZONA_ISOLATE_DCVDD1, 0); | ||
387 | if (ret != 0) { | ||
388 | dev_err(arizona->dev, | ||
389 | "Failed to connect DCVDD: %d\n", ret); | ||
390 | goto err; | ||
391 | } | ||
392 | } | ||
393 | break; | ||
394 | } | ||
395 | |||
396 | switch (arizona->type) { | ||
397 | case WM5102: | ||
398 | ret = wm5102_patch(arizona); | ||
399 | if (ret != 0) { | ||
400 | dev_err(arizona->dev, "Failed to apply patch: %d\n", | ||
401 | ret); | ||
402 | goto err; | ||
403 | } | ||
404 | default: | ||
368 | break; | 405 | break; |
369 | } | 406 | } |
370 | 407 | ||
@@ -385,9 +422,22 @@ err: | |||
385 | static int arizona_runtime_suspend(struct device *dev) | 422 | static int arizona_runtime_suspend(struct device *dev) |
386 | { | 423 | { |
387 | struct arizona *arizona = dev_get_drvdata(dev); | 424 | struct arizona *arizona = dev_get_drvdata(dev); |
425 | int ret; | ||
388 | 426 | ||
389 | dev_dbg(arizona->dev, "Entering AoD mode\n"); | 427 | dev_dbg(arizona->dev, "Entering AoD mode\n"); |
390 | 428 | ||
429 | if (arizona->external_dcvdd) { | ||
430 | ret = regmap_update_bits(arizona->regmap, | ||
431 | ARIZONA_ISOLATION_CONTROL, | ||
432 | ARIZONA_ISOLATE_DCVDD1, | ||
433 | ARIZONA_ISOLATE_DCVDD1); | ||
434 | if (ret != 0) { | ||
435 | dev_err(arizona->dev, "Failed to isolate DCVDD: %d\n", | ||
436 | ret); | ||
437 | return ret; | ||
438 | } | ||
439 | } | ||
440 | |||
391 | regulator_disable(arizona->dcvdd); | 441 | regulator_disable(arizona->dcvdd); |
392 | regcache_cache_only(arizona->regmap, true); | 442 | regcache_cache_only(arizona->regmap, true); |
393 | regcache_mark_dirty(arizona->regmap); | 443 | regcache_mark_dirty(arizona->regmap); |
@@ -397,6 +447,26 @@ static int arizona_runtime_suspend(struct device *dev) | |||
397 | #endif | 447 | #endif |
398 | 448 | ||
399 | #ifdef CONFIG_PM_SLEEP | 449 | #ifdef CONFIG_PM_SLEEP |
450 | static int arizona_suspend(struct device *dev) | ||
451 | { | ||
452 | struct arizona *arizona = dev_get_drvdata(dev); | ||
453 | |||
454 | dev_dbg(arizona->dev, "Suspend, disabling IRQ\n"); | ||
455 | disable_irq(arizona->irq); | ||
456 | |||
457 | return 0; | ||
458 | } | ||
459 | |||
460 | static int arizona_suspend_late(struct device *dev) | ||
461 | { | ||
462 | struct arizona *arizona = dev_get_drvdata(dev); | ||
463 | |||
464 | dev_dbg(arizona->dev, "Late suspend, reenabling IRQ\n"); | ||
465 | enable_irq(arizona->irq); | ||
466 | |||
467 | return 0; | ||
468 | } | ||
469 | |||
400 | static int arizona_resume_noirq(struct device *dev) | 470 | static int arizona_resume_noirq(struct device *dev) |
401 | { | 471 | { |
402 | struct arizona *arizona = dev_get_drvdata(dev); | 472 | struct arizona *arizona = dev_get_drvdata(dev); |
@@ -422,13 +492,78 @@ const struct dev_pm_ops arizona_pm_ops = { | |||
422 | SET_RUNTIME_PM_OPS(arizona_runtime_suspend, | 492 | SET_RUNTIME_PM_OPS(arizona_runtime_suspend, |
423 | arizona_runtime_resume, | 493 | arizona_runtime_resume, |
424 | NULL) | 494 | NULL) |
425 | SET_SYSTEM_SLEEP_PM_OPS(NULL, arizona_resume) | 495 | SET_SYSTEM_SLEEP_PM_OPS(arizona_suspend, arizona_resume) |
426 | #ifdef CONFIG_PM_SLEEP | 496 | #ifdef CONFIG_PM_SLEEP |
497 | .suspend_late = arizona_suspend_late, | ||
427 | .resume_noirq = arizona_resume_noirq, | 498 | .resume_noirq = arizona_resume_noirq, |
428 | #endif | 499 | #endif |
429 | }; | 500 | }; |
430 | EXPORT_SYMBOL_GPL(arizona_pm_ops); | 501 | EXPORT_SYMBOL_GPL(arizona_pm_ops); |
431 | 502 | ||
503 | #ifdef CONFIG_OF | ||
504 | int arizona_of_get_type(struct device *dev) | ||
505 | { | ||
506 | const struct of_device_id *id = of_match_device(arizona_of_match, dev); | ||
507 | |||
508 | if (id) | ||
509 | return (int)id->data; | ||
510 | else | ||
511 | return 0; | ||
512 | } | ||
513 | EXPORT_SYMBOL_GPL(arizona_of_get_type); | ||
514 | |||
515 | static int arizona_of_get_core_pdata(struct arizona *arizona) | ||
516 | { | ||
517 | int ret, i; | ||
518 | |||
519 | arizona->pdata.reset = of_get_named_gpio(arizona->dev->of_node, | ||
520 | "wlf,reset", 0); | ||
521 | if (arizona->pdata.reset < 0) | ||
522 | arizona->pdata.reset = 0; | ||
523 | |||
524 | arizona->pdata.ldoena = of_get_named_gpio(arizona->dev->of_node, | ||
525 | "wlf,ldoena", 0); | ||
526 | if (arizona->pdata.ldoena < 0) | ||
527 | arizona->pdata.ldoena = 0; | ||
528 | |||
529 | ret = of_property_read_u32_array(arizona->dev->of_node, | ||
530 | "wlf,gpio-defaults", | ||
531 | arizona->pdata.gpio_defaults, | ||
532 | ARRAY_SIZE(arizona->pdata.gpio_defaults)); | ||
533 | if (ret >= 0) { | ||
534 | /* | ||
535 | * All values are literal except out of range values | ||
536 | * which are chip default, translate into platform | ||
537 | * data which uses 0 as chip default and out of range | ||
538 | * as zero. | ||
539 | */ | ||
540 | for (i = 0; i < ARRAY_SIZE(arizona->pdata.gpio_defaults); i++) { | ||
541 | if (arizona->pdata.gpio_defaults[i] > 0xffff) | ||
542 | arizona->pdata.gpio_defaults[i] = 0; | ||
543 | if (arizona->pdata.gpio_defaults[i] == 0) | ||
544 | arizona->pdata.gpio_defaults[i] = 0x10000; | ||
545 | } | ||
546 | } else { | ||
547 | dev_err(arizona->dev, "Failed to parse GPIO defaults: %d\n", | ||
548 | ret); | ||
549 | } | ||
550 | |||
551 | return 0; | ||
552 | } | ||
553 | |||
554 | const struct of_device_id arizona_of_match[] = { | ||
555 | { .compatible = "wlf,wm5102", .data = (void *)WM5102 }, | ||
556 | { .compatible = "wlf,wm5110", .data = (void *)WM5110 }, | ||
557 | {}, | ||
558 | }; | ||
559 | EXPORT_SYMBOL_GPL(arizona_of_match); | ||
560 | #else | ||
561 | static inline int arizona_of_get_core_pdata(struct arizona *arizona) | ||
562 | { | ||
563 | return 0; | ||
564 | } | ||
565 | #endif | ||
566 | |||
432 | static struct mfd_cell early_devs[] = { | 567 | static struct mfd_cell early_devs[] = { |
433 | { .name = "arizona-ldo1" }, | 568 | { .name = "arizona-ldo1" }, |
434 | }; | 569 | }; |
@@ -462,6 +597,8 @@ int arizona_dev_init(struct arizona *arizona) | |||
462 | dev_set_drvdata(arizona->dev, arizona); | 597 | dev_set_drvdata(arizona->dev, arizona); |
463 | mutex_init(&arizona->clk_lock); | 598 | mutex_init(&arizona->clk_lock); |
464 | 599 | ||
600 | arizona_of_get_core_pdata(arizona); | ||
601 | |||
465 | if (dev_get_platdata(arizona->dev)) | 602 | if (dev_get_platdata(arizona->dev)) |
466 | memcpy(&arizona->pdata, dev_get_platdata(arizona->dev), | 603 | memcpy(&arizona->pdata, dev_get_platdata(arizona->dev), |
467 | sizeof(arizona->pdata)); | 604 | sizeof(arizona->pdata)); |
@@ -536,51 +673,22 @@ int arizona_dev_init(struct arizona *arizona) | |||
536 | 673 | ||
537 | regcache_cache_only(arizona->regmap, false); | 674 | regcache_cache_only(arizona->regmap, false); |
538 | 675 | ||
676 | /* Verify that this is a chip we know about */ | ||
539 | ret = regmap_read(arizona->regmap, ARIZONA_SOFTWARE_RESET, ®); | 677 | ret = regmap_read(arizona->regmap, ARIZONA_SOFTWARE_RESET, ®); |
540 | if (ret != 0) { | 678 | if (ret != 0) { |
541 | dev_err(dev, "Failed to read ID register: %d\n", ret); | 679 | dev_err(dev, "Failed to read ID register: %d\n", ret); |
542 | goto err_reset; | 680 | goto err_reset; |
543 | } | 681 | } |
544 | 682 | ||
545 | ret = regmap_read(arizona->regmap, ARIZONA_DEVICE_REVISION, | ||
546 | &arizona->rev); | ||
547 | if (ret != 0) { | ||
548 | dev_err(dev, "Failed to read revision register: %d\n", ret); | ||
549 | goto err_reset; | ||
550 | } | ||
551 | arizona->rev &= ARIZONA_DEVICE_REVISION_MASK; | ||
552 | |||
553 | switch (reg) { | 683 | switch (reg) { |
554 | #ifdef CONFIG_MFD_WM5102 | ||
555 | case 0x5102: | 684 | case 0x5102: |
556 | type_name = "WM5102"; | ||
557 | if (arizona->type != WM5102) { | ||
558 | dev_err(arizona->dev, "WM5102 registered as %d\n", | ||
559 | arizona->type); | ||
560 | arizona->type = WM5102; | ||
561 | } | ||
562 | apply_patch = wm5102_patch; | ||
563 | arizona->rev &= 0x7; | ||
564 | break; | ||
565 | #endif | ||
566 | #ifdef CONFIG_MFD_WM5110 | ||
567 | case 0x5110: | 685 | case 0x5110: |
568 | type_name = "WM5110"; | ||
569 | if (arizona->type != WM5110) { | ||
570 | dev_err(arizona->dev, "WM5110 registered as %d\n", | ||
571 | arizona->type); | ||
572 | arizona->type = WM5110; | ||
573 | } | ||
574 | apply_patch = wm5110_patch; | ||
575 | break; | 686 | break; |
576 | #endif | ||
577 | default: | 687 | default: |
578 | dev_err(arizona->dev, "Unknown device ID %x\n", reg); | 688 | dev_err(arizona->dev, "Unknown device ID: %x\n", reg); |
579 | goto err_reset; | 689 | goto err_reset; |
580 | } | 690 | } |
581 | 691 | ||
582 | dev_info(dev, "%s revision %c\n", type_name, arizona->rev + 'A'); | ||
583 | |||
584 | /* If we have a /RESET GPIO we'll already be reset */ | 692 | /* If we have a /RESET GPIO we'll already be reset */ |
585 | if (!arizona->pdata.reset) { | 693 | if (!arizona->pdata.reset) { |
586 | regcache_mark_dirty(arizona->regmap); | 694 | regcache_mark_dirty(arizona->regmap); |
@@ -600,6 +708,7 @@ int arizona_dev_init(struct arizona *arizona) | |||
600 | } | 708 | } |
601 | } | 709 | } |
602 | 710 | ||
711 | /* Ensure device startup is complete */ | ||
603 | switch (arizona->type) { | 712 | switch (arizona->type) { |
604 | case WM5102: | 713 | case WM5102: |
605 | ret = regmap_read(arizona->regmap, 0x19, &val); | 714 | ret = regmap_read(arizona->regmap, 0x19, &val); |
@@ -620,6 +729,52 @@ int arizona_dev_init(struct arizona *arizona) | |||
620 | break; | 729 | break; |
621 | } | 730 | } |
622 | 731 | ||
732 | /* Read the device ID information & do device specific stuff */ | ||
733 | ret = regmap_read(arizona->regmap, ARIZONA_SOFTWARE_RESET, ®); | ||
734 | if (ret != 0) { | ||
735 | dev_err(dev, "Failed to read ID register: %d\n", ret); | ||
736 | goto err_reset; | ||
737 | } | ||
738 | |||
739 | ret = regmap_read(arizona->regmap, ARIZONA_DEVICE_REVISION, | ||
740 | &arizona->rev); | ||
741 | if (ret != 0) { | ||
742 | dev_err(dev, "Failed to read revision register: %d\n", ret); | ||
743 | goto err_reset; | ||
744 | } | ||
745 | arizona->rev &= ARIZONA_DEVICE_REVISION_MASK; | ||
746 | |||
747 | switch (reg) { | ||
748 | #ifdef CONFIG_MFD_WM5102 | ||
749 | case 0x5102: | ||
750 | type_name = "WM5102"; | ||
751 | if (arizona->type != WM5102) { | ||
752 | dev_err(arizona->dev, "WM5102 registered as %d\n", | ||
753 | arizona->type); | ||
754 | arizona->type = WM5102; | ||
755 | } | ||
756 | apply_patch = wm5102_patch; | ||
757 | arizona->rev &= 0x7; | ||
758 | break; | ||
759 | #endif | ||
760 | #ifdef CONFIG_MFD_WM5110 | ||
761 | case 0x5110: | ||
762 | type_name = "WM5110"; | ||
763 | if (arizona->type != WM5110) { | ||
764 | dev_err(arizona->dev, "WM5110 registered as %d\n", | ||
765 | arizona->type); | ||
766 | arizona->type = WM5110; | ||
767 | } | ||
768 | apply_patch = wm5110_patch; | ||
769 | break; | ||
770 | #endif | ||
771 | default: | ||
772 | dev_err(arizona->dev, "Unknown device ID %x\n", reg); | ||
773 | goto err_reset; | ||
774 | } | ||
775 | |||
776 | dev_info(dev, "%s revision %c\n", type_name, arizona->rev + 'A'); | ||
777 | |||
623 | if (apply_patch) { | 778 | if (apply_patch) { |
624 | ret = apply_patch(arizona); | 779 | ret = apply_patch(arizona); |
625 | if (ret != 0) { | 780 | if (ret != 0) { |
@@ -651,6 +806,14 @@ int arizona_dev_init(struct arizona *arizona) | |||
651 | arizona->pdata.gpio_defaults[i]); | 806 | arizona->pdata.gpio_defaults[i]); |
652 | } | 807 | } |
653 | 808 | ||
809 | /* | ||
810 | * LDO1 can only be used to supply DCVDD so if it has no | ||
811 | * consumers then DCVDD is supplied externally. | ||
812 | */ | ||
813 | if (arizona->pdata.ldo1 && | ||
814 | arizona->pdata.ldo1->num_consumer_supplies == 0) | ||
815 | arizona->external_dcvdd = true; | ||
816 | |||
654 | pm_runtime_set_autosuspend_delay(arizona->dev, 100); | 817 | pm_runtime_set_autosuspend_delay(arizona->dev, 100); |
655 | pm_runtime_use_autosuspend(arizona->dev); | 818 | pm_runtime_use_autosuspend(arizona->dev); |
656 | pm_runtime_enable(arizona->dev); | 819 | pm_runtime_enable(arizona->dev); |
@@ -697,7 +860,7 @@ int arizona_dev_init(struct arizona *arizona) | |||
697 | if (arizona->pdata.micbias[i].discharge) | 860 | if (arizona->pdata.micbias[i].discharge) |
698 | val |= ARIZONA_MICB1_DISCH; | 861 | val |= ARIZONA_MICB1_DISCH; |
699 | 862 | ||
700 | if (arizona->pdata.micbias[i].fast_start) | 863 | if (arizona->pdata.micbias[i].soft_start) |
701 | val |= ARIZONA_MICB1_RATE; | 864 | val |= ARIZONA_MICB1_RATE; |
702 | 865 | ||
703 | if (arizona->pdata.micbias[i].bypass) | 866 | if (arizona->pdata.micbias[i].bypass) |
@@ -809,6 +972,11 @@ int arizona_dev_exit(struct arizona *arizona) | |||
809 | arizona_free_irq(arizona, ARIZONA_IRQ_CLKGEN_ERR, arizona); | 972 | arizona_free_irq(arizona, ARIZONA_IRQ_CLKGEN_ERR, arizona); |
810 | pm_runtime_disable(arizona->dev); | 973 | pm_runtime_disable(arizona->dev); |
811 | arizona_irq_exit(arizona); | 974 | arizona_irq_exit(arizona); |
975 | if (arizona->pdata.reset) | ||
976 | gpio_set_value_cansleep(arizona->pdata.reset, 0); | ||
977 | regulator_disable(arizona->dcvdd); | ||
978 | regulator_bulk_disable(ARRAY_SIZE(arizona->core_supplies), | ||
979 | arizona->core_supplies); | ||
812 | return 0; | 980 | return 0; |
813 | } | 981 | } |
814 | EXPORT_SYMBOL_GPL(arizona_dev_exit); | 982 | EXPORT_SYMBOL_GPL(arizona_dev_exit); |
diff --git a/drivers/mfd/arizona-i2c.c b/drivers/mfd/arizona-i2c.c index 44a1bb969841..deb267ebf84e 100644 --- a/drivers/mfd/arizona-i2c.c +++ b/drivers/mfd/arizona-i2c.c | |||
@@ -27,9 +27,14 @@ static int arizona_i2c_probe(struct i2c_client *i2c, | |||
27 | { | 27 | { |
28 | struct arizona *arizona; | 28 | struct arizona *arizona; |
29 | const struct regmap_config *regmap_config; | 29 | const struct regmap_config *regmap_config; |
30 | int ret; | 30 | int ret, type; |
31 | 31 | ||
32 | switch (id->driver_data) { | 32 | if (i2c->dev.of_node) |
33 | type = arizona_of_get_type(&i2c->dev); | ||
34 | else | ||
35 | type = id->driver_data; | ||
36 | |||
37 | switch (type) { | ||
33 | #ifdef CONFIG_MFD_WM5102 | 38 | #ifdef CONFIG_MFD_WM5102 |
34 | case WM5102: | 39 | case WM5102: |
35 | regmap_config = &wm5102_i2c_regmap; | 40 | regmap_config = &wm5102_i2c_regmap; |
@@ -84,6 +89,7 @@ static struct i2c_driver arizona_i2c_driver = { | |||
84 | .name = "arizona", | 89 | .name = "arizona", |
85 | .owner = THIS_MODULE, | 90 | .owner = THIS_MODULE, |
86 | .pm = &arizona_pm_ops, | 91 | .pm = &arizona_pm_ops, |
92 | .of_match_table = of_match_ptr(arizona_of_match), | ||
87 | }, | 93 | }, |
88 | .probe = arizona_i2c_probe, | 94 | .probe = arizona_i2c_probe, |
89 | .remove = arizona_i2c_remove, | 95 | .remove = arizona_i2c_remove, |
diff --git a/drivers/mfd/arizona-spi.c b/drivers/mfd/arizona-spi.c index b57e642d2b4a..47be7b35b5c5 100644 --- a/drivers/mfd/arizona-spi.c +++ b/drivers/mfd/arizona-spi.c | |||
@@ -27,9 +27,14 @@ static int arizona_spi_probe(struct spi_device *spi) | |||
27 | const struct spi_device_id *id = spi_get_device_id(spi); | 27 | const struct spi_device_id *id = spi_get_device_id(spi); |
28 | struct arizona *arizona; | 28 | struct arizona *arizona; |
29 | const struct regmap_config *regmap_config; | 29 | const struct regmap_config *regmap_config; |
30 | int ret; | 30 | int ret, type; |
31 | 31 | ||
32 | switch (id->driver_data) { | 32 | if (spi->dev.of_node) |
33 | type = arizona_of_get_type(&spi->dev); | ||
34 | else | ||
35 | type = id->driver_data; | ||
36 | |||
37 | switch (type) { | ||
33 | #ifdef CONFIG_MFD_WM5102 | 38 | #ifdef CONFIG_MFD_WM5102 |
34 | case WM5102: | 39 | case WM5102: |
35 | regmap_config = &wm5102_spi_regmap; | 40 | regmap_config = &wm5102_spi_regmap; |
@@ -84,6 +89,7 @@ static struct spi_driver arizona_spi_driver = { | |||
84 | .name = "arizona", | 89 | .name = "arizona", |
85 | .owner = THIS_MODULE, | 90 | .owner = THIS_MODULE, |
86 | .pm = &arizona_pm_ops, | 91 | .pm = &arizona_pm_ops, |
92 | .of_match_table = of_match_ptr(arizona_of_match), | ||
87 | }, | 93 | }, |
88 | .probe = arizona_spi_probe, | 94 | .probe = arizona_spi_probe, |
89 | .remove = arizona_spi_remove, | 95 | .remove = arizona_spi_remove, |
diff --git a/drivers/mfd/arizona.h b/drivers/mfd/arizona.h index 9798ae5da67b..db55d9854a55 100644 --- a/drivers/mfd/arizona.h +++ b/drivers/mfd/arizona.h | |||
@@ -13,6 +13,7 @@ | |||
13 | #ifndef _WM5102_H | 13 | #ifndef _WM5102_H |
14 | #define _WM5102_H | 14 | #define _WM5102_H |
15 | 15 | ||
16 | #include <linux/of.h> | ||
16 | #include <linux/regmap.h> | 17 | #include <linux/regmap.h> |
17 | #include <linux/pm.h> | 18 | #include <linux/pm.h> |
18 | 19 | ||
@@ -26,6 +27,8 @@ extern const struct regmap_config wm5110_spi_regmap; | |||
26 | 27 | ||
27 | extern const struct dev_pm_ops arizona_pm_ops; | 28 | extern const struct dev_pm_ops arizona_pm_ops; |
28 | 29 | ||
30 | extern const struct of_device_id arizona_of_match[]; | ||
31 | |||
29 | extern const struct regmap_irq_chip wm5102_aod; | 32 | extern const struct regmap_irq_chip wm5102_aod; |
30 | extern const struct regmap_irq_chip wm5102_irq; | 33 | extern const struct regmap_irq_chip wm5102_irq; |
31 | 34 | ||
@@ -37,4 +40,13 @@ int arizona_dev_exit(struct arizona *arizona); | |||
37 | int arizona_irq_init(struct arizona *arizona); | 40 | int arizona_irq_init(struct arizona *arizona); |
38 | int arizona_irq_exit(struct arizona *arizona); | 41 | int arizona_irq_exit(struct arizona *arizona); |
39 | 42 | ||
43 | #ifdef CONFIG_OF | ||
44 | int arizona_of_get_type(struct device *dev); | ||
45 | #else | ||
46 | static inline int arizona_of_get_type(struct device *dev) | ||
47 | { | ||
48 | return 0; | ||
49 | } | ||
50 | #endif | ||
51 | |||
40 | #endif | 52 | #endif |
diff --git a/drivers/mfd/wm5102-tables.c b/drivers/mfd/wm5102-tables.c index 155c4a1a6a99..802dd3cb18cf 100644 --- a/drivers/mfd/wm5102-tables.c +++ b/drivers/mfd/wm5102-tables.c | |||
@@ -65,7 +65,8 @@ static const struct reg_default wm5102_revb_patch[] = { | |||
65 | { 0x418, 0xa080 }, | 65 | { 0x418, 0xa080 }, |
66 | { 0x420, 0xa080 }, | 66 | { 0x420, 0xa080 }, |
67 | { 0x428, 0xe000 }, | 67 | { 0x428, 0xe000 }, |
68 | { 0x443, 0xDC1A }, | 68 | { 0x442, 0x3F0A }, |
69 | { 0x443, 0xDC1F }, | ||
69 | { 0x4B0, 0x0066 }, | 70 | { 0x4B0, 0x0066 }, |
70 | { 0x458, 0x000b }, | 71 | { 0x458, 0x000b }, |
71 | { 0x212, 0x0000 }, | 72 | { 0x212, 0x0000 }, |
@@ -424,6 +425,9 @@ static const struct reg_default wm5102_reg_default[] = { | |||
424 | { 0x00000435, 0x0180 }, /* R1077 - DAC Digital Volume 5R */ | 425 | { 0x00000435, 0x0180 }, /* R1077 - DAC Digital Volume 5R */ |
425 | { 0x00000436, 0x0081 }, /* R1078 - DAC Volume Limit 5R */ | 426 | { 0x00000436, 0x0081 }, /* R1078 - DAC Volume Limit 5R */ |
426 | { 0x00000437, 0x0200 }, /* R1079 - Noise Gate Select 5R */ | 427 | { 0x00000437, 0x0200 }, /* R1079 - Noise Gate Select 5R */ |
428 | { 0x00000440, 0x8FFF }, /* R1088 - DRE Enable */ | ||
429 | { 0x00000442, 0x3F0A }, /* R1090 - DRE Control 2 */ | ||
430 | { 0x00000443, 0xDC1F }, /* R1090 - DRE Control 3 */ | ||
427 | { 0x00000450, 0x0000 }, /* R1104 - DAC AEC Control 1 */ | 431 | { 0x00000450, 0x0000 }, /* R1104 - DAC AEC Control 1 */ |
428 | { 0x00000458, 0x000B }, /* R1112 - Noise Gate Control */ | 432 | { 0x00000458, 0x000B }, /* R1112 - Noise Gate Control */ |
429 | { 0x00000490, 0x0069 }, /* R1168 - PDM SPK1 CTRL 1 */ | 433 | { 0x00000490, 0x0069 }, /* R1168 - PDM SPK1 CTRL 1 */ |
@@ -1197,6 +1201,9 @@ static bool wm5102_readable_register(struct device *dev, unsigned int reg) | |||
1197 | case ARIZONA_DAC_DIGITAL_VOLUME_5R: | 1201 | case ARIZONA_DAC_DIGITAL_VOLUME_5R: |
1198 | case ARIZONA_DAC_VOLUME_LIMIT_5R: | 1202 | case ARIZONA_DAC_VOLUME_LIMIT_5R: |
1199 | case ARIZONA_NOISE_GATE_SELECT_5R: | 1203 | case ARIZONA_NOISE_GATE_SELECT_5R: |
1204 | case ARIZONA_DRE_ENABLE: | ||
1205 | case ARIZONA_DRE_CONTROL_2: | ||
1206 | case ARIZONA_DRE_CONTROL_3: | ||
1200 | case ARIZONA_DAC_AEC_CONTROL_1: | 1207 | case ARIZONA_DAC_AEC_CONTROL_1: |
1201 | case ARIZONA_NOISE_GATE_CONTROL: | 1208 | case ARIZONA_NOISE_GATE_CONTROL: |
1202 | case ARIZONA_PDM_SPK1_CTRL_1: | 1209 | case ARIZONA_PDM_SPK1_CTRL_1: |
diff --git a/drivers/mfd/wm5110-tables.c b/drivers/mfd/wm5110-tables.c index c41599815299..2a7972349159 100644 --- a/drivers/mfd/wm5110-tables.c +++ b/drivers/mfd/wm5110-tables.c | |||
@@ -2273,18 +2273,22 @@ static bool wm5110_readable_register(struct device *dev, unsigned int reg) | |||
2273 | case ARIZONA_DSP1_CLOCKING_1: | 2273 | case ARIZONA_DSP1_CLOCKING_1: |
2274 | case ARIZONA_DSP1_STATUS_1: | 2274 | case ARIZONA_DSP1_STATUS_1: |
2275 | case ARIZONA_DSP1_STATUS_2: | 2275 | case ARIZONA_DSP1_STATUS_2: |
2276 | case ARIZONA_DSP1_STATUS_3: | ||
2276 | case ARIZONA_DSP2_CONTROL_1: | 2277 | case ARIZONA_DSP2_CONTROL_1: |
2277 | case ARIZONA_DSP2_CLOCKING_1: | 2278 | case ARIZONA_DSP2_CLOCKING_1: |
2278 | case ARIZONA_DSP2_STATUS_1: | 2279 | case ARIZONA_DSP2_STATUS_1: |
2279 | case ARIZONA_DSP2_STATUS_2: | 2280 | case ARIZONA_DSP2_STATUS_2: |
2281 | case ARIZONA_DSP2_STATUS_3: | ||
2280 | case ARIZONA_DSP3_CONTROL_1: | 2282 | case ARIZONA_DSP3_CONTROL_1: |
2281 | case ARIZONA_DSP3_CLOCKING_1: | 2283 | case ARIZONA_DSP3_CLOCKING_1: |
2282 | case ARIZONA_DSP3_STATUS_1: | 2284 | case ARIZONA_DSP3_STATUS_1: |
2283 | case ARIZONA_DSP3_STATUS_2: | 2285 | case ARIZONA_DSP3_STATUS_2: |
2286 | case ARIZONA_DSP3_STATUS_3: | ||
2284 | case ARIZONA_DSP4_CONTROL_1: | 2287 | case ARIZONA_DSP4_CONTROL_1: |
2285 | case ARIZONA_DSP4_CLOCKING_1: | 2288 | case ARIZONA_DSP4_CLOCKING_1: |
2286 | case ARIZONA_DSP4_STATUS_1: | 2289 | case ARIZONA_DSP4_STATUS_1: |
2287 | case ARIZONA_DSP4_STATUS_2: | 2290 | case ARIZONA_DSP4_STATUS_2: |
2291 | case ARIZONA_DSP4_STATUS_3: | ||
2288 | return true; | 2292 | return true; |
2289 | default: | 2293 | default: |
2290 | return false; | 2294 | return false; |
@@ -2334,12 +2338,16 @@ static bool wm5110_volatile_register(struct device *dev, unsigned int reg) | |||
2334 | case ARIZONA_DSP1_CLOCKING_1: | 2338 | case ARIZONA_DSP1_CLOCKING_1: |
2335 | case ARIZONA_DSP1_STATUS_1: | 2339 | case ARIZONA_DSP1_STATUS_1: |
2336 | case ARIZONA_DSP1_STATUS_2: | 2340 | case ARIZONA_DSP1_STATUS_2: |
2341 | case ARIZONA_DSP1_STATUS_3: | ||
2337 | case ARIZONA_DSP2_STATUS_1: | 2342 | case ARIZONA_DSP2_STATUS_1: |
2338 | case ARIZONA_DSP2_STATUS_2: | 2343 | case ARIZONA_DSP2_STATUS_2: |
2344 | case ARIZONA_DSP2_STATUS_3: | ||
2339 | case ARIZONA_DSP3_STATUS_1: | 2345 | case ARIZONA_DSP3_STATUS_1: |
2340 | case ARIZONA_DSP3_STATUS_2: | 2346 | case ARIZONA_DSP3_STATUS_2: |
2347 | case ARIZONA_DSP3_STATUS_3: | ||
2341 | case ARIZONA_DSP4_STATUS_1: | 2348 | case ARIZONA_DSP4_STATUS_1: |
2342 | case ARIZONA_DSP4_STATUS_2: | 2349 | case ARIZONA_DSP4_STATUS_2: |
2350 | case ARIZONA_DSP4_STATUS_3: | ||
2343 | return true; | 2351 | return true; |
2344 | default: | 2352 | default: |
2345 | return false; | 2353 | return false; |
diff --git a/include/linux/mfd/arizona/core.h b/include/linux/mfd/arizona/core.h index cc281368dc55..f797bb9b8b56 100644 --- a/include/linux/mfd/arizona/core.h +++ b/include/linux/mfd/arizona/core.h | |||
@@ -95,6 +95,8 @@ struct arizona { | |||
95 | 95 | ||
96 | struct arizona_pdata pdata; | 96 | struct arizona_pdata pdata; |
97 | 97 | ||
98 | unsigned int external_dcvdd:1; | ||
99 | |||
98 | int irq; | 100 | int irq; |
99 | struct irq_domain *virq; | 101 | struct irq_domain *virq; |
100 | struct regmap_irq_chip_data *aod_irq_chip; | 102 | struct regmap_irq_chip_data *aod_irq_chip; |
diff --git a/include/linux/mfd/arizona/pdata.h b/include/linux/mfd/arizona/pdata.h index 80dead1f7100..12a5c135c746 100644 --- a/include/linux/mfd/arizona/pdata.h +++ b/include/linux/mfd/arizona/pdata.h | |||
@@ -77,7 +77,7 @@ struct arizona_micbias { | |||
77 | int mV; /** Regulated voltage */ | 77 | int mV; /** Regulated voltage */ |
78 | unsigned int ext_cap:1; /** External capacitor fitted */ | 78 | unsigned int ext_cap:1; /** External capacitor fitted */ |
79 | unsigned int discharge:1; /** Actively discharge */ | 79 | unsigned int discharge:1; /** Actively discharge */ |
80 | unsigned int fast_start:1; /** Enable aggressive startup ramp rate */ | 80 | unsigned int soft_start:1; /** Disable aggressive startup ramp rate */ |
81 | unsigned int bypass:1; /** Use bypass mode */ | 81 | unsigned int bypass:1; /** Use bypass mode */ |
82 | }; | 82 | }; |
83 | 83 | ||
diff --git a/include/linux/mfd/arizona/registers.h b/include/linux/mfd/arizona/registers.h index 715b6ba3d52a..4706d3d46e56 100644 --- a/include/linux/mfd/arizona/registers.h +++ b/include/linux/mfd/arizona/registers.h | |||
@@ -215,6 +215,9 @@ | |||
215 | #define ARIZONA_DAC_DIGITAL_VOLUME_6R 0x43D | 215 | #define ARIZONA_DAC_DIGITAL_VOLUME_6R 0x43D |
216 | #define ARIZONA_DAC_VOLUME_LIMIT_6R 0x43E | 216 | #define ARIZONA_DAC_VOLUME_LIMIT_6R 0x43E |
217 | #define ARIZONA_NOISE_GATE_SELECT_6R 0x43F | 217 | #define ARIZONA_NOISE_GATE_SELECT_6R 0x43F |
218 | #define ARIZONA_DRE_ENABLE 0x440 | ||
219 | #define ARIZONA_DRE_CONTROL_2 0x442 | ||
220 | #define ARIZONA_DRE_CONTROL_3 0x443 | ||
218 | #define ARIZONA_DAC_AEC_CONTROL_1 0x450 | 221 | #define ARIZONA_DAC_AEC_CONTROL_1 0x450 |
219 | #define ARIZONA_NOISE_GATE_CONTROL 0x458 | 222 | #define ARIZONA_NOISE_GATE_CONTROL 0x458 |
220 | #define ARIZONA_PDM_SPK1_CTRL_1 0x490 | 223 | #define ARIZONA_PDM_SPK1_CTRL_1 0x490 |
@@ -1002,6 +1005,7 @@ | |||
1002 | #define ARIZONA_DSP2_CLOCKING_1 0x1201 | 1005 | #define ARIZONA_DSP2_CLOCKING_1 0x1201 |
1003 | #define ARIZONA_DSP2_STATUS_1 0x1204 | 1006 | #define ARIZONA_DSP2_STATUS_1 0x1204 |
1004 | #define ARIZONA_DSP2_STATUS_2 0x1205 | 1007 | #define ARIZONA_DSP2_STATUS_2 0x1205 |
1008 | #define ARIZONA_DSP2_STATUS_3 0x1206 | ||
1005 | #define ARIZONA_DSP2_SCRATCH_0 0x1240 | 1009 | #define ARIZONA_DSP2_SCRATCH_0 0x1240 |
1006 | #define ARIZONA_DSP2_SCRATCH_1 0x1241 | 1010 | #define ARIZONA_DSP2_SCRATCH_1 0x1241 |
1007 | #define ARIZONA_DSP2_SCRATCH_2 0x1242 | 1011 | #define ARIZONA_DSP2_SCRATCH_2 0x1242 |
@@ -1010,6 +1014,7 @@ | |||
1010 | #define ARIZONA_DSP3_CLOCKING_1 0x1301 | 1014 | #define ARIZONA_DSP3_CLOCKING_1 0x1301 |
1011 | #define ARIZONA_DSP3_STATUS_1 0x1304 | 1015 | #define ARIZONA_DSP3_STATUS_1 0x1304 |
1012 | #define ARIZONA_DSP3_STATUS_2 0x1305 | 1016 | #define ARIZONA_DSP3_STATUS_2 0x1305 |
1017 | #define ARIZONA_DSP3_STATUS_3 0x1306 | ||
1013 | #define ARIZONA_DSP3_SCRATCH_0 0x1340 | 1018 | #define ARIZONA_DSP3_SCRATCH_0 0x1340 |
1014 | #define ARIZONA_DSP3_SCRATCH_1 0x1341 | 1019 | #define ARIZONA_DSP3_SCRATCH_1 0x1341 |
1015 | #define ARIZONA_DSP3_SCRATCH_2 0x1342 | 1020 | #define ARIZONA_DSP3_SCRATCH_2 0x1342 |
@@ -1018,6 +1023,7 @@ | |||
1018 | #define ARIZONA_DSP4_CLOCKING_1 0x1401 | 1023 | #define ARIZONA_DSP4_CLOCKING_1 0x1401 |
1019 | #define ARIZONA_DSP4_STATUS_1 0x1404 | 1024 | #define ARIZONA_DSP4_STATUS_1 0x1404 |
1020 | #define ARIZONA_DSP4_STATUS_2 0x1405 | 1025 | #define ARIZONA_DSP4_STATUS_2 0x1405 |
1026 | #define ARIZONA_DSP4_STATUS_3 0x1406 | ||
1021 | #define ARIZONA_DSP4_SCRATCH_0 0x1440 | 1027 | #define ARIZONA_DSP4_SCRATCH_0 0x1440 |
1022 | #define ARIZONA_DSP4_SCRATCH_1 0x1441 | 1028 | #define ARIZONA_DSP4_SCRATCH_1 0x1441 |
1023 | #define ARIZONA_DSP4_SCRATCH_2 0x1442 | 1029 | #define ARIZONA_DSP4_SCRATCH_2 0x1442 |
@@ -3130,6 +3136,47 @@ | |||
3130 | #define ARIZONA_OUT6R_NGATE_SRC_WIDTH 12 /* OUT6R_NGATE_SRC - [11:0] */ | 3136 | #define ARIZONA_OUT6R_NGATE_SRC_WIDTH 12 /* OUT6R_NGATE_SRC - [11:0] */ |
3131 | 3137 | ||
3132 | /* | 3138 | /* |
3139 | * R1088 (0x440) - DRE Enable | ||
3140 | */ | ||
3141 | #define ARIZONA_DRE3L_ENA 0x0010 /* DRE3L_ENA */ | ||
3142 | #define ARIZONA_DRE3L_ENA_MASK 0x0010 /* DRE3L_ENA */ | ||
3143 | #define ARIZONA_DRE3L_ENA_SHIFT 4 /* DRE3L_ENA */ | ||
3144 | #define ARIZONA_DRE3L_ENA_WIDTH 1 /* DRE3L_ENA */ | ||
3145 | #define ARIZONA_DRE2R_ENA 0x0008 /* DRE2R_ENA */ | ||
3146 | #define ARIZONA_DRE2R_ENA_MASK 0x0008 /* DRE2R_ENA */ | ||
3147 | #define ARIZONA_DRE2R_ENA_SHIFT 3 /* DRE2R_ENA */ | ||
3148 | #define ARIZONA_DRE2R_ENA_WIDTH 1 /* DRE2R_ENA */ | ||
3149 | #define ARIZONA_DRE2L_ENA 0x0004 /* DRE2L_ENA */ | ||
3150 | #define ARIZONA_DRE2L_ENA_MASK 0x0004 /* DRE2L_ENA */ | ||
3151 | #define ARIZONA_DRE2L_ENA_SHIFT 2 /* DRE2L_ENA */ | ||
3152 | #define ARIZONA_DRE2L_ENA_WIDTH 1 /* DRE2L_ENA */ | ||
3153 | #define ARIZONA_DRE1R_ENA 0x0002 /* DRE1R_ENA */ | ||
3154 | #define ARIZONA_DRE1R_ENA_MASK 0x0002 /* DRE1R_ENA */ | ||
3155 | #define ARIZONA_DRE1R_ENA_SHIFT 1 /* DRE1R_ENA */ | ||
3156 | #define ARIZONA_DRE1R_ENA_WIDTH 1 /* DRE1R_ENA */ | ||
3157 | #define ARIZONA_DRE1L_ENA 0x0001 /* DRE1L_ENA */ | ||
3158 | #define ARIZONA_DRE1L_ENA_MASK 0x0001 /* DRE1L_ENA */ | ||
3159 | #define ARIZONA_DRE1L_ENA_SHIFT 0 /* DRE1L_ENA */ | ||
3160 | #define ARIZONA_DRE1L_ENA_WIDTH 1 /* DRE1L_ENA */ | ||
3161 | |||
3162 | /* | ||
3163 | * R1090 (0x442) - DRE Control 2 | ||
3164 | */ | ||
3165 | #define ARIZONA_DRE_T_LOW_MASK 0x3F00 /* DRE_T_LOW - [13:8] */ | ||
3166 | #define ARIZONA_DRE_T_LOW_SHIFT 8 /* DRE_T_LOW - [13:8] */ | ||
3167 | #define ARIZONA_DRE_T_LOW_WIDTH 6 /* DRE_T_LOW - [13:8] */ | ||
3168 | |||
3169 | /* | ||
3170 | * R1091 (0x443) - DRE Control 3 | ||
3171 | */ | ||
3172 | #define ARIZONA_DRE_GAIN_SHIFT_MASK 0xC000 /* DRE_GAIN_SHIFT - [15:14] */ | ||
3173 | #define ARIZONA_DRE_GAIN_SHIFT_SHIFT 14 /* DRE_GAIN_SHIFT - [15:14] */ | ||
3174 | #define ARIZONA_DRE_GAIN_SHIFT_WIDTH 2 /* DRE_GAIN_SHIFT - [15:14] */ | ||
3175 | #define ARIZONA_DRE_LOW_LEVEL_ABS_MASK 0x000F /* LOW_LEVEL_ABS - [3:0] */ | ||
3176 | #define ARIZONA_DRE_LOW_LEVEL_ABS_SHIFT 0 /* LOW_LEVEL_ABS - [3:0] */ | ||
3177 | #define ARIZONA_DRE_LOW_LEVEL_ABS_WIDTH 4 /* LOW_LEVEL_ABS - [3:0] */ | ||
3178 | |||
3179 | /* | ||
3133 | * R1104 (0x450) - DAC AEC Control 1 | 3180 | * R1104 (0x450) - DAC AEC Control 1 |
3134 | */ | 3181 | */ |
3135 | #define ARIZONA_AEC_LOOPBACK_SRC_MASK 0x003C /* AEC_LOOPBACK_SRC - [5:2] */ | 3182 | #define ARIZONA_AEC_LOOPBACK_SRC_MASK 0x003C /* AEC_LOOPBACK_SRC - [5:2] */ |
diff --git a/sound/soc/codecs/arizona.c b/sound/soc/codecs/arizona.c index 389f23253831..de625813c0e6 100644 --- a/sound/soc/codecs/arizona.c +++ b/sound/soc/codecs/arizona.c | |||
@@ -1198,6 +1198,13 @@ const struct snd_soc_dai_ops arizona_dai_ops = { | |||
1198 | }; | 1198 | }; |
1199 | EXPORT_SYMBOL_GPL(arizona_dai_ops); | 1199 | EXPORT_SYMBOL_GPL(arizona_dai_ops); |
1200 | 1200 | ||
1201 | const struct snd_soc_dai_ops arizona_simple_dai_ops = { | ||
1202 | .startup = arizona_startup, | ||
1203 | .hw_params = arizona_hw_params_rate, | ||
1204 | .set_sysclk = arizona_dai_set_sysclk, | ||
1205 | }; | ||
1206 | EXPORT_SYMBOL_GPL(arizona_simple_dai_ops); | ||
1207 | |||
1201 | int arizona_init_dai(struct arizona_priv *priv, int id) | 1208 | int arizona_init_dai(struct arizona_priv *priv, int id) |
1202 | { | 1209 | { |
1203 | struct arizona_dai_priv *dai_priv = &priv->dai[id]; | 1210 | struct arizona_dai_priv *dai_priv = &priv->dai[id]; |
diff --git a/sound/soc/codecs/arizona.h b/sound/soc/codecs/arizona.h index af39f1006427..b60b08ccc1d0 100644 --- a/sound/soc/codecs/arizona.h +++ b/sound/soc/codecs/arizona.h | |||
@@ -57,7 +57,7 @@ | |||
57 | #define ARIZONA_CLK_98MHZ 5 | 57 | #define ARIZONA_CLK_98MHZ 5 |
58 | #define ARIZONA_CLK_147MHZ 6 | 58 | #define ARIZONA_CLK_147MHZ 6 |
59 | 59 | ||
60 | #define ARIZONA_MAX_DAI 4 | 60 | #define ARIZONA_MAX_DAI 6 |
61 | #define ARIZONA_MAX_ADSP 4 | 61 | #define ARIZONA_MAX_ADSP 4 |
62 | 62 | ||
63 | struct arizona; | 63 | struct arizona; |
@@ -213,6 +213,7 @@ extern int arizona_set_sysclk(struct snd_soc_codec *codec, int clk_id, | |||
213 | int source, unsigned int freq, int dir); | 213 | int source, unsigned int freq, int dir); |
214 | 214 | ||
215 | extern const struct snd_soc_dai_ops arizona_dai_ops; | 215 | extern const struct snd_soc_dai_ops arizona_dai_ops; |
216 | extern const struct snd_soc_dai_ops arizona_simple_dai_ops; | ||
216 | 217 | ||
217 | #define ARIZONA_FLL_NAME_LEN 20 | 218 | #define ARIZONA_FLL_NAME_LEN 20 |
218 | 219 | ||
diff --git a/sound/soc/codecs/wm5102.c b/sound/soc/codecs/wm5102.c index 100fdadda56a..282fd232cdf7 100644 --- a/sound/soc/codecs/wm5102.c +++ b/sound/soc/codecs/wm5102.c | |||
@@ -814,7 +814,20 @@ SOC_DOUBLE_R_TLV("SPKDAT1 Digital Volume", ARIZONA_DAC_DIGITAL_VOLUME_5L, | |||
814 | 814 | ||
815 | SOC_VALUE_ENUM("HPOUT1 OSR", wm5102_hpout_osr[0]), | 815 | SOC_VALUE_ENUM("HPOUT1 OSR", wm5102_hpout_osr[0]), |
816 | SOC_VALUE_ENUM("HPOUT2 OSR", wm5102_hpout_osr[1]), | 816 | SOC_VALUE_ENUM("HPOUT2 OSR", wm5102_hpout_osr[1]), |
817 | SOC_VALUE_ENUM("HPOUT3 OSR", wm5102_hpout_osr[2]), | 817 | SOC_VALUE_ENUM("EPOUT OSR", wm5102_hpout_osr[2]), |
818 | |||
819 | SOC_DOUBLE("HPOUT1 DRE Switch", ARIZONA_DRE_ENABLE, | ||
820 | ARIZONA_DRE1L_ENA_SHIFT, ARIZONA_DRE1R_ENA_SHIFT, 1, 0), | ||
821 | SOC_DOUBLE("HPOUT2 DRE Switch", ARIZONA_DRE_ENABLE, | ||
822 | ARIZONA_DRE2L_ENA_SHIFT, ARIZONA_DRE2R_ENA_SHIFT, 1, 0), | ||
823 | SOC_SINGLE("EPOUT DRE Switch", ARIZONA_DRE_ENABLE, | ||
824 | ARIZONA_DRE3L_ENA_SHIFT, 1, 0), | ||
825 | |||
826 | SOC_SINGLE("DRE Threshold", ARIZONA_DRE_CONTROL_2, | ||
827 | ARIZONA_DRE_T_LOW_SHIFT, 63, 0), | ||
828 | |||
829 | SOC_SINGLE("DRE Low Level ABS", ARIZONA_DRE_CONTROL_3, | ||
830 | ARIZONA_DRE_LOW_LEVEL_ABS_SHIFT, 15, 0), | ||
818 | 831 | ||
819 | SOC_ENUM("Output Ramp Up", arizona_out_vi_ramp), | 832 | SOC_ENUM("Output Ramp Up", arizona_out_vi_ramp), |
820 | SOC_ENUM("Output Ramp Down", arizona_out_vd_ramp), | 833 | SOC_ENUM("Output Ramp Down", arizona_out_vd_ramp), |
@@ -852,6 +865,15 @@ ARIZONA_MIXER_CONTROLS("AIF2TX2", ARIZONA_AIF2TX2MIX_INPUT_1_SOURCE), | |||
852 | 865 | ||
853 | ARIZONA_MIXER_CONTROLS("AIF3TX1", ARIZONA_AIF3TX1MIX_INPUT_1_SOURCE), | 866 | ARIZONA_MIXER_CONTROLS("AIF3TX1", ARIZONA_AIF3TX1MIX_INPUT_1_SOURCE), |
854 | ARIZONA_MIXER_CONTROLS("AIF3TX2", ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE), | 867 | ARIZONA_MIXER_CONTROLS("AIF3TX2", ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE), |
868 | |||
869 | ARIZONA_MIXER_CONTROLS("SLIMTX1", ARIZONA_SLIMTX1MIX_INPUT_1_SOURCE), | ||
870 | ARIZONA_MIXER_CONTROLS("SLIMTX2", ARIZONA_SLIMTX2MIX_INPUT_1_SOURCE), | ||
871 | ARIZONA_MIXER_CONTROLS("SLIMTX3", ARIZONA_SLIMTX3MIX_INPUT_1_SOURCE), | ||
872 | ARIZONA_MIXER_CONTROLS("SLIMTX4", ARIZONA_SLIMTX4MIX_INPUT_1_SOURCE), | ||
873 | ARIZONA_MIXER_CONTROLS("SLIMTX5", ARIZONA_SLIMTX5MIX_INPUT_1_SOURCE), | ||
874 | ARIZONA_MIXER_CONTROLS("SLIMTX6", ARIZONA_SLIMTX6MIX_INPUT_1_SOURCE), | ||
875 | ARIZONA_MIXER_CONTROLS("SLIMTX7", ARIZONA_SLIMTX7MIX_INPUT_1_SOURCE), | ||
876 | ARIZONA_MIXER_CONTROLS("SLIMTX8", ARIZONA_SLIMTX8MIX_INPUT_1_SOURCE), | ||
855 | }; | 877 | }; |
856 | 878 | ||
857 | ARIZONA_MIXER_ENUMS(EQ1, ARIZONA_EQ1MIX_INPUT_1_SOURCE); | 879 | ARIZONA_MIXER_ENUMS(EQ1, ARIZONA_EQ1MIX_INPUT_1_SOURCE); |
@@ -898,6 +920,15 @@ ARIZONA_MIXER_ENUMS(AIF2TX2, ARIZONA_AIF2TX2MIX_INPUT_1_SOURCE); | |||
898 | ARIZONA_MIXER_ENUMS(AIF3TX1, ARIZONA_AIF3TX1MIX_INPUT_1_SOURCE); | 920 | ARIZONA_MIXER_ENUMS(AIF3TX1, ARIZONA_AIF3TX1MIX_INPUT_1_SOURCE); |
899 | ARIZONA_MIXER_ENUMS(AIF3TX2, ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE); | 921 | ARIZONA_MIXER_ENUMS(AIF3TX2, ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE); |
900 | 922 | ||
923 | ARIZONA_MIXER_ENUMS(SLIMTX1, ARIZONA_SLIMTX1MIX_INPUT_1_SOURCE); | ||
924 | ARIZONA_MIXER_ENUMS(SLIMTX2, ARIZONA_SLIMTX2MIX_INPUT_1_SOURCE); | ||
925 | ARIZONA_MIXER_ENUMS(SLIMTX3, ARIZONA_SLIMTX3MIX_INPUT_1_SOURCE); | ||
926 | ARIZONA_MIXER_ENUMS(SLIMTX4, ARIZONA_SLIMTX4MIX_INPUT_1_SOURCE); | ||
927 | ARIZONA_MIXER_ENUMS(SLIMTX5, ARIZONA_SLIMTX5MIX_INPUT_1_SOURCE); | ||
928 | ARIZONA_MIXER_ENUMS(SLIMTX6, ARIZONA_SLIMTX6MIX_INPUT_1_SOURCE); | ||
929 | ARIZONA_MIXER_ENUMS(SLIMTX7, ARIZONA_SLIMTX7MIX_INPUT_1_SOURCE); | ||
930 | ARIZONA_MIXER_ENUMS(SLIMTX8, ARIZONA_SLIMTX8MIX_INPUT_1_SOURCE); | ||
931 | |||
901 | ARIZONA_MUX_ENUMS(ASRC1L, ARIZONA_ASRC1LMIX_INPUT_1_SOURCE); | 932 | ARIZONA_MUX_ENUMS(ASRC1L, ARIZONA_ASRC1LMIX_INPUT_1_SOURCE); |
902 | ARIZONA_MUX_ENUMS(ASRC1R, ARIZONA_ASRC1RMIX_INPUT_1_SOURCE); | 933 | ARIZONA_MUX_ENUMS(ASRC1R, ARIZONA_ASRC1RMIX_INPUT_1_SOURCE); |
903 | ARIZONA_MUX_ENUMS(ASRC2L, ARIZONA_ASRC2LMIX_INPUT_1_SOURCE); | 934 | ARIZONA_MUX_ENUMS(ASRC2L, ARIZONA_ASRC2LMIX_INPUT_1_SOURCE); |
@@ -1117,6 +1148,56 @@ SND_SOC_DAPM_AIF_IN("AIF3RX1", NULL, 0, | |||
1117 | SND_SOC_DAPM_AIF_IN("AIF3RX2", NULL, 0, | 1148 | SND_SOC_DAPM_AIF_IN("AIF3RX2", NULL, 0, |
1118 | ARIZONA_AIF3_RX_ENABLES, ARIZONA_AIF3RX2_ENA_SHIFT, 0), | 1149 | ARIZONA_AIF3_RX_ENABLES, ARIZONA_AIF3RX2_ENA_SHIFT, 0), |
1119 | 1150 | ||
1151 | SND_SOC_DAPM_AIF_OUT("SLIMTX1", NULL, 0, | ||
1152 | ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE, | ||
1153 | ARIZONA_SLIMTX1_ENA_SHIFT, 0), | ||
1154 | SND_SOC_DAPM_AIF_OUT("SLIMTX2", NULL, 0, | ||
1155 | ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE, | ||
1156 | ARIZONA_SLIMTX2_ENA_SHIFT, 0), | ||
1157 | SND_SOC_DAPM_AIF_OUT("SLIMTX3", NULL, 0, | ||
1158 | ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE, | ||
1159 | ARIZONA_SLIMTX3_ENA_SHIFT, 0), | ||
1160 | SND_SOC_DAPM_AIF_OUT("SLIMTX4", NULL, 0, | ||
1161 | ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE, | ||
1162 | ARIZONA_SLIMTX4_ENA_SHIFT, 0), | ||
1163 | SND_SOC_DAPM_AIF_OUT("SLIMTX5", NULL, 0, | ||
1164 | ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE, | ||
1165 | ARIZONA_SLIMTX5_ENA_SHIFT, 0), | ||
1166 | SND_SOC_DAPM_AIF_OUT("SLIMTX6", NULL, 0, | ||
1167 | ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE, | ||
1168 | ARIZONA_SLIMTX6_ENA_SHIFT, 0), | ||
1169 | SND_SOC_DAPM_AIF_OUT("SLIMTX7", NULL, 0, | ||
1170 | ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE, | ||
1171 | ARIZONA_SLIMTX7_ENA_SHIFT, 0), | ||
1172 | SND_SOC_DAPM_AIF_OUT("SLIMTX8", NULL, 0, | ||
1173 | ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE, | ||
1174 | ARIZONA_SLIMTX8_ENA_SHIFT, 0), | ||
1175 | |||
1176 | SND_SOC_DAPM_AIF_IN("SLIMRX1", NULL, 0, | ||
1177 | ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE, | ||
1178 | ARIZONA_SLIMRX1_ENA_SHIFT, 0), | ||
1179 | SND_SOC_DAPM_AIF_IN("SLIMRX2", NULL, 0, | ||
1180 | ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE, | ||
1181 | ARIZONA_SLIMRX2_ENA_SHIFT, 0), | ||
1182 | SND_SOC_DAPM_AIF_IN("SLIMRX3", NULL, 0, | ||
1183 | ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE, | ||
1184 | ARIZONA_SLIMRX3_ENA_SHIFT, 0), | ||
1185 | SND_SOC_DAPM_AIF_IN("SLIMRX4", NULL, 0, | ||
1186 | ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE, | ||
1187 | ARIZONA_SLIMRX4_ENA_SHIFT, 0), | ||
1188 | SND_SOC_DAPM_AIF_IN("SLIMRX5", NULL, 0, | ||
1189 | ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE, | ||
1190 | ARIZONA_SLIMRX5_ENA_SHIFT, 0), | ||
1191 | SND_SOC_DAPM_AIF_IN("SLIMRX6", NULL, 0, | ||
1192 | ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE, | ||
1193 | ARIZONA_SLIMRX6_ENA_SHIFT, 0), | ||
1194 | SND_SOC_DAPM_AIF_IN("SLIMRX7", NULL, 0, | ||
1195 | ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE, | ||
1196 | ARIZONA_SLIMRX7_ENA_SHIFT, 0), | ||
1197 | SND_SOC_DAPM_AIF_IN("SLIMRX8", NULL, 0, | ||
1198 | ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE, | ||
1199 | ARIZONA_SLIMRX8_ENA_SHIFT, 0), | ||
1200 | |||
1120 | ARIZONA_DSP_WIDGETS(DSP1, "DSP1"), | 1201 | ARIZONA_DSP_WIDGETS(DSP1, "DSP1"), |
1121 | 1202 | ||
1122 | SND_SOC_DAPM_VALUE_MUX("AEC Loopback", ARIZONA_DAC_AEC_CONTROL_1, | 1203 | SND_SOC_DAPM_VALUE_MUX("AEC Loopback", ARIZONA_DAC_AEC_CONTROL_1, |
@@ -1189,6 +1270,15 @@ ARIZONA_MIXER_WIDGETS(AIF2TX2, "AIF2TX2"), | |||
1189 | ARIZONA_MIXER_WIDGETS(AIF3TX1, "AIF3TX1"), | 1270 | ARIZONA_MIXER_WIDGETS(AIF3TX1, "AIF3TX1"), |
1190 | ARIZONA_MIXER_WIDGETS(AIF3TX2, "AIF3TX2"), | 1271 | ARIZONA_MIXER_WIDGETS(AIF3TX2, "AIF3TX2"), |
1191 | 1272 | ||
1273 | ARIZONA_MIXER_WIDGETS(SLIMTX1, "SLIMTX1"), | ||
1274 | ARIZONA_MIXER_WIDGETS(SLIMTX2, "SLIMTX2"), | ||
1275 | ARIZONA_MIXER_WIDGETS(SLIMTX3, "SLIMTX3"), | ||
1276 | ARIZONA_MIXER_WIDGETS(SLIMTX4, "SLIMTX4"), | ||
1277 | ARIZONA_MIXER_WIDGETS(SLIMTX5, "SLIMTX5"), | ||
1278 | ARIZONA_MIXER_WIDGETS(SLIMTX6, "SLIMTX6"), | ||
1279 | ARIZONA_MIXER_WIDGETS(SLIMTX7, "SLIMTX7"), | ||
1280 | ARIZONA_MIXER_WIDGETS(SLIMTX8, "SLIMTX8"), | ||
1281 | |||
1192 | ARIZONA_MUX_WIDGETS(ASRC1L, "ASRC1L"), | 1282 | ARIZONA_MUX_WIDGETS(ASRC1L, "ASRC1L"), |
1193 | ARIZONA_MUX_WIDGETS(ASRC1R, "ASRC1R"), | 1283 | ARIZONA_MUX_WIDGETS(ASRC1R, "ASRC1R"), |
1194 | ARIZONA_MUX_WIDGETS(ASRC2L, "ASRC2L"), | 1284 | ARIZONA_MUX_WIDGETS(ASRC2L, "ASRC2L"), |
@@ -1249,6 +1339,14 @@ SND_SOC_DAPM_OUTPUT("MICSUPP"), | |||
1249 | { name, "AIF2RX2", "AIF2RX2" }, \ | 1339 | { name, "AIF2RX2", "AIF2RX2" }, \ |
1250 | { name, "AIF3RX1", "AIF3RX1" }, \ | 1340 | { name, "AIF3RX1", "AIF3RX1" }, \ |
1251 | { name, "AIF3RX2", "AIF3RX2" }, \ | 1341 | { name, "AIF3RX2", "AIF3RX2" }, \ |
1342 | { name, "SLIMRX1", "SLIMRX1" }, \ | ||
1343 | { name, "SLIMRX2", "SLIMRX2" }, \ | ||
1344 | { name, "SLIMRX3", "SLIMRX3" }, \ | ||
1345 | { name, "SLIMRX4", "SLIMRX4" }, \ | ||
1346 | { name, "SLIMRX5", "SLIMRX5" }, \ | ||
1347 | { name, "SLIMRX6", "SLIMRX6" }, \ | ||
1348 | { name, "SLIMRX7", "SLIMRX7" }, \ | ||
1349 | { name, "SLIMRX8", "SLIMRX8" }, \ | ||
1252 | { name, "EQ1", "EQ1" }, \ | 1350 | { name, "EQ1", "EQ1" }, \ |
1253 | { name, "EQ2", "EQ2" }, \ | 1351 | { name, "EQ2", "EQ2" }, \ |
1254 | { name, "EQ3", "EQ3" }, \ | 1352 | { name, "EQ3", "EQ3" }, \ |
@@ -1304,10 +1402,21 @@ static const struct snd_soc_dapm_route wm5102_dapm_routes[] = { | |||
1304 | { "OUT5L", NULL, "SYSCLK" }, | 1402 | { "OUT5L", NULL, "SYSCLK" }, |
1305 | { "OUT5R", NULL, "SYSCLK" }, | 1403 | { "OUT5R", NULL, "SYSCLK" }, |
1306 | 1404 | ||
1405 | { "IN1L", NULL, "SYSCLK" }, | ||
1406 | { "IN1R", NULL, "SYSCLK" }, | ||
1407 | { "IN2L", NULL, "SYSCLK" }, | ||
1408 | { "IN2R", NULL, "SYSCLK" }, | ||
1409 | { "IN3L", NULL, "SYSCLK" }, | ||
1410 | { "IN3R", NULL, "SYSCLK" }, | ||
1411 | |||
1307 | { "MICBIAS1", NULL, "MICVDD" }, | 1412 | { "MICBIAS1", NULL, "MICVDD" }, |
1308 | { "MICBIAS2", NULL, "MICVDD" }, | 1413 | { "MICBIAS2", NULL, "MICVDD" }, |
1309 | { "MICBIAS3", NULL, "MICVDD" }, | 1414 | { "MICBIAS3", NULL, "MICVDD" }, |
1310 | 1415 | ||
1416 | { "Noise Generator", NULL, "SYSCLK" }, | ||
1417 | { "Tone Generator 1", NULL, "SYSCLK" }, | ||
1418 | { "Tone Generator 2", NULL, "SYSCLK" }, | ||
1419 | |||
1311 | { "Noise Generator", NULL, "NOISE" }, | 1420 | { "Noise Generator", NULL, "NOISE" }, |
1312 | { "Tone Generator 1", NULL, "TONE" }, | 1421 | { "Tone Generator 1", NULL, "TONE" }, |
1313 | { "Tone Generator 2", NULL, "TONE" }, | 1422 | { "Tone Generator 2", NULL, "TONE" }, |
@@ -1345,13 +1454,41 @@ static const struct snd_soc_dapm_route wm5102_dapm_routes[] = { | |||
1345 | { "AIF3RX1", NULL, "AIF3 Playback" }, | 1454 | { "AIF3RX1", NULL, "AIF3 Playback" }, |
1346 | { "AIF3RX2", NULL, "AIF3 Playback" }, | 1455 | { "AIF3RX2", NULL, "AIF3 Playback" }, |
1347 | 1456 | ||
1457 | { "Slim1 Capture", NULL, "SLIMTX1" }, | ||
1458 | { "Slim1 Capture", NULL, "SLIMTX2" }, | ||
1459 | { "Slim1 Capture", NULL, "SLIMTX3" }, | ||
1460 | { "Slim1 Capture", NULL, "SLIMTX4" }, | ||
1461 | |||
1462 | { "SLIMRX1", NULL, "Slim1 Playback" }, | ||
1463 | { "SLIMRX2", NULL, "Slim1 Playback" }, | ||
1464 | { "SLIMRX3", NULL, "Slim1 Playback" }, | ||
1465 | { "SLIMRX4", NULL, "Slim1 Playback" }, | ||
1466 | |||
1467 | { "Slim2 Capture", NULL, "SLIMTX5" }, | ||
1468 | { "Slim2 Capture", NULL, "SLIMTX6" }, | ||
1469 | |||
1470 | { "SLIMRX5", NULL, "Slim2 Playback" }, | ||
1471 | { "SLIMRX6", NULL, "Slim2 Playback" }, | ||
1472 | |||
1473 | { "Slim3 Capture", NULL, "SLIMTX7" }, | ||
1474 | { "Slim3 Capture", NULL, "SLIMTX8" }, | ||
1475 | |||
1476 | { "SLIMRX7", NULL, "Slim3 Playback" }, | ||
1477 | { "SLIMRX8", NULL, "Slim3 Playback" }, | ||
1478 | |||
1348 | { "AIF1 Playback", NULL, "SYSCLK" }, | 1479 | { "AIF1 Playback", NULL, "SYSCLK" }, |
1349 | { "AIF2 Playback", NULL, "SYSCLK" }, | 1480 | { "AIF2 Playback", NULL, "SYSCLK" }, |
1350 | { "AIF3 Playback", NULL, "SYSCLK" }, | 1481 | { "AIF3 Playback", NULL, "SYSCLK" }, |
1482 | { "Slim1 Playback", NULL, "SYSCLK" }, | ||
1483 | { "Slim2 Playback", NULL, "SYSCLK" }, | ||
1484 | { "Slim3 Playback", NULL, "SYSCLK" }, | ||
1351 | 1485 | ||
1352 | { "AIF1 Capture", NULL, "SYSCLK" }, | 1486 | { "AIF1 Capture", NULL, "SYSCLK" }, |
1353 | { "AIF2 Capture", NULL, "SYSCLK" }, | 1487 | { "AIF2 Capture", NULL, "SYSCLK" }, |
1354 | { "AIF3 Capture", NULL, "SYSCLK" }, | 1488 | { "AIF3 Capture", NULL, "SYSCLK" }, |
1489 | { "Slim1 Capture", NULL, "SYSCLK" }, | ||
1490 | { "Slim2 Capture", NULL, "SYSCLK" }, | ||
1491 | { "Slim3 Capture", NULL, "SYSCLK" }, | ||
1355 | 1492 | ||
1356 | { "IN1L PGA", NULL, "IN1L" }, | 1493 | { "IN1L PGA", NULL, "IN1L" }, |
1357 | { "IN1R PGA", NULL, "IN1R" }, | 1494 | { "IN1R PGA", NULL, "IN1R" }, |
@@ -1408,6 +1545,15 @@ static const struct snd_soc_dapm_route wm5102_dapm_routes[] = { | |||
1408 | ARIZONA_MIXER_ROUTES("AIF3TX1", "AIF3TX1"), | 1545 | ARIZONA_MIXER_ROUTES("AIF3TX1", "AIF3TX1"), |
1409 | ARIZONA_MIXER_ROUTES("AIF3TX2", "AIF3TX2"), | 1546 | ARIZONA_MIXER_ROUTES("AIF3TX2", "AIF3TX2"), |
1410 | 1547 | ||
1548 | ARIZONA_MIXER_ROUTES("SLIMTX1", "SLIMTX1"), | ||
1549 | ARIZONA_MIXER_ROUTES("SLIMTX2", "SLIMTX2"), | ||
1550 | ARIZONA_MIXER_ROUTES("SLIMTX3", "SLIMTX3"), | ||
1551 | ARIZONA_MIXER_ROUTES("SLIMTX4", "SLIMTX4"), | ||
1552 | ARIZONA_MIXER_ROUTES("SLIMTX5", "SLIMTX5"), | ||
1553 | ARIZONA_MIXER_ROUTES("SLIMTX6", "SLIMTX6"), | ||
1554 | ARIZONA_MIXER_ROUTES("SLIMTX7", "SLIMTX7"), | ||
1555 | ARIZONA_MIXER_ROUTES("SLIMTX8", "SLIMTX8"), | ||
1556 | |||
1411 | ARIZONA_MIXER_ROUTES("EQ1", "EQ1"), | 1557 | ARIZONA_MIXER_ROUTES("EQ1", "EQ1"), |
1412 | ARIZONA_MIXER_ROUTES("EQ2", "EQ2"), | 1558 | ARIZONA_MIXER_ROUTES("EQ2", "EQ2"), |
1413 | ARIZONA_MIXER_ROUTES("EQ3", "EQ3"), | 1559 | ARIZONA_MIXER_ROUTES("EQ3", "EQ3"), |
@@ -1560,6 +1706,63 @@ static struct snd_soc_dai_driver wm5102_dai[] = { | |||
1560 | .ops = &arizona_dai_ops, | 1706 | .ops = &arizona_dai_ops, |
1561 | .symmetric_rates = 1, | 1707 | .symmetric_rates = 1, |
1562 | }, | 1708 | }, |
1709 | { | ||
1710 | .name = "wm5102-slim1", | ||
1711 | .id = 4, | ||
1712 | .playback = { | ||
1713 | .stream_name = "Slim1 Playback", | ||
1714 | .channels_min = 1, | ||
1715 | .channels_max = 4, | ||
1716 | .rates = WM5102_RATES, | ||
1717 | .formats = WM5102_FORMATS, | ||
1718 | }, | ||
1719 | .capture = { | ||
1720 | .stream_name = "Slim1 Capture", | ||
1721 | .channels_min = 1, | ||
1722 | .channels_max = 4, | ||
1723 | .rates = WM5102_RATES, | ||
1724 | .formats = WM5102_FORMATS, | ||
1725 | }, | ||
1726 | .ops = &arizona_simple_dai_ops, | ||
1727 | }, | ||
1728 | { | ||
1729 | .name = "wm5102-slim2", | ||
1730 | .id = 5, | ||
1731 | .playback = { | ||
1732 | .stream_name = "Slim2 Playback", | ||
1733 | .channels_min = 1, | ||
1734 | .channels_max = 2, | ||
1735 | .rates = WM5102_RATES, | ||
1736 | .formats = WM5102_FORMATS, | ||
1737 | }, | ||
1738 | .capture = { | ||
1739 | .stream_name = "Slim2 Capture", | ||
1740 | .channels_min = 1, | ||
1741 | .channels_max = 2, | ||
1742 | .rates = WM5102_RATES, | ||
1743 | .formats = WM5102_FORMATS, | ||
1744 | }, | ||
1745 | .ops = &arizona_simple_dai_ops, | ||
1746 | }, | ||
1747 | { | ||
1748 | .name = "wm5102-slim3", | ||
1749 | .id = 6, | ||
1750 | .playback = { | ||
1751 | .stream_name = "Slim3 Playback", | ||
1752 | .channels_min = 1, | ||
1753 | .channels_max = 2, | ||
1754 | .rates = WM5102_RATES, | ||
1755 | .formats = WM5102_FORMATS, | ||
1756 | }, | ||
1757 | .capture = { | ||
1758 | .stream_name = "Slim3 Capture", | ||
1759 | .channels_min = 1, | ||
1760 | .channels_max = 2, | ||
1761 | .rates = WM5102_RATES, | ||
1762 | .formats = WM5102_FORMATS, | ||
1763 | }, | ||
1764 | .ops = &arizona_simple_dai_ops, | ||
1765 | }, | ||
1563 | }; | 1766 | }; |
1564 | 1767 | ||
1565 | static int wm5102_codec_probe(struct snd_soc_codec *codec) | 1768 | static int wm5102_codec_probe(struct snd_soc_codec *codec) |
diff --git a/sound/soc/codecs/wm5110.c b/sound/soc/codecs/wm5110.c index 88ad7db52dde..2e7cb4ba161a 100644 --- a/sound/soc/codecs/wm5110.c +++ b/sound/soc/codecs/wm5110.c | |||
@@ -309,6 +309,15 @@ ARIZONA_MIXER_CONTROLS("AIF2TX2", ARIZONA_AIF2TX2MIX_INPUT_1_SOURCE), | |||
309 | 309 | ||
310 | ARIZONA_MIXER_CONTROLS("AIF3TX1", ARIZONA_AIF3TX1MIX_INPUT_1_SOURCE), | 310 | ARIZONA_MIXER_CONTROLS("AIF3TX1", ARIZONA_AIF3TX1MIX_INPUT_1_SOURCE), |
311 | ARIZONA_MIXER_CONTROLS("AIF3TX2", ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE), | 311 | ARIZONA_MIXER_CONTROLS("AIF3TX2", ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE), |
312 | |||
313 | ARIZONA_MIXER_CONTROLS("SLIMTX1", ARIZONA_SLIMTX1MIX_INPUT_1_SOURCE), | ||
314 | ARIZONA_MIXER_CONTROLS("SLIMTX2", ARIZONA_SLIMTX2MIX_INPUT_1_SOURCE), | ||
315 | ARIZONA_MIXER_CONTROLS("SLIMTX3", ARIZONA_SLIMTX3MIX_INPUT_1_SOURCE), | ||
316 | ARIZONA_MIXER_CONTROLS("SLIMTX4", ARIZONA_SLIMTX4MIX_INPUT_1_SOURCE), | ||
317 | ARIZONA_MIXER_CONTROLS("SLIMTX5", ARIZONA_SLIMTX5MIX_INPUT_1_SOURCE), | ||
318 | ARIZONA_MIXER_CONTROLS("SLIMTX6", ARIZONA_SLIMTX6MIX_INPUT_1_SOURCE), | ||
319 | ARIZONA_MIXER_CONTROLS("SLIMTX7", ARIZONA_SLIMTX7MIX_INPUT_1_SOURCE), | ||
320 | ARIZONA_MIXER_CONTROLS("SLIMTX8", ARIZONA_SLIMTX8MIX_INPUT_1_SOURCE), | ||
312 | }; | 321 | }; |
313 | 322 | ||
314 | ARIZONA_MIXER_ENUMS(EQ1, ARIZONA_EQ1MIX_INPUT_1_SOURCE); | 323 | ARIZONA_MIXER_ENUMS(EQ1, ARIZONA_EQ1MIX_INPUT_1_SOURCE); |
@@ -360,6 +369,15 @@ ARIZONA_MIXER_ENUMS(AIF2TX2, ARIZONA_AIF2TX2MIX_INPUT_1_SOURCE); | |||
360 | ARIZONA_MIXER_ENUMS(AIF3TX1, ARIZONA_AIF3TX1MIX_INPUT_1_SOURCE); | 369 | ARIZONA_MIXER_ENUMS(AIF3TX1, ARIZONA_AIF3TX1MIX_INPUT_1_SOURCE); |
361 | ARIZONA_MIXER_ENUMS(AIF3TX2, ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE); | 370 | ARIZONA_MIXER_ENUMS(AIF3TX2, ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE); |
362 | 371 | ||
372 | ARIZONA_MIXER_ENUMS(SLIMTX1, ARIZONA_SLIMTX1MIX_INPUT_1_SOURCE); | ||
373 | ARIZONA_MIXER_ENUMS(SLIMTX2, ARIZONA_SLIMTX2MIX_INPUT_1_SOURCE); | ||
374 | ARIZONA_MIXER_ENUMS(SLIMTX3, ARIZONA_SLIMTX3MIX_INPUT_1_SOURCE); | ||
375 | ARIZONA_MIXER_ENUMS(SLIMTX4, ARIZONA_SLIMTX4MIX_INPUT_1_SOURCE); | ||
376 | ARIZONA_MIXER_ENUMS(SLIMTX5, ARIZONA_SLIMTX5MIX_INPUT_1_SOURCE); | ||
377 | ARIZONA_MIXER_ENUMS(SLIMTX6, ARIZONA_SLIMTX6MIX_INPUT_1_SOURCE); | ||
378 | ARIZONA_MIXER_ENUMS(SLIMTX7, ARIZONA_SLIMTX7MIX_INPUT_1_SOURCE); | ||
379 | ARIZONA_MIXER_ENUMS(SLIMTX8, ARIZONA_SLIMTX8MIX_INPUT_1_SOURCE); | ||
380 | |||
363 | ARIZONA_MUX_ENUMS(ASRC1L, ARIZONA_ASRC1LMIX_INPUT_1_SOURCE); | 381 | ARIZONA_MUX_ENUMS(ASRC1L, ARIZONA_ASRC1LMIX_INPUT_1_SOURCE); |
364 | ARIZONA_MUX_ENUMS(ASRC1R, ARIZONA_ASRC1RMIX_INPUT_1_SOURCE); | 382 | ARIZONA_MUX_ENUMS(ASRC1R, ARIZONA_ASRC1RMIX_INPUT_1_SOURCE); |
365 | ARIZONA_MUX_ENUMS(ASRC2L, ARIZONA_ASRC2LMIX_INPUT_1_SOURCE); | 383 | ARIZONA_MUX_ENUMS(ASRC2L, ARIZONA_ASRC2LMIX_INPUT_1_SOURCE); |
@@ -550,6 +568,56 @@ SND_SOC_DAPM_AIF_IN("AIF2RX1", NULL, 0, | |||
550 | SND_SOC_DAPM_AIF_IN("AIF2RX2", NULL, 0, | 568 | SND_SOC_DAPM_AIF_IN("AIF2RX2", NULL, 0, |
551 | ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX2_ENA_SHIFT, 0), | 569 | ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX2_ENA_SHIFT, 0), |
552 | 570 | ||
571 | SND_SOC_DAPM_AIF_IN("SLIMRX1", NULL, 0, | ||
572 | ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE, | ||
573 | ARIZONA_SLIMRX1_ENA_SHIFT, 0), | ||
574 | SND_SOC_DAPM_AIF_IN("SLIMRX2", NULL, 0, | ||
575 | ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE, | ||
576 | ARIZONA_SLIMRX2_ENA_SHIFT, 0), | ||
577 | SND_SOC_DAPM_AIF_IN("SLIMRX3", NULL, 0, | ||
578 | ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE, | ||
579 | ARIZONA_SLIMRX3_ENA_SHIFT, 0), | ||
580 | SND_SOC_DAPM_AIF_IN("SLIMRX4", NULL, 0, | ||
581 | ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE, | ||
582 | ARIZONA_SLIMRX4_ENA_SHIFT, 0), | ||
583 | SND_SOC_DAPM_AIF_IN("SLIMRX5", NULL, 0, | ||
584 | ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE, | ||
585 | ARIZONA_SLIMRX5_ENA_SHIFT, 0), | ||
586 | SND_SOC_DAPM_AIF_IN("SLIMRX6", NULL, 0, | ||
587 | ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE, | ||
588 | ARIZONA_SLIMRX6_ENA_SHIFT, 0), | ||
589 | SND_SOC_DAPM_AIF_IN("SLIMRX7", NULL, 0, | ||
590 | ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE, | ||
591 | ARIZONA_SLIMRX7_ENA_SHIFT, 0), | ||
592 | SND_SOC_DAPM_AIF_IN("SLIMRX8", NULL, 0, | ||
593 | ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE, | ||
594 | ARIZONA_SLIMRX8_ENA_SHIFT, 0), | ||
595 | |||
596 | SND_SOC_DAPM_AIF_OUT("SLIMTX1", NULL, 0, | ||
597 | ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE, | ||
598 | ARIZONA_SLIMTX1_ENA_SHIFT, 0), | ||
599 | SND_SOC_DAPM_AIF_OUT("SLIMTX2", NULL, 0, | ||
600 | ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE, | ||
601 | ARIZONA_SLIMTX2_ENA_SHIFT, 0), | ||
602 | SND_SOC_DAPM_AIF_OUT("SLIMTX3", NULL, 0, | ||
603 | ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE, | ||
604 | ARIZONA_SLIMTX3_ENA_SHIFT, 0), | ||
605 | SND_SOC_DAPM_AIF_OUT("SLIMTX4", NULL, 0, | ||
606 | ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE, | ||
607 | ARIZONA_SLIMTX4_ENA_SHIFT, 0), | ||
608 | SND_SOC_DAPM_AIF_OUT("SLIMTX5", NULL, 0, | ||
609 | ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE, | ||
610 | ARIZONA_SLIMTX5_ENA_SHIFT, 0), | ||
611 | SND_SOC_DAPM_AIF_OUT("SLIMTX6", NULL, 0, | ||
612 | ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE, | ||
613 | ARIZONA_SLIMTX6_ENA_SHIFT, 0), | ||
614 | SND_SOC_DAPM_AIF_OUT("SLIMTX7", NULL, 0, | ||
615 | ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE, | ||
616 | ARIZONA_SLIMTX7_ENA_SHIFT, 0), | ||
617 | SND_SOC_DAPM_AIF_OUT("SLIMTX8", NULL, 0, | ||
618 | ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE, | ||
619 | ARIZONA_SLIMTX8_ENA_SHIFT, 0), | ||
620 | |||
553 | SND_SOC_DAPM_AIF_OUT("AIF3TX1", NULL, 0, | 621 | SND_SOC_DAPM_AIF_OUT("AIF3TX1", NULL, 0, |
554 | ARIZONA_AIF3_TX_ENABLES, ARIZONA_AIF3TX1_ENA_SHIFT, 0), | 622 | ARIZONA_AIF3_TX_ENABLES, ARIZONA_AIF3TX1_ENA_SHIFT, 0), |
555 | SND_SOC_DAPM_AIF_OUT("AIF3TX2", NULL, 0, | 623 | SND_SOC_DAPM_AIF_OUT("AIF3TX2", NULL, 0, |
@@ -640,6 +708,15 @@ ARIZONA_MIXER_WIDGETS(AIF2TX2, "AIF2TX2"), | |||
640 | ARIZONA_MIXER_WIDGETS(AIF3TX1, "AIF3TX1"), | 708 | ARIZONA_MIXER_WIDGETS(AIF3TX1, "AIF3TX1"), |
641 | ARIZONA_MIXER_WIDGETS(AIF3TX2, "AIF3TX2"), | 709 | ARIZONA_MIXER_WIDGETS(AIF3TX2, "AIF3TX2"), |
642 | 710 | ||
711 | ARIZONA_MIXER_WIDGETS(SLIMTX1, "SLIMTX1"), | ||
712 | ARIZONA_MIXER_WIDGETS(SLIMTX2, "SLIMTX2"), | ||
713 | ARIZONA_MIXER_WIDGETS(SLIMTX3, "SLIMTX3"), | ||
714 | ARIZONA_MIXER_WIDGETS(SLIMTX4, "SLIMTX4"), | ||
715 | ARIZONA_MIXER_WIDGETS(SLIMTX5, "SLIMTX5"), | ||
716 | ARIZONA_MIXER_WIDGETS(SLIMTX6, "SLIMTX6"), | ||
717 | ARIZONA_MIXER_WIDGETS(SLIMTX7, "SLIMTX7"), | ||
718 | ARIZONA_MIXER_WIDGETS(SLIMTX8, "SLIMTX8"), | ||
719 | |||
643 | ARIZONA_MUX_WIDGETS(ASRC1L, "ASRC1L"), | 720 | ARIZONA_MUX_WIDGETS(ASRC1L, "ASRC1L"), |
644 | ARIZONA_MUX_WIDGETS(ASRC1R, "ASRC1R"), | 721 | ARIZONA_MUX_WIDGETS(ASRC1R, "ASRC1R"), |
645 | ARIZONA_MUX_WIDGETS(ASRC2L, "ASRC2L"), | 722 | ARIZONA_MUX_WIDGETS(ASRC2L, "ASRC2L"), |
@@ -690,6 +767,14 @@ SND_SOC_DAPM_OUTPUT("MICSUPP"), | |||
690 | { name, "AIF2RX2", "AIF2RX2" }, \ | 767 | { name, "AIF2RX2", "AIF2RX2" }, \ |
691 | { name, "AIF3RX1", "AIF3RX1" }, \ | 768 | { name, "AIF3RX1", "AIF3RX1" }, \ |
692 | { name, "AIF3RX2", "AIF3RX2" }, \ | 769 | { name, "AIF3RX2", "AIF3RX2" }, \ |
770 | { name, "SLIMRX1", "SLIMRX1" }, \ | ||
771 | { name, "SLIMRX2", "SLIMRX2" }, \ | ||
772 | { name, "SLIMRX3", "SLIMRX3" }, \ | ||
773 | { name, "SLIMRX4", "SLIMRX4" }, \ | ||
774 | { name, "SLIMRX5", "SLIMRX5" }, \ | ||
775 | { name, "SLIMRX6", "SLIMRX6" }, \ | ||
776 | { name, "SLIMRX7", "SLIMRX7" }, \ | ||
777 | { name, "SLIMRX8", "SLIMRX8" }, \ | ||
693 | { name, "EQ1", "EQ1" }, \ | 778 | { name, "EQ1", "EQ1" }, \ |
694 | { name, "EQ2", "EQ2" }, \ | 779 | { name, "EQ2", "EQ2" }, \ |
695 | { name, "EQ3", "EQ3" }, \ | 780 | { name, "EQ3", "EQ3" }, \ |
@@ -736,10 +821,23 @@ static const struct snd_soc_dapm_route wm5110_dapm_routes[] = { | |||
736 | { "OUT6L", NULL, "SYSCLK" }, | 821 | { "OUT6L", NULL, "SYSCLK" }, |
737 | { "OUT6R", NULL, "SYSCLK" }, | 822 | { "OUT6R", NULL, "SYSCLK" }, |
738 | 823 | ||
824 | { "IN1L", NULL, "SYSCLK" }, | ||
825 | { "IN1R", NULL, "SYSCLK" }, | ||
826 | { "IN2L", NULL, "SYSCLK" }, | ||
827 | { "IN2R", NULL, "SYSCLK" }, | ||
828 | { "IN3L", NULL, "SYSCLK" }, | ||
829 | { "IN3R", NULL, "SYSCLK" }, | ||
830 | { "IN4L", NULL, "SYSCLK" }, | ||
831 | { "IN4R", NULL, "SYSCLK" }, | ||
832 | |||
739 | { "MICBIAS1", NULL, "MICVDD" }, | 833 | { "MICBIAS1", NULL, "MICVDD" }, |
740 | { "MICBIAS2", NULL, "MICVDD" }, | 834 | { "MICBIAS2", NULL, "MICVDD" }, |
741 | { "MICBIAS3", NULL, "MICVDD" }, | 835 | { "MICBIAS3", NULL, "MICVDD" }, |
742 | 836 | ||
837 | { "Noise Generator", NULL, "SYSCLK" }, | ||
838 | { "Tone Generator 1", NULL, "SYSCLK" }, | ||
839 | { "Tone Generator 2", NULL, "SYSCLK" }, | ||
840 | |||
743 | { "Noise Generator", NULL, "NOISE" }, | 841 | { "Noise Generator", NULL, "NOISE" }, |
744 | { "Tone Generator 1", NULL, "TONE" }, | 842 | { "Tone Generator 1", NULL, "TONE" }, |
745 | { "Tone Generator 2", NULL, "TONE" }, | 843 | { "Tone Generator 2", NULL, "TONE" }, |
@@ -777,13 +875,41 @@ static const struct snd_soc_dapm_route wm5110_dapm_routes[] = { | |||
777 | { "AIF3RX1", NULL, "AIF3 Playback" }, | 875 | { "AIF3RX1", NULL, "AIF3 Playback" }, |
778 | { "AIF3RX2", NULL, "AIF3 Playback" }, | 876 | { "AIF3RX2", NULL, "AIF3 Playback" }, |
779 | 877 | ||
878 | { "Slim1 Capture", NULL, "SLIMTX1" }, | ||
879 | { "Slim1 Capture", NULL, "SLIMTX2" }, | ||
880 | { "Slim1 Capture", NULL, "SLIMTX3" }, | ||
881 | { "Slim1 Capture", NULL, "SLIMTX4" }, | ||
882 | |||
883 | { "SLIMRX1", NULL, "Slim1 Playback" }, | ||
884 | { "SLIMRX2", NULL, "Slim1 Playback" }, | ||
885 | { "SLIMRX3", NULL, "Slim1 Playback" }, | ||
886 | { "SLIMRX4", NULL, "Slim1 Playback" }, | ||
887 | |||
888 | { "Slim2 Capture", NULL, "SLIMTX5" }, | ||
889 | { "Slim2 Capture", NULL, "SLIMTX6" }, | ||
890 | |||
891 | { "SLIMRX5", NULL, "Slim2 Playback" }, | ||
892 | { "SLIMRX6", NULL, "Slim2 Playback" }, | ||
893 | |||
894 | { "Slim3 Capture", NULL, "SLIMTX7" }, | ||
895 | { "Slim3 Capture", NULL, "SLIMTX8" }, | ||
896 | |||
897 | { "SLIMRX7", NULL, "Slim3 Playback" }, | ||
898 | { "SLIMRX8", NULL, "Slim3 Playback" }, | ||
899 | |||
780 | { "AIF1 Playback", NULL, "SYSCLK" }, | 900 | { "AIF1 Playback", NULL, "SYSCLK" }, |
781 | { "AIF2 Playback", NULL, "SYSCLK" }, | 901 | { "AIF2 Playback", NULL, "SYSCLK" }, |
782 | { "AIF3 Playback", NULL, "SYSCLK" }, | 902 | { "AIF3 Playback", NULL, "SYSCLK" }, |
903 | { "Slim1 Playback", NULL, "SYSCLK" }, | ||
904 | { "Slim2 Playback", NULL, "SYSCLK" }, | ||
905 | { "Slim3 Playback", NULL, "SYSCLK" }, | ||
783 | 906 | ||
784 | { "AIF1 Capture", NULL, "SYSCLK" }, | 907 | { "AIF1 Capture", NULL, "SYSCLK" }, |
785 | { "AIF2 Capture", NULL, "SYSCLK" }, | 908 | { "AIF2 Capture", NULL, "SYSCLK" }, |
786 | { "AIF3 Capture", NULL, "SYSCLK" }, | 909 | { "AIF3 Capture", NULL, "SYSCLK" }, |
910 | { "Slim1 Capture", NULL, "SYSCLK" }, | ||
911 | { "Slim2 Capture", NULL, "SYSCLK" }, | ||
912 | { "Slim3 Capture", NULL, "SYSCLK" }, | ||
787 | 913 | ||
788 | { "IN1L PGA", NULL, "IN1L" }, | 914 | { "IN1L PGA", NULL, "IN1L" }, |
789 | { "IN1R PGA", NULL, "IN1R" }, | 915 | { "IN1R PGA", NULL, "IN1R" }, |
@@ -829,6 +955,15 @@ static const struct snd_soc_dapm_route wm5110_dapm_routes[] = { | |||
829 | ARIZONA_MIXER_ROUTES("AIF3TX1", "AIF3TX1"), | 955 | ARIZONA_MIXER_ROUTES("AIF3TX1", "AIF3TX1"), |
830 | ARIZONA_MIXER_ROUTES("AIF3TX2", "AIF3TX2"), | 956 | ARIZONA_MIXER_ROUTES("AIF3TX2", "AIF3TX2"), |
831 | 957 | ||
958 | ARIZONA_MIXER_ROUTES("SLIMTX1", "SLIMTX1"), | ||
959 | ARIZONA_MIXER_ROUTES("SLIMTX2", "SLIMTX2"), | ||
960 | ARIZONA_MIXER_ROUTES("SLIMTX3", "SLIMTX3"), | ||
961 | ARIZONA_MIXER_ROUTES("SLIMTX4", "SLIMTX4"), | ||
962 | ARIZONA_MIXER_ROUTES("SLIMTX5", "SLIMTX5"), | ||
963 | ARIZONA_MIXER_ROUTES("SLIMTX6", "SLIMTX6"), | ||
964 | ARIZONA_MIXER_ROUTES("SLIMTX7", "SLIMTX7"), | ||
965 | ARIZONA_MIXER_ROUTES("SLIMTX8", "SLIMTX8"), | ||
966 | |||
832 | ARIZONA_MIXER_ROUTES("EQ1", "EQ1"), | 967 | ARIZONA_MIXER_ROUTES("EQ1", "EQ1"), |
833 | ARIZONA_MIXER_ROUTES("EQ2", "EQ2"), | 968 | ARIZONA_MIXER_ROUTES("EQ2", "EQ2"), |
834 | ARIZONA_MIXER_ROUTES("EQ3", "EQ3"), | 969 | ARIZONA_MIXER_ROUTES("EQ3", "EQ3"), |
@@ -963,6 +1098,63 @@ static struct snd_soc_dai_driver wm5110_dai[] = { | |||
963 | .ops = &arizona_dai_ops, | 1098 | .ops = &arizona_dai_ops, |
964 | .symmetric_rates = 1, | 1099 | .symmetric_rates = 1, |
965 | }, | 1100 | }, |
1101 | { | ||
1102 | .name = "wm5110-slim1", | ||
1103 | .id = 4, | ||
1104 | .playback = { | ||
1105 | .stream_name = "Slim1 Playback", | ||
1106 | .channels_min = 1, | ||
1107 | .channels_max = 4, | ||
1108 | .rates = WM5110_RATES, | ||
1109 | .formats = WM5110_FORMATS, | ||
1110 | }, | ||
1111 | .capture = { | ||
1112 | .stream_name = "Slim1 Capture", | ||
1113 | .channels_min = 1, | ||
1114 | .channels_max = 4, | ||
1115 | .rates = WM5110_RATES, | ||
1116 | .formats = WM5110_FORMATS, | ||
1117 | }, | ||
1118 | .ops = &arizona_simple_dai_ops, | ||
1119 | }, | ||
1120 | { | ||
1121 | .name = "wm5110-slim2", | ||
1122 | .id = 5, | ||
1123 | .playback = { | ||
1124 | .stream_name = "Slim2 Playback", | ||
1125 | .channels_min = 1, | ||
1126 | .channels_max = 2, | ||
1127 | .rates = WM5110_RATES, | ||
1128 | .formats = WM5110_FORMATS, | ||
1129 | }, | ||
1130 | .capture = { | ||
1131 | .stream_name = "Slim2 Capture", | ||
1132 | .channels_min = 1, | ||
1133 | .channels_max = 2, | ||
1134 | .rates = WM5110_RATES, | ||
1135 | .formats = WM5110_FORMATS, | ||
1136 | }, | ||
1137 | .ops = &arizona_simple_dai_ops, | ||
1138 | }, | ||
1139 | { | ||
1140 | .name = "wm5110-slim3", | ||
1141 | .id = 6, | ||
1142 | .playback = { | ||
1143 | .stream_name = "Slim3 Playback", | ||
1144 | .channels_min = 1, | ||
1145 | .channels_max = 2, | ||
1146 | .rates = WM5110_RATES, | ||
1147 | .formats = WM5110_FORMATS, | ||
1148 | }, | ||
1149 | .capture = { | ||
1150 | .stream_name = "Slim3 Capture", | ||
1151 | .channels_min = 1, | ||
1152 | .channels_max = 2, | ||
1153 | .rates = WM5110_RATES, | ||
1154 | .formats = WM5110_FORMATS, | ||
1155 | }, | ||
1156 | .ops = &arizona_simple_dai_ops, | ||
1157 | }, | ||
966 | }; | 1158 | }; |
967 | 1159 | ||
968 | static int wm5110_codec_probe(struct snd_soc_codec *codec) | 1160 | static int wm5110_codec_probe(struct snd_soc_codec *codec) |