| /* sound/soc/samsung/lpass.h |
| * |
| * ALSA SoC Audio Layer - Samsung Audio Subsystem driver |
| * |
| * Copyright (c) 2013 Samsung Electronics Co. Ltd. |
| * Yeongman Seo <yman.seo@samsung.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. |
| */ |
| |
| #ifndef __SND_SOC_SAMSUNG_LPASS_H |
| #define __SND_SOC_SAMSUNG_LPASS_H |
| |
| #include <linux/pm_qos.h> |
| |
| /* SFR */ |
| #define LPASS_VERSION (0x00) |
| #define LPASS_CA5_SW_RESET (0x04) |
| #define LPASS_CORE_SW_RESET (0x08) |
| #define LPASS_MIF_POWER (0x10) |
| #define LPASS_CA5_BOOTADDR (0x20) |
| #define LPASS_CA5_DBG (0x30) |
| #define LPASS_SW_INTR_CA5 (0x40) |
| #define LPASS_INTR_CA5_STATUS (0x44) |
| #define LPASS_INTR_CA5_MASK (0x48) |
| #define LPASS_SW_INTR_CPU (0x50) |
| #define LPASS_INTR_CPU_STATUS (0x54) |
| #define LPASS_INTR_CPU_MASK (0x58) |
| |
| /* SW_RESET */ |
| #define LPASS_SW_RESET_CA5 (1 << 0) |
| #define LPASS_SW_RESET_SB (1 << 11) |
| #define LPASS_SW_RESET_UART (1 << 10) |
| #ifndef CONFIG_SOC_EXYNOS8890 |
| #define LPASS_SW_RESET_PCM (1 << 9) |
| #define LPASS_SW_RESET_I2S (1 << 8) |
| #else |
| #define LPASS_SW_RESET_PCM (1 << 8) |
| #define LPASS_SW_RESET_I2S (1 << 7) |
| #endif |
| #define LPASS_SW_RESET_TIMER (1 << 2) |
| #define LPASS_SW_RESET_MEM (1 << 1) |
| #define LPASS_SW_RESET_DMA (1 << 0) |
| |
| /* Interrupt mask */ |
| #define LPASS_INTR_APM (1 << 9) |
| #define LPASS_INTR_MIF (1 << 8) |
| #define LPASS_INTR_TIMER (1 << 7) |
| #define LPASS_INTR_DMA (1 << 6) |
| #define LPASS_INTR_GPIO (1 << 5) |
| #define LPASS_INTR_I2S (1 << 4) |
| #define LPASS_INTR_PCM (1 << 3) |
| #define LPASS_INTR_SB (1 << 2) |
| #define LPASS_INTR_UART (1 << 1) |
| #define LPASS_INTR_SFR (1 << 0) |
| |
| #define LPCLK_CTRLID_OFFLOAD (1 << 0) |
| #define LPCLK_CTRLID_LEGACY (1 << 1) |
| #define LPCLK_CTRLID_RECORD (1 << 2) |
| |
| struct lpass_info { |
| spinlock_t lock; |
| bool valid; |
| bool enabled; |
| int ver; |
| struct platform_device *pdev; |
| void __iomem *regs; |
| void __iomem *regs_s; |
| void __iomem *mem; |
| int mem_size; |
| void __iomem *sysmmu; |
| struct iommu_domain *domain; |
| struct proc_dir_entry *proc_file; |
| struct clk *clk_dmac; |
| struct clk *clk_sramc; |
| struct clk *clk_intr; |
| struct clk *clk_timer; |
| struct regmap *pmureg; |
| atomic_t dma_use_cnt; |
| atomic_t use_cnt; |
| atomic_t stream_cnt; |
| bool display_on; |
| bool uhqa_on; |
| bool i2s_master_mode; |
| struct pm_qos_request aud_cluster1_qos; |
| struct pm_qos_request aud_cluster0_qos; |
| struct pm_qos_request aud_mif_qos; |
| struct pm_qos_request aud_int_qos; |
| int cpu_qos; |
| int kfc_qos; |
| int mif_qos; |
| int int_qos; |
| }; |
| |
| extern void __iomem *lpass_get_regs(void); |
| extern void __iomem *lpass_get_regs_s(void); |
| extern void __iomem *lpass_get_mem(void); |
| |
| extern struct clk *lpass_get_i2s_opclk(int clk_id); |
| extern void lpass_reg_dump(void); |
| |
| extern void __iomem *lpass_cmu_save[]; |
| extern int lpass_get_clk(struct device *dev, struct lpass_info *lpass); |
| extern void lpass_put_clk(struct lpass_info *lpass); |
| extern int lpass_set_clk_heirachy(struct device *dev); |
| extern void lpass_set_mux_pll(void); |
| extern void lpass_set_mux_osc(void); |
| extern void lpass_enable_pll(bool on); |
| extern void lpass_retention_pad_reg(void); |
| extern void lpass_release_pad_reg(void); |
| extern void lpass_reset_clk_default(void); |
| extern void lpass_init_clk_gate(void); |
| extern void lpass_disable_mif_status(bool on); |
| |
| extern void lpass_update_lpclock(u32 ctrlid, bool idle); |
| extern void lpass_update_lpclock_impl(struct device *dev, u32 ctrlid, bool idle); |
| |
| int lpass_get_dram_usage_count(void); |
| void lpass_inc_dram_usage_count(void); |
| void lpass_dec_dram_usage_count(void); |
| extern void update_cp_available(bool); |
| extern bool lpass_i2s_master_mode(void); |
| #ifdef CONFIG_SND_SAMSUNG_SEIREN_OFFLOAD |
| extern void lpass_set_cpu_lock(int level); |
| #endif |
| |
| #endif /* __SND_SOC_SAMSUNG_LPASS_H */ |