Linux Audio
Check our new training course
Open-source upstreaming
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
/* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright (C) 2016 Chris Zhong <zyw@rock-chips.com> * Copyright (C) 2016 ROCKCHIP, Inc. */ #ifndef _CDN_DP_CORE_H #define _CDN_DP_CORE_H #include <drm/display/drm_dp_helper.h> #include <drm/drm_panel.h> #include <drm/drm_probe_helper.h> #include <sound/hdmi-codec.h> #include "rockchip_drm_drv.h" #define MAX_PHY 2 enum audio_format { AFMT_I2S = 0, AFMT_SPDIF = 1, AFMT_UNUSED, }; struct audio_info { enum audio_format format; int sample_rate; int channels; int sample_width; }; enum vic_pxl_encoding_format { PXL_RGB = 0x1, YCBCR_4_4_4 = 0x2, YCBCR_4_2_2 = 0x4, YCBCR_4_2_0 = 0x8, Y_ONLY = 0x10, }; struct video_info { bool h_sync_polarity; bool v_sync_polarity; bool interlaced; int color_depth; enum vic_pxl_encoding_format color_fmt; }; struct cdn_firmware_header { u32 size_bytes; /* size of the entire header+image(s) in bytes */ u32 header_size; /* size of just the header in bytes */ u32 iram_size; /* size of iram */ u32 dram_size; /* size of dram */ }; struct cdn_dp_port { struct cdn_dp_device *dp; struct notifier_block event_nb; struct extcon_dev *extcon; struct phy *phy; u8 lanes; bool phy_enabled; u8 id; }; struct cdn_dp_device { struct device *dev; struct drm_device *drm_dev; struct drm_connector connector; struct rockchip_encoder encoder; struct drm_display_mode mode; struct platform_device *audio_pdev; struct work_struct event_work; struct edid *edid; struct mutex lock; bool connected; bool active; bool suspended; const struct firmware *fw; /* cdn dp firmware */ unsigned int fw_version; /* cdn fw version */ bool fw_loaded; void __iomem *regs; struct regmap *grf; struct clk *core_clk; struct clk *pclk; struct clk *spdif_clk; struct clk *grf_clk; struct reset_control *spdif_rst; struct reset_control *dptx_rst; struct reset_control *apb_rst; struct reset_control *core_rst; struct audio_info audio_info; struct video_info video_info; struct cdn_dp_port *port[MAX_PHY]; u8 ports; u8 max_lanes; unsigned int max_rate; u8 lanes; int active_port; u8 dpcd[DP_RECEIVER_CAP_SIZE]; bool sink_has_audio; hdmi_codec_plugged_cb plugged_cb; struct device *codec_dev; }; #endif /* _CDN_DP_CORE_H */