linux/sound/soc/s3c24xx/s3c-i2s-v2.h
<<
>>
Prefs
   1/* sound/soc/s3c24xx/s3c-i2s-v2.h
   2 *
   3 * ALSA Soc Audio Layer - S3C_I2SV2 I2S driver
   4 *
   5 * Copyright (c) 2007 Simtec Electronics
   6 *      http://armlinux.simtec.co.uk/
   7 *      Ben Dooks <ben@simtec.co.uk>
   8 *
   9 *  This program is free software; you can redistribute  it and/or modify it
  10 *  under  the terms of  the GNU General  Public License as published by the
  11 *  Free Software Foundation;  either version 2 of the  License, or (at your
  12 *  option) any later version.
  13*/
  14
  15/* This code is the core support for the I2S block found in a number of
  16 * Samsung SoC devices which is unofficially named I2S-V2. Currently the
  17 * S3C2412 and the S3C64XX series use this block to provide 1 or 2 I2S
  18 * channels via configurable GPIO.
  19 */
  20
  21#ifndef __SND_SOC_S3C24XX_S3C_I2SV2_I2S_H
  22#define __SND_SOC_S3C24XX_S3C_I2SV2_I2S_H __FILE__
  23
  24#define S3C_I2SV2_DIV_BCLK      (1)
  25#define S3C_I2SV2_DIV_RCLK      (2)
  26#define S3C_I2SV2_DIV_PRESCALER (3)
  27
  28/**
  29 * struct s3c_i2sv2_info - S3C I2S-V2 information
  30 * @dev: The parent device passed to use from the probe.
  31 * @regs: The pointer to the device registe block.
  32 * @master: True if the I2S core is the I2S bit clock master.
  33 * @dma_playback: DMA information for playback channel.
  34 * @dma_capture: DMA information for capture channel.
  35 * @suspend_iismod: PM save for the IISMOD register.
  36 * @suspend_iiscon: PM save for the IISCON register.
  37 * @suspend_iispsr: PM save for the IISPSR register.
  38 *
  39 * This is the private codec state for the hardware associated with an
  40 * I2S channel such as the register mappings and clock sources.
  41 */
  42struct s3c_i2sv2_info {
  43        struct device   *dev;
  44        void __iomem    *regs;
  45
  46        struct clk      *iis_pclk;
  47        struct clk      *iis_cclk;
  48        struct clk      *iis_clk;
  49
  50        unsigned char    master;
  51
  52        struct s3c24xx_pcm_dma_params   *dma_playback;
  53        struct s3c24xx_pcm_dma_params   *dma_capture;
  54
  55        u32              suspend_iismod;
  56        u32              suspend_iiscon;
  57        u32              suspend_iispsr;
  58};
  59
  60struct s3c_i2sv2_rate_calc {
  61        unsigned int    clk_div;        /* for prescaler */
  62        unsigned int    fs_div;         /* for root frame clock */
  63};
  64
  65extern int s3c_i2sv2_iis_calc_rate(struct s3c_i2sv2_rate_calc *info,
  66                                   unsigned int *fstab,
  67                                   unsigned int rate, struct clk *clk);
  68
  69/**
  70 * s3c_i2sv2_probe - probe for i2s device helper
  71 * @pdev: The platform device supplied to the original probe.
  72 * @dai: The ASoC DAI structure supplied to the original probe.
  73 * @i2s: Our local i2s structure to fill in.
  74 * @base: The base address for the registers.
  75 */
  76extern int s3c_i2sv2_probe(struct platform_device *pdev,
  77                           struct snd_soc_dai *dai,
  78                           struct s3c_i2sv2_info *i2s,
  79                           unsigned long base);
  80
  81/**
  82 * s3c_i2sv2_register_dai - register dai with soc core
  83 * @dai: The snd_soc_dai structure to register
  84 *
  85 * Fill in any missing fields and then register the given dai with the
  86 * soc core.
  87 */
  88extern int s3c_i2sv2_register_dai(struct snd_soc_dai *dai);
  89
  90#endif /* __SND_SOC_S3C24XX_S3C_I2SV2_I2S_H */
  91