mirror of
https://github.com/torvalds/linux.git
synced 2026-05-23 22:52:19 +02:00
drm/msm/dp: prefix all symbols with msm_dp_
For historical reasons a lot of symbols in the MSM DisplayPort driver used the generic dp_ prefix. Perform a mass-rename of those symbols to use msm_dp prefix. Basically this is a result of the following script: sed drivers/gpu/drm/msm/dp/* -i -e 's/\<dp_/msm_dp_/g' sed drivers/gpu/drm/msm/dp/* -i -e 's/"msm_dp_/"dp_/g' sed drivers/gpu/drm/msm/dp/* -i -e 's/msm_\(dp_sdp_header\|dp_sdp\)\>/\1/g' Yes, this also results in renaming of several struct fields in addition to renaming the structs and functions, but I think the simple solution is better than the more complex one. Reported-by: kernel test robot <lkp@intel.com> Closes: https://lore.kernel.org/oe-kbuild-all/202410250305.UHKDhtxy-lkp@intel.com/ Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> Patchwork: https://patchwork.freedesktop.org/patch/622211/ Link: https://lore.kernel.org/r/20241029-msm-dp-rename-v2-1-13c5c03fad44@linaro.org
This commit is contained in:
parent
4a6fd06643
commit
fb7d509b17
|
|
@ -17,281 +17,281 @@
|
|||
#include "dp_display.h"
|
||||
#include "dp_utils.h"
|
||||
|
||||
struct dp_audio_private {
|
||||
struct msm_dp_audio_private {
|
||||
struct platform_device *audio_pdev;
|
||||
struct platform_device *pdev;
|
||||
struct drm_device *drm_dev;
|
||||
struct dp_catalog *catalog;
|
||||
struct msm_dp_catalog *catalog;
|
||||
|
||||
u32 channels;
|
||||
|
||||
struct dp_audio dp_audio;
|
||||
struct msm_dp_audio msm_dp_audio;
|
||||
};
|
||||
|
||||
static u32 dp_audio_get_header(struct dp_catalog *catalog,
|
||||
enum dp_catalog_audio_sdp_type sdp,
|
||||
enum dp_catalog_audio_header_type header)
|
||||
static u32 msm_dp_audio_get_header(struct msm_dp_catalog *catalog,
|
||||
enum msm_dp_catalog_audio_sdp_type sdp,
|
||||
enum msm_dp_catalog_audio_header_type header)
|
||||
{
|
||||
return dp_catalog_audio_get_header(catalog, sdp, header);
|
||||
return msm_dp_catalog_audio_get_header(catalog, sdp, header);
|
||||
}
|
||||
|
||||
static void dp_audio_set_header(struct dp_catalog *catalog,
|
||||
static void msm_dp_audio_set_header(struct msm_dp_catalog *catalog,
|
||||
u32 data,
|
||||
enum dp_catalog_audio_sdp_type sdp,
|
||||
enum dp_catalog_audio_header_type header)
|
||||
enum msm_dp_catalog_audio_sdp_type sdp,
|
||||
enum msm_dp_catalog_audio_header_type header)
|
||||
{
|
||||
dp_catalog_audio_set_header(catalog, sdp, header, data);
|
||||
msm_dp_catalog_audio_set_header(catalog, sdp, header, data);
|
||||
}
|
||||
|
||||
static void dp_audio_stream_sdp(struct dp_audio_private *audio)
|
||||
static void msm_dp_audio_stream_sdp(struct msm_dp_audio_private *audio)
|
||||
{
|
||||
struct dp_catalog *catalog = audio->catalog;
|
||||
struct msm_dp_catalog *catalog = audio->catalog;
|
||||
u32 value, new_value;
|
||||
u8 parity_byte;
|
||||
|
||||
/* Config header and parity byte 1 */
|
||||
value = dp_audio_get_header(catalog,
|
||||
value = msm_dp_audio_get_header(catalog,
|
||||
DP_AUDIO_SDP_STREAM, DP_AUDIO_SDP_HEADER_1);
|
||||
|
||||
new_value = 0x02;
|
||||
parity_byte = dp_utils_calculate_parity(new_value);
|
||||
parity_byte = msm_dp_utils_calculate_parity(new_value);
|
||||
value |= ((new_value << HEADER_BYTE_1_BIT)
|
||||
| (parity_byte << PARITY_BYTE_1_BIT));
|
||||
drm_dbg_dp(audio->drm_dev,
|
||||
"Header Byte 1: value = 0x%x, parity_byte = 0x%x\n",
|
||||
value, parity_byte);
|
||||
dp_audio_set_header(catalog, value,
|
||||
msm_dp_audio_set_header(catalog, value,
|
||||
DP_AUDIO_SDP_STREAM, DP_AUDIO_SDP_HEADER_1);
|
||||
|
||||
/* Config header and parity byte 2 */
|
||||
value = dp_audio_get_header(catalog,
|
||||
value = msm_dp_audio_get_header(catalog,
|
||||
DP_AUDIO_SDP_STREAM, DP_AUDIO_SDP_HEADER_2);
|
||||
new_value = value;
|
||||
parity_byte = dp_utils_calculate_parity(new_value);
|
||||
parity_byte = msm_dp_utils_calculate_parity(new_value);
|
||||
value |= ((new_value << HEADER_BYTE_2_BIT)
|
||||
| (parity_byte << PARITY_BYTE_2_BIT));
|
||||
drm_dbg_dp(audio->drm_dev,
|
||||
"Header Byte 2: value = 0x%x, parity_byte = 0x%x\n",
|
||||
value, parity_byte);
|
||||
|
||||
dp_audio_set_header(catalog, value,
|
||||
msm_dp_audio_set_header(catalog, value,
|
||||
DP_AUDIO_SDP_STREAM, DP_AUDIO_SDP_HEADER_2);
|
||||
|
||||
/* Config header and parity byte 3 */
|
||||
value = dp_audio_get_header(catalog,
|
||||
value = msm_dp_audio_get_header(catalog,
|
||||
DP_AUDIO_SDP_STREAM, DP_AUDIO_SDP_HEADER_3);
|
||||
|
||||
new_value = audio->channels - 1;
|
||||
parity_byte = dp_utils_calculate_parity(new_value);
|
||||
parity_byte = msm_dp_utils_calculate_parity(new_value);
|
||||
value |= ((new_value << HEADER_BYTE_3_BIT)
|
||||
| (parity_byte << PARITY_BYTE_3_BIT));
|
||||
drm_dbg_dp(audio->drm_dev,
|
||||
"Header Byte 3: value = 0x%x, parity_byte = 0x%x\n",
|
||||
value, parity_byte);
|
||||
|
||||
dp_audio_set_header(catalog, value,
|
||||
msm_dp_audio_set_header(catalog, value,
|
||||
DP_AUDIO_SDP_STREAM, DP_AUDIO_SDP_HEADER_3);
|
||||
}
|
||||
|
||||
static void dp_audio_timestamp_sdp(struct dp_audio_private *audio)
|
||||
static void msm_dp_audio_timestamp_sdp(struct msm_dp_audio_private *audio)
|
||||
{
|
||||
struct dp_catalog *catalog = audio->catalog;
|
||||
struct msm_dp_catalog *catalog = audio->catalog;
|
||||
u32 value, new_value;
|
||||
u8 parity_byte;
|
||||
|
||||
/* Config header and parity byte 1 */
|
||||
value = dp_audio_get_header(catalog,
|
||||
value = msm_dp_audio_get_header(catalog,
|
||||
DP_AUDIO_SDP_TIMESTAMP, DP_AUDIO_SDP_HEADER_1);
|
||||
|
||||
new_value = 0x1;
|
||||
parity_byte = dp_utils_calculate_parity(new_value);
|
||||
parity_byte = msm_dp_utils_calculate_parity(new_value);
|
||||
value |= ((new_value << HEADER_BYTE_1_BIT)
|
||||
| (parity_byte << PARITY_BYTE_1_BIT));
|
||||
drm_dbg_dp(audio->drm_dev,
|
||||
"Header Byte 1: value = 0x%x, parity_byte = 0x%x\n",
|
||||
value, parity_byte);
|
||||
dp_audio_set_header(catalog, value,
|
||||
msm_dp_audio_set_header(catalog, value,
|
||||
DP_AUDIO_SDP_TIMESTAMP, DP_AUDIO_SDP_HEADER_1);
|
||||
|
||||
/* Config header and parity byte 2 */
|
||||
value = dp_audio_get_header(catalog,
|
||||
value = msm_dp_audio_get_header(catalog,
|
||||
DP_AUDIO_SDP_TIMESTAMP, DP_AUDIO_SDP_HEADER_2);
|
||||
|
||||
new_value = 0x17;
|
||||
parity_byte = dp_utils_calculate_parity(new_value);
|
||||
parity_byte = msm_dp_utils_calculate_parity(new_value);
|
||||
value |= ((new_value << HEADER_BYTE_2_BIT)
|
||||
| (parity_byte << PARITY_BYTE_2_BIT));
|
||||
drm_dbg_dp(audio->drm_dev,
|
||||
"Header Byte 2: value = 0x%x, parity_byte = 0x%x\n",
|
||||
value, parity_byte);
|
||||
dp_audio_set_header(catalog, value,
|
||||
msm_dp_audio_set_header(catalog, value,
|
||||
DP_AUDIO_SDP_TIMESTAMP, DP_AUDIO_SDP_HEADER_2);
|
||||
|
||||
/* Config header and parity byte 3 */
|
||||
value = dp_audio_get_header(catalog,
|
||||
value = msm_dp_audio_get_header(catalog,
|
||||
DP_AUDIO_SDP_TIMESTAMP, DP_AUDIO_SDP_HEADER_3);
|
||||
|
||||
new_value = (0x0 | (0x11 << 2));
|
||||
parity_byte = dp_utils_calculate_parity(new_value);
|
||||
parity_byte = msm_dp_utils_calculate_parity(new_value);
|
||||
value |= ((new_value << HEADER_BYTE_3_BIT)
|
||||
| (parity_byte << PARITY_BYTE_3_BIT));
|
||||
drm_dbg_dp(audio->drm_dev,
|
||||
"Header Byte 3: value = 0x%x, parity_byte = 0x%x\n",
|
||||
value, parity_byte);
|
||||
dp_audio_set_header(catalog, value,
|
||||
msm_dp_audio_set_header(catalog, value,
|
||||
DP_AUDIO_SDP_TIMESTAMP, DP_AUDIO_SDP_HEADER_3);
|
||||
}
|
||||
|
||||
static void dp_audio_infoframe_sdp(struct dp_audio_private *audio)
|
||||
static void msm_dp_audio_infoframe_sdp(struct msm_dp_audio_private *audio)
|
||||
{
|
||||
struct dp_catalog *catalog = audio->catalog;
|
||||
struct msm_dp_catalog *catalog = audio->catalog;
|
||||
u32 value, new_value;
|
||||
u8 parity_byte;
|
||||
|
||||
/* Config header and parity byte 1 */
|
||||
value = dp_audio_get_header(catalog,
|
||||
value = msm_dp_audio_get_header(catalog,
|
||||
DP_AUDIO_SDP_INFOFRAME, DP_AUDIO_SDP_HEADER_1);
|
||||
|
||||
new_value = 0x84;
|
||||
parity_byte = dp_utils_calculate_parity(new_value);
|
||||
parity_byte = msm_dp_utils_calculate_parity(new_value);
|
||||
value |= ((new_value << HEADER_BYTE_1_BIT)
|
||||
| (parity_byte << PARITY_BYTE_1_BIT));
|
||||
drm_dbg_dp(audio->drm_dev,
|
||||
"Header Byte 1: value = 0x%x, parity_byte = 0x%x\n",
|
||||
value, parity_byte);
|
||||
dp_audio_set_header(catalog, value,
|
||||
msm_dp_audio_set_header(catalog, value,
|
||||
DP_AUDIO_SDP_INFOFRAME, DP_AUDIO_SDP_HEADER_1);
|
||||
|
||||
/* Config header and parity byte 2 */
|
||||
value = dp_audio_get_header(catalog,
|
||||
value = msm_dp_audio_get_header(catalog,
|
||||
DP_AUDIO_SDP_INFOFRAME, DP_AUDIO_SDP_HEADER_2);
|
||||
|
||||
new_value = 0x1b;
|
||||
parity_byte = dp_utils_calculate_parity(new_value);
|
||||
parity_byte = msm_dp_utils_calculate_parity(new_value);
|
||||
value |= ((new_value << HEADER_BYTE_2_BIT)
|
||||
| (parity_byte << PARITY_BYTE_2_BIT));
|
||||
drm_dbg_dp(audio->drm_dev,
|
||||
"Header Byte 2: value = 0x%x, parity_byte = 0x%x\n",
|
||||
value, parity_byte);
|
||||
dp_audio_set_header(catalog, value,
|
||||
msm_dp_audio_set_header(catalog, value,
|
||||
DP_AUDIO_SDP_INFOFRAME, DP_AUDIO_SDP_HEADER_2);
|
||||
|
||||
/* Config header and parity byte 3 */
|
||||
value = dp_audio_get_header(catalog,
|
||||
value = msm_dp_audio_get_header(catalog,
|
||||
DP_AUDIO_SDP_INFOFRAME, DP_AUDIO_SDP_HEADER_3);
|
||||
|
||||
new_value = (0x0 | (0x11 << 2));
|
||||
parity_byte = dp_utils_calculate_parity(new_value);
|
||||
parity_byte = msm_dp_utils_calculate_parity(new_value);
|
||||
value |= ((new_value << HEADER_BYTE_3_BIT)
|
||||
| (parity_byte << PARITY_BYTE_3_BIT));
|
||||
drm_dbg_dp(audio->drm_dev,
|
||||
"Header Byte 3: value = 0x%x, parity_byte = 0x%x\n",
|
||||
new_value, parity_byte);
|
||||
dp_audio_set_header(catalog, value,
|
||||
msm_dp_audio_set_header(catalog, value,
|
||||
DP_AUDIO_SDP_INFOFRAME, DP_AUDIO_SDP_HEADER_3);
|
||||
}
|
||||
|
||||
static void dp_audio_copy_management_sdp(struct dp_audio_private *audio)
|
||||
static void msm_dp_audio_copy_management_sdp(struct msm_dp_audio_private *audio)
|
||||
{
|
||||
struct dp_catalog *catalog = audio->catalog;
|
||||
struct msm_dp_catalog *catalog = audio->catalog;
|
||||
u32 value, new_value;
|
||||
u8 parity_byte;
|
||||
|
||||
/* Config header and parity byte 1 */
|
||||
value = dp_audio_get_header(catalog,
|
||||
value = msm_dp_audio_get_header(catalog,
|
||||
DP_AUDIO_SDP_COPYMANAGEMENT, DP_AUDIO_SDP_HEADER_1);
|
||||
|
||||
new_value = 0x05;
|
||||
parity_byte = dp_utils_calculate_parity(new_value);
|
||||
parity_byte = msm_dp_utils_calculate_parity(new_value);
|
||||
value |= ((new_value << HEADER_BYTE_1_BIT)
|
||||
| (parity_byte << PARITY_BYTE_1_BIT));
|
||||
drm_dbg_dp(audio->drm_dev,
|
||||
"Header Byte 1: value = 0x%x, parity_byte = 0x%x\n",
|
||||
value, parity_byte);
|
||||
dp_audio_set_header(catalog, value,
|
||||
msm_dp_audio_set_header(catalog, value,
|
||||
DP_AUDIO_SDP_COPYMANAGEMENT, DP_AUDIO_SDP_HEADER_1);
|
||||
|
||||
/* Config header and parity byte 2 */
|
||||
value = dp_audio_get_header(catalog,
|
||||
value = msm_dp_audio_get_header(catalog,
|
||||
DP_AUDIO_SDP_COPYMANAGEMENT, DP_AUDIO_SDP_HEADER_2);
|
||||
|
||||
new_value = 0x0F;
|
||||
parity_byte = dp_utils_calculate_parity(new_value);
|
||||
parity_byte = msm_dp_utils_calculate_parity(new_value);
|
||||
value |= ((new_value << HEADER_BYTE_2_BIT)
|
||||
| (parity_byte << PARITY_BYTE_2_BIT));
|
||||
drm_dbg_dp(audio->drm_dev,
|
||||
"Header Byte 2: value = 0x%x, parity_byte = 0x%x\n",
|
||||
value, parity_byte);
|
||||
dp_audio_set_header(catalog, value,
|
||||
msm_dp_audio_set_header(catalog, value,
|
||||
DP_AUDIO_SDP_COPYMANAGEMENT, DP_AUDIO_SDP_HEADER_2);
|
||||
|
||||
/* Config header and parity byte 3 */
|
||||
value = dp_audio_get_header(catalog,
|
||||
value = msm_dp_audio_get_header(catalog,
|
||||
DP_AUDIO_SDP_COPYMANAGEMENT, DP_AUDIO_SDP_HEADER_3);
|
||||
|
||||
new_value = 0x0;
|
||||
parity_byte = dp_utils_calculate_parity(new_value);
|
||||
parity_byte = msm_dp_utils_calculate_parity(new_value);
|
||||
value |= ((new_value << HEADER_BYTE_3_BIT)
|
||||
| (parity_byte << PARITY_BYTE_3_BIT));
|
||||
drm_dbg_dp(audio->drm_dev,
|
||||
"Header Byte 3: value = 0x%x, parity_byte = 0x%x\n",
|
||||
value, parity_byte);
|
||||
dp_audio_set_header(catalog, value,
|
||||
msm_dp_audio_set_header(catalog, value,
|
||||
DP_AUDIO_SDP_COPYMANAGEMENT, DP_AUDIO_SDP_HEADER_3);
|
||||
}
|
||||
|
||||
static void dp_audio_isrc_sdp(struct dp_audio_private *audio)
|
||||
static void msm_dp_audio_isrc_sdp(struct msm_dp_audio_private *audio)
|
||||
{
|
||||
struct dp_catalog *catalog = audio->catalog;
|
||||
struct msm_dp_catalog *catalog = audio->catalog;
|
||||
u32 value, new_value;
|
||||
u8 parity_byte;
|
||||
|
||||
/* Config header and parity byte 1 */
|
||||
value = dp_audio_get_header(catalog,
|
||||
value = msm_dp_audio_get_header(catalog,
|
||||
DP_AUDIO_SDP_ISRC, DP_AUDIO_SDP_HEADER_1);
|
||||
|
||||
new_value = 0x06;
|
||||
parity_byte = dp_utils_calculate_parity(new_value);
|
||||
parity_byte = msm_dp_utils_calculate_parity(new_value);
|
||||
value |= ((new_value << HEADER_BYTE_1_BIT)
|
||||
| (parity_byte << PARITY_BYTE_1_BIT));
|
||||
drm_dbg_dp(audio->drm_dev,
|
||||
"Header Byte 1: value = 0x%x, parity_byte = 0x%x\n",
|
||||
value, parity_byte);
|
||||
dp_audio_set_header(catalog, value,
|
||||
msm_dp_audio_set_header(catalog, value,
|
||||
DP_AUDIO_SDP_ISRC, DP_AUDIO_SDP_HEADER_1);
|
||||
|
||||
/* Config header and parity byte 2 */
|
||||
value = dp_audio_get_header(catalog,
|
||||
value = msm_dp_audio_get_header(catalog,
|
||||
DP_AUDIO_SDP_ISRC, DP_AUDIO_SDP_HEADER_2);
|
||||
|
||||
new_value = 0x0F;
|
||||
parity_byte = dp_utils_calculate_parity(new_value);
|
||||
parity_byte = msm_dp_utils_calculate_parity(new_value);
|
||||
value |= ((new_value << HEADER_BYTE_2_BIT)
|
||||
| (parity_byte << PARITY_BYTE_2_BIT));
|
||||
drm_dbg_dp(audio->drm_dev,
|
||||
"Header Byte 2: value = 0x%x, parity_byte = 0x%x\n",
|
||||
value, parity_byte);
|
||||
dp_audio_set_header(catalog, value,
|
||||
msm_dp_audio_set_header(catalog, value,
|
||||
DP_AUDIO_SDP_ISRC, DP_AUDIO_SDP_HEADER_2);
|
||||
}
|
||||
|
||||
static void dp_audio_setup_sdp(struct dp_audio_private *audio)
|
||||
static void msm_dp_audio_setup_sdp(struct msm_dp_audio_private *audio)
|
||||
{
|
||||
dp_catalog_audio_config_sdp(audio->catalog);
|
||||
msm_dp_catalog_audio_config_sdp(audio->catalog);
|
||||
|
||||
dp_audio_stream_sdp(audio);
|
||||
dp_audio_timestamp_sdp(audio);
|
||||
dp_audio_infoframe_sdp(audio);
|
||||
dp_audio_copy_management_sdp(audio);
|
||||
dp_audio_isrc_sdp(audio);
|
||||
msm_dp_audio_stream_sdp(audio);
|
||||
msm_dp_audio_timestamp_sdp(audio);
|
||||
msm_dp_audio_infoframe_sdp(audio);
|
||||
msm_dp_audio_copy_management_sdp(audio);
|
||||
msm_dp_audio_isrc_sdp(audio);
|
||||
}
|
||||
|
||||
static void dp_audio_setup_acr(struct dp_audio_private *audio)
|
||||
static void msm_dp_audio_setup_acr(struct msm_dp_audio_private *audio)
|
||||
{
|
||||
u32 select = 0;
|
||||
struct dp_catalog *catalog = audio->catalog;
|
||||
struct msm_dp_catalog *catalog = audio->catalog;
|
||||
|
||||
switch (audio->dp_audio.bw_code) {
|
||||
switch (audio->msm_dp_audio.bw_code) {
|
||||
case DP_LINK_BW_1_62:
|
||||
select = 0;
|
||||
break;
|
||||
|
|
@ -310,15 +310,15 @@ static void dp_audio_setup_acr(struct dp_audio_private *audio)
|
|||
break;
|
||||
}
|
||||
|
||||
dp_catalog_audio_config_acr(catalog, select);
|
||||
msm_dp_catalog_audio_config_acr(catalog, select);
|
||||
}
|
||||
|
||||
static void dp_audio_safe_to_exit_level(struct dp_audio_private *audio)
|
||||
static void msm_dp_audio_safe_to_exit_level(struct msm_dp_audio_private *audio)
|
||||
{
|
||||
struct dp_catalog *catalog = audio->catalog;
|
||||
struct msm_dp_catalog *catalog = audio->catalog;
|
||||
u32 safe_to_exit_level = 0;
|
||||
|
||||
switch (audio->dp_audio.lane_count) {
|
||||
switch (audio->msm_dp_audio.lane_count) {
|
||||
case 1:
|
||||
safe_to_exit_level = 14;
|
||||
break;
|
||||
|
|
@ -336,49 +336,49 @@ static void dp_audio_safe_to_exit_level(struct dp_audio_private *audio)
|
|||
break;
|
||||
}
|
||||
|
||||
dp_catalog_audio_sfe_level(catalog, safe_to_exit_level);
|
||||
msm_dp_catalog_audio_sfe_level(catalog, safe_to_exit_level);
|
||||
}
|
||||
|
||||
static void dp_audio_enable(struct dp_audio_private *audio, bool enable)
|
||||
static void msm_dp_audio_enable(struct msm_dp_audio_private *audio, bool enable)
|
||||
{
|
||||
struct dp_catalog *catalog = audio->catalog;
|
||||
struct msm_dp_catalog *catalog = audio->catalog;
|
||||
|
||||
dp_catalog_audio_enable(catalog, enable);
|
||||
msm_dp_catalog_audio_enable(catalog, enable);
|
||||
}
|
||||
|
||||
static struct dp_audio_private *dp_audio_get_data(struct platform_device *pdev)
|
||||
static struct msm_dp_audio_private *msm_dp_audio_get_data(struct platform_device *pdev)
|
||||
{
|
||||
struct dp_audio *dp_audio;
|
||||
struct msm_dp *dp_display;
|
||||
struct msm_dp_audio *msm_dp_audio;
|
||||
struct msm_dp *msm_dp_display;
|
||||
|
||||
if (!pdev) {
|
||||
DRM_ERROR("invalid input\n");
|
||||
return ERR_PTR(-ENODEV);
|
||||
}
|
||||
|
||||
dp_display = platform_get_drvdata(pdev);
|
||||
if (!dp_display) {
|
||||
msm_dp_display = platform_get_drvdata(pdev);
|
||||
if (!msm_dp_display) {
|
||||
DRM_ERROR("invalid input\n");
|
||||
return ERR_PTR(-ENODEV);
|
||||
}
|
||||
|
||||
dp_audio = dp_display->dp_audio;
|
||||
msm_dp_audio = msm_dp_display->msm_dp_audio;
|
||||
|
||||
if (!dp_audio) {
|
||||
DRM_ERROR("invalid dp_audio data\n");
|
||||
if (!msm_dp_audio) {
|
||||
DRM_ERROR("invalid msm_dp_audio data\n");
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
return container_of(dp_audio, struct dp_audio_private, dp_audio);
|
||||
return container_of(msm_dp_audio, struct msm_dp_audio_private, msm_dp_audio);
|
||||
}
|
||||
|
||||
static int dp_audio_hook_plugged_cb(struct device *dev, void *data,
|
||||
static int msm_dp_audio_hook_plugged_cb(struct device *dev, void *data,
|
||||
hdmi_codec_plugged_cb fn,
|
||||
struct device *codec_dev)
|
||||
{
|
||||
|
||||
struct platform_device *pdev;
|
||||
struct msm_dp *dp_display;
|
||||
struct msm_dp *msm_dp_display;
|
||||
|
||||
pdev = to_platform_device(dev);
|
||||
if (!pdev) {
|
||||
|
|
@ -386,20 +386,20 @@ static int dp_audio_hook_plugged_cb(struct device *dev, void *data,
|
|||
return -ENODEV;
|
||||
}
|
||||
|
||||
dp_display = platform_get_drvdata(pdev);
|
||||
if (!dp_display) {
|
||||
msm_dp_display = platform_get_drvdata(pdev);
|
||||
if (!msm_dp_display) {
|
||||
pr_err("invalid input\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
return dp_display_set_plugged_cb(dp_display, fn, codec_dev);
|
||||
return msm_dp_display_set_plugged_cb(msm_dp_display, fn, codec_dev);
|
||||
}
|
||||
|
||||
static int dp_audio_get_eld(struct device *dev,
|
||||
static int msm_dp_audio_get_eld(struct device *dev,
|
||||
void *data, uint8_t *buf, size_t len)
|
||||
{
|
||||
struct platform_device *pdev;
|
||||
struct msm_dp *dp_display;
|
||||
struct msm_dp *msm_dp_display;
|
||||
|
||||
pdev = to_platform_device(dev);
|
||||
|
||||
|
|
@ -408,30 +408,30 @@ static int dp_audio_get_eld(struct device *dev,
|
|||
return -ENODEV;
|
||||
}
|
||||
|
||||
dp_display = platform_get_drvdata(pdev);
|
||||
if (!dp_display) {
|
||||
msm_dp_display = platform_get_drvdata(pdev);
|
||||
if (!msm_dp_display) {
|
||||
DRM_ERROR("invalid input\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
memcpy(buf, dp_display->connector->eld,
|
||||
min(sizeof(dp_display->connector->eld), len));
|
||||
memcpy(buf, msm_dp_display->connector->eld,
|
||||
min(sizeof(msm_dp_display->connector->eld), len));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int dp_audio_hw_params(struct device *dev,
|
||||
int msm_dp_audio_hw_params(struct device *dev,
|
||||
void *data,
|
||||
struct hdmi_codec_daifmt *daifmt,
|
||||
struct hdmi_codec_params *params)
|
||||
{
|
||||
int rc = 0;
|
||||
struct dp_audio_private *audio;
|
||||
struct msm_dp_audio_private *audio;
|
||||
struct platform_device *pdev;
|
||||
struct msm_dp *dp_display;
|
||||
struct msm_dp *msm_dp_display;
|
||||
|
||||
pdev = to_platform_device(dev);
|
||||
dp_display = platform_get_drvdata(pdev);
|
||||
msm_dp_display = platform_get_drvdata(pdev);
|
||||
|
||||
/*
|
||||
* there could be cases where sound card can be opened even
|
||||
|
|
@ -441,12 +441,12 @@ int dp_audio_hw_params(struct device *dev,
|
|||
* such cases check for connection status and bail out if not
|
||||
* connected.
|
||||
*/
|
||||
if (!dp_display->power_on) {
|
||||
if (!msm_dp_display->power_on) {
|
||||
rc = -EINVAL;
|
||||
goto end;
|
||||
}
|
||||
|
||||
audio = dp_audio_get_data(pdev);
|
||||
audio = msm_dp_audio_get_data(pdev);
|
||||
if (IS_ERR(audio)) {
|
||||
rc = PTR_ERR(audio);
|
||||
goto end;
|
||||
|
|
@ -454,26 +454,26 @@ int dp_audio_hw_params(struct device *dev,
|
|||
|
||||
audio->channels = params->channels;
|
||||
|
||||
dp_audio_setup_sdp(audio);
|
||||
dp_audio_setup_acr(audio);
|
||||
dp_audio_safe_to_exit_level(audio);
|
||||
dp_audio_enable(audio, true);
|
||||
dp_display_signal_audio_start(dp_display);
|
||||
dp_display->audio_enabled = true;
|
||||
msm_dp_audio_setup_sdp(audio);
|
||||
msm_dp_audio_setup_acr(audio);
|
||||
msm_dp_audio_safe_to_exit_level(audio);
|
||||
msm_dp_audio_enable(audio, true);
|
||||
msm_dp_display_signal_audio_start(msm_dp_display);
|
||||
msm_dp_display->audio_enabled = true;
|
||||
|
||||
end:
|
||||
return rc;
|
||||
}
|
||||
|
||||
static void dp_audio_shutdown(struct device *dev, void *data)
|
||||
static void msm_dp_audio_shutdown(struct device *dev, void *data)
|
||||
{
|
||||
struct dp_audio_private *audio;
|
||||
struct msm_dp_audio_private *audio;
|
||||
struct platform_device *pdev;
|
||||
struct msm_dp *dp_display;
|
||||
struct msm_dp *msm_dp_display;
|
||||
|
||||
pdev = to_platform_device(dev);
|
||||
dp_display = platform_get_drvdata(pdev);
|
||||
audio = dp_audio_get_data(pdev);
|
||||
msm_dp_display = platform_get_drvdata(pdev);
|
||||
audio = msm_dp_audio_get_data(pdev);
|
||||
if (IS_ERR(audio)) {
|
||||
DRM_ERROR("failed to get audio data\n");
|
||||
return;
|
||||
|
|
@ -487,32 +487,32 @@ static void dp_audio_shutdown(struct device *dev, void *data)
|
|||
* connected. is_connected cannot be used here as its set
|
||||
* to false earlier than this call
|
||||
*/
|
||||
if (!dp_display->audio_enabled)
|
||||
if (!msm_dp_display->audio_enabled)
|
||||
return;
|
||||
|
||||
dp_audio_enable(audio, false);
|
||||
msm_dp_audio_enable(audio, false);
|
||||
/* signal the dp display to safely shutdown clocks */
|
||||
dp_display_signal_audio_complete(dp_display);
|
||||
msm_dp_display_signal_audio_complete(msm_dp_display);
|
||||
}
|
||||
|
||||
static const struct hdmi_codec_ops dp_audio_codec_ops = {
|
||||
.hw_params = dp_audio_hw_params,
|
||||
.audio_shutdown = dp_audio_shutdown,
|
||||
.get_eld = dp_audio_get_eld,
|
||||
.hook_plugged_cb = dp_audio_hook_plugged_cb,
|
||||
static const struct hdmi_codec_ops msm_dp_audio_codec_ops = {
|
||||
.hw_params = msm_dp_audio_hw_params,
|
||||
.audio_shutdown = msm_dp_audio_shutdown,
|
||||
.get_eld = msm_dp_audio_get_eld,
|
||||
.hook_plugged_cb = msm_dp_audio_hook_plugged_cb,
|
||||
};
|
||||
|
||||
static struct hdmi_codec_pdata codec_data = {
|
||||
.ops = &dp_audio_codec_ops,
|
||||
.ops = &msm_dp_audio_codec_ops,
|
||||
.max_i2s_channels = 8,
|
||||
.i2s = 1,
|
||||
};
|
||||
|
||||
void dp_unregister_audio_driver(struct device *dev, struct dp_audio *dp_audio)
|
||||
void msm_dp_unregister_audio_driver(struct device *dev, struct msm_dp_audio *msm_dp_audio)
|
||||
{
|
||||
struct dp_audio_private *audio_priv;
|
||||
struct msm_dp_audio_private *audio_priv;
|
||||
|
||||
audio_priv = container_of(dp_audio, struct dp_audio_private, dp_audio);
|
||||
audio_priv = container_of(msm_dp_audio, struct msm_dp_audio_private, msm_dp_audio);
|
||||
|
||||
if (audio_priv->audio_pdev) {
|
||||
platform_device_unregister(audio_priv->audio_pdev);
|
||||
|
|
@ -520,13 +520,13 @@ void dp_unregister_audio_driver(struct device *dev, struct dp_audio *dp_audio)
|
|||
}
|
||||
}
|
||||
|
||||
int dp_register_audio_driver(struct device *dev,
|
||||
struct dp_audio *dp_audio)
|
||||
int msm_dp_register_audio_driver(struct device *dev,
|
||||
struct msm_dp_audio *msm_dp_audio)
|
||||
{
|
||||
struct dp_audio_private *audio_priv;
|
||||
struct msm_dp_audio_private *audio_priv;
|
||||
|
||||
audio_priv = container_of(dp_audio,
|
||||
struct dp_audio_private, dp_audio);
|
||||
audio_priv = container_of(msm_dp_audio,
|
||||
struct msm_dp_audio_private, msm_dp_audio);
|
||||
|
||||
audio_priv->audio_pdev = platform_device_register_data(dev,
|
||||
HDMI_CODEC_DRV_NAME,
|
||||
|
|
@ -536,13 +536,13 @@ int dp_register_audio_driver(struct device *dev,
|
|||
return PTR_ERR_OR_ZERO(audio_priv->audio_pdev);
|
||||
}
|
||||
|
||||
struct dp_audio *dp_audio_get(struct platform_device *pdev,
|
||||
struct dp_panel *panel,
|
||||
struct dp_catalog *catalog)
|
||||
struct msm_dp_audio *msm_dp_audio_get(struct platform_device *pdev,
|
||||
struct msm_dp_panel *panel,
|
||||
struct msm_dp_catalog *catalog)
|
||||
{
|
||||
int rc = 0;
|
||||
struct dp_audio_private *audio;
|
||||
struct dp_audio *dp_audio;
|
||||
struct msm_dp_audio_private *audio;
|
||||
struct msm_dp_audio *msm_dp_audio;
|
||||
|
||||
if (!pdev || !panel || !catalog) {
|
||||
DRM_ERROR("invalid input\n");
|
||||
|
|
@ -559,23 +559,23 @@ struct dp_audio *dp_audio_get(struct platform_device *pdev,
|
|||
audio->pdev = pdev;
|
||||
audio->catalog = catalog;
|
||||
|
||||
dp_audio = &audio->dp_audio;
|
||||
msm_dp_audio = &audio->msm_dp_audio;
|
||||
|
||||
dp_catalog_audio_init(catalog);
|
||||
msm_dp_catalog_audio_init(catalog);
|
||||
|
||||
return dp_audio;
|
||||
return msm_dp_audio;
|
||||
error:
|
||||
return ERR_PTR(rc);
|
||||
}
|
||||
|
||||
void dp_audio_put(struct dp_audio *dp_audio)
|
||||
void msm_dp_audio_put(struct msm_dp_audio *msm_dp_audio)
|
||||
{
|
||||
struct dp_audio_private *audio;
|
||||
struct msm_dp_audio_private *audio;
|
||||
|
||||
if (!dp_audio)
|
||||
if (!msm_dp_audio)
|
||||
return;
|
||||
|
||||
audio = container_of(dp_audio, struct dp_audio_private, dp_audio);
|
||||
audio = container_of(msm_dp_audio, struct msm_dp_audio_private, msm_dp_audio);
|
||||
|
||||
devm_kfree(&audio->pdev->dev, audio);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,58 +13,58 @@
|
|||
#include <sound/hdmi-codec.h>
|
||||
|
||||
/**
|
||||
* struct dp_audio
|
||||
* struct msm_dp_audio
|
||||
* @lane_count: number of lanes configured in current session
|
||||
* @bw_code: link rate's bandwidth code for current session
|
||||
*/
|
||||
struct dp_audio {
|
||||
struct msm_dp_audio {
|
||||
u32 lane_count;
|
||||
u32 bw_code;
|
||||
};
|
||||
|
||||
/**
|
||||
* dp_audio_get()
|
||||
* msm_dp_audio_get()
|
||||
*
|
||||
* Creates and instance of dp audio.
|
||||
*
|
||||
* @pdev: caller's platform device instance.
|
||||
* @panel: an instance of dp_panel module.
|
||||
* @catalog: an instance of dp_catalog module.
|
||||
* @panel: an instance of msm_dp_panel module.
|
||||
* @catalog: an instance of msm_dp_catalog module.
|
||||
*
|
||||
* Returns the error code in case of failure, otherwize
|
||||
* an instance of newly created dp_module.
|
||||
* an instance of newly created msm_dp_module.
|
||||
*/
|
||||
struct dp_audio *dp_audio_get(struct platform_device *pdev,
|
||||
struct dp_panel *panel,
|
||||
struct dp_catalog *catalog);
|
||||
struct msm_dp_audio *msm_dp_audio_get(struct platform_device *pdev,
|
||||
struct msm_dp_panel *panel,
|
||||
struct msm_dp_catalog *catalog);
|
||||
|
||||
/**
|
||||
* dp_register_audio_driver()
|
||||
* msm_dp_register_audio_driver()
|
||||
*
|
||||
* Registers DP device with hdmi_codec interface.
|
||||
*
|
||||
* @dev: DP device instance.
|
||||
* @dp_audio: an instance of dp_audio module.
|
||||
* @msm_dp_audio: an instance of msm_dp_audio module.
|
||||
*
|
||||
*
|
||||
* Returns the error code in case of failure, otherwise
|
||||
* zero on success.
|
||||
*/
|
||||
int dp_register_audio_driver(struct device *dev,
|
||||
struct dp_audio *dp_audio);
|
||||
int msm_dp_register_audio_driver(struct device *dev,
|
||||
struct msm_dp_audio *msm_dp_audio);
|
||||
|
||||
void dp_unregister_audio_driver(struct device *dev, struct dp_audio *dp_audio);
|
||||
void msm_dp_unregister_audio_driver(struct device *dev, struct msm_dp_audio *msm_dp_audio);
|
||||
|
||||
/**
|
||||
* dp_audio_put()
|
||||
* msm_dp_audio_put()
|
||||
*
|
||||
* Cleans the dp_audio instance.
|
||||
* Cleans the msm_dp_audio instance.
|
||||
*
|
||||
* @dp_audio: an instance of dp_audio.
|
||||
* @msm_dp_audio: an instance of msm_dp_audio.
|
||||
*/
|
||||
void dp_audio_put(struct dp_audio *dp_audio);
|
||||
void msm_dp_audio_put(struct msm_dp_audio *msm_dp_audio);
|
||||
|
||||
int dp_audio_hw_params(struct device *dev,
|
||||
int msm_dp_audio_hw_params(struct device *dev,
|
||||
void *data,
|
||||
struct hdmi_codec_daifmt *daifmt,
|
||||
struct hdmi_codec_params *params);
|
||||
|
|
|
|||
|
|
@ -20,9 +20,9 @@ enum msm_dp_aux_err {
|
|||
DP_AUX_ERR_PHY,
|
||||
};
|
||||
|
||||
struct dp_aux_private {
|
||||
struct msm_dp_aux_private {
|
||||
struct device *dev;
|
||||
struct dp_catalog *catalog;
|
||||
struct msm_dp_catalog *catalog;
|
||||
|
||||
struct phy *phy;
|
||||
|
||||
|
|
@ -42,12 +42,12 @@ struct dp_aux_private {
|
|||
u32 offset;
|
||||
u32 segment;
|
||||
|
||||
struct drm_dp_aux dp_aux;
|
||||
struct drm_dp_aux msm_dp_aux;
|
||||
};
|
||||
|
||||
#define MAX_AUX_RETRIES 5
|
||||
|
||||
static ssize_t dp_aux_write(struct dp_aux_private *aux,
|
||||
static ssize_t msm_dp_aux_write(struct msm_dp_aux_private *aux,
|
||||
struct drm_dp_aux_msg *msg)
|
||||
{
|
||||
u8 data[4];
|
||||
|
|
@ -88,11 +88,11 @@ static ssize_t dp_aux_write(struct dp_aux_private *aux,
|
|||
/* index = 0, write */
|
||||
if (i == 0)
|
||||
reg |= DP_AUX_DATA_INDEX_WRITE;
|
||||
dp_catalog_aux_write_data(aux->catalog, reg);
|
||||
msm_dp_catalog_aux_write_data(aux->catalog, reg);
|
||||
}
|
||||
|
||||
dp_catalog_aux_clear_trans(aux->catalog, false);
|
||||
dp_catalog_aux_clear_hw_interrupts(aux->catalog);
|
||||
msm_dp_catalog_aux_clear_trans(aux->catalog, false);
|
||||
msm_dp_catalog_aux_clear_hw_interrupts(aux->catalog);
|
||||
|
||||
reg = 0; /* Transaction number == 1 */
|
||||
if (!aux->native) { /* i2c */
|
||||
|
|
@ -106,12 +106,12 @@ static ssize_t dp_aux_write(struct dp_aux_private *aux,
|
|||
}
|
||||
|
||||
reg |= DP_AUX_TRANS_CTRL_GO;
|
||||
dp_catalog_aux_write_trans(aux->catalog, reg);
|
||||
msm_dp_catalog_aux_write_trans(aux->catalog, reg);
|
||||
|
||||
return len;
|
||||
}
|
||||
|
||||
static ssize_t dp_aux_cmd_fifo_tx(struct dp_aux_private *aux,
|
||||
static ssize_t msm_dp_aux_cmd_fifo_tx(struct msm_dp_aux_private *aux,
|
||||
struct drm_dp_aux_msg *msg)
|
||||
{
|
||||
ssize_t ret;
|
||||
|
|
@ -119,7 +119,7 @@ static ssize_t dp_aux_cmd_fifo_tx(struct dp_aux_private *aux,
|
|||
|
||||
reinit_completion(&aux->comp);
|
||||
|
||||
ret = dp_aux_write(aux, msg);
|
||||
ret = msm_dp_aux_write(aux, msg);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
|
|
@ -131,7 +131,7 @@ static ssize_t dp_aux_cmd_fifo_tx(struct dp_aux_private *aux,
|
|||
return ret;
|
||||
}
|
||||
|
||||
static ssize_t dp_aux_cmd_fifo_rx(struct dp_aux_private *aux,
|
||||
static ssize_t msm_dp_aux_cmd_fifo_rx(struct msm_dp_aux_private *aux,
|
||||
struct drm_dp_aux_msg *msg)
|
||||
{
|
||||
u32 data;
|
||||
|
|
@ -139,20 +139,20 @@ static ssize_t dp_aux_cmd_fifo_rx(struct dp_aux_private *aux,
|
|||
u32 i, actual_i;
|
||||
u32 len = msg->size;
|
||||
|
||||
dp_catalog_aux_clear_trans(aux->catalog, true);
|
||||
msm_dp_catalog_aux_clear_trans(aux->catalog, true);
|
||||
|
||||
data = DP_AUX_DATA_INDEX_WRITE; /* INDEX_WRITE */
|
||||
data |= DP_AUX_DATA_READ; /* read */
|
||||
|
||||
dp_catalog_aux_write_data(aux->catalog, data);
|
||||
msm_dp_catalog_aux_write_data(aux->catalog, data);
|
||||
|
||||
dp = msg->buffer;
|
||||
|
||||
/* discard first byte */
|
||||
data = dp_catalog_aux_read_data(aux->catalog);
|
||||
data = msm_dp_catalog_aux_read_data(aux->catalog);
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
data = dp_catalog_aux_read_data(aux->catalog);
|
||||
data = msm_dp_catalog_aux_read_data(aux->catalog);
|
||||
*dp++ = (u8)((data >> DP_AUX_DATA_OFFSET) & 0xff);
|
||||
|
||||
actual_i = (data >> DP_AUX_DATA_INDEX_OFFSET) & 0xFF;
|
||||
|
|
@ -163,7 +163,7 @@ static ssize_t dp_aux_cmd_fifo_rx(struct dp_aux_private *aux,
|
|||
return i;
|
||||
}
|
||||
|
||||
static void dp_aux_update_offset_and_segment(struct dp_aux_private *aux,
|
||||
static void msm_dp_aux_update_offset_and_segment(struct msm_dp_aux_private *aux,
|
||||
struct drm_dp_aux_msg *input_msg)
|
||||
{
|
||||
u32 edid_address = 0x50;
|
||||
|
|
@ -185,7 +185,7 @@ static void dp_aux_update_offset_and_segment(struct dp_aux_private *aux,
|
|||
}
|
||||
|
||||
/**
|
||||
* dp_aux_transfer_helper() - helper function for EDID read transactions
|
||||
* msm_dp_aux_transfer_helper() - helper function for EDID read transactions
|
||||
*
|
||||
* @aux: DP AUX private structure
|
||||
* @input_msg: input message from DRM upstream APIs
|
||||
|
|
@ -196,7 +196,7 @@ static void dp_aux_update_offset_and_segment(struct dp_aux_private *aux,
|
|||
* This helper function is used to fix EDID reads for non-compliant
|
||||
* sinks that do not handle the i2c middle-of-transaction flag correctly.
|
||||
*/
|
||||
static void dp_aux_transfer_helper(struct dp_aux_private *aux,
|
||||
static void msm_dp_aux_transfer_helper(struct msm_dp_aux_private *aux,
|
||||
struct drm_dp_aux_msg *input_msg,
|
||||
bool send_seg)
|
||||
{
|
||||
|
|
@ -238,7 +238,7 @@ static void dp_aux_transfer_helper(struct dp_aux_private *aux,
|
|||
helper_msg.address = segment_address;
|
||||
helper_msg.buffer = &aux->segment;
|
||||
helper_msg.size = 1;
|
||||
dp_aux_cmd_fifo_tx(aux, &helper_msg);
|
||||
msm_dp_aux_cmd_fifo_tx(aux, &helper_msg);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -252,7 +252,7 @@ static void dp_aux_transfer_helper(struct dp_aux_private *aux,
|
|||
helper_msg.address = input_msg->address;
|
||||
helper_msg.buffer = &aux->offset;
|
||||
helper_msg.size = 1;
|
||||
dp_aux_cmd_fifo_tx(aux, &helper_msg);
|
||||
msm_dp_aux_cmd_fifo_tx(aux, &helper_msg);
|
||||
|
||||
end:
|
||||
aux->offset += message_size;
|
||||
|
|
@ -265,15 +265,15 @@ static void dp_aux_transfer_helper(struct dp_aux_private *aux,
|
|||
* It will call aux_reset() function to reset the AUX channel,
|
||||
* if the waiting is timeout.
|
||||
*/
|
||||
static ssize_t dp_aux_transfer(struct drm_dp_aux *dp_aux,
|
||||
static ssize_t msm_dp_aux_transfer(struct drm_dp_aux *msm_dp_aux,
|
||||
struct drm_dp_aux_msg *msg)
|
||||
{
|
||||
ssize_t ret;
|
||||
int const aux_cmd_native_max = 16;
|
||||
int const aux_cmd_i2c_max = 128;
|
||||
struct dp_aux_private *aux;
|
||||
struct msm_dp_aux_private *aux;
|
||||
|
||||
aux = container_of(dp_aux, struct dp_aux_private, dp_aux);
|
||||
aux = container_of(msm_dp_aux, struct msm_dp_aux_private, msm_dp_aux);
|
||||
|
||||
aux->native = msg->request & (DP_AUX_NATIVE_WRITE & DP_AUX_NATIVE_READ);
|
||||
|
||||
|
|
@ -292,7 +292,7 @@ static ssize_t dp_aux_transfer(struct drm_dp_aux *dp_aux,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
ret = pm_runtime_resume_and_get(dp_aux->dev);
|
||||
ret = pm_runtime_resume_and_get(msm_dp_aux->dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
|
@ -313,8 +313,8 @@ static ssize_t dp_aux_transfer(struct drm_dp_aux *dp_aux,
|
|||
goto exit;
|
||||
}
|
||||
|
||||
dp_aux_update_offset_and_segment(aux, msg);
|
||||
dp_aux_transfer_helper(aux, msg, true);
|
||||
msm_dp_aux_update_offset_and_segment(aux, msg);
|
||||
msm_dp_aux_transfer_helper(aux, msg, true);
|
||||
|
||||
aux->read = msg->request & (DP_AUX_I2C_READ & DP_AUX_NATIVE_READ);
|
||||
aux->cmd_busy = true;
|
||||
|
|
@ -327,7 +327,7 @@ static ssize_t dp_aux_transfer(struct drm_dp_aux *dp_aux,
|
|||
aux->no_send_stop = true;
|
||||
}
|
||||
|
||||
ret = dp_aux_cmd_fifo_tx(aux, msg);
|
||||
ret = msm_dp_aux_cmd_fifo_tx(aux, msg);
|
||||
if (ret < 0) {
|
||||
if (aux->native) {
|
||||
aux->retry_cnt++;
|
||||
|
|
@ -335,14 +335,14 @@ static ssize_t dp_aux_transfer(struct drm_dp_aux *dp_aux,
|
|||
phy_calibrate(aux->phy);
|
||||
}
|
||||
/* reset aux if link is in connected state */
|
||||
if (dp_catalog_link_is_connected(aux->catalog))
|
||||
dp_catalog_aux_reset(aux->catalog);
|
||||
if (msm_dp_catalog_link_is_connected(aux->catalog))
|
||||
msm_dp_catalog_aux_reset(aux->catalog);
|
||||
} else {
|
||||
aux->retry_cnt = 0;
|
||||
switch (aux->aux_error_num) {
|
||||
case DP_AUX_ERR_NONE:
|
||||
if (aux->read)
|
||||
ret = dp_aux_cmd_fifo_rx(aux, msg);
|
||||
ret = msm_dp_aux_cmd_fifo_rx(aux, msg);
|
||||
msg->reply = aux->native ? DP_AUX_NATIVE_REPLY_ACK : DP_AUX_I2C_REPLY_ACK;
|
||||
break;
|
||||
case DP_AUX_ERR_DEFER:
|
||||
|
|
@ -364,24 +364,24 @@ static ssize_t dp_aux_transfer(struct drm_dp_aux *dp_aux,
|
|||
|
||||
exit:
|
||||
mutex_unlock(&aux->mutex);
|
||||
pm_runtime_put_sync(dp_aux->dev);
|
||||
pm_runtime_put_sync(msm_dp_aux->dev);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
irqreturn_t dp_aux_isr(struct drm_dp_aux *dp_aux)
|
||||
irqreturn_t msm_dp_aux_isr(struct drm_dp_aux *msm_dp_aux)
|
||||
{
|
||||
u32 isr;
|
||||
struct dp_aux_private *aux;
|
||||
struct msm_dp_aux_private *aux;
|
||||
|
||||
if (!dp_aux) {
|
||||
if (!msm_dp_aux) {
|
||||
DRM_ERROR("invalid input\n");
|
||||
return IRQ_NONE;
|
||||
}
|
||||
|
||||
aux = container_of(dp_aux, struct dp_aux_private, dp_aux);
|
||||
aux = container_of(msm_dp_aux, struct msm_dp_aux_private, msm_dp_aux);
|
||||
|
||||
isr = dp_catalog_aux_get_irq(aux->catalog);
|
||||
isr = msm_dp_catalog_aux_get_irq(aux->catalog);
|
||||
|
||||
/* no interrupts pending, return immediately */
|
||||
if (!isr)
|
||||
|
|
@ -403,7 +403,7 @@ irqreturn_t dp_aux_isr(struct drm_dp_aux *dp_aux)
|
|||
|
||||
if (isr & DP_INTR_AUX_ERROR) {
|
||||
aux->aux_error_num = DP_AUX_ERR_PHY;
|
||||
dp_catalog_aux_clear_hw_interrupts(aux->catalog);
|
||||
msm_dp_catalog_aux_clear_hw_interrupts(aux->catalog);
|
||||
} else if (isr & DP_INTR_NACK_DEFER) {
|
||||
aux->aux_error_num = DP_AUX_ERR_NACK_DEFER;
|
||||
} else if (isr & DP_INTR_WRONG_ADDR) {
|
||||
|
|
@ -429,68 +429,68 @@ irqreturn_t dp_aux_isr(struct drm_dp_aux *dp_aux)
|
|||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
void dp_aux_enable_xfers(struct drm_dp_aux *dp_aux, bool enabled)
|
||||
void msm_dp_aux_enable_xfers(struct drm_dp_aux *msm_dp_aux, bool enabled)
|
||||
{
|
||||
struct dp_aux_private *aux;
|
||||
struct msm_dp_aux_private *aux;
|
||||
|
||||
aux = container_of(dp_aux, struct dp_aux_private, dp_aux);
|
||||
aux = container_of(msm_dp_aux, struct msm_dp_aux_private, msm_dp_aux);
|
||||
aux->enable_xfers = enabled;
|
||||
}
|
||||
|
||||
void dp_aux_reconfig(struct drm_dp_aux *dp_aux)
|
||||
void msm_dp_aux_reconfig(struct drm_dp_aux *msm_dp_aux)
|
||||
{
|
||||
struct dp_aux_private *aux;
|
||||
struct msm_dp_aux_private *aux;
|
||||
|
||||
aux = container_of(dp_aux, struct dp_aux_private, dp_aux);
|
||||
aux = container_of(msm_dp_aux, struct msm_dp_aux_private, msm_dp_aux);
|
||||
|
||||
phy_calibrate(aux->phy);
|
||||
dp_catalog_aux_reset(aux->catalog);
|
||||
msm_dp_catalog_aux_reset(aux->catalog);
|
||||
}
|
||||
|
||||
void dp_aux_init(struct drm_dp_aux *dp_aux)
|
||||
void msm_dp_aux_init(struct drm_dp_aux *msm_dp_aux)
|
||||
{
|
||||
struct dp_aux_private *aux;
|
||||
struct msm_dp_aux_private *aux;
|
||||
|
||||
if (!dp_aux) {
|
||||
if (!msm_dp_aux) {
|
||||
DRM_ERROR("invalid input\n");
|
||||
return;
|
||||
}
|
||||
|
||||
aux = container_of(dp_aux, struct dp_aux_private, dp_aux);
|
||||
aux = container_of(msm_dp_aux, struct msm_dp_aux_private, msm_dp_aux);
|
||||
|
||||
mutex_lock(&aux->mutex);
|
||||
|
||||
dp_catalog_aux_enable(aux->catalog, true);
|
||||
msm_dp_catalog_aux_enable(aux->catalog, true);
|
||||
aux->retry_cnt = 0;
|
||||
aux->initted = true;
|
||||
|
||||
mutex_unlock(&aux->mutex);
|
||||
}
|
||||
|
||||
void dp_aux_deinit(struct drm_dp_aux *dp_aux)
|
||||
void msm_dp_aux_deinit(struct drm_dp_aux *msm_dp_aux)
|
||||
{
|
||||
struct dp_aux_private *aux;
|
||||
struct msm_dp_aux_private *aux;
|
||||
|
||||
aux = container_of(dp_aux, struct dp_aux_private, dp_aux);
|
||||
aux = container_of(msm_dp_aux, struct msm_dp_aux_private, msm_dp_aux);
|
||||
|
||||
mutex_lock(&aux->mutex);
|
||||
|
||||
aux->initted = false;
|
||||
dp_catalog_aux_enable(aux->catalog, false);
|
||||
msm_dp_catalog_aux_enable(aux->catalog, false);
|
||||
|
||||
mutex_unlock(&aux->mutex);
|
||||
}
|
||||
|
||||
int dp_aux_register(struct drm_dp_aux *dp_aux)
|
||||
int msm_dp_aux_register(struct drm_dp_aux *msm_dp_aux)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (!dp_aux) {
|
||||
if (!msm_dp_aux) {
|
||||
DRM_ERROR("invalid input\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ret = drm_dp_aux_register(dp_aux);
|
||||
ret = drm_dp_aux_register(msm_dp_aux);
|
||||
if (ret) {
|
||||
DRM_ERROR("%s: failed to register drm aux: %d\n", __func__,
|
||||
ret);
|
||||
|
|
@ -500,34 +500,34 @@ int dp_aux_register(struct drm_dp_aux *dp_aux)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void dp_aux_unregister(struct drm_dp_aux *dp_aux)
|
||||
void msm_dp_aux_unregister(struct drm_dp_aux *msm_dp_aux)
|
||||
{
|
||||
drm_dp_aux_unregister(dp_aux);
|
||||
drm_dp_aux_unregister(msm_dp_aux);
|
||||
}
|
||||
|
||||
static int dp_wait_hpd_asserted(struct drm_dp_aux *dp_aux,
|
||||
static int msm_dp_wait_hpd_asserted(struct drm_dp_aux *msm_dp_aux,
|
||||
unsigned long wait_us)
|
||||
{
|
||||
int ret;
|
||||
struct dp_aux_private *aux;
|
||||
struct msm_dp_aux_private *aux;
|
||||
|
||||
aux = container_of(dp_aux, struct dp_aux_private, dp_aux);
|
||||
aux = container_of(msm_dp_aux, struct msm_dp_aux_private, msm_dp_aux);
|
||||
|
||||
ret = pm_runtime_resume_and_get(aux->dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = dp_catalog_aux_wait_for_hpd_connect_state(aux->catalog, wait_us);
|
||||
ret = msm_dp_catalog_aux_wait_for_hpd_connect_state(aux->catalog, wait_us);
|
||||
pm_runtime_put_sync(aux->dev);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
struct drm_dp_aux *dp_aux_get(struct device *dev, struct dp_catalog *catalog,
|
||||
struct drm_dp_aux *msm_dp_aux_get(struct device *dev, struct msm_dp_catalog *catalog,
|
||||
struct phy *phy,
|
||||
bool is_edp)
|
||||
{
|
||||
struct dp_aux_private *aux;
|
||||
struct msm_dp_aux_private *aux;
|
||||
|
||||
if (!catalog) {
|
||||
DRM_ERROR("invalid input\n");
|
||||
|
|
@ -553,23 +553,23 @@ struct drm_dp_aux *dp_aux_get(struct device *dev, struct dp_catalog *catalog,
|
|||
* before registering AUX with the DRM device so that
|
||||
* msm eDP panel can be detected by generic_dep_panel_probe().
|
||||
*/
|
||||
aux->dp_aux.name = "dpu_dp_aux";
|
||||
aux->dp_aux.dev = dev;
|
||||
aux->dp_aux.transfer = dp_aux_transfer;
|
||||
aux->dp_aux.wait_hpd_asserted = dp_wait_hpd_asserted;
|
||||
drm_dp_aux_init(&aux->dp_aux);
|
||||
aux->msm_dp_aux.name = "dpu_dp_aux";
|
||||
aux->msm_dp_aux.dev = dev;
|
||||
aux->msm_dp_aux.transfer = msm_dp_aux_transfer;
|
||||
aux->msm_dp_aux.wait_hpd_asserted = msm_dp_wait_hpd_asserted;
|
||||
drm_dp_aux_init(&aux->msm_dp_aux);
|
||||
|
||||
return &aux->dp_aux;
|
||||
return &aux->msm_dp_aux;
|
||||
}
|
||||
|
||||
void dp_aux_put(struct drm_dp_aux *dp_aux)
|
||||
void msm_dp_aux_put(struct drm_dp_aux *msm_dp_aux)
|
||||
{
|
||||
struct dp_aux_private *aux;
|
||||
struct msm_dp_aux_private *aux;
|
||||
|
||||
if (!dp_aux)
|
||||
if (!msm_dp_aux)
|
||||
return;
|
||||
|
||||
aux = container_of(dp_aux, struct dp_aux_private, dp_aux);
|
||||
aux = container_of(msm_dp_aux, struct msm_dp_aux_private, msm_dp_aux);
|
||||
|
||||
mutex_destroy(&aux->mutex);
|
||||
|
||||
|
|
|
|||
|
|
@ -9,18 +9,18 @@
|
|||
#include "dp_catalog.h"
|
||||
#include <drm/display/drm_dp_helper.h>
|
||||
|
||||
int dp_aux_register(struct drm_dp_aux *dp_aux);
|
||||
void dp_aux_unregister(struct drm_dp_aux *dp_aux);
|
||||
irqreturn_t dp_aux_isr(struct drm_dp_aux *dp_aux);
|
||||
void dp_aux_enable_xfers(struct drm_dp_aux *dp_aux, bool enabled);
|
||||
void dp_aux_init(struct drm_dp_aux *dp_aux);
|
||||
void dp_aux_deinit(struct drm_dp_aux *dp_aux);
|
||||
void dp_aux_reconfig(struct drm_dp_aux *dp_aux);
|
||||
int msm_dp_aux_register(struct drm_dp_aux *msm_dp_aux);
|
||||
void msm_dp_aux_unregister(struct drm_dp_aux *msm_dp_aux);
|
||||
irqreturn_t msm_dp_aux_isr(struct drm_dp_aux *msm_dp_aux);
|
||||
void msm_dp_aux_enable_xfers(struct drm_dp_aux *msm_dp_aux, bool enabled);
|
||||
void msm_dp_aux_init(struct drm_dp_aux *msm_dp_aux);
|
||||
void msm_dp_aux_deinit(struct drm_dp_aux *msm_dp_aux);
|
||||
void msm_dp_aux_reconfig(struct drm_dp_aux *msm_dp_aux);
|
||||
|
||||
struct phy;
|
||||
struct drm_dp_aux *dp_aux_get(struct device *dev, struct dp_catalog *catalog,
|
||||
struct drm_dp_aux *msm_dp_aux_get(struct device *dev, struct msm_dp_catalog *catalog,
|
||||
struct phy *phy,
|
||||
bool is_edp);
|
||||
void dp_aux_put(struct drm_dp_aux *aux);
|
||||
void msm_dp_aux_put(struct drm_dp_aux *aux);
|
||||
|
||||
#endif /*__DP_AUX_H_*/
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -31,7 +31,7 @@
|
|||
#define DP_HW_VERSION_1_0 0x10000000
|
||||
#define DP_HW_VERSION_1_2 0x10020000
|
||||
|
||||
enum dp_catalog_audio_sdp_type {
|
||||
enum msm_dp_catalog_audio_sdp_type {
|
||||
DP_AUDIO_SDP_STREAM,
|
||||
DP_AUDIO_SDP_TIMESTAMP,
|
||||
DP_AUDIO_SDP_INFOFRAME,
|
||||
|
|
@ -40,89 +40,89 @@ enum dp_catalog_audio_sdp_type {
|
|||
DP_AUDIO_SDP_MAX,
|
||||
};
|
||||
|
||||
enum dp_catalog_audio_header_type {
|
||||
enum msm_dp_catalog_audio_header_type {
|
||||
DP_AUDIO_SDP_HEADER_1,
|
||||
DP_AUDIO_SDP_HEADER_2,
|
||||
DP_AUDIO_SDP_HEADER_3,
|
||||
DP_AUDIO_SDP_HEADER_MAX,
|
||||
};
|
||||
|
||||
struct dp_catalog {
|
||||
struct msm_dp_catalog {
|
||||
bool wide_bus_en;
|
||||
};
|
||||
|
||||
/* Debug module */
|
||||
void dp_catalog_snapshot(struct dp_catalog *dp_catalog, struct msm_disp_state *disp_state);
|
||||
void msm_dp_catalog_snapshot(struct msm_dp_catalog *msm_dp_catalog, struct msm_disp_state *disp_state);
|
||||
|
||||
/* AUX APIs */
|
||||
u32 dp_catalog_aux_read_data(struct dp_catalog *dp_catalog);
|
||||
int dp_catalog_aux_write_data(struct dp_catalog *dp_catalog, u32 data);
|
||||
int dp_catalog_aux_write_trans(struct dp_catalog *dp_catalog, u32 data);
|
||||
int dp_catalog_aux_clear_trans(struct dp_catalog *dp_catalog, bool read);
|
||||
int dp_catalog_aux_clear_hw_interrupts(struct dp_catalog *dp_catalog);
|
||||
void dp_catalog_aux_reset(struct dp_catalog *dp_catalog);
|
||||
void dp_catalog_aux_enable(struct dp_catalog *dp_catalog, bool enable);
|
||||
int dp_catalog_aux_wait_for_hpd_connect_state(struct dp_catalog *dp_catalog,
|
||||
u32 msm_dp_catalog_aux_read_data(struct msm_dp_catalog *msm_dp_catalog);
|
||||
int msm_dp_catalog_aux_write_data(struct msm_dp_catalog *msm_dp_catalog, u32 data);
|
||||
int msm_dp_catalog_aux_write_trans(struct msm_dp_catalog *msm_dp_catalog, u32 data);
|
||||
int msm_dp_catalog_aux_clear_trans(struct msm_dp_catalog *msm_dp_catalog, bool read);
|
||||
int msm_dp_catalog_aux_clear_hw_interrupts(struct msm_dp_catalog *msm_dp_catalog);
|
||||
void msm_dp_catalog_aux_reset(struct msm_dp_catalog *msm_dp_catalog);
|
||||
void msm_dp_catalog_aux_enable(struct msm_dp_catalog *msm_dp_catalog, bool enable);
|
||||
int msm_dp_catalog_aux_wait_for_hpd_connect_state(struct msm_dp_catalog *msm_dp_catalog,
|
||||
unsigned long wait_us);
|
||||
u32 dp_catalog_aux_get_irq(struct dp_catalog *dp_catalog);
|
||||
u32 msm_dp_catalog_aux_get_irq(struct msm_dp_catalog *msm_dp_catalog);
|
||||
|
||||
/* DP Controller APIs */
|
||||
void dp_catalog_ctrl_state_ctrl(struct dp_catalog *dp_catalog, u32 state);
|
||||
void dp_catalog_ctrl_config_ctrl(struct dp_catalog *dp_catalog, u32 config);
|
||||
void dp_catalog_ctrl_lane_mapping(struct dp_catalog *dp_catalog);
|
||||
void dp_catalog_ctrl_mainlink_ctrl(struct dp_catalog *dp_catalog, bool enable);
|
||||
void dp_catalog_ctrl_psr_mainlink_enable(struct dp_catalog *dp_catalog, bool enable);
|
||||
void dp_catalog_setup_peripheral_flush(struct dp_catalog *dp_catalog);
|
||||
void dp_catalog_ctrl_config_misc(struct dp_catalog *dp_catalog, u32 cc, u32 tb);
|
||||
void dp_catalog_ctrl_config_msa(struct dp_catalog *dp_catalog, u32 rate,
|
||||
void msm_dp_catalog_ctrl_state_ctrl(struct msm_dp_catalog *msm_dp_catalog, u32 state);
|
||||
void msm_dp_catalog_ctrl_config_ctrl(struct msm_dp_catalog *msm_dp_catalog, u32 config);
|
||||
void msm_dp_catalog_ctrl_lane_mapping(struct msm_dp_catalog *msm_dp_catalog);
|
||||
void msm_dp_catalog_ctrl_mainlink_ctrl(struct msm_dp_catalog *msm_dp_catalog, bool enable);
|
||||
void msm_dp_catalog_ctrl_psr_mainlink_enable(struct msm_dp_catalog *msm_dp_catalog, bool enable);
|
||||
void msm_dp_catalog_setup_peripheral_flush(struct msm_dp_catalog *msm_dp_catalog);
|
||||
void msm_dp_catalog_ctrl_config_misc(struct msm_dp_catalog *msm_dp_catalog, u32 cc, u32 tb);
|
||||
void msm_dp_catalog_ctrl_config_msa(struct msm_dp_catalog *msm_dp_catalog, u32 rate,
|
||||
u32 stream_rate_khz, bool is_ycbcr_420);
|
||||
int dp_catalog_ctrl_set_pattern_state_bit(struct dp_catalog *dp_catalog, u32 pattern);
|
||||
u32 dp_catalog_hw_revision(const struct dp_catalog *dp_catalog);
|
||||
void dp_catalog_ctrl_reset(struct dp_catalog *dp_catalog);
|
||||
bool dp_catalog_ctrl_mainlink_ready(struct dp_catalog *dp_catalog);
|
||||
void dp_catalog_ctrl_enable_irq(struct dp_catalog *dp_catalog, bool enable);
|
||||
void dp_catalog_hpd_config_intr(struct dp_catalog *dp_catalog,
|
||||
int msm_dp_catalog_ctrl_set_pattern_state_bit(struct msm_dp_catalog *msm_dp_catalog, u32 pattern);
|
||||
u32 msm_dp_catalog_hw_revision(const struct msm_dp_catalog *msm_dp_catalog);
|
||||
void msm_dp_catalog_ctrl_reset(struct msm_dp_catalog *msm_dp_catalog);
|
||||
bool msm_dp_catalog_ctrl_mainlink_ready(struct msm_dp_catalog *msm_dp_catalog);
|
||||
void msm_dp_catalog_ctrl_enable_irq(struct msm_dp_catalog *msm_dp_catalog, bool enable);
|
||||
void msm_dp_catalog_hpd_config_intr(struct msm_dp_catalog *msm_dp_catalog,
|
||||
u32 intr_mask, bool en);
|
||||
void dp_catalog_ctrl_hpd_enable(struct dp_catalog *dp_catalog);
|
||||
void dp_catalog_ctrl_hpd_disable(struct dp_catalog *dp_catalog);
|
||||
void dp_catalog_ctrl_config_psr(struct dp_catalog *dp_catalog);
|
||||
void dp_catalog_ctrl_set_psr(struct dp_catalog *dp_catalog, bool enter);
|
||||
u32 dp_catalog_link_is_connected(struct dp_catalog *dp_catalog);
|
||||
u32 dp_catalog_hpd_get_intr_status(struct dp_catalog *dp_catalog);
|
||||
void dp_catalog_ctrl_phy_reset(struct dp_catalog *dp_catalog);
|
||||
int dp_catalog_ctrl_get_interrupt(struct dp_catalog *dp_catalog);
|
||||
u32 dp_catalog_ctrl_read_psr_interrupt_status(struct dp_catalog *dp_catalog);
|
||||
void dp_catalog_ctrl_update_transfer_unit(struct dp_catalog *dp_catalog,
|
||||
u32 dp_tu, u32 valid_boundary,
|
||||
void msm_dp_catalog_ctrl_hpd_enable(struct msm_dp_catalog *msm_dp_catalog);
|
||||
void msm_dp_catalog_ctrl_hpd_disable(struct msm_dp_catalog *msm_dp_catalog);
|
||||
void msm_dp_catalog_ctrl_config_psr(struct msm_dp_catalog *msm_dp_catalog);
|
||||
void msm_dp_catalog_ctrl_set_psr(struct msm_dp_catalog *msm_dp_catalog, bool enter);
|
||||
u32 msm_dp_catalog_link_is_connected(struct msm_dp_catalog *msm_dp_catalog);
|
||||
u32 msm_dp_catalog_hpd_get_intr_status(struct msm_dp_catalog *msm_dp_catalog);
|
||||
void msm_dp_catalog_ctrl_phy_reset(struct msm_dp_catalog *msm_dp_catalog);
|
||||
int msm_dp_catalog_ctrl_get_interrupt(struct msm_dp_catalog *msm_dp_catalog);
|
||||
u32 msm_dp_catalog_ctrl_read_psr_interrupt_status(struct msm_dp_catalog *msm_dp_catalog);
|
||||
void msm_dp_catalog_ctrl_update_transfer_unit(struct msm_dp_catalog *msm_dp_catalog,
|
||||
u32 msm_dp_tu, u32 valid_boundary,
|
||||
u32 valid_boundary2);
|
||||
void dp_catalog_ctrl_send_phy_pattern(struct dp_catalog *dp_catalog,
|
||||
void msm_dp_catalog_ctrl_send_phy_pattern(struct msm_dp_catalog *msm_dp_catalog,
|
||||
u32 pattern);
|
||||
u32 dp_catalog_ctrl_read_phy_pattern(struct dp_catalog *dp_catalog);
|
||||
u32 msm_dp_catalog_ctrl_read_phy_pattern(struct msm_dp_catalog *msm_dp_catalog);
|
||||
|
||||
/* DP Panel APIs */
|
||||
int dp_catalog_panel_timing_cfg(struct dp_catalog *dp_catalog, u32 total,
|
||||
u32 sync_start, u32 width_blanking, u32 dp_active);
|
||||
void dp_catalog_panel_enable_vsc_sdp(struct dp_catalog *dp_catalog, struct dp_sdp *vsc_sdp);
|
||||
void dp_catalog_panel_disable_vsc_sdp(struct dp_catalog *dp_catalog);
|
||||
void dp_catalog_dump_regs(struct dp_catalog *dp_catalog);
|
||||
void dp_catalog_panel_tpg_enable(struct dp_catalog *dp_catalog,
|
||||
int msm_dp_catalog_panel_timing_cfg(struct msm_dp_catalog *msm_dp_catalog, u32 total,
|
||||
u32 sync_start, u32 width_blanking, u32 msm_dp_active);
|
||||
void msm_dp_catalog_panel_enable_vsc_sdp(struct msm_dp_catalog *msm_dp_catalog, struct dp_sdp *vsc_sdp);
|
||||
void msm_dp_catalog_panel_disable_vsc_sdp(struct msm_dp_catalog *msm_dp_catalog);
|
||||
void msm_dp_catalog_dump_regs(struct msm_dp_catalog *msm_dp_catalog);
|
||||
void msm_dp_catalog_panel_tpg_enable(struct msm_dp_catalog *msm_dp_catalog,
|
||||
struct drm_display_mode *drm_mode);
|
||||
void dp_catalog_panel_tpg_disable(struct dp_catalog *dp_catalog);
|
||||
void msm_dp_catalog_panel_tpg_disable(struct msm_dp_catalog *msm_dp_catalog);
|
||||
|
||||
struct dp_catalog *dp_catalog_get(struct device *dev);
|
||||
struct msm_dp_catalog *msm_dp_catalog_get(struct device *dev);
|
||||
|
||||
/* DP Audio APIs */
|
||||
u32 dp_catalog_audio_get_header(struct dp_catalog *dp_catalog,
|
||||
enum dp_catalog_audio_sdp_type sdp,
|
||||
enum dp_catalog_audio_header_type header);
|
||||
void dp_catalog_audio_set_header(struct dp_catalog *dp_catalog,
|
||||
enum dp_catalog_audio_sdp_type sdp,
|
||||
enum dp_catalog_audio_header_type header,
|
||||
u32 msm_dp_catalog_audio_get_header(struct msm_dp_catalog *msm_dp_catalog,
|
||||
enum msm_dp_catalog_audio_sdp_type sdp,
|
||||
enum msm_dp_catalog_audio_header_type header);
|
||||
void msm_dp_catalog_audio_set_header(struct msm_dp_catalog *msm_dp_catalog,
|
||||
enum msm_dp_catalog_audio_sdp_type sdp,
|
||||
enum msm_dp_catalog_audio_header_type header,
|
||||
u32 data);
|
||||
void dp_catalog_audio_config_acr(struct dp_catalog *catalog, u32 select);
|
||||
void dp_catalog_audio_enable(struct dp_catalog *catalog, bool enable);
|
||||
void dp_catalog_audio_config_sdp(struct dp_catalog *catalog);
|
||||
void dp_catalog_audio_init(struct dp_catalog *catalog);
|
||||
void dp_catalog_audio_sfe_level(struct dp_catalog *catalog, u32 safe_to_exit_level);
|
||||
void msm_dp_catalog_audio_config_acr(struct msm_dp_catalog *catalog, u32 select);
|
||||
void msm_dp_catalog_audio_enable(struct msm_dp_catalog *catalog, bool enable);
|
||||
void msm_dp_catalog_audio_config_sdp(struct msm_dp_catalog *catalog);
|
||||
void msm_dp_catalog_audio_init(struct msm_dp_catalog *catalog);
|
||||
void msm_dp_catalog_audio_sfe_level(struct msm_dp_catalog *catalog, u32 safe_to_exit_level);
|
||||
|
||||
#endif /* _DP_CATALOG_H_ */
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -11,34 +11,34 @@
|
|||
#include "dp_link.h"
|
||||
#include "dp_catalog.h"
|
||||
|
||||
struct dp_ctrl {
|
||||
struct msm_dp_ctrl {
|
||||
bool wide_bus_en;
|
||||
};
|
||||
|
||||
struct phy;
|
||||
|
||||
int dp_ctrl_on_link(struct dp_ctrl *dp_ctrl);
|
||||
int dp_ctrl_on_stream(struct dp_ctrl *dp_ctrl, bool force_link_train);
|
||||
void dp_ctrl_off_link_stream(struct dp_ctrl *dp_ctrl);
|
||||
void dp_ctrl_off_link(struct dp_ctrl *dp_ctrl);
|
||||
void dp_ctrl_off(struct dp_ctrl *dp_ctrl);
|
||||
void dp_ctrl_push_idle(struct dp_ctrl *dp_ctrl);
|
||||
irqreturn_t dp_ctrl_isr(struct dp_ctrl *dp_ctrl);
|
||||
void dp_ctrl_handle_sink_request(struct dp_ctrl *dp_ctrl);
|
||||
struct dp_ctrl *dp_ctrl_get(struct device *dev, struct dp_link *link,
|
||||
struct dp_panel *panel, struct drm_dp_aux *aux,
|
||||
struct dp_catalog *catalog,
|
||||
int msm_dp_ctrl_on_link(struct msm_dp_ctrl *msm_dp_ctrl);
|
||||
int msm_dp_ctrl_on_stream(struct msm_dp_ctrl *msm_dp_ctrl, bool force_link_train);
|
||||
void msm_dp_ctrl_off_link_stream(struct msm_dp_ctrl *msm_dp_ctrl);
|
||||
void msm_dp_ctrl_off_link(struct msm_dp_ctrl *msm_dp_ctrl);
|
||||
void msm_dp_ctrl_off(struct msm_dp_ctrl *msm_dp_ctrl);
|
||||
void msm_dp_ctrl_push_idle(struct msm_dp_ctrl *msm_dp_ctrl);
|
||||
irqreturn_t msm_dp_ctrl_isr(struct msm_dp_ctrl *msm_dp_ctrl);
|
||||
void msm_dp_ctrl_handle_sink_request(struct msm_dp_ctrl *msm_dp_ctrl);
|
||||
struct msm_dp_ctrl *msm_dp_ctrl_get(struct device *dev, struct msm_dp_link *link,
|
||||
struct msm_dp_panel *panel, struct drm_dp_aux *aux,
|
||||
struct msm_dp_catalog *catalog,
|
||||
struct phy *phy);
|
||||
|
||||
void dp_ctrl_reset_irq_ctrl(struct dp_ctrl *dp_ctrl, bool enable);
|
||||
void dp_ctrl_phy_init(struct dp_ctrl *dp_ctrl);
|
||||
void dp_ctrl_phy_exit(struct dp_ctrl *dp_ctrl);
|
||||
void dp_ctrl_irq_phy_exit(struct dp_ctrl *dp_ctrl);
|
||||
void msm_dp_ctrl_reset_irq_ctrl(struct msm_dp_ctrl *msm_dp_ctrl, bool enable);
|
||||
void msm_dp_ctrl_phy_init(struct msm_dp_ctrl *msm_dp_ctrl);
|
||||
void msm_dp_ctrl_phy_exit(struct msm_dp_ctrl *msm_dp_ctrl);
|
||||
void msm_dp_ctrl_irq_phy_exit(struct msm_dp_ctrl *msm_dp_ctrl);
|
||||
|
||||
void dp_ctrl_set_psr(struct dp_ctrl *dp_ctrl, bool enable);
|
||||
void dp_ctrl_config_psr(struct dp_ctrl *dp_ctrl);
|
||||
void msm_dp_ctrl_set_psr(struct msm_dp_ctrl *msm_dp_ctrl, bool enable);
|
||||
void msm_dp_ctrl_config_psr(struct msm_dp_ctrl *msm_dp_ctrl);
|
||||
|
||||
int dp_ctrl_core_clk_enable(struct dp_ctrl *dp_ctrl);
|
||||
void dp_ctrl_core_clk_disable(struct dp_ctrl *dp_ctrl);
|
||||
int msm_dp_ctrl_core_clk_enable(struct msm_dp_ctrl *msm_dp_ctrl);
|
||||
void msm_dp_ctrl_core_clk_disable(struct msm_dp_ctrl *msm_dp_ctrl);
|
||||
|
||||
#endif /* _DP_CTRL_H_ */
|
||||
|
|
|
|||
|
|
@ -17,15 +17,15 @@
|
|||
|
||||
#define DEBUG_NAME "msm_dp"
|
||||
|
||||
struct dp_debug_private {
|
||||
struct dp_link *link;
|
||||
struct dp_panel *panel;
|
||||
struct msm_dp_debug_private {
|
||||
struct msm_dp_link *link;
|
||||
struct msm_dp_panel *panel;
|
||||
struct drm_connector *connector;
|
||||
};
|
||||
|
||||
static int dp_debug_show(struct seq_file *seq, void *p)
|
||||
static int msm_dp_debug_show(struct seq_file *seq, void *p)
|
||||
{
|
||||
struct dp_debug_private *debug = seq->private;
|
||||
struct msm_dp_debug_private *debug = seq->private;
|
||||
u64 lclk = 0;
|
||||
u32 link_params_rate;
|
||||
const struct drm_display_mode *drm_mode;
|
||||
|
|
@ -33,7 +33,7 @@ static int dp_debug_show(struct seq_file *seq, void *p)
|
|||
if (!debug)
|
||||
return -ENODEV;
|
||||
|
||||
drm_mode = &debug->panel->dp_mode.drm_mode;
|
||||
drm_mode = &debug->panel->msm_dp_mode.drm_mode;
|
||||
|
||||
seq_printf(seq, "\tname = %s\n", DEBUG_NAME);
|
||||
seq_printf(seq, "\tdrm_dp_link\n\t\trate = %u\n",
|
||||
|
|
@ -55,8 +55,8 @@ static int dp_debug_show(struct seq_file *seq, void *p)
|
|||
drm_mode->hsync_end - drm_mode->hsync_start,
|
||||
drm_mode->vsync_end - drm_mode->vsync_start);
|
||||
seq_printf(seq, "\t\tactive_low = %dx%d\n",
|
||||
debug->panel->dp_mode.h_active_low,
|
||||
debug->panel->dp_mode.v_active_low);
|
||||
debug->panel->msm_dp_mode.h_active_low,
|
||||
debug->panel->msm_dp_mode.v_active_low);
|
||||
seq_printf(seq, "\t\th_skew = %d\n",
|
||||
drm_mode->hskew);
|
||||
seq_printf(seq, "\t\trefresh rate = %d\n",
|
||||
|
|
@ -64,7 +64,7 @@ static int dp_debug_show(struct seq_file *seq, void *p)
|
|||
seq_printf(seq, "\t\tpixel clock khz = %d\n",
|
||||
drm_mode->clock);
|
||||
seq_printf(seq, "\t\tbpp = %d\n",
|
||||
debug->panel->dp_mode.bpp);
|
||||
debug->panel->msm_dp_mode.bpp);
|
||||
|
||||
/* Link Information */
|
||||
seq_printf(seq, "\tdp_link:\n\t\ttest_requested = %d\n",
|
||||
|
|
@ -83,11 +83,11 @@ static int dp_debug_show(struct seq_file *seq, void *p)
|
|||
|
||||
return 0;
|
||||
}
|
||||
DEFINE_SHOW_ATTRIBUTE(dp_debug);
|
||||
DEFINE_SHOW_ATTRIBUTE(msm_dp_debug);
|
||||
|
||||
static int dp_test_data_show(struct seq_file *m, void *data)
|
||||
static int msm_dp_test_data_show(struct seq_file *m, void *data)
|
||||
{
|
||||
const struct dp_debug_private *debug = m->private;
|
||||
const struct msm_dp_debug_private *debug = m->private;
|
||||
const struct drm_connector *connector = debug->connector;
|
||||
u32 bpc;
|
||||
|
||||
|
|
@ -98,18 +98,18 @@ static int dp_test_data_show(struct seq_file *m, void *data)
|
|||
seq_printf(m, "vdisplay: %d\n",
|
||||
debug->link->test_video.test_v_height);
|
||||
seq_printf(m, "bpc: %u\n",
|
||||
dp_link_bit_depth_to_bpp(bpc) / 3);
|
||||
msm_dp_link_bit_depth_to_bpp(bpc) / 3);
|
||||
} else {
|
||||
seq_puts(m, "0");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
DEFINE_SHOW_ATTRIBUTE(dp_test_data);
|
||||
DEFINE_SHOW_ATTRIBUTE(msm_dp_test_data);
|
||||
|
||||
static int dp_test_type_show(struct seq_file *m, void *data)
|
||||
static int msm_dp_test_type_show(struct seq_file *m, void *data)
|
||||
{
|
||||
const struct dp_debug_private *debug = m->private;
|
||||
const struct msm_dp_debug_private *debug = m->private;
|
||||
const struct drm_connector *connector = debug->connector;
|
||||
|
||||
if (connector->status == connector_status_connected)
|
||||
|
|
@ -119,15 +119,15 @@ static int dp_test_type_show(struct seq_file *m, void *data)
|
|||
|
||||
return 0;
|
||||
}
|
||||
DEFINE_SHOW_ATTRIBUTE(dp_test_type);
|
||||
DEFINE_SHOW_ATTRIBUTE(msm_dp_test_type);
|
||||
|
||||
static ssize_t dp_test_active_write(struct file *file,
|
||||
static ssize_t msm_dp_test_active_write(struct file *file,
|
||||
const char __user *ubuf,
|
||||
size_t len, loff_t *offp)
|
||||
{
|
||||
char *input_buffer;
|
||||
int status = 0;
|
||||
const struct dp_debug_private *debug;
|
||||
const struct msm_dp_debug_private *debug;
|
||||
const struct drm_connector *connector;
|
||||
int val = 0;
|
||||
|
||||
|
|
@ -164,9 +164,9 @@ static ssize_t dp_test_active_write(struct file *file,
|
|||
return len;
|
||||
}
|
||||
|
||||
static int dp_test_active_show(struct seq_file *m, void *data)
|
||||
static int msm_dp_test_active_show(struct seq_file *m, void *data)
|
||||
{
|
||||
struct dp_debug_private *debug = m->private;
|
||||
struct msm_dp_debug_private *debug = m->private;
|
||||
struct drm_connector *connector = debug->connector;
|
||||
|
||||
if (connector->status == connector_status_connected) {
|
||||
|
|
@ -181,28 +181,28 @@ static int dp_test_active_show(struct seq_file *m, void *data)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int dp_test_active_open(struct inode *inode,
|
||||
static int msm_dp_test_active_open(struct inode *inode,
|
||||
struct file *file)
|
||||
{
|
||||
return single_open(file, dp_test_active_show,
|
||||
return single_open(file, msm_dp_test_active_show,
|
||||
inode->i_private);
|
||||
}
|
||||
|
||||
static const struct file_operations test_active_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = dp_test_active_open,
|
||||
.open = msm_dp_test_active_open,
|
||||
.read = seq_read,
|
||||
.llseek = seq_lseek,
|
||||
.release = single_release,
|
||||
.write = dp_test_active_write
|
||||
.write = msm_dp_test_active_write
|
||||
};
|
||||
|
||||
int dp_debug_init(struct device *dev, struct dp_panel *panel,
|
||||
struct dp_link *link,
|
||||
int msm_dp_debug_init(struct device *dev, struct msm_dp_panel *panel,
|
||||
struct msm_dp_link *link,
|
||||
struct drm_connector *connector,
|
||||
struct dentry *root, bool is_edp)
|
||||
{
|
||||
struct dp_debug_private *debug;
|
||||
struct msm_dp_debug_private *debug;
|
||||
|
||||
if (!dev || !panel || !link) {
|
||||
DRM_ERROR("invalid input\n");
|
||||
|
|
@ -217,20 +217,20 @@ int dp_debug_init(struct device *dev, struct dp_panel *panel,
|
|||
debug->panel = panel;
|
||||
|
||||
debugfs_create_file("dp_debug", 0444, root,
|
||||
debug, &dp_debug_fops);
|
||||
debug, &msm_dp_debug_fops);
|
||||
|
||||
if (!is_edp) {
|
||||
debugfs_create_file("msm_dp_test_active", 0444,
|
||||
debugfs_create_file("dp_test_active", 0444,
|
||||
root,
|
||||
debug, &test_active_fops);
|
||||
|
||||
debugfs_create_file("msm_dp_test_data", 0444,
|
||||
debugfs_create_file("dp_test_data", 0444,
|
||||
root,
|
||||
debug, &dp_test_data_fops);
|
||||
debug, &msm_dp_test_data_fops);
|
||||
|
||||
debugfs_create_file("msm_dp_test_type", 0444,
|
||||
debugfs_create_file("dp_test_type", 0444,
|
||||
root,
|
||||
debug, &dp_test_type_fops);
|
||||
debug, &msm_dp_test_type_fops);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
#if defined(CONFIG_DEBUG_FS)
|
||||
|
||||
/**
|
||||
* dp_debug_get() - configure and get the DisplayPlot debug module data
|
||||
* msm_dp_debug_get() - configure and get the DisplayPlot debug module data
|
||||
*
|
||||
* @dev: device instance of the caller
|
||||
* @panel: instance of panel module
|
||||
|
|
@ -25,8 +25,8 @@
|
|||
* This function sets up the debug module and provides a way
|
||||
* for debugfs input to be communicated with existing modules
|
||||
*/
|
||||
int dp_debug_init(struct device *dev, struct dp_panel *panel,
|
||||
struct dp_link *link,
|
||||
int msm_dp_debug_init(struct device *dev, struct msm_dp_panel *panel,
|
||||
struct msm_dp_link *link,
|
||||
struct drm_connector *connector,
|
||||
struct dentry *root,
|
||||
bool is_edp);
|
||||
|
|
@ -34,8 +34,8 @@ int dp_debug_init(struct device *dev, struct dp_panel *panel,
|
|||
#else
|
||||
|
||||
static inline
|
||||
int dp_debug_init(struct device *dev, struct dp_panel *panel,
|
||||
struct dp_link *link,
|
||||
int msm_dp_debug_init(struct device *dev, struct msm_dp_panel *panel,
|
||||
struct msm_dp_link *link,
|
||||
struct drm_connector *connector,
|
||||
struct dentry *root,
|
||||
bool is_edp)
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -27,18 +27,18 @@ struct msm_dp {
|
|||
|
||||
hdmi_codec_plugged_cb plugged_cb;
|
||||
|
||||
struct dp_audio *dp_audio;
|
||||
struct msm_dp_audio *msm_dp_audio;
|
||||
bool psr_supported;
|
||||
};
|
||||
|
||||
int dp_display_set_plugged_cb(struct msm_dp *dp_display,
|
||||
int msm_dp_display_set_plugged_cb(struct msm_dp *msm_dp_display,
|
||||
hdmi_codec_plugged_cb fn, struct device *codec_dev);
|
||||
int dp_display_get_modes(struct msm_dp *dp_display);
|
||||
bool dp_display_check_video_test(struct msm_dp *dp_display);
|
||||
int dp_display_get_test_bpp(struct msm_dp *dp_display);
|
||||
void dp_display_signal_audio_start(struct msm_dp *dp_display);
|
||||
void dp_display_signal_audio_complete(struct msm_dp *dp_display);
|
||||
void dp_display_set_psr(struct msm_dp *dp, bool enter);
|
||||
void dp_display_debugfs_init(struct msm_dp *dp_display, struct dentry *dentry, bool is_edp);
|
||||
int msm_dp_display_get_modes(struct msm_dp *msm_dp_display);
|
||||
bool msm_dp_display_check_video_test(struct msm_dp *msm_dp_display);
|
||||
int msm_dp_display_get_test_bpp(struct msm_dp *msm_dp_display);
|
||||
void msm_dp_display_signal_audio_start(struct msm_dp *msm_dp_display);
|
||||
void msm_dp_display_signal_audio_complete(struct msm_dp *msm_dp_display);
|
||||
void msm_dp_display_set_psr(struct msm_dp *dp, bool enter);
|
||||
void msm_dp_display_debugfs_init(struct msm_dp *msm_dp_display, struct dentry *dentry, bool is_edp);
|
||||
|
||||
#endif /* _DP_DISPLAY_H_ */
|
||||
|
|
|
|||
|
|
@ -14,15 +14,15 @@
|
|||
#include "dp_drm.h"
|
||||
|
||||
/**
|
||||
* dp_bridge_detect - callback to determine if connector is connected
|
||||
* msm_dp_bridge_detect - callback to determine if connector is connected
|
||||
* @bridge: Pointer to drm bridge structure
|
||||
* Returns: Bridge's 'is connected' status
|
||||
*/
|
||||
static enum drm_connector_status dp_bridge_detect(struct drm_bridge *bridge)
|
||||
static enum drm_connector_status msm_dp_bridge_detect(struct drm_bridge *bridge)
|
||||
{
|
||||
struct msm_dp *dp;
|
||||
|
||||
dp = to_dp_bridge(bridge)->dp_display;
|
||||
dp = to_dp_bridge(bridge)->msm_dp_display;
|
||||
|
||||
drm_dbg_dp(dp->drm_dev, "link_ready = %s\n",
|
||||
(dp->link_ready) ? "true" : "false");
|
||||
|
|
@ -31,14 +31,14 @@ static enum drm_connector_status dp_bridge_detect(struct drm_bridge *bridge)
|
|||
connector_status_disconnected;
|
||||
}
|
||||
|
||||
static int dp_bridge_atomic_check(struct drm_bridge *bridge,
|
||||
static int msm_dp_bridge_atomic_check(struct drm_bridge *bridge,
|
||||
struct drm_bridge_state *bridge_state,
|
||||
struct drm_crtc_state *crtc_state,
|
||||
struct drm_connector_state *conn_state)
|
||||
{
|
||||
struct msm_dp *dp;
|
||||
|
||||
dp = to_dp_bridge(bridge)->dp_display;
|
||||
dp = to_dp_bridge(bridge)->msm_dp_display;
|
||||
|
||||
drm_dbg_dp(dp->drm_dev, "link_ready = %s\n",
|
||||
(dp->link_ready) ? "true" : "false");
|
||||
|
|
@ -62,12 +62,12 @@ static int dp_bridge_atomic_check(struct drm_bridge *bridge,
|
|||
|
||||
|
||||
/**
|
||||
* dp_bridge_get_modes - callback to add drm modes via drm_mode_probed_add()
|
||||
* msm_dp_bridge_get_modes - callback to add drm modes via drm_mode_probed_add()
|
||||
* @bridge: Poiner to drm bridge
|
||||
* @connector: Pointer to drm connector structure
|
||||
* Returns: Number of modes added
|
||||
*/
|
||||
static int dp_bridge_get_modes(struct drm_bridge *bridge, struct drm_connector *connector)
|
||||
static int msm_dp_bridge_get_modes(struct drm_bridge *bridge, struct drm_connector *connector)
|
||||
{
|
||||
int rc = 0;
|
||||
struct msm_dp *dp;
|
||||
|
|
@ -75,11 +75,11 @@ static int dp_bridge_get_modes(struct drm_bridge *bridge, struct drm_connector *
|
|||
if (!connector)
|
||||
return 0;
|
||||
|
||||
dp = to_dp_bridge(bridge)->dp_display;
|
||||
dp = to_dp_bridge(bridge)->msm_dp_display;
|
||||
|
||||
/* pluggable case assumes EDID is read when HPD */
|
||||
if (dp->link_ready) {
|
||||
rc = dp_display_get_modes(dp);
|
||||
rc = msm_dp_display_get_modes(dp);
|
||||
if (rc <= 0) {
|
||||
DRM_ERROR("failed to get DP sink modes, rc=%d\n", rc);
|
||||
return rc;
|
||||
|
|
@ -90,29 +90,29 @@ static int dp_bridge_get_modes(struct drm_bridge *bridge, struct drm_connector *
|
|||
return rc;
|
||||
}
|
||||
|
||||
static void dp_bridge_debugfs_init(struct drm_bridge *bridge, struct dentry *root)
|
||||
static void msm_dp_bridge_debugfs_init(struct drm_bridge *bridge, struct dentry *root)
|
||||
{
|
||||
struct msm_dp *dp = to_dp_bridge(bridge)->dp_display;
|
||||
struct msm_dp *dp = to_dp_bridge(bridge)->msm_dp_display;
|
||||
|
||||
dp_display_debugfs_init(dp, root, false);
|
||||
msm_dp_display_debugfs_init(dp, root, false);
|
||||
}
|
||||
|
||||
static const struct drm_bridge_funcs dp_bridge_ops = {
|
||||
static const struct drm_bridge_funcs msm_dp_bridge_ops = {
|
||||
.atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state,
|
||||
.atomic_destroy_state = drm_atomic_helper_bridge_destroy_state,
|
||||
.atomic_reset = drm_atomic_helper_bridge_reset,
|
||||
.atomic_enable = dp_bridge_atomic_enable,
|
||||
.atomic_disable = dp_bridge_atomic_disable,
|
||||
.atomic_post_disable = dp_bridge_atomic_post_disable,
|
||||
.mode_set = dp_bridge_mode_set,
|
||||
.mode_valid = dp_bridge_mode_valid,
|
||||
.get_modes = dp_bridge_get_modes,
|
||||
.detect = dp_bridge_detect,
|
||||
.atomic_check = dp_bridge_atomic_check,
|
||||
.hpd_enable = dp_bridge_hpd_enable,
|
||||
.hpd_disable = dp_bridge_hpd_disable,
|
||||
.hpd_notify = dp_bridge_hpd_notify,
|
||||
.debugfs_init = dp_bridge_debugfs_init,
|
||||
.atomic_enable = msm_dp_bridge_atomic_enable,
|
||||
.atomic_disable = msm_dp_bridge_atomic_disable,
|
||||
.atomic_post_disable = msm_dp_bridge_atomic_post_disable,
|
||||
.mode_set = msm_dp_bridge_mode_set,
|
||||
.mode_valid = msm_dp_bridge_mode_valid,
|
||||
.get_modes = msm_dp_bridge_get_modes,
|
||||
.detect = msm_dp_bridge_detect,
|
||||
.atomic_check = msm_dp_bridge_atomic_check,
|
||||
.hpd_enable = msm_dp_bridge_hpd_enable,
|
||||
.hpd_disable = msm_dp_bridge_hpd_disable,
|
||||
.hpd_notify = msm_dp_bridge_hpd_notify,
|
||||
.debugfs_init = msm_dp_bridge_debugfs_init,
|
||||
};
|
||||
|
||||
static int edp_bridge_atomic_check(struct drm_bridge *drm_bridge,
|
||||
|
|
@ -120,7 +120,7 @@ static int edp_bridge_atomic_check(struct drm_bridge *drm_bridge,
|
|||
struct drm_crtc_state *crtc_state,
|
||||
struct drm_connector_state *conn_state)
|
||||
{
|
||||
struct msm_dp *dp = to_dp_bridge(drm_bridge)->dp_display;
|
||||
struct msm_dp *dp = to_dp_bridge(drm_bridge)->msm_dp_display;
|
||||
|
||||
if (WARN_ON(!conn_state))
|
||||
return -ENODEV;
|
||||
|
|
@ -142,8 +142,8 @@ static void edp_bridge_atomic_enable(struct drm_bridge *drm_bridge,
|
|||
struct drm_atomic_state *atomic_state = old_bridge_state->base.state;
|
||||
struct drm_crtc *crtc;
|
||||
struct drm_crtc_state *old_crtc_state;
|
||||
struct msm_dp_bridge *dp_bridge = to_dp_bridge(drm_bridge);
|
||||
struct msm_dp *dp = dp_bridge->dp_display;
|
||||
struct msm_dp_bridge *msm_dp_bridge = to_dp_bridge(drm_bridge);
|
||||
struct msm_dp *dp = msm_dp_bridge->msm_dp_display;
|
||||
|
||||
/*
|
||||
* Check the old state of the crtc to determine if the panel
|
||||
|
|
@ -159,11 +159,11 @@ static void edp_bridge_atomic_enable(struct drm_bridge *drm_bridge,
|
|||
old_crtc_state = drm_atomic_get_old_crtc_state(atomic_state, crtc);
|
||||
|
||||
if (old_crtc_state && old_crtc_state->self_refresh_active) {
|
||||
dp_display_set_psr(dp, false);
|
||||
msm_dp_display_set_psr(dp, false);
|
||||
return;
|
||||
}
|
||||
|
||||
dp_bridge_atomic_enable(drm_bridge, old_bridge_state);
|
||||
msm_dp_bridge_atomic_enable(drm_bridge, old_bridge_state);
|
||||
}
|
||||
|
||||
static void edp_bridge_atomic_disable(struct drm_bridge *drm_bridge,
|
||||
|
|
@ -172,8 +172,8 @@ static void edp_bridge_atomic_disable(struct drm_bridge *drm_bridge,
|
|||
struct drm_atomic_state *atomic_state = old_bridge_state->base.state;
|
||||
struct drm_crtc *crtc;
|
||||
struct drm_crtc_state *new_crtc_state = NULL, *old_crtc_state = NULL;
|
||||
struct msm_dp_bridge *dp_bridge = to_dp_bridge(drm_bridge);
|
||||
struct msm_dp *dp = dp_bridge->dp_display;
|
||||
struct msm_dp_bridge *msm_dp_bridge = to_dp_bridge(drm_bridge);
|
||||
struct msm_dp *dp = msm_dp_bridge->msm_dp_display;
|
||||
|
||||
crtc = drm_atomic_get_old_crtc_for_encoder(atomic_state,
|
||||
drm_bridge->encoder);
|
||||
|
|
@ -200,15 +200,15 @@ static void edp_bridge_atomic_disable(struct drm_bridge *drm_bridge,
|
|||
* when display disable occurs while the sink is in psr state.
|
||||
*/
|
||||
if (new_crtc_state->self_refresh_active) {
|
||||
dp_display_set_psr(dp, true);
|
||||
msm_dp_display_set_psr(dp, true);
|
||||
return;
|
||||
} else if (old_crtc_state->self_refresh_active) {
|
||||
dp_display_set_psr(dp, false);
|
||||
msm_dp_display_set_psr(dp, false);
|
||||
return;
|
||||
}
|
||||
|
||||
out:
|
||||
dp_bridge_atomic_disable(drm_bridge, old_bridge_state);
|
||||
msm_dp_bridge_atomic_disable(drm_bridge, old_bridge_state);
|
||||
}
|
||||
|
||||
static void edp_bridge_atomic_post_disable(struct drm_bridge *drm_bridge,
|
||||
|
|
@ -233,7 +233,7 @@ static void edp_bridge_atomic_post_disable(struct drm_bridge *drm_bridge,
|
|||
if (new_crtc_state->self_refresh_active)
|
||||
return;
|
||||
|
||||
dp_bridge_atomic_post_disable(drm_bridge, old_bridge_state);
|
||||
msm_dp_bridge_atomic_post_disable(drm_bridge, old_bridge_state);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -250,7 +250,7 @@ static enum drm_mode_status edp_bridge_mode_valid(struct drm_bridge *bridge,
|
|||
struct msm_dp *dp;
|
||||
int mode_pclk_khz = mode->clock;
|
||||
|
||||
dp = to_dp_bridge(bridge)->dp_display;
|
||||
dp = to_dp_bridge(bridge)->msm_dp_display;
|
||||
|
||||
if (!dp || !mode_pclk_khz || !dp->connector) {
|
||||
DRM_ERROR("invalid params\n");
|
||||
|
|
@ -270,16 +270,16 @@ static enum drm_mode_status edp_bridge_mode_valid(struct drm_bridge *bridge,
|
|||
|
||||
static void edp_bridge_debugfs_init(struct drm_bridge *bridge, struct dentry *root)
|
||||
{
|
||||
struct msm_dp *dp = to_dp_bridge(bridge)->dp_display;
|
||||
struct msm_dp *dp = to_dp_bridge(bridge)->msm_dp_display;
|
||||
|
||||
dp_display_debugfs_init(dp, root, true);
|
||||
msm_dp_display_debugfs_init(dp, root, true);
|
||||
}
|
||||
|
||||
static const struct drm_bridge_funcs edp_bridge_ops = {
|
||||
.atomic_enable = edp_bridge_atomic_enable,
|
||||
.atomic_disable = edp_bridge_atomic_disable,
|
||||
.atomic_post_disable = edp_bridge_atomic_post_disable,
|
||||
.mode_set = dp_bridge_mode_set,
|
||||
.mode_set = msm_dp_bridge_mode_set,
|
||||
.mode_valid = edp_bridge_mode_valid,
|
||||
.atomic_reset = drm_atomic_helper_bridge_reset,
|
||||
.atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state,
|
||||
|
|
@ -288,22 +288,22 @@ static const struct drm_bridge_funcs edp_bridge_ops = {
|
|||
.debugfs_init = edp_bridge_debugfs_init,
|
||||
};
|
||||
|
||||
int dp_bridge_init(struct msm_dp *dp_display, struct drm_device *dev,
|
||||
int msm_dp_bridge_init(struct msm_dp *msm_dp_display, struct drm_device *dev,
|
||||
struct drm_encoder *encoder, bool yuv_supported)
|
||||
{
|
||||
int rc;
|
||||
struct msm_dp_bridge *dp_bridge;
|
||||
struct msm_dp_bridge *msm_dp_bridge;
|
||||
struct drm_bridge *bridge;
|
||||
|
||||
dp_bridge = devm_kzalloc(dev->dev, sizeof(*dp_bridge), GFP_KERNEL);
|
||||
if (!dp_bridge)
|
||||
msm_dp_bridge = devm_kzalloc(dev->dev, sizeof(*msm_dp_bridge), GFP_KERNEL);
|
||||
if (!msm_dp_bridge)
|
||||
return -ENOMEM;
|
||||
|
||||
dp_bridge->dp_display = dp_display;
|
||||
msm_dp_bridge->msm_dp_display = msm_dp_display;
|
||||
|
||||
bridge = &dp_bridge->bridge;
|
||||
bridge->funcs = dp_display->is_edp ? &edp_bridge_ops : &dp_bridge_ops;
|
||||
bridge->type = dp_display->connector_type;
|
||||
bridge = &msm_dp_bridge->bridge;
|
||||
bridge->funcs = msm_dp_display->is_edp ? &edp_bridge_ops : &msm_dp_bridge_ops;
|
||||
bridge->type = msm_dp_display->connector_type;
|
||||
bridge->ycbcr_420_allowed = yuv_supported;
|
||||
|
||||
/*
|
||||
|
|
@ -317,7 +317,7 @@ int dp_bridge_init(struct msm_dp *dp_display, struct drm_device *dev,
|
|||
* allows the panel driver to properly power itself on to read the
|
||||
* modes.
|
||||
*/
|
||||
if (!dp_display->is_edp) {
|
||||
if (!msm_dp_display->is_edp) {
|
||||
bridge->ops =
|
||||
DRM_BRIDGE_OP_DETECT |
|
||||
DRM_BRIDGE_OP_HPD |
|
||||
|
|
@ -338,9 +338,9 @@ int dp_bridge_init(struct msm_dp *dp_display, struct drm_device *dev,
|
|||
return rc;
|
||||
}
|
||||
|
||||
if (dp_display->next_bridge) {
|
||||
if (msm_dp_display->next_bridge) {
|
||||
rc = drm_bridge_attach(encoder,
|
||||
dp_display->next_bridge, bridge,
|
||||
msm_dp_display->next_bridge, bridge,
|
||||
DRM_BRIDGE_ATTACH_NO_CONNECTOR);
|
||||
if (rc < 0) {
|
||||
DRM_ERROR("failed to attach panel bridge: %d\n", rc);
|
||||
|
|
@ -352,16 +352,16 @@ int dp_bridge_init(struct msm_dp *dp_display, struct drm_device *dev,
|
|||
}
|
||||
|
||||
/* connector initialization */
|
||||
struct drm_connector *dp_drm_connector_init(struct msm_dp *dp_display,
|
||||
struct drm_connector *msm_dp_drm_connector_init(struct msm_dp *msm_dp_display,
|
||||
struct drm_encoder *encoder)
|
||||
{
|
||||
struct drm_connector *connector = NULL;
|
||||
|
||||
connector = drm_bridge_connector_init(dp_display->drm_dev, encoder);
|
||||
connector = drm_bridge_connector_init(msm_dp_display->drm_dev, encoder);
|
||||
if (IS_ERR(connector))
|
||||
return connector;
|
||||
|
||||
if (!dp_display->is_edp)
|
||||
if (!msm_dp_display->is_edp)
|
||||
drm_connector_attach_dp_subconnector_property(connector);
|
||||
|
||||
drm_connector_attach_encoder(connector, encoder);
|
||||
|
|
|
|||
|
|
@ -14,32 +14,32 @@
|
|||
|
||||
struct msm_dp_bridge {
|
||||
struct drm_bridge bridge;
|
||||
struct msm_dp *dp_display;
|
||||
struct msm_dp *msm_dp_display;
|
||||
};
|
||||
|
||||
#define to_dp_bridge(x) container_of((x), struct msm_dp_bridge, bridge)
|
||||
|
||||
struct drm_connector *dp_drm_connector_init(struct msm_dp *dp_display,
|
||||
struct drm_connector *msm_dp_drm_connector_init(struct msm_dp *msm_dp_display,
|
||||
struct drm_encoder *encoder);
|
||||
int dp_bridge_init(struct msm_dp *dp_display, struct drm_device *dev,
|
||||
int msm_dp_bridge_init(struct msm_dp *msm_dp_display, struct drm_device *dev,
|
||||
struct drm_encoder *encoder,
|
||||
bool yuv_supported);
|
||||
|
||||
void dp_bridge_atomic_enable(struct drm_bridge *drm_bridge,
|
||||
void msm_dp_bridge_atomic_enable(struct drm_bridge *drm_bridge,
|
||||
struct drm_bridge_state *old_bridge_state);
|
||||
void dp_bridge_atomic_disable(struct drm_bridge *drm_bridge,
|
||||
void msm_dp_bridge_atomic_disable(struct drm_bridge *drm_bridge,
|
||||
struct drm_bridge_state *old_bridge_state);
|
||||
void dp_bridge_atomic_post_disable(struct drm_bridge *drm_bridge,
|
||||
void msm_dp_bridge_atomic_post_disable(struct drm_bridge *drm_bridge,
|
||||
struct drm_bridge_state *old_bridge_state);
|
||||
enum drm_mode_status dp_bridge_mode_valid(struct drm_bridge *bridge,
|
||||
enum drm_mode_status msm_dp_bridge_mode_valid(struct drm_bridge *bridge,
|
||||
const struct drm_display_info *info,
|
||||
const struct drm_display_mode *mode);
|
||||
void dp_bridge_mode_set(struct drm_bridge *drm_bridge,
|
||||
void msm_dp_bridge_mode_set(struct drm_bridge *drm_bridge,
|
||||
const struct drm_display_mode *mode,
|
||||
const struct drm_display_mode *adjusted_mode);
|
||||
void dp_bridge_hpd_enable(struct drm_bridge *bridge);
|
||||
void dp_bridge_hpd_disable(struct drm_bridge *bridge);
|
||||
void dp_bridge_hpd_notify(struct drm_bridge *bridge,
|
||||
void msm_dp_bridge_hpd_enable(struct drm_bridge *bridge);
|
||||
void msm_dp_bridge_hpd_disable(struct drm_bridge *bridge);
|
||||
void msm_dp_bridge_hpd_notify(struct drm_bridge *bridge,
|
||||
enum drm_connector_status status);
|
||||
|
||||
#endif /* _DP_DRM_H_ */
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -12,7 +12,7 @@
|
|||
#define DP_TEST_BIT_DEPTH_UNKNOWN 0xFFFFFFFF
|
||||
#define DP_LINK_CAP_ENHANCED_FRAMING (1 << 0)
|
||||
|
||||
struct dp_link_info {
|
||||
struct msm_dp_link_info {
|
||||
unsigned char revision;
|
||||
unsigned int rate;
|
||||
unsigned int num_lanes;
|
||||
|
|
@ -21,7 +21,7 @@ struct dp_link_info {
|
|||
|
||||
#define DP_TRAIN_LEVEL_MAX 3
|
||||
|
||||
struct dp_link_test_video {
|
||||
struct msm_dp_link_test_video {
|
||||
u32 test_video_pattern;
|
||||
u32 test_bit_depth;
|
||||
u32 test_dyn_range;
|
||||
|
|
@ -39,7 +39,7 @@ struct dp_link_test_video {
|
|||
u32 test_rr_n;
|
||||
};
|
||||
|
||||
struct dp_link_test_audio {
|
||||
struct msm_dp_link_test_audio {
|
||||
u32 test_audio_sampling_rate;
|
||||
u32 test_audio_channel_count;
|
||||
u32 test_audio_pattern_type;
|
||||
|
|
@ -53,21 +53,21 @@ struct dp_link_test_audio {
|
|||
u32 test_audio_period_ch_8;
|
||||
};
|
||||
|
||||
struct dp_link_phy_params {
|
||||
struct msm_dp_link_phy_params {
|
||||
u32 phy_test_pattern_sel;
|
||||
u8 v_level;
|
||||
u8 p_level;
|
||||
};
|
||||
|
||||
struct dp_link {
|
||||
struct msm_dp_link {
|
||||
u32 sink_request;
|
||||
u32 test_response;
|
||||
|
||||
u8 sink_count;
|
||||
struct dp_link_test_video test_video;
|
||||
struct dp_link_test_audio test_audio;
|
||||
struct dp_link_phy_params phy_params;
|
||||
struct dp_link_info link_params;
|
||||
struct msm_dp_link_test_video test_video;
|
||||
struct msm_dp_link_test_audio test_audio;
|
||||
struct msm_dp_link_phy_params phy_params;
|
||||
struct msm_dp_link_info link_params;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -78,7 +78,7 @@ struct dp_link {
|
|||
* git bit depth value. This function assumes that bit depth has
|
||||
* already been validated.
|
||||
*/
|
||||
static inline u32 dp_link_bit_depth_to_bpp(u32 tbd)
|
||||
static inline u32 msm_dp_link_bit_depth_to_bpp(u32 tbd)
|
||||
{
|
||||
/*
|
||||
* Few simplistic rules and assumptions made here:
|
||||
|
|
@ -99,22 +99,22 @@ static inline u32 dp_link_bit_depth_to_bpp(u32 tbd)
|
|||
}
|
||||
}
|
||||
|
||||
void dp_link_reset_phy_params_vx_px(struct dp_link *dp_link);
|
||||
u32 dp_link_get_test_bits_depth(struct dp_link *dp_link, u32 bpp);
|
||||
int dp_link_process_request(struct dp_link *dp_link);
|
||||
int dp_link_get_colorimetry_config(struct dp_link *dp_link);
|
||||
int dp_link_adjust_levels(struct dp_link *dp_link, u8 *link_status);
|
||||
bool dp_link_send_test_response(struct dp_link *dp_link);
|
||||
int dp_link_psm_config(struct dp_link *dp_link,
|
||||
struct dp_link_info *link_info, bool enable);
|
||||
bool dp_link_send_edid_checksum(struct dp_link *dp_link, u8 checksum);
|
||||
void msm_dp_link_reset_phy_params_vx_px(struct msm_dp_link *msm_dp_link);
|
||||
u32 msm_dp_link_get_test_bits_depth(struct msm_dp_link *msm_dp_link, u32 bpp);
|
||||
int msm_dp_link_process_request(struct msm_dp_link *msm_dp_link);
|
||||
int msm_dp_link_get_colorimetry_config(struct msm_dp_link *msm_dp_link);
|
||||
int msm_dp_link_adjust_levels(struct msm_dp_link *msm_dp_link, u8 *link_status);
|
||||
bool msm_dp_link_send_test_response(struct msm_dp_link *msm_dp_link);
|
||||
int msm_dp_link_psm_config(struct msm_dp_link *msm_dp_link,
|
||||
struct msm_dp_link_info *link_info, bool enable);
|
||||
bool msm_dp_link_send_edid_checksum(struct msm_dp_link *msm_dp_link, u8 checksum);
|
||||
|
||||
/**
|
||||
* dp_link_get() - get the functionalities of dp test module
|
||||
* msm_dp_link_get() - get the functionalities of dp test module
|
||||
*
|
||||
*
|
||||
* return: a pointer to dp_link struct
|
||||
* return: a pointer to msm_dp_link struct
|
||||
*/
|
||||
struct dp_link *dp_link_get(struct device *dev, struct drm_dp_aux *aux);
|
||||
struct msm_dp_link *msm_dp_link_get(struct device *dev, struct drm_dp_aux *aux);
|
||||
|
||||
#endif /* _DP_LINK_H_ */
|
||||
|
|
|
|||
|
|
@ -14,52 +14,52 @@
|
|||
#define DP_MAX_NUM_DP_LANES 4
|
||||
#define DP_LINK_RATE_HBR2 540000 /* kbytes */
|
||||
|
||||
struct dp_panel_private {
|
||||
struct msm_dp_panel_private {
|
||||
struct device *dev;
|
||||
struct drm_device *drm_dev;
|
||||
struct dp_panel dp_panel;
|
||||
struct msm_dp_panel msm_dp_panel;
|
||||
struct drm_dp_aux *aux;
|
||||
struct dp_link *link;
|
||||
struct dp_catalog *catalog;
|
||||
struct msm_dp_link *link;
|
||||
struct msm_dp_catalog *catalog;
|
||||
bool panel_on;
|
||||
};
|
||||
|
||||
static void dp_panel_read_psr_cap(struct dp_panel_private *panel)
|
||||
static void msm_dp_panel_read_psr_cap(struct msm_dp_panel_private *panel)
|
||||
{
|
||||
ssize_t rlen;
|
||||
struct dp_panel *dp_panel;
|
||||
struct msm_dp_panel *msm_dp_panel;
|
||||
|
||||
dp_panel = &panel->dp_panel;
|
||||
msm_dp_panel = &panel->msm_dp_panel;
|
||||
|
||||
/* edp sink */
|
||||
if (dp_panel->dpcd[DP_EDP_CONFIGURATION_CAP]) {
|
||||
if (msm_dp_panel->dpcd[DP_EDP_CONFIGURATION_CAP]) {
|
||||
rlen = drm_dp_dpcd_read(panel->aux, DP_PSR_SUPPORT,
|
||||
&dp_panel->psr_cap, sizeof(dp_panel->psr_cap));
|
||||
if (rlen == sizeof(dp_panel->psr_cap)) {
|
||||
&msm_dp_panel->psr_cap, sizeof(msm_dp_panel->psr_cap));
|
||||
if (rlen == sizeof(msm_dp_panel->psr_cap)) {
|
||||
drm_dbg_dp(panel->drm_dev,
|
||||
"psr version: 0x%x, psr_cap: 0x%x\n",
|
||||
dp_panel->psr_cap.version,
|
||||
dp_panel->psr_cap.capabilities);
|
||||
msm_dp_panel->psr_cap.version,
|
||||
msm_dp_panel->psr_cap.capabilities);
|
||||
} else
|
||||
DRM_ERROR("failed to read psr info, rlen=%zd\n", rlen);
|
||||
}
|
||||
}
|
||||
|
||||
static int dp_panel_read_dpcd(struct dp_panel *dp_panel)
|
||||
static int msm_dp_panel_read_dpcd(struct msm_dp_panel *msm_dp_panel)
|
||||
{
|
||||
int rc;
|
||||
struct dp_panel_private *panel;
|
||||
struct dp_link_info *link_info;
|
||||
struct msm_dp_panel_private *panel;
|
||||
struct msm_dp_link_info *link_info;
|
||||
u8 *dpcd, major, minor;
|
||||
|
||||
panel = container_of(dp_panel, struct dp_panel_private, dp_panel);
|
||||
dpcd = dp_panel->dpcd;
|
||||
panel = container_of(msm_dp_panel, struct msm_dp_panel_private, msm_dp_panel);
|
||||
dpcd = msm_dp_panel->dpcd;
|
||||
rc = drm_dp_read_dpcd_caps(panel->aux, dpcd);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
dp_panel->vsc_sdp_supported = drm_dp_vsc_sdp_supported(panel->aux, dpcd);
|
||||
link_info = &dp_panel->link_info;
|
||||
msm_dp_panel->vsc_sdp_supported = drm_dp_vsc_sdp_supported(panel->aux, dpcd);
|
||||
link_info = &msm_dp_panel->link_info;
|
||||
link_info->revision = dpcd[DP_DPCD_REV];
|
||||
major = (link_info->revision >> 4) & 0x0f;
|
||||
minor = link_info->revision & 0x0f;
|
||||
|
|
@ -68,12 +68,12 @@ static int dp_panel_read_dpcd(struct dp_panel *dp_panel)
|
|||
link_info->num_lanes = drm_dp_max_lane_count(dpcd);
|
||||
|
||||
/* Limit data lanes from data-lanes of endpoint property of dtsi */
|
||||
if (link_info->num_lanes > dp_panel->max_dp_lanes)
|
||||
link_info->num_lanes = dp_panel->max_dp_lanes;
|
||||
if (link_info->num_lanes > msm_dp_panel->max_dp_lanes)
|
||||
link_info->num_lanes = msm_dp_panel->max_dp_lanes;
|
||||
|
||||
/* Limit link rate from link-frequencies of endpoint property of dtsi */
|
||||
if (link_info->rate > dp_panel->max_dp_link_rate)
|
||||
link_info->rate = dp_panel->max_dp_link_rate;
|
||||
if (link_info->rate > msm_dp_panel->max_dp_link_rate)
|
||||
link_info->rate = msm_dp_panel->max_dp_link_rate;
|
||||
|
||||
drm_dbg_dp(panel->drm_dev, "version: %d.%d\n", major, minor);
|
||||
drm_dbg_dp(panel->drm_dev, "link_rate=%d\n", link_info->rate);
|
||||
|
|
@ -82,21 +82,21 @@ static int dp_panel_read_dpcd(struct dp_panel *dp_panel)
|
|||
if (drm_dp_enhanced_frame_cap(dpcd))
|
||||
link_info->capabilities |= DP_LINK_CAP_ENHANCED_FRAMING;
|
||||
|
||||
dp_panel_read_psr_cap(panel);
|
||||
msm_dp_panel_read_psr_cap(panel);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
static u32 dp_panel_get_supported_bpp(struct dp_panel *dp_panel,
|
||||
static u32 msm_dp_panel_get_supported_bpp(struct msm_dp_panel *msm_dp_panel,
|
||||
u32 mode_edid_bpp, u32 mode_pclk_khz)
|
||||
{
|
||||
const struct dp_link_info *link_info;
|
||||
const struct msm_dp_link_info *link_info;
|
||||
const u32 max_supported_bpp = 30, min_supported_bpp = 18;
|
||||
u32 bpp, data_rate_khz;
|
||||
|
||||
bpp = min(mode_edid_bpp, max_supported_bpp);
|
||||
|
||||
link_info = &dp_panel->link_info;
|
||||
link_info = &msm_dp_panel->link_info;
|
||||
data_rate_khz = link_info->num_lanes * link_info->rate * 8;
|
||||
|
||||
do {
|
||||
|
|
@ -108,39 +108,39 @@ static u32 dp_panel_get_supported_bpp(struct dp_panel *dp_panel,
|
|||
return min_supported_bpp;
|
||||
}
|
||||
|
||||
int dp_panel_read_sink_caps(struct dp_panel *dp_panel,
|
||||
int msm_dp_panel_read_sink_caps(struct msm_dp_panel *msm_dp_panel,
|
||||
struct drm_connector *connector)
|
||||
{
|
||||
int rc, bw_code;
|
||||
int count;
|
||||
struct dp_panel_private *panel;
|
||||
struct msm_dp_panel_private *panel;
|
||||
|
||||
if (!dp_panel || !connector) {
|
||||
if (!msm_dp_panel || !connector) {
|
||||
DRM_ERROR("invalid input\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
panel = container_of(dp_panel, struct dp_panel_private, dp_panel);
|
||||
panel = container_of(msm_dp_panel, struct msm_dp_panel_private, msm_dp_panel);
|
||||
|
||||
drm_dbg_dp(panel->drm_dev, "max_lanes=%d max_link_rate=%d\n",
|
||||
dp_panel->max_dp_lanes, dp_panel->max_dp_link_rate);
|
||||
msm_dp_panel->max_dp_lanes, msm_dp_panel->max_dp_link_rate);
|
||||
|
||||
rc = dp_panel_read_dpcd(dp_panel);
|
||||
rc = msm_dp_panel_read_dpcd(msm_dp_panel);
|
||||
if (rc) {
|
||||
DRM_ERROR("read dpcd failed %d\n", rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
bw_code = drm_dp_link_rate_to_bw_code(dp_panel->link_info.rate);
|
||||
bw_code = drm_dp_link_rate_to_bw_code(msm_dp_panel->link_info.rate);
|
||||
if (!is_link_rate_valid(bw_code) ||
|
||||
!is_lane_count_valid(dp_panel->link_info.num_lanes) ||
|
||||
(bw_code > dp_panel->max_bw_code)) {
|
||||
DRM_ERROR("Illegal link rate=%d lane=%d\n", dp_panel->link_info.rate,
|
||||
dp_panel->link_info.num_lanes);
|
||||
!is_lane_count_valid(msm_dp_panel->link_info.num_lanes) ||
|
||||
(bw_code > msm_dp_panel->max_bw_code)) {
|
||||
DRM_ERROR("Illegal link rate=%d lane=%d\n", msm_dp_panel->link_info.rate,
|
||||
msm_dp_panel->link_info.num_lanes);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (drm_dp_is_branch(dp_panel->dpcd)) {
|
||||
if (drm_dp_is_branch(msm_dp_panel->dpcd)) {
|
||||
count = drm_dp_read_sink_count(panel->aux);
|
||||
if (!count) {
|
||||
panel->link->sink_count = 0;
|
||||
|
|
@ -148,21 +148,21 @@ int dp_panel_read_sink_caps(struct dp_panel *dp_panel,
|
|||
}
|
||||
}
|
||||
|
||||
rc = drm_dp_read_downstream_info(panel->aux, dp_panel->dpcd,
|
||||
dp_panel->downstream_ports);
|
||||
rc = drm_dp_read_downstream_info(panel->aux, msm_dp_panel->dpcd,
|
||||
msm_dp_panel->downstream_ports);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
drm_edid_free(dp_panel->drm_edid);
|
||||
drm_edid_free(msm_dp_panel->drm_edid);
|
||||
|
||||
dp_panel->drm_edid = drm_edid_read_ddc(connector, &panel->aux->ddc);
|
||||
msm_dp_panel->drm_edid = drm_edid_read_ddc(connector, &panel->aux->ddc);
|
||||
|
||||
drm_edid_connector_update(connector, dp_panel->drm_edid);
|
||||
drm_edid_connector_update(connector, msm_dp_panel->drm_edid);
|
||||
|
||||
if (!dp_panel->drm_edid) {
|
||||
if (!msm_dp_panel->drm_edid) {
|
||||
DRM_ERROR("panel edid read failed\n");
|
||||
/* check edid read fail is due to unplug */
|
||||
if (!dp_catalog_link_is_connected(panel->catalog)) {
|
||||
if (!msm_dp_catalog_link_is_connected(panel->catalog)) {
|
||||
rc = -ETIMEDOUT;
|
||||
goto end;
|
||||
}
|
||||
|
|
@ -172,87 +172,87 @@ int dp_panel_read_sink_caps(struct dp_panel *dp_panel,
|
|||
return rc;
|
||||
}
|
||||
|
||||
u32 dp_panel_get_mode_bpp(struct dp_panel *dp_panel,
|
||||
u32 msm_dp_panel_get_mode_bpp(struct msm_dp_panel *msm_dp_panel,
|
||||
u32 mode_edid_bpp, u32 mode_pclk_khz)
|
||||
{
|
||||
struct dp_panel_private *panel;
|
||||
struct msm_dp_panel_private *panel;
|
||||
u32 bpp;
|
||||
|
||||
if (!dp_panel || !mode_edid_bpp || !mode_pclk_khz) {
|
||||
if (!msm_dp_panel || !mode_edid_bpp || !mode_pclk_khz) {
|
||||
DRM_ERROR("invalid input\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
panel = container_of(dp_panel, struct dp_panel_private, dp_panel);
|
||||
panel = container_of(msm_dp_panel, struct msm_dp_panel_private, msm_dp_panel);
|
||||
|
||||
if (dp_panel->video_test)
|
||||
bpp = dp_link_bit_depth_to_bpp(
|
||||
if (msm_dp_panel->video_test)
|
||||
bpp = msm_dp_link_bit_depth_to_bpp(
|
||||
panel->link->test_video.test_bit_depth);
|
||||
else
|
||||
bpp = dp_panel_get_supported_bpp(dp_panel, mode_edid_bpp,
|
||||
bpp = msm_dp_panel_get_supported_bpp(msm_dp_panel, mode_edid_bpp,
|
||||
mode_pclk_khz);
|
||||
|
||||
return bpp;
|
||||
}
|
||||
|
||||
int dp_panel_get_modes(struct dp_panel *dp_panel,
|
||||
int msm_dp_panel_get_modes(struct msm_dp_panel *msm_dp_panel,
|
||||
struct drm_connector *connector)
|
||||
{
|
||||
if (!dp_panel) {
|
||||
if (!msm_dp_panel) {
|
||||
DRM_ERROR("invalid input\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (dp_panel->drm_edid)
|
||||
if (msm_dp_panel->drm_edid)
|
||||
return drm_edid_connector_add_modes(connector);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static u8 dp_panel_get_edid_checksum(const struct edid *edid)
|
||||
static u8 msm_dp_panel_get_edid_checksum(const struct edid *edid)
|
||||
{
|
||||
edid += edid->extensions;
|
||||
|
||||
return edid->checksum;
|
||||
}
|
||||
|
||||
void dp_panel_handle_sink_request(struct dp_panel *dp_panel)
|
||||
void msm_dp_panel_handle_sink_request(struct msm_dp_panel *msm_dp_panel)
|
||||
{
|
||||
struct dp_panel_private *panel;
|
||||
struct msm_dp_panel_private *panel;
|
||||
|
||||
if (!dp_panel) {
|
||||
if (!msm_dp_panel) {
|
||||
DRM_ERROR("invalid input\n");
|
||||
return;
|
||||
}
|
||||
|
||||
panel = container_of(dp_panel, struct dp_panel_private, dp_panel);
|
||||
panel = container_of(msm_dp_panel, struct msm_dp_panel_private, msm_dp_panel);
|
||||
|
||||
if (panel->link->sink_request & DP_TEST_LINK_EDID_READ) {
|
||||
/* FIXME: get rid of drm_edid_raw() */
|
||||
const struct edid *edid = drm_edid_raw(dp_panel->drm_edid);
|
||||
const struct edid *edid = drm_edid_raw(msm_dp_panel->drm_edid);
|
||||
u8 checksum;
|
||||
|
||||
if (edid)
|
||||
checksum = dp_panel_get_edid_checksum(edid);
|
||||
checksum = msm_dp_panel_get_edid_checksum(edid);
|
||||
else
|
||||
checksum = dp_panel->connector->real_edid_checksum;
|
||||
checksum = msm_dp_panel->connector->real_edid_checksum;
|
||||
|
||||
dp_link_send_edid_checksum(panel->link, checksum);
|
||||
dp_link_send_test_response(panel->link);
|
||||
msm_dp_link_send_edid_checksum(panel->link, checksum);
|
||||
msm_dp_link_send_test_response(panel->link);
|
||||
}
|
||||
}
|
||||
|
||||
void dp_panel_tpg_config(struct dp_panel *dp_panel, bool enable)
|
||||
void msm_dp_panel_tpg_config(struct msm_dp_panel *msm_dp_panel, bool enable)
|
||||
{
|
||||
struct dp_catalog *catalog;
|
||||
struct dp_panel_private *panel;
|
||||
struct msm_dp_catalog *catalog;
|
||||
struct msm_dp_panel_private *panel;
|
||||
|
||||
if (!dp_panel) {
|
||||
if (!msm_dp_panel) {
|
||||
DRM_ERROR("invalid input\n");
|
||||
return;
|
||||
}
|
||||
|
||||
panel = container_of(dp_panel, struct dp_panel_private, dp_panel);
|
||||
panel = container_of(msm_dp_panel, struct msm_dp_panel_private, msm_dp_panel);
|
||||
catalog = panel->catalog;
|
||||
|
||||
if (!panel->panel_on) {
|
||||
|
|
@ -262,31 +262,31 @@ void dp_panel_tpg_config(struct dp_panel *dp_panel, bool enable)
|
|||
}
|
||||
|
||||
if (!enable) {
|
||||
dp_catalog_panel_tpg_disable(catalog);
|
||||
msm_dp_catalog_panel_tpg_disable(catalog);
|
||||
return;
|
||||
}
|
||||
|
||||
drm_dbg_dp(panel->drm_dev, "calling catalog tpg_enable\n");
|
||||
dp_catalog_panel_tpg_enable(catalog, &panel->dp_panel.dp_mode.drm_mode);
|
||||
msm_dp_catalog_panel_tpg_enable(catalog, &panel->msm_dp_panel.msm_dp_mode.drm_mode);
|
||||
}
|
||||
|
||||
static int dp_panel_setup_vsc_sdp_yuv_420(struct dp_panel *dp_panel)
|
||||
static int msm_dp_panel_setup_vsc_sdp_yuv_420(struct msm_dp_panel *msm_dp_panel)
|
||||
{
|
||||
struct dp_catalog *catalog;
|
||||
struct dp_panel_private *panel;
|
||||
struct dp_display_mode *dp_mode;
|
||||
struct msm_dp_catalog *catalog;
|
||||
struct msm_dp_panel_private *panel;
|
||||
struct msm_dp_display_mode *msm_dp_mode;
|
||||
struct drm_dp_vsc_sdp vsc_sdp_data;
|
||||
struct dp_sdp vsc_sdp;
|
||||
ssize_t len;
|
||||
|
||||
if (!dp_panel) {
|
||||
if (!msm_dp_panel) {
|
||||
DRM_ERROR("invalid input\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
panel = container_of(dp_panel, struct dp_panel_private, dp_panel);
|
||||
panel = container_of(msm_dp_panel, struct msm_dp_panel_private, msm_dp_panel);
|
||||
catalog = panel->catalog;
|
||||
dp_mode = &dp_panel->dp_mode;
|
||||
msm_dp_mode = &msm_dp_panel->msm_dp_mode;
|
||||
|
||||
memset(&vsc_sdp_data, 0, sizeof(vsc_sdp_data));
|
||||
|
||||
|
|
@ -300,7 +300,7 @@ static int dp_panel_setup_vsc_sdp_yuv_420(struct dp_panel *dp_panel)
|
|||
vsc_sdp_data.colorimetry = DP_COLORIMETRY_DEFAULT;
|
||||
|
||||
/* VSC SDP Payload for DB17 */
|
||||
vsc_sdp_data.bpc = dp_mode->bpp / 3;
|
||||
vsc_sdp_data.bpc = msm_dp_mode->bpp / 3;
|
||||
vsc_sdp_data.dynamic_range = DP_DYNAMIC_RANGE_CTA;
|
||||
|
||||
/* VSC SDP Payload for DB18 */
|
||||
|
|
@ -312,36 +312,36 @@ static int dp_panel_setup_vsc_sdp_yuv_420(struct dp_panel *dp_panel)
|
|||
return len;
|
||||
}
|
||||
|
||||
dp_catalog_panel_enable_vsc_sdp(catalog, &vsc_sdp);
|
||||
msm_dp_catalog_panel_enable_vsc_sdp(catalog, &vsc_sdp);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void dp_panel_dump_regs(struct dp_panel *dp_panel)
|
||||
void msm_dp_panel_dump_regs(struct msm_dp_panel *msm_dp_panel)
|
||||
{
|
||||
struct dp_catalog *catalog;
|
||||
struct dp_panel_private *panel;
|
||||
struct msm_dp_catalog *catalog;
|
||||
struct msm_dp_panel_private *panel;
|
||||
|
||||
panel = container_of(dp_panel, struct dp_panel_private, dp_panel);
|
||||
panel = container_of(msm_dp_panel, struct msm_dp_panel_private, msm_dp_panel);
|
||||
catalog = panel->catalog;
|
||||
|
||||
dp_catalog_dump_regs(catalog);
|
||||
msm_dp_catalog_dump_regs(catalog);
|
||||
}
|
||||
|
||||
int dp_panel_timing_cfg(struct dp_panel *dp_panel)
|
||||
int msm_dp_panel_timing_cfg(struct msm_dp_panel *msm_dp_panel)
|
||||
{
|
||||
u32 data, total_ver, total_hor;
|
||||
struct dp_catalog *catalog;
|
||||
struct dp_panel_private *panel;
|
||||
struct msm_dp_catalog *catalog;
|
||||
struct msm_dp_panel_private *panel;
|
||||
struct drm_display_mode *drm_mode;
|
||||
u32 width_blanking;
|
||||
u32 sync_start;
|
||||
u32 dp_active;
|
||||
u32 msm_dp_active;
|
||||
u32 total;
|
||||
|
||||
panel = container_of(dp_panel, struct dp_panel_private, dp_panel);
|
||||
panel = container_of(msm_dp_panel, struct msm_dp_panel_private, msm_dp_panel);
|
||||
catalog = panel->catalog;
|
||||
drm_mode = &panel->dp_panel.dp_mode.drm_mode;
|
||||
drm_mode = &panel->msm_dp_panel.msm_dp_mode.drm_mode;
|
||||
|
||||
drm_dbg_dp(panel->drm_dev, "width=%d hporch= %d %d %d\n",
|
||||
drm_mode->hdisplay, drm_mode->htotal - drm_mode->hsync_end,
|
||||
|
|
@ -371,9 +371,9 @@ int dp_panel_timing_cfg(struct dp_panel *dp_panel)
|
|||
|
||||
data = drm_mode->vsync_end - drm_mode->vsync_start;
|
||||
data <<= 16;
|
||||
data |= (panel->dp_panel.dp_mode.v_active_low << 31);
|
||||
data |= (panel->msm_dp_panel.msm_dp_mode.v_active_low << 31);
|
||||
data |= drm_mode->hsync_end - drm_mode->hsync_start;
|
||||
data |= (panel->dp_panel.dp_mode.h_active_low << 15);
|
||||
data |= (panel->msm_dp_panel.msm_dp_mode.h_active_low << 15);
|
||||
|
||||
width_blanking = data;
|
||||
|
||||
|
|
@ -381,26 +381,26 @@ int dp_panel_timing_cfg(struct dp_panel *dp_panel)
|
|||
data <<= 16;
|
||||
data |= drm_mode->hdisplay;
|
||||
|
||||
dp_active = data;
|
||||
msm_dp_active = data;
|
||||
|
||||
dp_catalog_panel_timing_cfg(catalog, total, sync_start, width_blanking, dp_active);
|
||||
msm_dp_catalog_panel_timing_cfg(catalog, total, sync_start, width_blanking, msm_dp_active);
|
||||
|
||||
if (dp_panel->dp_mode.out_fmt_is_yuv_420)
|
||||
dp_panel_setup_vsc_sdp_yuv_420(dp_panel);
|
||||
if (msm_dp_panel->msm_dp_mode.out_fmt_is_yuv_420)
|
||||
msm_dp_panel_setup_vsc_sdp_yuv_420(msm_dp_panel);
|
||||
|
||||
panel->panel_on = true;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int dp_panel_init_panel_info(struct dp_panel *dp_panel)
|
||||
int msm_dp_panel_init_panel_info(struct msm_dp_panel *msm_dp_panel)
|
||||
{
|
||||
struct drm_display_mode *drm_mode;
|
||||
struct dp_panel_private *panel;
|
||||
struct msm_dp_panel_private *panel;
|
||||
|
||||
drm_mode = &dp_panel->dp_mode.drm_mode;
|
||||
drm_mode = &msm_dp_panel->msm_dp_mode.drm_mode;
|
||||
|
||||
panel = container_of(dp_panel, struct dp_panel_private, dp_panel);
|
||||
panel = container_of(msm_dp_panel, struct msm_dp_panel_private, msm_dp_panel);
|
||||
|
||||
/*
|
||||
* print resolution info as this is a result
|
||||
|
|
@ -421,18 +421,18 @@ int dp_panel_init_panel_info(struct dp_panel *dp_panel)
|
|||
drm_mode->vsync_end - drm_mode->vsync_start);
|
||||
drm_dbg_dp(panel->drm_dev, "pixel clock (KHz)=(%d)\n",
|
||||
drm_mode->clock);
|
||||
drm_dbg_dp(panel->drm_dev, "bpp = %d\n", dp_panel->dp_mode.bpp);
|
||||
drm_dbg_dp(panel->drm_dev, "bpp = %d\n", msm_dp_panel->msm_dp_mode.bpp);
|
||||
|
||||
dp_panel->dp_mode.bpp = dp_panel_get_mode_bpp(dp_panel, dp_panel->dp_mode.bpp,
|
||||
dp_panel->dp_mode.drm_mode.clock);
|
||||
msm_dp_panel->msm_dp_mode.bpp = msm_dp_panel_get_mode_bpp(msm_dp_panel, msm_dp_panel->msm_dp_mode.bpp,
|
||||
msm_dp_panel->msm_dp_mode.drm_mode.clock);
|
||||
|
||||
drm_dbg_dp(panel->drm_dev, "updated bpp = %d\n",
|
||||
dp_panel->dp_mode.bpp);
|
||||
msm_dp_panel->msm_dp_mode.bpp);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static u32 dp_panel_link_frequencies(struct device_node *of_node)
|
||||
static u32 msm_dp_panel_link_frequencies(struct device_node *of_node)
|
||||
{
|
||||
struct device_node *endpoint;
|
||||
u64 frequency = 0;
|
||||
|
|
@ -456,17 +456,17 @@ static u32 dp_panel_link_frequencies(struct device_node *of_node)
|
|||
return frequency;
|
||||
}
|
||||
|
||||
static int dp_panel_parse_dt(struct dp_panel *dp_panel)
|
||||
static int msm_dp_panel_parse_dt(struct msm_dp_panel *msm_dp_panel)
|
||||
{
|
||||
struct dp_panel_private *panel;
|
||||
struct msm_dp_panel_private *panel;
|
||||
struct device_node *of_node;
|
||||
int cnt;
|
||||
|
||||
panel = container_of(dp_panel, struct dp_panel_private, dp_panel);
|
||||
panel = container_of(msm_dp_panel, struct msm_dp_panel_private, msm_dp_panel);
|
||||
of_node = panel->dev->of_node;
|
||||
|
||||
/*
|
||||
* data-lanes is the property of dp_out endpoint
|
||||
* data-lanes is the property of msm_dp_out endpoint
|
||||
*/
|
||||
cnt = drm_of_get_data_lanes_count_ep(of_node, 1, 0, 1, DP_MAX_NUM_DP_LANES);
|
||||
if (cnt < 0) {
|
||||
|
|
@ -475,21 +475,21 @@ static int dp_panel_parse_dt(struct dp_panel *dp_panel)
|
|||
}
|
||||
|
||||
if (cnt > 0)
|
||||
dp_panel->max_dp_lanes = cnt;
|
||||
msm_dp_panel->max_dp_lanes = cnt;
|
||||
else
|
||||
dp_panel->max_dp_lanes = DP_MAX_NUM_DP_LANES; /* 4 lanes */
|
||||
msm_dp_panel->max_dp_lanes = DP_MAX_NUM_DP_LANES; /* 4 lanes */
|
||||
|
||||
dp_panel->max_dp_link_rate = dp_panel_link_frequencies(of_node);
|
||||
if (!dp_panel->max_dp_link_rate)
|
||||
dp_panel->max_dp_link_rate = DP_LINK_RATE_HBR2;
|
||||
msm_dp_panel->max_dp_link_rate = msm_dp_panel_link_frequencies(of_node);
|
||||
if (!msm_dp_panel->max_dp_link_rate)
|
||||
msm_dp_panel->max_dp_link_rate = DP_LINK_RATE_HBR2;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct dp_panel *dp_panel_get(struct dp_panel_in *in)
|
||||
struct msm_dp_panel *msm_dp_panel_get(struct msm_dp_panel_in *in)
|
||||
{
|
||||
struct dp_panel_private *panel;
|
||||
struct dp_panel *dp_panel;
|
||||
struct msm_dp_panel_private *panel;
|
||||
struct msm_dp_panel *msm_dp_panel;
|
||||
int ret;
|
||||
|
||||
if (!in->dev || !in->catalog || !in->aux || !in->link) {
|
||||
|
|
@ -506,20 +506,20 @@ struct dp_panel *dp_panel_get(struct dp_panel_in *in)
|
|||
panel->catalog = in->catalog;
|
||||
panel->link = in->link;
|
||||
|
||||
dp_panel = &panel->dp_panel;
|
||||
dp_panel->max_bw_code = DP_LINK_BW_8_1;
|
||||
msm_dp_panel = &panel->msm_dp_panel;
|
||||
msm_dp_panel->max_bw_code = DP_LINK_BW_8_1;
|
||||
|
||||
ret = dp_panel_parse_dt(dp_panel);
|
||||
ret = msm_dp_panel_parse_dt(msm_dp_panel);
|
||||
if (ret)
|
||||
return ERR_PTR(ret);
|
||||
|
||||
return dp_panel;
|
||||
return msm_dp_panel;
|
||||
}
|
||||
|
||||
void dp_panel_put(struct dp_panel *dp_panel)
|
||||
void msm_dp_panel_put(struct msm_dp_panel *msm_dp_panel)
|
||||
{
|
||||
if (!dp_panel)
|
||||
if (!msm_dp_panel)
|
||||
return;
|
||||
|
||||
drm_edid_free(dp_panel->drm_edid);
|
||||
drm_edid_free(msm_dp_panel->drm_edid);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
|
||||
struct edid;
|
||||
|
||||
struct dp_display_mode {
|
||||
struct msm_dp_display_mode {
|
||||
struct drm_display_mode drm_mode;
|
||||
u32 bpp;
|
||||
u32 h_active_low;
|
||||
|
|
@ -21,28 +21,28 @@ struct dp_display_mode {
|
|||
bool out_fmt_is_yuv_420;
|
||||
};
|
||||
|
||||
struct dp_panel_in {
|
||||
struct msm_dp_panel_in {
|
||||
struct device *dev;
|
||||
struct drm_dp_aux *aux;
|
||||
struct dp_link *link;
|
||||
struct dp_catalog *catalog;
|
||||
struct msm_dp_link *link;
|
||||
struct msm_dp_catalog *catalog;
|
||||
};
|
||||
|
||||
struct dp_panel_psr {
|
||||
struct msm_dp_panel_psr {
|
||||
u8 version;
|
||||
u8 capabilities;
|
||||
};
|
||||
|
||||
struct dp_panel {
|
||||
struct msm_dp_panel {
|
||||
/* dpcd raw data */
|
||||
u8 dpcd[DP_RECEIVER_CAP_SIZE];
|
||||
u8 downstream_ports[DP_MAX_DOWNSTREAM_PORTS];
|
||||
|
||||
struct dp_link_info link_info;
|
||||
struct msm_dp_link_info link_info;
|
||||
const struct drm_edid *drm_edid;
|
||||
struct drm_connector *connector;
|
||||
struct dp_display_mode dp_mode;
|
||||
struct dp_panel_psr psr_cap;
|
||||
struct msm_dp_display_mode msm_dp_mode;
|
||||
struct msm_dp_panel_psr psr_cap;
|
||||
bool video_test;
|
||||
bool vsc_sdp_supported;
|
||||
|
||||
|
|
@ -52,18 +52,18 @@ struct dp_panel {
|
|||
u32 max_bw_code;
|
||||
};
|
||||
|
||||
int dp_panel_init_panel_info(struct dp_panel *dp_panel);
|
||||
int dp_panel_deinit(struct dp_panel *dp_panel);
|
||||
int dp_panel_timing_cfg(struct dp_panel *dp_panel);
|
||||
void dp_panel_dump_regs(struct dp_panel *dp_panel);
|
||||
int dp_panel_read_sink_caps(struct dp_panel *dp_panel,
|
||||
int msm_dp_panel_init_panel_info(struct msm_dp_panel *msm_dp_panel);
|
||||
int msm_dp_panel_deinit(struct msm_dp_panel *msm_dp_panel);
|
||||
int msm_dp_panel_timing_cfg(struct msm_dp_panel *msm_dp_panel);
|
||||
void msm_dp_panel_dump_regs(struct msm_dp_panel *msm_dp_panel);
|
||||
int msm_dp_panel_read_sink_caps(struct msm_dp_panel *msm_dp_panel,
|
||||
struct drm_connector *connector);
|
||||
u32 dp_panel_get_mode_bpp(struct dp_panel *dp_panel, u32 mode_max_bpp,
|
||||
u32 msm_dp_panel_get_mode_bpp(struct msm_dp_panel *msm_dp_panel, u32 mode_max_bpp,
|
||||
u32 mode_pclk_khz);
|
||||
int dp_panel_get_modes(struct dp_panel *dp_panel,
|
||||
int msm_dp_panel_get_modes(struct msm_dp_panel *msm_dp_panel,
|
||||
struct drm_connector *connector);
|
||||
void dp_panel_handle_sink_request(struct dp_panel *dp_panel);
|
||||
void dp_panel_tpg_config(struct dp_panel *dp_panel, bool enable);
|
||||
void msm_dp_panel_handle_sink_request(struct msm_dp_panel *msm_dp_panel);
|
||||
void msm_dp_panel_tpg_config(struct msm_dp_panel *msm_dp_panel, bool enable);
|
||||
|
||||
/**
|
||||
* is_link_rate_valid() - validates the link rate
|
||||
|
|
@ -80,7 +80,7 @@ static inline bool is_link_rate_valid(u32 bw_code)
|
|||
}
|
||||
|
||||
/**
|
||||
* dp_link_is_lane_count_valid() - validates the lane count
|
||||
* msm_dp_link_is_lane_count_valid() - validates the lane count
|
||||
* @lane_count: lane count requested by the sink
|
||||
*
|
||||
* Returns true if the requested lane count is supported.
|
||||
|
|
@ -92,6 +92,6 @@ static inline bool is_lane_count_valid(u32 lane_count)
|
|||
lane_count == 4);
|
||||
}
|
||||
|
||||
struct dp_panel *dp_panel_get(struct dp_panel_in *in);
|
||||
void dp_panel_put(struct dp_panel *dp_panel);
|
||||
struct msm_dp_panel *msm_dp_panel_get(struct msm_dp_panel_in *in);
|
||||
void msm_dp_panel_put(struct msm_dp_panel *msm_dp_panel);
|
||||
#endif /* _DP_PANEL_H_ */
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
#define DP_SDP_HEADER_SIZE 8
|
||||
|
||||
u8 dp_utils_get_g0_value(u8 data)
|
||||
u8 msm_dp_utils_get_g0_value(u8 data)
|
||||
{
|
||||
u8 c[4];
|
||||
u8 g[4];
|
||||
|
|
@ -30,7 +30,7 @@ u8 dp_utils_get_g0_value(u8 data)
|
|||
return ret_data;
|
||||
}
|
||||
|
||||
u8 dp_utils_get_g1_value(u8 data)
|
||||
u8 msm_dp_utils_get_g1_value(u8 data)
|
||||
{
|
||||
u8 c[4];
|
||||
u8 g[4];
|
||||
|
|
@ -51,7 +51,7 @@ u8 dp_utils_get_g1_value(u8 data)
|
|||
return ret_data;
|
||||
}
|
||||
|
||||
u8 dp_utils_calculate_parity(u32 data)
|
||||
u8 msm_dp_utils_calculate_parity(u32 data)
|
||||
{
|
||||
u8 x0 = 0;
|
||||
u8 x1 = 0;
|
||||
|
|
@ -65,8 +65,8 @@ u8 dp_utils_calculate_parity(u32 data)
|
|||
iData = (data >> i * 4) & 0xF;
|
||||
|
||||
ci = iData ^ x1;
|
||||
x1 = x0 ^ dp_utils_get_g1_value(ci);
|
||||
x0 = dp_utils_get_g0_value(ci);
|
||||
x1 = x0 ^ msm_dp_utils_get_g1_value(ci);
|
||||
x0 = msm_dp_utils_get_g0_value(ci);
|
||||
}
|
||||
|
||||
parity_byte = x1 | (x0 << 4);
|
||||
|
|
@ -74,7 +74,7 @@ u8 dp_utils_calculate_parity(u32 data)
|
|||
return parity_byte;
|
||||
}
|
||||
|
||||
ssize_t dp_utils_pack_sdp_header(struct dp_sdp_header *sdp_header, u32 *header_buff)
|
||||
ssize_t msm_dp_utils_pack_sdp_header(struct dp_sdp_header *sdp_header, u32 *header_buff)
|
||||
{
|
||||
size_t length;
|
||||
|
||||
|
|
@ -83,14 +83,14 @@ ssize_t dp_utils_pack_sdp_header(struct dp_sdp_header *sdp_header, u32 *header_b
|
|||
return -ENOSPC;
|
||||
|
||||
header_buff[0] = FIELD_PREP(HEADER_0_MASK, sdp_header->HB0) |
|
||||
FIELD_PREP(PARITY_0_MASK, dp_utils_calculate_parity(sdp_header->HB0)) |
|
||||
FIELD_PREP(PARITY_0_MASK, msm_dp_utils_calculate_parity(sdp_header->HB0)) |
|
||||
FIELD_PREP(HEADER_1_MASK, sdp_header->HB1) |
|
||||
FIELD_PREP(PARITY_1_MASK, dp_utils_calculate_parity(sdp_header->HB1));
|
||||
FIELD_PREP(PARITY_1_MASK, msm_dp_utils_calculate_parity(sdp_header->HB1));
|
||||
|
||||
header_buff[1] = FIELD_PREP(HEADER_2_MASK, sdp_header->HB2) |
|
||||
FIELD_PREP(PARITY_2_MASK, dp_utils_calculate_parity(sdp_header->HB2)) |
|
||||
FIELD_PREP(PARITY_2_MASK, msm_dp_utils_calculate_parity(sdp_header->HB2)) |
|
||||
FIELD_PREP(HEADER_3_MASK, sdp_header->HB3) |
|
||||
FIELD_PREP(PARITY_3_MASK, dp_utils_calculate_parity(sdp_header->HB3));
|
||||
FIELD_PREP(PARITY_3_MASK, msm_dp_utils_calculate_parity(sdp_header->HB3));
|
||||
|
||||
return length;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,9 +28,9 @@
|
|||
#define HEADER_3_MASK GENMASK(23, 16)
|
||||
#define PARITY_3_MASK GENMASK(31, 24)
|
||||
|
||||
u8 dp_utils_get_g0_value(u8 data);
|
||||
u8 dp_utils_get_g1_value(u8 data);
|
||||
u8 dp_utils_calculate_parity(u32 data);
|
||||
ssize_t dp_utils_pack_sdp_header(struct dp_sdp_header *sdp_header, u32 *header_buff);
|
||||
u8 msm_dp_utils_get_g0_value(u8 data);
|
||||
u8 msm_dp_utils_get_g1_value(u8 data);
|
||||
u8 msm_dp_utils_calculate_parity(u32 data);
|
||||
ssize_t msm_dp_utils_pack_sdp_header(struct dp_sdp_header *sdp_header, u32 *header_buff);
|
||||
|
||||
#endif /* _DP_UTILS_H_ */
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user