aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/sound/soc.h8
-rw-r--r--sound/soc/soc-core.c30
2 files changed, 38 insertions, 0 deletions
diff --git a/include/sound/soc.h b/include/sound/soc.h
index 6424b10ac29..f30f3fe4a41 100644
--- a/include/sound/soc.h
+++ b/include/sound/soc.h
@@ -312,6 +312,10 @@ int snd_soc_default_readable_register(struct snd_soc_codec *codec,
312 unsigned int reg); 312 unsigned int reg);
313int snd_soc_default_writable_register(struct snd_soc_codec *codec, 313int snd_soc_default_writable_register(struct snd_soc_codec *codec,
314 unsigned int reg); 314 unsigned int reg);
315int snd_soc_platform_read(struct snd_soc_platform *platform,
316 unsigned int reg);
317int snd_soc_platform_write(struct snd_soc_platform *platform,
318 unsigned int reg, unsigned int val);
315 319
316/* Utility functions to get clock rates from various things */ 320/* Utility functions to get clock rates from various things */
317int snd_soc_calc_frame_size(int sample_size, int channels, int tdm_slots); 321int snd_soc_calc_frame_size(int sample_size, int channels, int tdm_slots);
@@ -658,6 +662,10 @@ struct snd_soc_platform_driver {
658 /* probe ordering - for components with runtime dependencies */ 662 /* probe ordering - for components with runtime dependencies */
659 int probe_order; 663 int probe_order;
660 int remove_order; 664 int remove_order;
665
666 /* platform IO - used for platform DAPM */
667 unsigned int (*read)(struct snd_soc_platform *, unsigned int);
668 int (*write)(struct snd_soc_platform *, unsigned int, unsigned int);
661}; 669};
662 670
663struct snd_soc_platform { 671struct snd_soc_platform {
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index d49f0ed56f9..d08abf4e3eb 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -1640,6 +1640,36 @@ int snd_soc_codec_writable_register(struct snd_soc_codec *codec,
1640} 1640}
1641EXPORT_SYMBOL_GPL(snd_soc_codec_writable_register); 1641EXPORT_SYMBOL_GPL(snd_soc_codec_writable_register);
1642 1642
1643int snd_soc_platform_read(struct snd_soc_platform *platform,
1644 unsigned int reg)
1645{
1646 unsigned int ret;
1647
1648 if (!platform->driver->read) {
1649 dev_err(platform->dev, "platform has no read back\n");
1650 return -1;
1651 }
1652
1653 ret = platform->driver->read(platform, reg);
1654 dev_dbg(platform->dev, "read %x => %x\n", reg, ret);
1655
1656 return ret;
1657}
1658EXPORT_SYMBOL_GPL(snd_soc_platform_read);
1659
1660int snd_soc_platform_write(struct snd_soc_platform *platform,
1661 unsigned int reg, unsigned int val)
1662{
1663 if (!platform->driver->write) {
1664 dev_err(platform->dev, "platform has no write back\n");
1665 return -1;
1666 }
1667
1668 dev_dbg(platform->dev, "write %x = %x\n", reg, val);
1669 return platform->driver->write(platform, reg, val);
1670}
1671EXPORT_SYMBOL_GPL(snd_soc_platform_write);
1672
1643/** 1673/**
1644 * snd_soc_new_ac97_codec - initailise AC97 device 1674 * snd_soc_new_ac97_codec - initailise AC97 device
1645 * @codec: audio codec 1675 * @codec: audio codec