linux/sound/soc/codecs/ics43432.c
<<
>>
Prefs
   1/*
   2 * I2S MEMS microphone driver for InvenSense ICS-43432
   3 *
   4 * - Non configurable.
   5 * - I2S interface, 64 BCLs per frame, 32 bits per channel, 24 bit data
   6 *
   7 * Copyright (c) 2015 Axis Communications AB
   8 *
   9 * Licensed under GPL v2.
  10 */
  11
  12#include <linux/module.h>
  13#include <linux/init.h>
  14#include <linux/slab.h>
  15#include <sound/core.h>
  16#include <sound/pcm.h>
  17#include <sound/pcm_params.h>
  18#include <sound/soc.h>
  19#include <sound/initval.h>
  20#include <sound/tlv.h>
  21
  22#define ICS43432_RATE_MIN 7190 /* Hz, from data sheet */
  23#define ICS43432_RATE_MAX 52800  /* Hz, from data sheet */
  24
  25#define ICS43432_FORMATS (SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32)
  26
  27static struct snd_soc_dai_driver ics43432_dai = {
  28        .name = "ics43432-hifi",
  29        .capture = {
  30                .stream_name = "Capture",
  31                .channels_min = 1,
  32                .channels_max = 2,
  33                .rate_min = ICS43432_RATE_MIN,
  34                .rate_max = ICS43432_RATE_MAX,
  35                .rates = SNDRV_PCM_RATE_CONTINUOUS,
  36                .formats = ICS43432_FORMATS,
  37        },
  38};
  39
  40static struct snd_soc_codec_driver ics43432_codec_driver = {
  41};
  42
  43static int ics43432_probe(struct platform_device *pdev)
  44{
  45        return snd_soc_register_codec(&pdev->dev, &ics43432_codec_driver,
  46                        &ics43432_dai, 1);
  47}
  48
  49static int ics43432_remove(struct platform_device *pdev)
  50{
  51        snd_soc_unregister_codec(&pdev->dev);
  52        return 0;
  53}
  54
  55#ifdef CONFIG_OF
  56static const struct of_device_id ics43432_ids[] = {
  57        { .compatible = "invensense,ics43432", },
  58        { }
  59};
  60MODULE_DEVICE_TABLE(of, ics43432_ids);
  61#endif
  62
  63static struct platform_driver ics43432_driver = {
  64        .driver = {
  65                .name = "ics43432",
  66                .of_match_table = of_match_ptr(ics43432_ids),
  67        },
  68        .probe = ics43432_probe,
  69        .remove = ics43432_remove,
  70};
  71
  72module_platform_driver(ics43432_driver);
  73
  74MODULE_DESCRIPTION("ASoC ICS43432 driver");
  75MODULE_AUTHOR("Ricard Wanderlof <ricardw@axis.com>");
  76MODULE_LICENSE("GPL v2");
  77