123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- /*
- * mcpdm.h -- Defines for McPDM driver
- *
- * Author: Jorge Eduardo Candelaria <x0107209@ti.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA
- *
- */
- /* McPDM registers */
- #define MCPDM_REVISION 0x00
- #define MCPDM_SYSCONFIG 0x10
- #define MCPDM_IRQSTATUS_RAW 0x24
- #define MCPDM_IRQSTATUS 0x28
- #define MCPDM_IRQENABLE_SET 0x2C
- #define MCPDM_IRQENABLE_CLR 0x30
- #define MCPDM_IRQWAKE_EN 0x34
- #define MCPDM_DMAENABLE_SET 0x38
- #define MCPDM_DMAENABLE_CLR 0x3C
- #define MCPDM_DMAWAKEEN 0x40
- #define MCPDM_CTRL 0x44
- #define MCPDM_DN_DATA 0x48
- #define MCPDM_UP_DATA 0x4C
- #define MCPDM_FIFO_CTRL_DN 0x50
- #define MCPDM_FIFO_CTRL_UP 0x54
- #define MCPDM_DN_OFFSET 0x58
- /*
- * MCPDM_IRQ bit fields
- * IRQSTATUS_RAW, IRQSTATUS, IRQENABLE_SET, IRQENABLE_CLR
- */
- #define MCPDM_DN_IRQ (1 << 0)
- #define MCPDM_DN_IRQ_EMPTY (1 << 1)
- #define MCPDM_DN_IRQ_ALMST_EMPTY (1 << 2)
- #define MCPDM_DN_IRQ_FULL (1 << 3)
- #define MCPDM_UP_IRQ (1 << 8)
- #define MCPDM_UP_IRQ_EMPTY (1 << 9)
- #define MCPDM_UP_IRQ_ALMST_FULL (1 << 10)
- #define MCPDM_UP_IRQ_FULL (1 << 11)
- #define MCPDM_DOWNLINK_IRQ_MASK 0x00F
- #define MCPDM_UPLINK_IRQ_MASK 0xF00
- /*
- * MCPDM_DMAENABLE bit fields
- */
- #define DMA_DN_ENABLE 0x1
- #define DMA_UP_ENABLE 0x2
- /*
- * MCPDM_CTRL bit fields
- */
- #define PDM_UP1_EN 0x0001
- #define PDM_UP2_EN 0x0002
- #define PDM_UP3_EN 0x0004
- #define PDM_DN1_EN 0x0008
- #define PDM_DN2_EN 0x0010
- #define PDM_DN3_EN 0x0020
- #define PDM_DN4_EN 0x0040
- #define PDM_DN5_EN 0x0080
- #define PDMOUTFORMAT 0x0100
- #define CMD_INT 0x0200
- #define STATUS_INT 0x0400
- #define SW_UP_RST 0x0800
- #define SW_DN_RST 0x1000
- #define PDM_UP_MASK 0x007
- #define PDM_DN_MASK 0x0F8
- #define PDM_CMD_MASK 0x200
- #define PDM_STATUS_MASK 0x400
- #define PDMOUTFORMAT_LJUST (0 << 8)
- #define PDMOUTFORMAT_RJUST (1 << 8)
- /*
- * MCPDM_FIFO_CTRL bit fields
- */
- #define UP_THRES_MAX 0xF
- #define DN_THRES_MAX 0xF
- /*
- * MCPDM_DN_OFFSET bit fields
- */
- #define DN_OFST_RX1_EN 0x0001
- #define DN_OFST_RX2_EN 0x0100
- #define DN_OFST_RX1 1
- #define DN_OFST_RX2 9
- #define DN_OFST_MAX 0x1F
- #define MCPDM_UPLINK 1
- #define MCPDM_DOWNLINK 2
- struct omap_mcpdm_link {
- int irq_mask;
- int threshold;
- int format;
- int channels;
- };
- struct omap_mcpdm_platform_data {
- unsigned long phys_base;
- u16 irq;
- };
- struct omap_mcpdm {
- struct device *dev;
- unsigned long phys_base;
- void __iomem *io_base;
- u8 free;
- int irq;
- spinlock_t lock;
- struct omap_mcpdm_platform_data *pdata;
- struct clk *clk;
- struct omap_mcpdm_link *downlink;
- struct omap_mcpdm_link *uplink;
- struct completion irq_completion;
- int dn_channels;
- int up_channels;
- };
- extern void omap_mcpdm_start(int stream);
- extern void omap_mcpdm_stop(int stream);
- extern int omap_mcpdm_capture_open(struct omap_mcpdm_link *uplink);
- extern int omap_mcpdm_playback_open(struct omap_mcpdm_link *downlink);
- extern int omap_mcpdm_capture_close(struct omap_mcpdm_link *uplink);
- extern int omap_mcpdm_playback_close(struct omap_mcpdm_link *downlink);
- extern int omap_mcpdm_request(void);
- extern void omap_mcpdm_free(void);
- extern int omap_mcpdm_set_offset(int offset1, int offset2);
- int __devinit omap_mcpdm_probe(struct platform_device *pdev);
- int __devexit omap_mcpdm_remove(struct platform_device *pdev);
|