diff options
-rw-r--r-- | sound/soc/blackfin/Kconfig | 3 | ||||
-rw-r--r-- | sound/soc/codecs/Kconfig | 11 | ||||
-rw-r--r-- | sound/soc/codecs/Makefile | 4 | ||||
-rw-r--r-- | sound/soc/codecs/ssm2602-i2c.c | 57 | ||||
-rw-r--r-- | sound/soc/codecs/ssm2602-spi.c | 41 | ||||
-rw-r--r-- | sound/soc/codecs/ssm2602.c | 158 | ||||
-rw-r--r-- | sound/soc/codecs/ssm2602.h | 14 |
7 files changed, 148 insertions, 140 deletions
diff --git a/sound/soc/blackfin/Kconfig b/sound/soc/blackfin/Kconfig index 54f74f8cbb75..f9118dc98853 100644 --- a/sound/soc/blackfin/Kconfig +++ b/sound/soc/blackfin/Kconfig | |||
@@ -14,7 +14,8 @@ config SND_BF5XX_SOC_SSM2602 | |||
14 | depends on SND_BF5XX_I2S && (SPI_MASTER || I2C) | 14 | depends on SND_BF5XX_I2S && (SPI_MASTER || I2C) |
15 | select SND_BF5XX_SOC_I2S if !BF60x | 15 | select SND_BF5XX_SOC_I2S if !BF60x |
16 | select SND_BF6XX_SOC_I2S if BF60x | 16 | select SND_BF6XX_SOC_I2S if BF60x |
17 | select SND_SOC_SSM2602 | 17 | select SND_SOC_SSM2602_SPI if SPI_MASTER |
18 | select SND_SOC_SSM2602_I2C if I2C | ||
18 | help | 19 | help |
19 | Say Y if you want to add support for the Analog Devices | 20 | Say Y if you want to add support for the Analog Devices |
20 | SSM2602 Audio Codec Add-On Card. | 21 | SSM2602 Audio Codec Add-On Card. |
diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig index 983d087aa92a..f17e6da53ce7 100644 --- a/sound/soc/codecs/Kconfig +++ b/sound/soc/codecs/Kconfig | |||
@@ -66,7 +66,8 @@ config SND_SOC_ALL_CODECS | |||
66 | select SND_SOC_SN95031 if INTEL_SCU_IPC | 66 | select SND_SOC_SN95031 if INTEL_SCU_IPC |
67 | select SND_SOC_SPDIF | 67 | select SND_SOC_SPDIF |
68 | select SND_SOC_SSM2518 if I2C | 68 | select SND_SOC_SSM2518 if I2C |
69 | select SND_SOC_SSM2602 if SND_SOC_I2C_AND_SPI | 69 | select SND_SOC_SSM2602_SPI if SPI_MASTER |
70 | select SND_SOC_SSM2602_I2C if I2C | ||
70 | select SND_SOC_STA32X if I2C | 71 | select SND_SOC_STA32X if I2C |
71 | select SND_SOC_STA529 if I2C | 72 | select SND_SOC_STA529 if I2C |
72 | select SND_SOC_STAC9766 if SND_SOC_AC97_BUS | 73 | select SND_SOC_STAC9766 if SND_SOC_AC97_BUS |
@@ -342,6 +343,14 @@ config SND_SOC_SSM2518 | |||
342 | config SND_SOC_SSM2602 | 343 | config SND_SOC_SSM2602 |
343 | tristate | 344 | tristate |
344 | 345 | ||
346 | config SND_SOC_SSM2602_SPI | ||
347 | select SND_SOC_SSM2602 | ||
348 | tristate | ||
349 | |||
350 | config SND_SOC_SSM2602_I2C | ||
351 | select SND_SOC_SSM2602 | ||
352 | tristate | ||
353 | |||
345 | config SND_SOC_STA32X | 354 | config SND_SOC_STA32X |
346 | tristate | 355 | tristate |
347 | 356 | ||
diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile index bc126764a44d..e7a2fb91148f 100644 --- a/sound/soc/codecs/Makefile +++ b/sound/soc/codecs/Makefile | |||
@@ -58,6 +58,8 @@ snd-soc-spdif-tx-objs := spdif_transmitter.o | |||
58 | snd-soc-spdif-rx-objs := spdif_receiver.o | 58 | snd-soc-spdif-rx-objs := spdif_receiver.o |
59 | snd-soc-ssm2518-objs := ssm2518.o | 59 | snd-soc-ssm2518-objs := ssm2518.o |
60 | snd-soc-ssm2602-objs := ssm2602.o | 60 | snd-soc-ssm2602-objs := ssm2602.o |
61 | snd-soc-ssm2602-spi-objs := ssm2602-spi.o | ||
62 | snd-soc-ssm2602-i2c-objs := ssm2602-i2c.o | ||
61 | snd-soc-sta32x-objs := sta32x.o | 63 | snd-soc-sta32x-objs := sta32x.o |
62 | snd-soc-sta529-objs := sta529.o | 64 | snd-soc-sta529-objs := sta529.o |
63 | snd-soc-stac9766-objs := stac9766.o | 65 | snd-soc-stac9766-objs := stac9766.o |
@@ -188,6 +190,8 @@ obj-$(CONFIG_SND_SOC_SN95031) +=snd-soc-sn95031.o | |||
188 | obj-$(CONFIG_SND_SOC_SPDIF) += snd-soc-spdif-rx.o snd-soc-spdif-tx.o | 190 | obj-$(CONFIG_SND_SOC_SPDIF) += snd-soc-spdif-rx.o snd-soc-spdif-tx.o |
189 | obj-$(CONFIG_SND_SOC_SSM2518) += snd-soc-ssm2518.o | 191 | obj-$(CONFIG_SND_SOC_SSM2518) += snd-soc-ssm2518.o |
190 | obj-$(CONFIG_SND_SOC_SSM2602) += snd-soc-ssm2602.o | 192 | obj-$(CONFIG_SND_SOC_SSM2602) += snd-soc-ssm2602.o |
193 | obj-$(CONFIG_SND_SOC_SSM2602_SPI) += snd-soc-ssm2602-spi.o | ||
194 | obj-$(CONFIG_SND_SOC_SSM2602_I2C) += snd-soc-ssm2602-i2c.o | ||
191 | obj-$(CONFIG_SND_SOC_STA32X) += snd-soc-sta32x.o | 195 | obj-$(CONFIG_SND_SOC_STA32X) += snd-soc-sta32x.o |
192 | obj-$(CONFIG_SND_SOC_STA529) += snd-soc-sta529.o | 196 | obj-$(CONFIG_SND_SOC_STA529) += snd-soc-sta529.o |
193 | obj-$(CONFIG_SND_SOC_STAC9766) += snd-soc-stac9766.o | 197 | obj-$(CONFIG_SND_SOC_STAC9766) += snd-soc-stac9766.o |
diff --git a/sound/soc/codecs/ssm2602-i2c.c b/sound/soc/codecs/ssm2602-i2c.c new file mode 100644 index 000000000000..abd63d537173 --- /dev/null +++ b/sound/soc/codecs/ssm2602-i2c.c | |||
@@ -0,0 +1,57 @@ | |||
1 | /* | ||
2 | * SSM2602/SSM2603/SSM2604 I2C audio driver | ||
3 | * | ||
4 | * Copyright 2014 Analog Devices Inc. | ||
5 | * | ||
6 | * Licensed under the GPL-2. | ||
7 | */ | ||
8 | |||
9 | #include <linux/module.h> | ||
10 | #include <linux/i2c.h> | ||
11 | #include <linux/regmap.h> | ||
12 | |||
13 | #include <sound/soc.h> | ||
14 | |||
15 | #include "ssm2602.h" | ||
16 | |||
17 | /* | ||
18 | * ssm2602 2 wire address is determined by GPIO5 | ||
19 | * state during powerup. | ||
20 | * low = 0x1a | ||
21 | * high = 0x1b | ||
22 | */ | ||
23 | static int ssm2602_i2c_probe(struct i2c_client *client, | ||
24 | const struct i2c_device_id *id) | ||
25 | { | ||
26 | return ssm2602_probe(&client->dev, id->driver_data, | ||
27 | devm_regmap_init_i2c(client, &ssm2602_regmap_config)); | ||
28 | } | ||
29 | |||
30 | static int ssm2602_i2c_remove(struct i2c_client *client) | ||
31 | { | ||
32 | snd_soc_unregister_codec(&client->dev); | ||
33 | return 0; | ||
34 | } | ||
35 | |||
36 | static const struct i2c_device_id ssm2602_i2c_id[] = { | ||
37 | { "ssm2602", SSM2602 }, | ||
38 | { "ssm2603", SSM2602 }, | ||
39 | { "ssm2604", SSM2604 }, | ||
40 | { } | ||
41 | }; | ||
42 | MODULE_DEVICE_TABLE(i2c, ssm2602_i2c_id); | ||
43 | |||
44 | static struct i2c_driver ssm2602_i2c_driver = { | ||
45 | .driver = { | ||
46 | .name = "ssm2602", | ||
47 | .owner = THIS_MODULE, | ||
48 | }, | ||
49 | .probe = ssm2602_i2c_probe, | ||
50 | .remove = ssm2602_i2c_remove, | ||
51 | .id_table = ssm2602_i2c_id, | ||
52 | }; | ||
53 | module_i2c_driver(ssm2602_i2c_driver); | ||
54 | |||
55 | MODULE_DESCRIPTION("ASoC SSM2602/SSM2603/SSM2604 I2C driver"); | ||
56 | MODULE_AUTHOR("Cliff Cai"); | ||
57 | MODULE_LICENSE("GPL"); | ||
diff --git a/sound/soc/codecs/ssm2602-spi.c b/sound/soc/codecs/ssm2602-spi.c new file mode 100644 index 000000000000..2bf55e24a7bb --- /dev/null +++ b/sound/soc/codecs/ssm2602-spi.c | |||
@@ -0,0 +1,41 @@ | |||
1 | /* | ||
2 | * SSM2602 SPI audio driver | ||
3 | * | ||
4 | * Copyright 2014 Analog Devices Inc. | ||
5 | * | ||
6 | * Licensed under the GPL-2. | ||
7 | */ | ||
8 | |||
9 | #include <linux/module.h> | ||
10 | #include <linux/spi/spi.h> | ||
11 | #include <linux/regmap.h> | ||
12 | |||
13 | #include <sound/soc.h> | ||
14 | |||
15 | #include "ssm2602.h" | ||
16 | |||
17 | static int ssm2602_spi_probe(struct spi_device *spi) | ||
18 | { | ||
19 | return ssm2602_probe(&spi->dev, SSM2602, | ||
20 | devm_regmap_init_spi(spi, &ssm2602_regmap_config)); | ||
21 | } | ||
22 | |||
23 | static int ssm2602_spi_remove(struct spi_device *spi) | ||
24 | { | ||
25 | snd_soc_unregister_codec(&spi->dev); | ||
26 | return 0; | ||
27 | } | ||
28 | |||
29 | static struct spi_driver ssm2602_spi_driver = { | ||
30 | .driver = { | ||
31 | .name = "ssm2602", | ||
32 | .owner = THIS_MODULE, | ||
33 | }, | ||
34 | .probe = ssm2602_spi_probe, | ||
35 | .remove = ssm2602_spi_remove, | ||
36 | }; | ||
37 | module_spi_driver(ssm2602_spi_driver); | ||
38 | |||
39 | MODULE_DESCRIPTION("ASoC SSM2602 SPI driver"); | ||
40 | MODULE_AUTHOR("Cliff Cai"); | ||
41 | MODULE_LICENSE("GPL"); | ||
diff --git a/sound/soc/codecs/ssm2602.c b/sound/soc/codecs/ssm2602.c index f444d585b916..49d28eaa6d73 100644 --- a/sound/soc/codecs/ssm2602.c +++ b/sound/soc/codecs/ssm2602.c | |||
@@ -27,28 +27,16 @@ | |||
27 | */ | 27 | */ |
28 | 28 | ||
29 | #include <linux/module.h> | 29 | #include <linux/module.h> |
30 | #include <linux/moduleparam.h> | ||
31 | #include <linux/init.h> | ||
32 | #include <linux/delay.h> | ||
33 | #include <linux/pm.h> | ||
34 | #include <linux/i2c.h> | ||
35 | #include <linux/spi/spi.h> | ||
36 | #include <linux/regmap.h> | 30 | #include <linux/regmap.h> |
37 | #include <linux/slab.h> | 31 | #include <linux/slab.h> |
38 | #include <sound/core.h> | 32 | |
39 | #include <sound/pcm.h> | 33 | #include <sound/pcm.h> |
40 | #include <sound/pcm_params.h> | 34 | #include <sound/pcm_params.h> |
41 | #include <sound/soc.h> | 35 | #include <sound/soc.h> |
42 | #include <sound/initval.h> | ||
43 | #include <sound/tlv.h> | 36 | #include <sound/tlv.h> |
44 | 37 | ||
45 | #include "ssm2602.h" | 38 | #include "ssm2602.h" |
46 | 39 | ||
47 | enum ssm2602_type { | ||
48 | SSM2602, | ||
49 | SSM2604, | ||
50 | }; | ||
51 | |||
52 | /* codec private data */ | 40 | /* codec private data */ |
53 | struct ssm2602_priv { | 41 | struct ssm2602_priv { |
54 | unsigned int sysclk; | 42 | unsigned int sysclk; |
@@ -529,7 +517,7 @@ static int ssm2602_resume(struct snd_soc_codec *codec) | |||
529 | return 0; | 517 | return 0; |
530 | } | 518 | } |
531 | 519 | ||
532 | static int ssm2602_probe(struct snd_soc_codec *codec) | 520 | static int ssm2602_codec_probe(struct snd_soc_codec *codec) |
533 | { | 521 | { |
534 | struct ssm2602_priv *ssm2602 = snd_soc_codec_get_drvdata(codec); | 522 | struct ssm2602_priv *ssm2602 = snd_soc_codec_get_drvdata(codec); |
535 | struct snd_soc_dapm_context *dapm = &codec->dapm; | 523 | struct snd_soc_dapm_context *dapm = &codec->dapm; |
@@ -554,7 +542,7 @@ static int ssm2602_probe(struct snd_soc_codec *codec) | |||
554 | ARRAY_SIZE(ssm2602_routes)); | 542 | ARRAY_SIZE(ssm2602_routes)); |
555 | } | 543 | } |
556 | 544 | ||
557 | static int ssm2604_probe(struct snd_soc_codec *codec) | 545 | static int ssm2604_codec_probe(struct snd_soc_codec *codec) |
558 | { | 546 | { |
559 | struct snd_soc_dapm_context *dapm = &codec->dapm; | 547 | struct snd_soc_dapm_context *dapm = &codec->dapm; |
560 | int ret; | 548 | int ret; |
@@ -568,7 +556,7 @@ static int ssm2604_probe(struct snd_soc_codec *codec) | |||
568 | ARRAY_SIZE(ssm2604_routes)); | 556 | ARRAY_SIZE(ssm2604_routes)); |
569 | } | 557 | } |
570 | 558 | ||
571 | static int ssm260x_probe(struct snd_soc_codec *codec) | 559 | static int ssm260x_codec_probe(struct snd_soc_codec *codec) |
572 | { | 560 | { |
573 | struct ssm2602_priv *ssm2602 = snd_soc_codec_get_drvdata(codec); | 561 | struct ssm2602_priv *ssm2602 = snd_soc_codec_get_drvdata(codec); |
574 | int ret; | 562 | int ret; |
@@ -597,10 +585,10 @@ static int ssm260x_probe(struct snd_soc_codec *codec) | |||
597 | 585 | ||
598 | switch (ssm2602->type) { | 586 | switch (ssm2602->type) { |
599 | case SSM2602: | 587 | case SSM2602: |
600 | ret = ssm2602_probe(codec); | 588 | ret = ssm2602_codec_probe(codec); |
601 | break; | 589 | break; |
602 | case SSM2604: | 590 | case SSM2604: |
603 | ret = ssm2604_probe(codec); | 591 | ret = ssm2604_codec_probe(codec); |
604 | break; | 592 | break; |
605 | } | 593 | } |
606 | 594 | ||
@@ -620,7 +608,7 @@ static int ssm2602_remove(struct snd_soc_codec *codec) | |||
620 | } | 608 | } |
621 | 609 | ||
622 | static struct snd_soc_codec_driver soc_codec_dev_ssm2602 = { | 610 | static struct snd_soc_codec_driver soc_codec_dev_ssm2602 = { |
623 | .probe = ssm260x_probe, | 611 | .probe = ssm260x_codec_probe, |
624 | .remove = ssm2602_remove, | 612 | .remove = ssm2602_remove, |
625 | .suspend = ssm2602_suspend, | 613 | .suspend = ssm2602_suspend, |
626 | .resume = ssm2602_resume, | 614 | .resume = ssm2602_resume, |
@@ -639,7 +627,7 @@ static bool ssm2602_register_volatile(struct device *dev, unsigned int reg) | |||
639 | return reg == SSM2602_RESET; | 627 | return reg == SSM2602_RESET; |
640 | } | 628 | } |
641 | 629 | ||
642 | static const struct regmap_config ssm2602_regmap_config = { | 630 | const struct regmap_config ssm2602_regmap_config = { |
643 | .val_bits = 9, | 631 | .val_bits = 9, |
644 | .reg_bits = 7, | 632 | .reg_bits = 7, |
645 | 633 | ||
@@ -650,134 +638,28 @@ static const struct regmap_config ssm2602_regmap_config = { | |||
650 | .reg_defaults_raw = ssm2602_reg, | 638 | .reg_defaults_raw = ssm2602_reg, |
651 | .num_reg_defaults_raw = ARRAY_SIZE(ssm2602_reg), | 639 | .num_reg_defaults_raw = ARRAY_SIZE(ssm2602_reg), |
652 | }; | 640 | }; |
641 | EXPORT_SYMBOL_GPL(ssm2602_regmap_config); | ||
653 | 642 | ||
654 | #if defined(CONFIG_SPI_MASTER) | 643 | int ssm2602_probe(struct device *dev, enum ssm2602_type type, |
655 | static int ssm2602_spi_probe(struct spi_device *spi) | 644 | struct regmap *regmap) |
656 | { | 645 | { |
657 | struct ssm2602_priv *ssm2602; | 646 | struct ssm2602_priv *ssm2602; |
658 | int ret; | ||
659 | |||
660 | ssm2602 = devm_kzalloc(&spi->dev, sizeof(struct ssm2602_priv), | ||
661 | GFP_KERNEL); | ||
662 | if (ssm2602 == NULL) | ||
663 | return -ENOMEM; | ||
664 | |||
665 | spi_set_drvdata(spi, ssm2602); | ||
666 | ssm2602->type = SSM2602; | ||
667 | |||
668 | ssm2602->regmap = devm_regmap_init_spi(spi, &ssm2602_regmap_config); | ||
669 | if (IS_ERR(ssm2602->regmap)) | ||
670 | return PTR_ERR(ssm2602->regmap); | ||
671 | |||
672 | ret = snd_soc_register_codec(&spi->dev, | ||
673 | &soc_codec_dev_ssm2602, &ssm2602_dai, 1); | ||
674 | return ret; | ||
675 | } | ||
676 | 647 | ||
677 | static int ssm2602_spi_remove(struct spi_device *spi) | 648 | if (IS_ERR(regmap)) |
678 | { | 649 | return PTR_ERR(regmap); |
679 | snd_soc_unregister_codec(&spi->dev); | ||
680 | return 0; | ||
681 | } | ||
682 | |||
683 | static struct spi_driver ssm2602_spi_driver = { | ||
684 | .driver = { | ||
685 | .name = "ssm2602", | ||
686 | .owner = THIS_MODULE, | ||
687 | }, | ||
688 | .probe = ssm2602_spi_probe, | ||
689 | .remove = ssm2602_spi_remove, | ||
690 | }; | ||
691 | #endif | ||
692 | |||
693 | #if IS_ENABLED(CONFIG_I2C) | ||
694 | /* | ||
695 | * ssm2602 2 wire address is determined by GPIO5 | ||
696 | * state during powerup. | ||
697 | * low = 0x1a | ||
698 | * high = 0x1b | ||
699 | */ | ||
700 | static int ssm2602_i2c_probe(struct i2c_client *i2c, | ||
701 | const struct i2c_device_id *id) | ||
702 | { | ||
703 | struct ssm2602_priv *ssm2602; | ||
704 | int ret; | ||
705 | 650 | ||
706 | ssm2602 = devm_kzalloc(&i2c->dev, sizeof(struct ssm2602_priv), | 651 | ssm2602 = devm_kzalloc(dev, sizeof(*ssm2602), GFP_KERNEL); |
707 | GFP_KERNEL); | ||
708 | if (ssm2602 == NULL) | 652 | if (ssm2602 == NULL) |
709 | return -ENOMEM; | 653 | return -ENOMEM; |
710 | 654 | ||
711 | i2c_set_clientdata(i2c, ssm2602); | 655 | dev_set_drvdata(dev, ssm2602); |
712 | ssm2602->type = id->driver_data; | 656 | ssm2602->type = SSM2602; |
713 | 657 | ssm2602->regmap = regmap; | |
714 | ssm2602->regmap = devm_regmap_init_i2c(i2c, &ssm2602_regmap_config); | ||
715 | if (IS_ERR(ssm2602->regmap)) | ||
716 | return PTR_ERR(ssm2602->regmap); | ||
717 | |||
718 | ret = snd_soc_register_codec(&i2c->dev, | ||
719 | &soc_codec_dev_ssm2602, &ssm2602_dai, 1); | ||
720 | return ret; | ||
721 | } | ||
722 | |||
723 | static int ssm2602_i2c_remove(struct i2c_client *client) | ||
724 | { | ||
725 | snd_soc_unregister_codec(&client->dev); | ||
726 | return 0; | ||
727 | } | ||
728 | |||
729 | static const struct i2c_device_id ssm2602_i2c_id[] = { | ||
730 | { "ssm2602", SSM2602 }, | ||
731 | { "ssm2603", SSM2602 }, | ||
732 | { "ssm2604", SSM2604 }, | ||
733 | { } | ||
734 | }; | ||
735 | MODULE_DEVICE_TABLE(i2c, ssm2602_i2c_id); | ||
736 | |||
737 | /* corgi i2c codec control layer */ | ||
738 | static struct i2c_driver ssm2602_i2c_driver = { | ||
739 | .driver = { | ||
740 | .name = "ssm2602", | ||
741 | .owner = THIS_MODULE, | ||
742 | }, | ||
743 | .probe = ssm2602_i2c_probe, | ||
744 | .remove = ssm2602_i2c_remove, | ||
745 | .id_table = ssm2602_i2c_id, | ||
746 | }; | ||
747 | #endif | ||
748 | |||
749 | |||
750 | static int __init ssm2602_modinit(void) | ||
751 | { | ||
752 | int ret = 0; | ||
753 | |||
754 | #if defined(CONFIG_SPI_MASTER) | ||
755 | ret = spi_register_driver(&ssm2602_spi_driver); | ||
756 | if (ret) | ||
757 | return ret; | ||
758 | #endif | ||
759 | |||
760 | #if IS_ENABLED(CONFIG_I2C) | ||
761 | ret = i2c_add_driver(&ssm2602_i2c_driver); | ||
762 | if (ret) | ||
763 | return ret; | ||
764 | #endif | ||
765 | |||
766 | return ret; | ||
767 | } | ||
768 | module_init(ssm2602_modinit); | ||
769 | |||
770 | static void __exit ssm2602_exit(void) | ||
771 | { | ||
772 | #if defined(CONFIG_SPI_MASTER) | ||
773 | spi_unregister_driver(&ssm2602_spi_driver); | ||
774 | #endif | ||
775 | 658 | ||
776 | #if IS_ENABLED(CONFIG_I2C) | 659 | return snd_soc_register_codec(dev, &soc_codec_dev_ssm2602, |
777 | i2c_del_driver(&ssm2602_i2c_driver); | 660 | &ssm2602_dai, 1); |
778 | #endif | ||
779 | } | 661 | } |
780 | module_exit(ssm2602_exit); | 662 | EXPORT_SYMBOL_GPL(ssm2602_probe); |
781 | 663 | ||
782 | MODULE_DESCRIPTION("ASoC SSM2602/SSM2603/SSM2604 driver"); | 664 | MODULE_DESCRIPTION("ASoC SSM2602/SSM2603/SSM2604 driver"); |
783 | MODULE_AUTHOR("Cliff Cai"); | 665 | MODULE_AUTHOR("Cliff Cai"); |
diff --git a/sound/soc/codecs/ssm2602.h b/sound/soc/codecs/ssm2602.h index fbd07d7b73ca..747538847689 100644 --- a/sound/soc/codecs/ssm2602.h +++ b/sound/soc/codecs/ssm2602.h | |||
@@ -28,6 +28,20 @@ | |||
28 | #ifndef _SSM2602_H | 28 | #ifndef _SSM2602_H |
29 | #define _SSM2602_H | 29 | #define _SSM2602_H |
30 | 30 | ||
31 | #include <linux/regmap.h> | ||
32 | |||
33 | struct device; | ||
34 | |||
35 | enum ssm2602_type { | ||
36 | SSM2602, | ||
37 | SSM2604, | ||
38 | }; | ||
39 | |||
40 | extern const struct regmap_config ssm2602_regmap_config; | ||
41 | |||
42 | int ssm2602_probe(struct device *dev, enum ssm2602_type type, | ||
43 | struct regmap *regmap); | ||
44 | |||
31 | /* SSM2602 Codec Register definitions */ | 45 | /* SSM2602 Codec Register definitions */ |
32 | 46 | ||
33 | #define SSM2602_LINVOL 0x00 | 47 | #define SSM2602_LINVOL 0x00 |