162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * HDMI driver definition for TI OMAP4 Processor. 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2010-2011 Texas Instruments Incorporated - https://www.ti.com/ 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#ifndef _HDMI_H 962306a36Sopenharmony_ci#define _HDMI_H 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#include <linux/delay.h> 1262306a36Sopenharmony_ci#include <linux/io.h> 1362306a36Sopenharmony_ci#include <linux/platform_device.h> 1462306a36Sopenharmony_ci#include <linux/hdmi.h> 1562306a36Sopenharmony_ci#include <video/omapfb_dss.h> 1662306a36Sopenharmony_ci#include <sound/omap-hdmi-audio.h> 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci#include "dss.h" 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci/* HDMI Wrapper */ 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci#define HDMI_WP_REVISION 0x0 2362306a36Sopenharmony_ci#define HDMI_WP_SYSCONFIG 0x10 2462306a36Sopenharmony_ci#define HDMI_WP_IRQSTATUS_RAW 0x24 2562306a36Sopenharmony_ci#define HDMI_WP_IRQSTATUS 0x28 2662306a36Sopenharmony_ci#define HDMI_WP_IRQENABLE_SET 0x2C 2762306a36Sopenharmony_ci#define HDMI_WP_IRQENABLE_CLR 0x30 2862306a36Sopenharmony_ci#define HDMI_WP_IRQWAKEEN 0x34 2962306a36Sopenharmony_ci#define HDMI_WP_PWR_CTRL 0x40 3062306a36Sopenharmony_ci#define HDMI_WP_DEBOUNCE 0x44 3162306a36Sopenharmony_ci#define HDMI_WP_VIDEO_CFG 0x50 3262306a36Sopenharmony_ci#define HDMI_WP_VIDEO_SIZE 0x60 3362306a36Sopenharmony_ci#define HDMI_WP_VIDEO_TIMING_H 0x68 3462306a36Sopenharmony_ci#define HDMI_WP_VIDEO_TIMING_V 0x6C 3562306a36Sopenharmony_ci#define HDMI_WP_CLK 0x70 3662306a36Sopenharmony_ci#define HDMI_WP_AUDIO_CFG 0x80 3762306a36Sopenharmony_ci#define HDMI_WP_AUDIO_CFG2 0x84 3862306a36Sopenharmony_ci#define HDMI_WP_AUDIO_CTRL 0x88 3962306a36Sopenharmony_ci#define HDMI_WP_AUDIO_DATA 0x8C 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci/* HDMI WP IRQ flags */ 4262306a36Sopenharmony_ci#define HDMI_IRQ_CORE (1 << 0) 4362306a36Sopenharmony_ci#define HDMI_IRQ_OCP_TIMEOUT (1 << 4) 4462306a36Sopenharmony_ci#define HDMI_IRQ_AUDIO_FIFO_UNDERFLOW (1 << 8) 4562306a36Sopenharmony_ci#define HDMI_IRQ_AUDIO_FIFO_OVERFLOW (1 << 9) 4662306a36Sopenharmony_ci#define HDMI_IRQ_AUDIO_FIFO_SAMPLE_REQ (1 << 10) 4762306a36Sopenharmony_ci#define HDMI_IRQ_VIDEO_VSYNC (1 << 16) 4862306a36Sopenharmony_ci#define HDMI_IRQ_VIDEO_FRAME_DONE (1 << 17) 4962306a36Sopenharmony_ci#define HDMI_IRQ_PHY_LINE5V_ASSERT (1 << 24) 5062306a36Sopenharmony_ci#define HDMI_IRQ_LINK_CONNECT (1 << 25) 5162306a36Sopenharmony_ci#define HDMI_IRQ_LINK_DISCONNECT (1 << 26) 5262306a36Sopenharmony_ci#define HDMI_IRQ_PLL_LOCK (1 << 29) 5362306a36Sopenharmony_ci#define HDMI_IRQ_PLL_UNLOCK (1 << 30) 5462306a36Sopenharmony_ci#define HDMI_IRQ_PLL_RECAL (1 << 31) 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci/* HDMI PLL */ 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci#define PLLCTRL_PLL_CONTROL 0x0 5962306a36Sopenharmony_ci#define PLLCTRL_PLL_STATUS 0x4 6062306a36Sopenharmony_ci#define PLLCTRL_PLL_GO 0x8 6162306a36Sopenharmony_ci#define PLLCTRL_CFG1 0xC 6262306a36Sopenharmony_ci#define PLLCTRL_CFG2 0x10 6362306a36Sopenharmony_ci#define PLLCTRL_CFG3 0x14 6462306a36Sopenharmony_ci#define PLLCTRL_SSC_CFG1 0x18 6562306a36Sopenharmony_ci#define PLLCTRL_SSC_CFG2 0x1C 6662306a36Sopenharmony_ci#define PLLCTRL_CFG4 0x20 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ci/* HDMI PHY */ 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ci#define HDMI_TXPHY_TX_CTRL 0x0 7162306a36Sopenharmony_ci#define HDMI_TXPHY_DIGITAL_CTRL 0x4 7262306a36Sopenharmony_ci#define HDMI_TXPHY_POWER_CTRL 0x8 7362306a36Sopenharmony_ci#define HDMI_TXPHY_PAD_CFG_CTRL 0xC 7462306a36Sopenharmony_ci#define HDMI_TXPHY_BIST_CONTROL 0x1C 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_cienum hdmi_pll_pwr { 7762306a36Sopenharmony_ci HDMI_PLLPWRCMD_ALLOFF = 0, 7862306a36Sopenharmony_ci HDMI_PLLPWRCMD_PLLONLY = 1, 7962306a36Sopenharmony_ci HDMI_PLLPWRCMD_BOTHON_ALLCLKS = 2, 8062306a36Sopenharmony_ci HDMI_PLLPWRCMD_BOTHON_NOPHYCLK = 3 8162306a36Sopenharmony_ci}; 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_cienum hdmi_phy_pwr { 8462306a36Sopenharmony_ci HDMI_PHYPWRCMD_OFF = 0, 8562306a36Sopenharmony_ci HDMI_PHYPWRCMD_LDOON = 1, 8662306a36Sopenharmony_ci HDMI_PHYPWRCMD_TXON = 2 8762306a36Sopenharmony_ci}; 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_cienum hdmi_core_hdmi_dvi { 9062306a36Sopenharmony_ci HDMI_DVI = 0, 9162306a36Sopenharmony_ci HDMI_HDMI = 1 9262306a36Sopenharmony_ci}; 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_cienum hdmi_packing_mode { 9562306a36Sopenharmony_ci HDMI_PACK_10b_RGB_YUV444 = 0, 9662306a36Sopenharmony_ci HDMI_PACK_24b_RGB_YUV444_YUV422 = 1, 9762306a36Sopenharmony_ci HDMI_PACK_20b_YUV422 = 2, 9862306a36Sopenharmony_ci HDMI_PACK_ALREADYPACKED = 7 9962306a36Sopenharmony_ci}; 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_cienum hdmi_stereo_channels { 10262306a36Sopenharmony_ci HDMI_AUDIO_STEREO_NOCHANNELS = 0, 10362306a36Sopenharmony_ci HDMI_AUDIO_STEREO_ONECHANNEL = 1, 10462306a36Sopenharmony_ci HDMI_AUDIO_STEREO_TWOCHANNELS = 2, 10562306a36Sopenharmony_ci HDMI_AUDIO_STEREO_THREECHANNELS = 3, 10662306a36Sopenharmony_ci HDMI_AUDIO_STEREO_FOURCHANNELS = 4 10762306a36Sopenharmony_ci}; 10862306a36Sopenharmony_ci 10962306a36Sopenharmony_cienum hdmi_audio_type { 11062306a36Sopenharmony_ci HDMI_AUDIO_TYPE_LPCM = 0, 11162306a36Sopenharmony_ci HDMI_AUDIO_TYPE_IEC = 1 11262306a36Sopenharmony_ci}; 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_cienum hdmi_audio_justify { 11562306a36Sopenharmony_ci HDMI_AUDIO_JUSTIFY_LEFT = 0, 11662306a36Sopenharmony_ci HDMI_AUDIO_JUSTIFY_RIGHT = 1 11762306a36Sopenharmony_ci}; 11862306a36Sopenharmony_ci 11962306a36Sopenharmony_cienum hdmi_audio_sample_order { 12062306a36Sopenharmony_ci HDMI_AUDIO_SAMPLE_RIGHT_FIRST = 0, 12162306a36Sopenharmony_ci HDMI_AUDIO_SAMPLE_LEFT_FIRST = 1 12262306a36Sopenharmony_ci}; 12362306a36Sopenharmony_ci 12462306a36Sopenharmony_cienum hdmi_audio_samples_perword { 12562306a36Sopenharmony_ci HDMI_AUDIO_ONEWORD_ONESAMPLE = 0, 12662306a36Sopenharmony_ci HDMI_AUDIO_ONEWORD_TWOSAMPLES = 1 12762306a36Sopenharmony_ci}; 12862306a36Sopenharmony_ci 12962306a36Sopenharmony_cienum hdmi_audio_sample_size_omap { 13062306a36Sopenharmony_ci HDMI_AUDIO_SAMPLE_16BITS = 0, 13162306a36Sopenharmony_ci HDMI_AUDIO_SAMPLE_24BITS = 1 13262306a36Sopenharmony_ci}; 13362306a36Sopenharmony_ci 13462306a36Sopenharmony_cienum hdmi_audio_transf_mode { 13562306a36Sopenharmony_ci HDMI_AUDIO_TRANSF_DMA = 0, 13662306a36Sopenharmony_ci HDMI_AUDIO_TRANSF_IRQ = 1 13762306a36Sopenharmony_ci}; 13862306a36Sopenharmony_ci 13962306a36Sopenharmony_cienum hdmi_audio_blk_strt_end_sig { 14062306a36Sopenharmony_ci HDMI_AUDIO_BLOCK_SIG_STARTEND_ON = 0, 14162306a36Sopenharmony_ci HDMI_AUDIO_BLOCK_SIG_STARTEND_OFF = 1 14262306a36Sopenharmony_ci}; 14362306a36Sopenharmony_ci 14462306a36Sopenharmony_cienum hdmi_core_audio_layout { 14562306a36Sopenharmony_ci HDMI_AUDIO_LAYOUT_2CH = 0, 14662306a36Sopenharmony_ci HDMI_AUDIO_LAYOUT_8CH = 1, 14762306a36Sopenharmony_ci HDMI_AUDIO_LAYOUT_6CH = 2 14862306a36Sopenharmony_ci}; 14962306a36Sopenharmony_ci 15062306a36Sopenharmony_cienum hdmi_core_cts_mode { 15162306a36Sopenharmony_ci HDMI_AUDIO_CTS_MODE_HW = 0, 15262306a36Sopenharmony_ci HDMI_AUDIO_CTS_MODE_SW = 1 15362306a36Sopenharmony_ci}; 15462306a36Sopenharmony_ci 15562306a36Sopenharmony_cienum hdmi_audio_mclk_mode { 15662306a36Sopenharmony_ci HDMI_AUDIO_MCLK_128FS = 0, 15762306a36Sopenharmony_ci HDMI_AUDIO_MCLK_256FS = 1, 15862306a36Sopenharmony_ci HDMI_AUDIO_MCLK_384FS = 2, 15962306a36Sopenharmony_ci HDMI_AUDIO_MCLK_512FS = 3, 16062306a36Sopenharmony_ci HDMI_AUDIO_MCLK_768FS = 4, 16162306a36Sopenharmony_ci HDMI_AUDIO_MCLK_1024FS = 5, 16262306a36Sopenharmony_ci HDMI_AUDIO_MCLK_1152FS = 6, 16362306a36Sopenharmony_ci HDMI_AUDIO_MCLK_192FS = 7 16462306a36Sopenharmony_ci}; 16562306a36Sopenharmony_ci 16662306a36Sopenharmony_cistruct hdmi_video_format { 16762306a36Sopenharmony_ci enum hdmi_packing_mode packing_mode; 16862306a36Sopenharmony_ci u32 y_res; /* Line per panel */ 16962306a36Sopenharmony_ci u32 x_res; /* pixel per line */ 17062306a36Sopenharmony_ci}; 17162306a36Sopenharmony_ci 17262306a36Sopenharmony_cistruct hdmi_config { 17362306a36Sopenharmony_ci struct omap_video_timings timings; 17462306a36Sopenharmony_ci struct hdmi_avi_infoframe infoframe; 17562306a36Sopenharmony_ci enum hdmi_core_hdmi_dvi hdmi_dvi_mode; 17662306a36Sopenharmony_ci}; 17762306a36Sopenharmony_ci 17862306a36Sopenharmony_cistruct hdmi_audio_format { 17962306a36Sopenharmony_ci enum hdmi_stereo_channels stereo_channels; 18062306a36Sopenharmony_ci u8 active_chnnls_msk; 18162306a36Sopenharmony_ci enum hdmi_audio_type type; 18262306a36Sopenharmony_ci enum hdmi_audio_justify justification; 18362306a36Sopenharmony_ci enum hdmi_audio_sample_order sample_order; 18462306a36Sopenharmony_ci enum hdmi_audio_samples_perword samples_per_word; 18562306a36Sopenharmony_ci enum hdmi_audio_sample_size_omap sample_size; 18662306a36Sopenharmony_ci enum hdmi_audio_blk_strt_end_sig en_sig_blk_strt_end; 18762306a36Sopenharmony_ci}; 18862306a36Sopenharmony_ci 18962306a36Sopenharmony_cistruct hdmi_audio_dma { 19062306a36Sopenharmony_ci u8 transfer_size; 19162306a36Sopenharmony_ci u8 block_size; 19262306a36Sopenharmony_ci enum hdmi_audio_transf_mode mode; 19362306a36Sopenharmony_ci u16 fifo_threshold; 19462306a36Sopenharmony_ci}; 19562306a36Sopenharmony_ci 19662306a36Sopenharmony_cistruct hdmi_core_audio_i2s_config { 19762306a36Sopenharmony_ci u8 in_length_bits; 19862306a36Sopenharmony_ci u8 justification; 19962306a36Sopenharmony_ci u8 sck_edge_mode; 20062306a36Sopenharmony_ci u8 vbit; 20162306a36Sopenharmony_ci u8 direction; 20262306a36Sopenharmony_ci u8 shift; 20362306a36Sopenharmony_ci u8 active_sds; 20462306a36Sopenharmony_ci}; 20562306a36Sopenharmony_ci 20662306a36Sopenharmony_cistruct hdmi_core_audio_config { 20762306a36Sopenharmony_ci struct hdmi_core_audio_i2s_config i2s_cfg; 20862306a36Sopenharmony_ci struct snd_aes_iec958 *iec60958_cfg; 20962306a36Sopenharmony_ci bool fs_override; 21062306a36Sopenharmony_ci u32 n; 21162306a36Sopenharmony_ci u32 cts; 21262306a36Sopenharmony_ci u32 aud_par_busclk; 21362306a36Sopenharmony_ci enum hdmi_core_audio_layout layout; 21462306a36Sopenharmony_ci enum hdmi_core_cts_mode cts_mode; 21562306a36Sopenharmony_ci bool use_mclk; 21662306a36Sopenharmony_ci enum hdmi_audio_mclk_mode mclk_mode; 21762306a36Sopenharmony_ci bool en_acr_pkt; 21862306a36Sopenharmony_ci bool en_dsd_audio; 21962306a36Sopenharmony_ci bool en_parallel_aud_input; 22062306a36Sopenharmony_ci bool en_spdif; 22162306a36Sopenharmony_ci}; 22262306a36Sopenharmony_ci 22362306a36Sopenharmony_cistruct hdmi_wp_data { 22462306a36Sopenharmony_ci void __iomem *base; 22562306a36Sopenharmony_ci phys_addr_t phys_base; 22662306a36Sopenharmony_ci}; 22762306a36Sopenharmony_ci 22862306a36Sopenharmony_cistruct hdmi_pll_data { 22962306a36Sopenharmony_ci struct dss_pll pll; 23062306a36Sopenharmony_ci 23162306a36Sopenharmony_ci void __iomem *base; 23262306a36Sopenharmony_ci 23362306a36Sopenharmony_ci struct hdmi_wp_data *wp; 23462306a36Sopenharmony_ci}; 23562306a36Sopenharmony_ci 23662306a36Sopenharmony_cistruct hdmi_phy_data { 23762306a36Sopenharmony_ci void __iomem *base; 23862306a36Sopenharmony_ci 23962306a36Sopenharmony_ci u8 lane_function[4]; 24062306a36Sopenharmony_ci u8 lane_polarity[4]; 24162306a36Sopenharmony_ci}; 24262306a36Sopenharmony_ci 24362306a36Sopenharmony_cistruct hdmi_core_data { 24462306a36Sopenharmony_ci void __iomem *base; 24562306a36Sopenharmony_ci}; 24662306a36Sopenharmony_ci 24762306a36Sopenharmony_cistatic inline void hdmi_write_reg(void __iomem *base_addr, const u32 idx, 24862306a36Sopenharmony_ci u32 val) 24962306a36Sopenharmony_ci{ 25062306a36Sopenharmony_ci __raw_writel(val, base_addr + idx); 25162306a36Sopenharmony_ci} 25262306a36Sopenharmony_ci 25362306a36Sopenharmony_cistatic inline u32 hdmi_read_reg(void __iomem *base_addr, const u32 idx) 25462306a36Sopenharmony_ci{ 25562306a36Sopenharmony_ci return __raw_readl(base_addr + idx); 25662306a36Sopenharmony_ci} 25762306a36Sopenharmony_ci 25862306a36Sopenharmony_ci#define REG_FLD_MOD(base, idx, val, start, end) \ 25962306a36Sopenharmony_ci hdmi_write_reg(base, idx, FLD_MOD(hdmi_read_reg(base, idx),\ 26062306a36Sopenharmony_ci val, start, end)) 26162306a36Sopenharmony_ci#define REG_GET(base, idx, start, end) \ 26262306a36Sopenharmony_ci FLD_GET(hdmi_read_reg(base, idx), start, end) 26362306a36Sopenharmony_ci 26462306a36Sopenharmony_cistatic inline int hdmi_wait_for_bit_change(void __iomem *base_addr, 26562306a36Sopenharmony_ci const u32 idx, int b2, int b1, u32 val) 26662306a36Sopenharmony_ci{ 26762306a36Sopenharmony_ci u32 t = 0, v; 26862306a36Sopenharmony_ci while (val != (v = REG_GET(base_addr, idx, b2, b1))) { 26962306a36Sopenharmony_ci if (t++ > 10000) 27062306a36Sopenharmony_ci return v; 27162306a36Sopenharmony_ci udelay(1); 27262306a36Sopenharmony_ci } 27362306a36Sopenharmony_ci return v; 27462306a36Sopenharmony_ci} 27562306a36Sopenharmony_ci 27662306a36Sopenharmony_ci/* HDMI wrapper funcs */ 27762306a36Sopenharmony_ciint hdmi_wp_video_start(struct hdmi_wp_data *wp); 27862306a36Sopenharmony_civoid hdmi_wp_video_stop(struct hdmi_wp_data *wp); 27962306a36Sopenharmony_civoid hdmi_wp_dump(struct hdmi_wp_data *wp, struct seq_file *s); 28062306a36Sopenharmony_ciu32 hdmi_wp_get_irqstatus(struct hdmi_wp_data *wp); 28162306a36Sopenharmony_civoid hdmi_wp_set_irqstatus(struct hdmi_wp_data *wp, u32 irqstatus); 28262306a36Sopenharmony_civoid hdmi_wp_set_irqenable(struct hdmi_wp_data *wp, u32 mask); 28362306a36Sopenharmony_civoid hdmi_wp_clear_irqenable(struct hdmi_wp_data *wp, u32 mask); 28462306a36Sopenharmony_ciint hdmi_wp_set_phy_pwr(struct hdmi_wp_data *wp, enum hdmi_phy_pwr val); 28562306a36Sopenharmony_ciint hdmi_wp_set_pll_pwr(struct hdmi_wp_data *wp, enum hdmi_pll_pwr val); 28662306a36Sopenharmony_civoid hdmi_wp_video_config_format(struct hdmi_wp_data *wp, 28762306a36Sopenharmony_ci struct hdmi_video_format *video_fmt); 28862306a36Sopenharmony_civoid hdmi_wp_video_config_interface(struct hdmi_wp_data *wp, 28962306a36Sopenharmony_ci struct omap_video_timings *timings); 29062306a36Sopenharmony_civoid hdmi_wp_video_config_timing(struct hdmi_wp_data *wp, 29162306a36Sopenharmony_ci struct omap_video_timings *timings); 29262306a36Sopenharmony_civoid hdmi_wp_init_vid_fmt_timings(struct hdmi_video_format *video_fmt, 29362306a36Sopenharmony_ci struct omap_video_timings *timings, struct hdmi_config *param); 29462306a36Sopenharmony_ciint hdmi_wp_init(struct platform_device *pdev, struct hdmi_wp_data *wp); 29562306a36Sopenharmony_ciphys_addr_t hdmi_wp_get_audio_dma_addr(struct hdmi_wp_data *wp); 29662306a36Sopenharmony_ci 29762306a36Sopenharmony_ci/* HDMI PLL funcs */ 29862306a36Sopenharmony_civoid hdmi_pll_dump(struct hdmi_pll_data *pll, struct seq_file *s); 29962306a36Sopenharmony_civoid hdmi_pll_compute(struct hdmi_pll_data *pll, 30062306a36Sopenharmony_ci unsigned long target_tmds, struct dss_pll_clock_info *pi); 30162306a36Sopenharmony_ciint hdmi_pll_init(struct platform_device *pdev, struct hdmi_pll_data *pll, 30262306a36Sopenharmony_ci struct hdmi_wp_data *wp); 30362306a36Sopenharmony_civoid hdmi_pll_uninit(struct hdmi_pll_data *hpll); 30462306a36Sopenharmony_ci 30562306a36Sopenharmony_ci/* HDMI PHY funcs */ 30662306a36Sopenharmony_ciint hdmi_phy_configure(struct hdmi_phy_data *phy, unsigned long hfbitclk, 30762306a36Sopenharmony_ci unsigned long lfbitclk); 30862306a36Sopenharmony_civoid hdmi_phy_dump(struct hdmi_phy_data *phy, struct seq_file *s); 30962306a36Sopenharmony_ciint hdmi_phy_init(struct platform_device *pdev, struct hdmi_phy_data *phy); 31062306a36Sopenharmony_ciint hdmi_phy_parse_lanes(struct hdmi_phy_data *phy, const u32 *lanes); 31162306a36Sopenharmony_ci 31262306a36Sopenharmony_ci/* HDMI common funcs */ 31362306a36Sopenharmony_ciint hdmi_parse_lanes_of(struct platform_device *pdev, struct device_node *ep, 31462306a36Sopenharmony_ci struct hdmi_phy_data *phy); 31562306a36Sopenharmony_ci 31662306a36Sopenharmony_ci/* Audio funcs */ 31762306a36Sopenharmony_ciint hdmi_compute_acr(u32 pclk, u32 sample_freq, u32 *n, u32 *cts); 31862306a36Sopenharmony_ciint hdmi_wp_audio_enable(struct hdmi_wp_data *wp, bool enable); 31962306a36Sopenharmony_ciint hdmi_wp_audio_core_req_enable(struct hdmi_wp_data *wp, bool enable); 32062306a36Sopenharmony_civoid hdmi_wp_audio_config_format(struct hdmi_wp_data *wp, 32162306a36Sopenharmony_ci struct hdmi_audio_format *aud_fmt); 32262306a36Sopenharmony_civoid hdmi_wp_audio_config_dma(struct hdmi_wp_data *wp, 32362306a36Sopenharmony_ci struct hdmi_audio_dma *aud_dma); 32462306a36Sopenharmony_cistatic inline bool hdmi_mode_has_audio(struct hdmi_config *cfg) 32562306a36Sopenharmony_ci{ 32662306a36Sopenharmony_ci return cfg->hdmi_dvi_mode == HDMI_HDMI ? true : false; 32762306a36Sopenharmony_ci} 32862306a36Sopenharmony_ci 32962306a36Sopenharmony_ci/* HDMI DRV data */ 33062306a36Sopenharmony_cistruct omap_hdmi { 33162306a36Sopenharmony_ci struct mutex lock; 33262306a36Sopenharmony_ci struct platform_device *pdev; 33362306a36Sopenharmony_ci 33462306a36Sopenharmony_ci struct hdmi_wp_data wp; 33562306a36Sopenharmony_ci struct hdmi_pll_data pll; 33662306a36Sopenharmony_ci struct hdmi_phy_data phy; 33762306a36Sopenharmony_ci struct hdmi_core_data core; 33862306a36Sopenharmony_ci 33962306a36Sopenharmony_ci struct hdmi_config cfg; 34062306a36Sopenharmony_ci 34162306a36Sopenharmony_ci struct regulator *vdda_reg; 34262306a36Sopenharmony_ci 34362306a36Sopenharmony_ci bool core_enabled; 34462306a36Sopenharmony_ci 34562306a36Sopenharmony_ci struct omap_dss_device output; 34662306a36Sopenharmony_ci 34762306a36Sopenharmony_ci struct platform_device *audio_pdev; 34862306a36Sopenharmony_ci void (*audio_abort_cb)(struct device *dev); 34962306a36Sopenharmony_ci int wp_idlemode; 35062306a36Sopenharmony_ci 35162306a36Sopenharmony_ci bool audio_configured; 35262306a36Sopenharmony_ci struct omap_dss_audio audio_config; 35362306a36Sopenharmony_ci 35462306a36Sopenharmony_ci /* This lock should be taken when booleans bellow are touched. */ 35562306a36Sopenharmony_ci spinlock_t audio_playing_lock; 35662306a36Sopenharmony_ci bool audio_playing; 35762306a36Sopenharmony_ci bool display_enabled; 35862306a36Sopenharmony_ci}; 35962306a36Sopenharmony_ci 36062306a36Sopenharmony_ci#endif 361