| /* | |
| * Copyright (C) 2016 Chris Zhong <zyw@rock-chips.com> | |
| * Copyright (C) 2016 ROCKCHIP, Inc. | |
| * | |
| * This program is free software; you can redistribute it and/or modify | |
| * it under the terms of the GNU General Public License as published by | |
| * the Free Software Foundation; either version 2 of the License. | |
| * | |
| * 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. | |
| */ | |
| #ifndef _CDN_DP_CORE_H | |
| #define _CDN_DP_CORE_H | |
| #include <drm/drmP.h> | |
| #include <drm/drm_crtc_helper.h> | |
| #include <drm/drm_dp_helper.h> | |
| #include <drm/drm_panel.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 drm_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 drm_dp_link link; | |
| struct cdn_dp_port *port[MAX_PHY]; | |
| u8 ports; | |
| u8 lanes; | |
| int active_port; | |
| u8 dpcd[DP_RECEIVER_CAP_SIZE]; | |
| bool sink_has_audio; | |
| }; | |
| #endif /* _CDN_DP_CORE_H */ |