diff options
| -rw-r--r-- | sound/soc/codecs/Kconfig | 18 | ||||
| -rw-r--r-- | sound/soc/codecs/Makefile | 4 | ||||
| -rw-r--r-- | sound/soc/codecs/pcm512x-i2c.c | 71 | ||||
| -rw-r--r-- | sound/soc/codecs/pcm512x-spi.c | 69 | ||||
| -rw-r--r-- | sound/soc/codecs/pcm512x.c | 134 | ||||
| -rw-r--r-- | sound/soc/codecs/pcm512x.h | 9 |
6 files changed, 176 insertions, 129 deletions
diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig index fa47a8336be3..cebe3ceef4bd 100644 --- a/sound/soc/codecs/Kconfig +++ b/sound/soc/codecs/Kconfig | |||
| @@ -59,7 +59,8 @@ config SND_SOC_ALL_CODECS | |||
| 59 | select SND_SOC_PCM1681 if I2C | 59 | select SND_SOC_PCM1681 if I2C |
| 60 | select SND_SOC_PCM1792A if SPI_MASTER | 60 | select SND_SOC_PCM1792A if SPI_MASTER |
| 61 | select SND_SOC_PCM3008 | 61 | select SND_SOC_PCM3008 |
| 62 | select SND_SOC_PCM512x if SND_SOC_I2C_AND_SPI | 62 | select SND_SOC_PCM512x_I2C if I2C |
| 63 | select SND_SOC_PCM512x_SPI if SPI_MASTER | ||
| 63 | select SND_SOC_RT5631 if I2C | 64 | select SND_SOC_RT5631 if I2C |
| 64 | select SND_SOC_RT5640 if I2C | 65 | select SND_SOC_RT5640 if I2C |
| 65 | select SND_SOC_SGTL5000 if I2C | 66 | select SND_SOC_SGTL5000 if I2C |
| @@ -315,8 +316,19 @@ config SND_SOC_PCM3008 | |||
| 315 | tristate | 316 | tristate |
| 316 | 317 | ||
| 317 | config SND_SOC_PCM512x | 318 | config SND_SOC_PCM512x |
| 318 | tristate "Texas Instruments PCM512x CODECs" | 319 | tristate |
| 319 | select REGMAP | 320 | |
| 321 | config SND_SOC_PCM512x_I2C | ||
| 322 | tristate "Texas Instruments PCM512x CODECs - I2C" | ||
| 323 | depends on I2C | ||
| 324 | select SND_SOC_PCM512x | ||
| 325 | select REGMAP_I2C | ||
| 326 | |||
| 327 | config SND_SOC_PCM512x_SPI | ||
| 328 | tristate "Texas Instruments PCM512x CODECs - SPI" | ||
| 329 | depends on SPI_MASTER | ||
| 330 | select SND_SOC_PCM512x | ||
| 331 | select REGMAP_SPI | ||
| 320 | 332 | ||
| 321 | config SND_SOC_RT5631 | 333 | config SND_SOC_RT5631 |
| 322 | tristate | 334 | tristate |
diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile index d3b536fc075d..c1191c05c88e 100644 --- a/sound/soc/codecs/Makefile +++ b/sound/soc/codecs/Makefile | |||
| @@ -47,6 +47,8 @@ snd-soc-pcm1681-objs := pcm1681.o | |||
| 47 | snd-soc-pcm1792a-codec-objs := pcm1792a.o | 47 | snd-soc-pcm1792a-codec-objs := pcm1792a.o |
| 48 | snd-soc-pcm3008-objs := pcm3008.o | 48 | snd-soc-pcm3008-objs := pcm3008.o |
| 49 | snd-soc-pcm512x-objs := pcm512x.o | 49 | snd-soc-pcm512x-objs := pcm512x.o |
| 50 | snd-soc-pcm512x-i2c-objs := pcm512x-i2c.o | ||
| 51 | snd-soc-pcm512x-spi-objs := pcm512x-spi.o | ||
| 50 | snd-soc-rt5631-objs := rt5631.o | 52 | snd-soc-rt5631-objs := rt5631.o |
| 51 | snd-soc-rt5640-objs := rt5640.o | 53 | snd-soc-rt5640-objs := rt5640.o |
| 52 | snd-soc-sgtl5000-objs := sgtl5000.o | 54 | snd-soc-sgtl5000-objs := sgtl5000.o |
| @@ -181,6 +183,8 @@ obj-$(CONFIG_SND_SOC_PCM1681) += snd-soc-pcm1681.o | |||
| 181 | obj-$(CONFIG_SND_SOC_PCM1792A) += snd-soc-pcm1792a-codec.o | 183 | obj-$(CONFIG_SND_SOC_PCM1792A) += snd-soc-pcm1792a-codec.o |
| 182 | obj-$(CONFIG_SND_SOC_PCM3008) += snd-soc-pcm3008.o | 184 | obj-$(CONFIG_SND_SOC_PCM3008) += snd-soc-pcm3008.o |
| 183 | obj-$(CONFIG_SND_SOC_PCM512x) += snd-soc-pcm512x.o | 185 | obj-$(CONFIG_SND_SOC_PCM512x) += snd-soc-pcm512x.o |
| 186 | obj-$(CONFIG_SND_SOC_PCM512x_I2C) += snd-soc-pcm512x-i2c.o | ||
| 187 | obj-$(CONFIG_SND_SOC_PCM512x_SPI) += snd-soc-pcm512x-spi.o | ||
| 184 | obj-$(CONFIG_SND_SOC_RT5631) += snd-soc-rt5631.o | 188 | obj-$(CONFIG_SND_SOC_RT5631) += snd-soc-rt5631.o |
| 185 | obj-$(CONFIG_SND_SOC_RT5640) += snd-soc-rt5640.o | 189 | obj-$(CONFIG_SND_SOC_RT5640) += snd-soc-rt5640.o |
| 186 | obj-$(CONFIG_SND_SOC_SGTL5000) += snd-soc-sgtl5000.o | 190 | obj-$(CONFIG_SND_SOC_SGTL5000) += snd-soc-sgtl5000.o |
diff --git a/sound/soc/codecs/pcm512x-i2c.c b/sound/soc/codecs/pcm512x-i2c.c new file mode 100644 index 000000000000..4d62230bd378 --- /dev/null +++ b/sound/soc/codecs/pcm512x-i2c.c | |||
| @@ -0,0 +1,71 @@ | |||
| 1 | /* | ||
| 2 | * Driver for the PCM512x CODECs | ||
| 3 | * | ||
| 4 | * Author: Mark Brown <broonie@linaro.org> | ||
| 5 | * Copyright 2014 Linaro Ltd | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or | ||
| 8 | * modify it under the terms of the GNU General Public License | ||
| 9 | * version 2 as published by the Free Software Foundation. | ||
| 10 | * | ||
| 11 | * This program is distributed in the hope that it will be useful, but | ||
| 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
| 14 | * General Public License for more details. | ||
| 15 | */ | ||
| 16 | |||
| 17 | #include <linux/init.h> | ||
| 18 | #include <linux/module.h> | ||
| 19 | #include <linux/i2c.h> | ||
| 20 | |||
| 21 | #include "pcm512x.h" | ||
| 22 | |||
| 23 | static int pcm512x_i2c_probe(struct i2c_client *i2c, | ||
| 24 | const struct i2c_device_id *id) | ||
| 25 | { | ||
| 26 | struct regmap *regmap; | ||
| 27 | |||
| 28 | regmap = devm_regmap_init_i2c(i2c, &pcm512x_regmap); | ||
| 29 | if (IS_ERR(regmap)) | ||
| 30 | return PTR_ERR(regmap); | ||
| 31 | |||
| 32 | return pcm512x_probe(&i2c->dev, regmap); | ||
| 33 | } | ||
| 34 | |||
| 35 | static int pcm512x_i2c_remove(struct i2c_client *i2c) | ||
| 36 | { | ||
| 37 | pcm512x_remove(&i2c->dev); | ||
| 38 | return 0; | ||
| 39 | } | ||
| 40 | |||
| 41 | static const struct i2c_device_id pcm512x_i2c_id[] = { | ||
| 42 | { "pcm5121", }, | ||
| 43 | { "pcm5122", }, | ||
| 44 | { } | ||
| 45 | }; | ||
| 46 | MODULE_DEVICE_TABLE(i2c, pcm512x_i2c_id); | ||
| 47 | |||
| 48 | static const struct of_device_id pcm512x_of_match[] = { | ||
| 49 | { .compatible = "ti,pcm5121", }, | ||
| 50 | { .compatible = "ti,pcm5122", }, | ||
| 51 | { } | ||
| 52 | }; | ||
| 53 | MODULE_DEVICE_TABLE(of, pcm512x_of_match); | ||
| 54 | |||
| 55 | static struct i2c_driver pcm512x_i2c_driver = { | ||
| 56 | .probe = pcm512x_i2c_probe, | ||
| 57 | .remove = pcm512x_i2c_remove, | ||
| 58 | .id_table = pcm512x_i2c_id, | ||
| 59 | .driver = { | ||
| 60 | .name = "pcm512x", | ||
| 61 | .owner = THIS_MODULE, | ||
| 62 | .of_match_table = pcm512x_of_match, | ||
| 63 | .pm = &pcm512x_pm_ops, | ||
| 64 | }, | ||
| 65 | }; | ||
| 66 | |||
| 67 | module_i2c_driver(pcm512x_i2c_driver); | ||
| 68 | |||
| 69 | MODULE_DESCRIPTION("ASoC PCM512x codec driver - I2C"); | ||
| 70 | MODULE_AUTHOR("Mark Brown <broonie@linaro.org>"); | ||
| 71 | MODULE_LICENSE("GPL v2"); | ||
diff --git a/sound/soc/codecs/pcm512x-spi.c b/sound/soc/codecs/pcm512x-spi.c new file mode 100644 index 000000000000..f297058c0038 --- /dev/null +++ b/sound/soc/codecs/pcm512x-spi.c | |||
| @@ -0,0 +1,69 @@ | |||
| 1 | /* | ||
| 2 | * Driver for the PCM512x CODECs | ||
| 3 | * | ||
| 4 | * Author: Mark Brown <broonie@linaro.org> | ||
| 5 | * Copyright 2014 Linaro Ltd | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or | ||
| 8 | * modify it under the terms of the GNU General Public License | ||
| 9 | * version 2 as published by the Free Software Foundation. | ||
| 10 | * | ||
| 11 | * This program is distributed in the hope that it will be useful, but | ||
| 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
| 14 | * General Public License for more details. | ||
| 15 | */ | ||
| 16 | |||
| 17 | #include <linux/init.h> | ||
| 18 | #include <linux/module.h> | ||
| 19 | #include <linux/spi/spi.h> | ||
| 20 | |||
| 21 | #include "pcm512x.h" | ||
| 22 | |||
| 23 | static int pcm512x_spi_probe(struct spi_device *spi) | ||
| 24 | { | ||
| 25 | struct regmap *regmap; | ||
| 26 | int ret; | ||
| 27 | |||
| 28 | regmap = devm_regmap_init_spi(spi, &pcm512x_regmap); | ||
| 29 | if (IS_ERR(regmap)) { | ||
| 30 | ret = PTR_ERR(regmap); | ||
| 31 | return ret; | ||
| 32 | } | ||
| 33 | |||
| 34 | return pcm512x_probe(&spi->dev, regmap); | ||
| 35 | } | ||
| 36 | |||
| 37 | static int pcm512x_spi_remove(struct spi_device *spi) | ||
| 38 | { | ||
| 39 | pcm512x_remove(&spi->dev); | ||
| 40 | return 0; | ||
| 41 | } | ||
| 42 | |||
| 43 | static const struct spi_device_id pcm512x_spi_id[] = { | ||
| 44 | { "pcm5121", }, | ||
| 45 | { "pcm5122", }, | ||
| 46 | { }, | ||
| 47 | }; | ||
| 48 | MODULE_DEVICE_TABLE(spi, pcm512x_spi_id); | ||
| 49 | |||
| 50 | static const struct of_device_id pcm512x_of_match[] = { | ||
| 51 | { .compatible = "ti,pcm5121", }, | ||
| 52 | { .compatible = "ti,pcm5122", }, | ||
| 53 | { } | ||
| 54 | }; | ||
| 55 | MODULE_DEVICE_TABLE(of, pcm512x_of_match); | ||
| 56 | |||
| 57 | static struct spi_driver pcm512x_spi_driver = { | ||
| 58 | .probe = pcm512x_spi_probe, | ||
| 59 | .remove = pcm512x_spi_remove, | ||
| 60 | .id_table = pcm512x_spi_id, | ||
| 61 | .driver = { | ||
| 62 | .name = "pcm512x", | ||
| 63 | .owner = THIS_MODULE, | ||
| 64 | .of_match_table = pcm512x_of_match, | ||
| 65 | .pm = &pcm512x_pm_ops, | ||
| 66 | }, | ||
| 67 | }; | ||
| 68 | |||
| 69 | module_spi_driver(pcm512x_spi_driver); | ||
diff --git a/sound/soc/codecs/pcm512x.c b/sound/soc/codecs/pcm512x.c index 3a0bbb6ab242..0c907051cc7b 100644 --- a/sound/soc/codecs/pcm512x.c +++ b/sound/soc/codecs/pcm512x.c | |||
| @@ -18,11 +18,9 @@ | |||
| 18 | #include <linux/init.h> | 18 | #include <linux/init.h> |
| 19 | #include <linux/module.h> | 19 | #include <linux/module.h> |
| 20 | #include <linux/clk.h> | 20 | #include <linux/clk.h> |
| 21 | #include <linux/i2c.h> | ||
| 22 | #include <linux/pm_runtime.h> | 21 | #include <linux/pm_runtime.h> |
| 23 | #include <linux/regmap.h> | 22 | #include <linux/regmap.h> |
| 24 | #include <linux/regulator/consumer.h> | 23 | #include <linux/regulator/consumer.h> |
| 25 | #include <linux/spi/spi.h> | ||
| 26 | #include <sound/soc.h> | 24 | #include <sound/soc.h> |
| 27 | #include <sound/soc-dapm.h> | 25 | #include <sound/soc-dapm.h> |
| 28 | #include <sound/tlv.h> | 26 | #include <sound/tlv.h> |
| @@ -375,7 +373,7 @@ static const struct regmap_range_cfg pcm512x_range = { | |||
| 375 | .window_start = 0, .window_len = 0x100, | 373 | .window_start = 0, .window_len = 0x100, |
| 376 | }; | 374 | }; |
| 377 | 375 | ||
| 378 | static const struct regmap_config pcm512x_regmap = { | 376 | const struct regmap_config pcm512x_regmap = { |
| 379 | .reg_bits = 8, | 377 | .reg_bits = 8, |
| 380 | .val_bits = 8, | 378 | .val_bits = 8, |
| 381 | 379 | ||
| @@ -390,15 +388,9 @@ static const struct regmap_config pcm512x_regmap = { | |||
| 390 | .num_reg_defaults = ARRAY_SIZE(pcm512x_reg_defaults), | 388 | .num_reg_defaults = ARRAY_SIZE(pcm512x_reg_defaults), |
| 391 | .cache_type = REGCACHE_RBTREE, | 389 | .cache_type = REGCACHE_RBTREE, |
| 392 | }; | 390 | }; |
| 391 | EXPORT_SYMBOL_GPL(pcm512x_regmap); | ||
| 393 | 392 | ||
| 394 | static const struct of_device_id pcm512x_of_match[] = { | 393 | int pcm512x_probe(struct device *dev, struct regmap *regmap) |
| 395 | { .compatible = "ti,pcm5121", }, | ||
| 396 | { .compatible = "ti,pcm5122", }, | ||
| 397 | { } | ||
| 398 | }; | ||
| 399 | MODULE_DEVICE_TABLE(of, pcm512x_of_match); | ||
| 400 | |||
| 401 | static int pcm512x_probe(struct device *dev, struct regmap *regmap) | ||
| 402 | { | 394 | { |
| 403 | struct pcm512x_priv *pcm512x; | 395 | struct pcm512x_priv *pcm512x; |
| 404 | int i, ret; | 396 | int i, ret; |
| @@ -510,8 +502,9 @@ err: | |||
| 510 | pcm512x->supplies); | 502 | pcm512x->supplies); |
| 511 | return ret; | 503 | return ret; |
| 512 | } | 504 | } |
| 505 | EXPORT_SYMBOL_GPL(pcm512x_probe); | ||
| 513 | 506 | ||
| 514 | static void pcm512x_remove(struct device *dev) | 507 | void pcm512x_remove(struct device *dev) |
| 515 | { | 508 | { |
| 516 | struct pcm512x_priv *pcm512x = dev_get_drvdata(dev); | 509 | struct pcm512x_priv *pcm512x = dev_get_drvdata(dev); |
| 517 | 510 | ||
| @@ -522,6 +515,7 @@ static void pcm512x_remove(struct device *dev) | |||
| 522 | regulator_bulk_disable(ARRAY_SIZE(pcm512x->supplies), | 515 | regulator_bulk_disable(ARRAY_SIZE(pcm512x->supplies), |
| 523 | pcm512x->supplies); | 516 | pcm512x->supplies); |
| 524 | } | 517 | } |
| 518 | EXPORT_SYMBOL_GPL(pcm512x_remove); | ||
| 525 | 519 | ||
| 526 | static int pcm512x_suspend(struct device *dev) | 520 | static int pcm512x_suspend(struct device *dev) |
| 527 | { | 521 | { |
| @@ -585,122 +579,10 @@ static int pcm512x_resume(struct device *dev) | |||
| 585 | return 0; | 579 | return 0; |
| 586 | } | 580 | } |
| 587 | 581 | ||
| 588 | static const struct dev_pm_ops pcm512x_pm_ops = { | 582 | const struct dev_pm_ops pcm512x_pm_ops = { |
| 589 | SET_RUNTIME_PM_OPS(pcm512x_suspend, pcm512x_resume, NULL) | 583 | SET_RUNTIME_PM_OPS(pcm512x_suspend, pcm512x_resume, NULL) |
| 590 | }; | 584 | }; |
| 591 | 585 | EXPORT_SYMBOL_GPL(pcm512x_pm_ops); | |
| 592 | #if IS_ENABLED(CONFIG_I2C) | ||
| 593 | static int pcm512x_i2c_probe(struct i2c_client *i2c, | ||
| 594 | const struct i2c_device_id *id) | ||
| 595 | { | ||
| 596 | struct regmap *regmap; | ||
| 597 | |||
| 598 | regmap = devm_regmap_init_i2c(i2c, &pcm512x_regmap); | ||
| 599 | if (IS_ERR(regmap)) | ||
| 600 | return PTR_ERR(regmap); | ||
| 601 | |||
| 602 | return pcm512x_probe(&i2c->dev, regmap); | ||
| 603 | } | ||
| 604 | |||
| 605 | static int pcm512x_i2c_remove(struct i2c_client *i2c) | ||
| 606 | { | ||
| 607 | pcm512x_remove(&i2c->dev); | ||
| 608 | return 0; | ||
| 609 | } | ||
| 610 | |||
| 611 | static const struct i2c_device_id pcm512x_i2c_id[] = { | ||
| 612 | { "pcm5121", }, | ||
| 613 | { "pcm5122", }, | ||
| 614 | { } | ||
| 615 | }; | ||
| 616 | MODULE_DEVICE_TABLE(i2c, pcm512x_i2c_id); | ||
| 617 | |||
| 618 | static struct i2c_driver pcm512x_i2c_driver = { | ||
| 619 | .probe = pcm512x_i2c_probe, | ||
| 620 | .remove = pcm512x_i2c_remove, | ||
| 621 | .id_table = pcm512x_i2c_id, | ||
| 622 | .driver = { | ||
| 623 | .name = "pcm512x", | ||
| 624 | .owner = THIS_MODULE, | ||
| 625 | .of_match_table = pcm512x_of_match, | ||
| 626 | .pm = &pcm512x_pm_ops, | ||
| 627 | }, | ||
| 628 | }; | ||
| 629 | #endif | ||
| 630 | |||
| 631 | #if defined(CONFIG_SPI_MASTER) | ||
| 632 | static int pcm512x_spi_probe(struct spi_device *spi) | ||
| 633 | { | ||
| 634 | struct regmap *regmap; | ||
| 635 | int ret; | ||
| 636 | |||
| 637 | regmap = devm_regmap_init_spi(spi, &pcm512x_regmap); | ||
| 638 | if (IS_ERR(regmap)) { | ||
| 639 | ret = PTR_ERR(regmap); | ||
| 640 | return ret; | ||
| 641 | } | ||
| 642 | |||
| 643 | return pcm512x_probe(&spi->dev, regmap); | ||
| 644 | } | ||
| 645 | |||
| 646 | static int pcm512x_spi_remove(struct spi_device *spi) | ||
| 647 | { | ||
| 648 | pcm512x_remove(&spi->dev); | ||
| 649 | return 0; | ||
| 650 | } | ||
| 651 | |||
| 652 | static const struct spi_device_id pcm512x_spi_id[] = { | ||
| 653 | { "pcm5121", }, | ||
| 654 | { "pcm5122", }, | ||
| 655 | { }, | ||
| 656 | }; | ||
| 657 | MODULE_DEVICE_TABLE(spi, pcm512x_spi_id); | ||
| 658 | |||
| 659 | static struct spi_driver pcm512x_spi_driver = { | ||
| 660 | .probe = pcm512x_spi_probe, | ||
| 661 | .remove = pcm512x_spi_remove, | ||
| 662 | .id_table = pcm512x_spi_id, | ||
| 663 | .driver = { | ||
| 664 | .name = "pcm512x", | ||
| 665 | .owner = THIS_MODULE, | ||
| 666 | .of_match_table = pcm512x_of_match, | ||
| 667 | .pm = &pcm512x_pm_ops, | ||
| 668 | }, | ||
| 669 | }; | ||
| 670 | #endif | ||
| 671 | |||
| 672 | static int __init pcm512x_modinit(void) | ||
| 673 | { | ||
| 674 | int ret = 0; | ||
| 675 | |||
| 676 | #if IS_ENABLED(CONFIG_I2C) | ||
| 677 | ret = i2c_add_driver(&pcm512x_i2c_driver); | ||
| 678 | if (ret) { | ||
| 679 | printk(KERN_ERR "Failed to register pcm512x I2C driver: %d\n", | ||
| 680 | ret); | ||
| 681 | } | ||
| 682 | #endif | ||
| 683 | #if defined(CONFIG_SPI_MASTER) | ||
| 684 | ret = spi_register_driver(&pcm512x_spi_driver); | ||
| 685 | if (ret != 0) { | ||
| 686 | printk(KERN_ERR "Failed to register pcm512x SPI driver: %d\n", | ||
| 687 | ret); | ||
| 688 | } | ||
| 689 | #endif | ||
| 690 | return ret; | ||
| 691 | } | ||
| 692 | module_init(pcm512x_modinit); | ||
| 693 | |||
| 694 | static void __exit pcm512x_exit(void) | ||
| 695 | { | ||
| 696 | #if IS_ENABLED(CONFIG_I2C) | ||
| 697 | i2c_del_driver(&pcm512x_i2c_driver); | ||
| 698 | #endif | ||
| 699 | #if defined(CONFIG_SPI_MASTER) | ||
| 700 | spi_unregister_driver(&pcm512x_spi_driver); | ||
| 701 | #endif | ||
| 702 | } | ||
| 703 | module_exit(pcm512x_exit); | ||
| 704 | 586 | ||
| 705 | MODULE_DESCRIPTION("ASoC PCM512x codec driver"); | 587 | MODULE_DESCRIPTION("ASoC PCM512x codec driver"); |
| 706 | MODULE_AUTHOR("Mark Brown <broonie@linaro.org>"); | 588 | MODULE_AUTHOR("Mark Brown <broonie@linaro.org>"); |
diff --git a/sound/soc/codecs/pcm512x.h b/sound/soc/codecs/pcm512x.h index ac4a52c9ccf4..6ee76aaca09a 100644 --- a/sound/soc/codecs/pcm512x.h +++ b/sound/soc/codecs/pcm512x.h | |||
| @@ -17,6 +17,9 @@ | |||
| 17 | #ifndef _SND_SOC_PCM512X | 17 | #ifndef _SND_SOC_PCM512X |
| 18 | #define _SND_SOC_PCM512X | 18 | #define _SND_SOC_PCM512X |
| 19 | 19 | ||
| 20 | #include <linux/pm.h> | ||
| 21 | #include <linux/regmap.h> | ||
| 22 | |||
| 20 | #define PCM512x_VIRT_BASE 0x100 | 23 | #define PCM512x_VIRT_BASE 0x100 |
| 21 | #define PCM512x_PAGE_LEN 0x100 | 24 | #define PCM512x_PAGE_LEN 0x100 |
| 22 | #define PCM512x_PAGE_BASE(n) (PCM512x_VIRT_BASE + (PCM512x_PAGE_LEN * n)) | 25 | #define PCM512x_PAGE_BASE(n) (PCM512x_VIRT_BASE + (PCM512x_PAGE_LEN * n)) |
| @@ -159,4 +162,10 @@ | |||
| 159 | #define PCM512x_AGBR_SHIFT 0 | 162 | #define PCM512x_AGBR_SHIFT 0 |
| 160 | #define PCM512x_AGBL_SHIFT 4 | 163 | #define PCM512x_AGBL_SHIFT 4 |
| 161 | 164 | ||
| 165 | extern const struct dev_pm_ops pcm512x_pm_ops; | ||
| 166 | extern const struct regmap_config pcm512x_regmap; | ||
| 167 | |||
| 168 | int pcm512x_probe(struct device *dev, struct regmap *regmap); | ||
| 169 | void pcm512x_remove(struct device *dev); | ||
| 170 | |||
| 162 | #endif | 171 | #endif |
