You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

962 lines
29 KiB

/******************************************************************************
* Copyright (c) Hisilicon Technologies Co., Ltd. 2012-2019. All rights reserved.
* Description: panel iapi module
* Author: sdk
* Create: 2012-11-19
******************************************************************************/
#include "uapi_panel.h"
#include "mpi_panel.h"
#include "securec.h"
td_s32 uapi_panel_init(td_void)
{
return ext_mpi_panel_init();
}
td_s32 uapi_panel_deinit(td_void)
{
return ext_mpi_panel_deinit();
}
td_s32 uapi_panel_set_power_on(uapi_panel_id panel_id, td_bool enable)
{
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (((enable != TD_TRUE) && (enable != TD_FALSE))) {
soc_log_err("enable is illegal, enable = %d\n", enable);
return TD_FAILURE;
}
return ext_mpi_panel_set_power_on((ext_panel_id)panel_id, enable);
}
td_s32 uapi_panel_get_power_on(uapi_panel_id panel_id, td_bool *enable)
{
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (enable == TD_NULL) {
soc_log_err("enable is Null \n");
return TD_FAILURE;
}
return ext_mpi_panel_get_power_on((ext_panel_id)panel_id, enable);
}
td_s32 uapi_panel_set_backlight_power_on(uapi_panel_id panel_id, td_bool enable)
{
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (((enable != TD_TRUE) && (enable != TD_FALSE))) {
soc_log_err("enable is illegal, enable = %d\n", enable);
return TD_FAILURE;
}
return ext_mpi_panel_set_backlight_power_on((ext_panel_id)panel_id, enable);
}
td_s32 uapi_panel_get_backlight_power_on(uapi_panel_id panel_id, td_bool *enable)
{
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (enable == TD_NULL) {
soc_log_err("enable is Null \n");
return TD_FAILURE;
}
return ext_mpi_panel_get_backlight_power_on((ext_panel_id)panel_id, enable);
}
td_s32 uapi_panel_get_panel_aspect(uapi_panel_id panel_id, uapi_panel_aspect *panel_aspect)
{
ext_panel_aspect_info aspect = {0};
td_s32 ret;
errno_t err;
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (panel_aspect == TD_NULL) {
soc_log_err("panel_aspect is Null \n");
return TD_FAILURE;
}
ret = ext_mpi_panel_get_panel_aspect((ext_panel_id)panel_id, &aspect);
if (ret != TD_SUCCESS) {
return ret;
}
err = memcpy_s(panel_aspect, sizeof(uapi_panel_aspect), &aspect, sizeof(ext_panel_aspect_info));
if (err != EOK) {
soc_log_err("memcpy_s panel_aspect failed, err = %d\n", err);
return TD_FAILURE;
}
return TD_SUCCESS;
}
td_s32 uapi_panel_get_panel_3d_type(uapi_panel_id panel_id, uapi_panel_3d_type *type)
{
ext_panel_3d_type type_tmp;
td_s32 ret;
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (type == TD_NULL) {
soc_log_err("panel_3d_type is Null \n");
return TD_FAILURE;
}
ret = ext_mpi_panel_get_panel_3d_type((ext_panel_id)panel_id, &type_tmp);
if (ret != TD_SUCCESS) {
return ret;
}
*type = (uapi_panel_3d_type)type_tmp;
return TD_SUCCESS;
}
td_s32 uapi_panel_set_dynamic_backlight_enable(uapi_panel_id panel_id, td_bool enable)
{
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (((enable != TD_TRUE) && (enable != TD_FALSE))) {
soc_log_err("enable is illegal, enable = %d\n", enable);
return TD_FAILURE;
}
return ext_mpi_panel_set_dynamic_backlight_enable((ext_panel_id)panel_id, enable);
}
td_s32 uapi_panel_get_dynamic_backlight_enable(uapi_panel_id panel_id, td_bool *enable)
{
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (enable == TD_NULL) {
soc_log_err("enable is Null \n");
return TD_FAILURE;
}
return ext_mpi_panel_get_dynamic_backlight_enable((ext_panel_id)panel_id, enable);
}
td_s32 uapi_panel_get_backlight_range(uapi_panel_id panel_id, uapi_panel_range *backlight_range)
{
ext_panel_range range = {0};
td_s32 ret;
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (backlight_range == TD_NULL) {
soc_log_err("backlight_range is Null \n");
return TD_FAILURE;
}
ret = ext_mpi_panel_get_backlight_range((ext_panel_id)panel_id, &range);
if (ret != TD_SUCCESS) {
return ret;
}
backlight_range->max_level = range.max;
backlight_range->min_level = range.min;
return TD_SUCCESS;
}
td_s32 uapi_panel_set_backlight_level(uapi_panel_id panel_id, td_u32 level)
{
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
return ext_mpi_panel_set_backlight_level((ext_panel_id)panel_id, level);
}
td_s32 uapi_panel_get_backlight_level(uapi_panel_id panel_id, td_u32 *level)
{
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (level == TD_NULL) {
soc_log_err("level is Null \n");
return TD_FAILURE;
}
return ext_mpi_panel_get_backlight_level((ext_panel_id)panel_id, level);
}
td_s32 uapi_panel_get_dim_strength_info(uapi_panel_id panel_id,
uapi_panel_dim_strength_info *dim_strength_info)
{
ext_panel_dim_strength_info strength_info = {0};
td_s32 ret;
errno_t err;
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (dim_strength_info == TD_NULL) {
soc_log_err("dim_strength_info is Null \n");
return TD_FAILURE;
}
ret = ext_mpi_panel_get_dim_strength_info((ext_panel_id)panel_id, &strength_info);
if (ret != TD_SUCCESS) {
return ret;
}
err = memcpy_s(dim_strength_info, sizeof(uapi_panel_dim_strength_info),
&strength_info, sizeof(ext_panel_dim_strength_info));
if (err != EOK) {
soc_log_err("memcpy_s dim_strength_info failed, err = %d\n", err);
return TD_FAILURE;
}
return TD_SUCCESS;
}
td_s32 uapi_panel_set_dim_strength_level(uapi_panel_id panel_id, td_u32 level)
{
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
return ext_mpi_panel_set_dim_strength_level((ext_panel_id)panel_id, level);
}
td_s32 uapi_panel_get_dim_strength_level(uapi_panel_id panel_id, td_u32 *level)
{
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (level == TD_NULL) {
soc_log_err("level is Null \n");
return TD_FAILURE;
}
return ext_mpi_panel_get_dim_strength_level((ext_panel_id)panel_id, level);
}
td_s32 uapi_panel_set_localdimming_demo_mode(uapi_panel_id panel_id,
uapi_panel_localdimming_demo_mode demo_mode)
{
ext_panel_ldm_demo_mode ldm_demo_mode = (ext_panel_ldm_demo_mode)demo_mode;
td_s32 ret;
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (((demo_mode < UAPI_PANEL_LOCALDIMMING_DEMO_MODE_OFF) ||
(demo_mode >= UAPI_PANEL_LOCALDIMMING_DEMO_MODE_MAX))) {
soc_log_err("demo_mode is illegal, demo_mode = %d\n", demo_mode);
return TD_FAILURE;
}
ret = ext_mpi_panel_set_localdimming_demo_mode((ext_panel_id)panel_id, ldm_demo_mode);
if (ret != TD_SUCCESS) {
return ret;
}
return TD_SUCCESS;
}
td_s32 uapi_panel_get_localdimming_demo_mode(uapi_panel_id panel_id,
uapi_panel_localdimming_demo_mode *demo_mode)
{
ext_panel_ldm_demo_mode ldm_demo_mode;
td_s32 ret;
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (demo_mode == TD_NULL) {
soc_log_err("demo_mode is Null \n");
return TD_FAILURE;
}
ret = ext_mpi_panel_get_localdimming_demo_mode((ext_panel_id)panel_id, &ldm_demo_mode);
if (ret != TD_SUCCESS) {
return ret;
}
*demo_mode = (uapi_panel_localdimming_demo_mode)ldm_demo_mode;
return TD_SUCCESS;
}
td_s32 uapi_panel_get_voltage_range(uapi_panel_id panel_id, uapi_panel_signal_list *voltage_list)
{
panel_signal_list list;
td_s32 ret;
errno_t err;
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (voltage_list == TD_NULL) {
soc_log_err("voltage_list is Null \n");
return TD_FAILURE;
}
if (memset_s(&list, sizeof(panel_signal_list), 0, sizeof(panel_signal_list)) != EOK) {
soc_log_err("panel_signal_list memset_s failed!\n");
return TD_FAILURE;
}
ret = ext_mpi_panel_get_voltage_range((ext_panel_id)panel_id, &list);
if (ret != TD_SUCCESS) {
return ret;
}
err = memcpy_s(voltage_list, sizeof(uapi_panel_signal_list), &list, sizeof(panel_signal_list));
if (err != EOK) {
soc_log_err("memcpy_s voltage_list failed, err = %d\n", err);
return TD_FAILURE;
}
return TD_SUCCESS;
}
td_s32 uapi_panel_set_voltage(uapi_panel_id panel_id, td_u32 com_voltage)
{
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
return ext_mpi_panel_set_voltage((ext_panel_id)panel_id, com_voltage);
}
td_s32 uapi_panel_get_voltage(uapi_panel_id panel_id, td_u32 *com_voltage)
{
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (com_voltage == TD_NULL) {
soc_log_err("voltage_list is Null \n");
return TD_FAILURE;
}
return ext_mpi_panel_get_voltage((ext_panel_id)panel_id, com_voltage);
}
td_s32 uapi_panel_get_current_range(uapi_panel_id panel_id, uapi_panel_signal_list *current_list)
{
panel_signal_list list;
td_s32 ret;
errno_t err;
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (current_list == TD_NULL) {
soc_log_err("current_list is Null \n");
return TD_FAILURE;
}
if (memset_s(&list, sizeof(panel_signal_list), 0, sizeof(panel_signal_list)) != EOK) {
soc_log_err("panel_signal_list memset_s failed!\n");
return TD_FAILURE;
}
ret = ext_mpi_panel_get_current_range((ext_panel_id)panel_id, &list);
if (ret != TD_SUCCESS) {
return ret;
}
err = memcpy_s(current_list, sizeof(uapi_panel_signal_list),
&list, sizeof(panel_signal_list));
if (err != EOK) {
soc_log_err("memcpy_s current_list failed, err = %d\n", err);
return TD_FAILURE;
}
return TD_SUCCESS;
}
td_s32 uapi_panel_set_current(uapi_panel_id panel_id, td_u32 drv_current)
{
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
return ext_mpi_panel_set_current((ext_panel_id)panel_id, drv_current);
}
td_s32 uapi_panel_get_current(uapi_panel_id panel_id, td_u32 *drv_current)
{
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (drv_current == TD_NULL) {
soc_log_err("drv_current is Null \n");
return TD_FAILURE;
}
return ext_mpi_panel_get_current((ext_panel_id)panel_id, drv_current);
}
td_s32 uapi_panel_get_emphasis_range(uapi_panel_id panel_id, uapi_panel_signal_list *emphasis_list)
{
panel_signal_list list;
td_s32 ret;
errno_t err;
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (emphasis_list == TD_NULL) {
soc_log_err("emphasis_list is Null \n");
return TD_FAILURE;
}
if (memset_s(&list, sizeof(panel_signal_list), 0, sizeof(panel_signal_list)) != EOK) {
soc_log_err("panel_signal_list memset_s failed!\n");
return TD_FAILURE;
}
ret = ext_mpi_panel_get_emphasis_range((ext_panel_id)panel_id, &list);
if (ret != TD_SUCCESS) {
return ret;
}
err = memcpy_s(emphasis_list, sizeof(uapi_panel_signal_list),
&list, sizeof(panel_signal_list));
if (err != EOK) {
soc_log_err("memcpy_s emphasis_list failed, err = %d\n", err);
return TD_FAILURE;
}
return TD_SUCCESS;
}
td_s32 uapi_panel_set_emphasis(uapi_panel_id panel_id, td_u32 panel_emp)
{
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
return ext_mpi_panel_set_emphasis((ext_panel_id)panel_id, panel_emp);
}
td_s32 uapi_panel_get_emphasis(uapi_panel_id panel_id, td_u32 *panel_emp)
{
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (panel_emp == TD_NULL) {
soc_log_err("panel_emp is Null \n");
return TD_FAILURE;
}
return ext_mpi_panel_get_emphasis((ext_panel_id)panel_id, panel_emp);
}
td_s32 uapi_panel_set_spread_enable(uapi_panel_id panel_id, td_bool enable)
{
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (((enable != TD_TRUE) && (enable != TD_FALSE))) {
soc_log_err("enable is illegal, enable = %d\n", enable);
return TD_FAILURE;
}
return ext_mpi_panel_set_spread_enable((ext_panel_id)panel_id, enable);
}
td_s32 uapi_panel_get_spread_enable(uapi_panel_id panel_id, td_bool *enable)
{
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (enable == TD_NULL) {
soc_log_err("enable is Null \n");
return TD_FAILURE;
}
return ext_mpi_panel_get_spread_enable((ext_panel_id)panel_id, enable);
}
td_s32 uapi_panel_get_spread_ratio_range(uapi_panel_id panel_id, uapi_panel_range *ratio_range)
{
ext_panel_range range = {0};
td_s32 ret;
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (ratio_range == TD_NULL) {
soc_log_err("ratio_range is Null \n");
return TD_FAILURE;
}
ret = ext_mpi_panel_get_spread_ratio_range((ext_panel_id)panel_id, &range);
if (ret != TD_SUCCESS) {
return ret;
}
ratio_range->max_level = range.max;
ratio_range->min_level = range.min;
return TD_SUCCESS;
}
td_s32 uapi_panel_set_spread_ratio(uapi_panel_id panel_id, td_u32 spread_ratio)
{
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
return ext_mpi_panel_set_spread_ratio((ext_panel_id)panel_id, spread_ratio);
}
td_s32 uapi_panel_get_spread_ratio(uapi_panel_id panel_id, td_u32 *spread_ratio)
{
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (spread_ratio == TD_NULL) {
soc_log_err("spread_ratio is Null \n");
return TD_FAILURE;
}
return ext_mpi_panel_get_spread_ratio((ext_panel_id)panel_id, spread_ratio);
}
td_s32 uapi_panel_get_spread_freq_range(uapi_panel_id panel_id, uapi_panel_signal_list *freq_list)
{
panel_signal_list list;
errno_t err;
td_s32 ret;
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (freq_list == TD_NULL) {
soc_log_err("freq_list is Null \n");
return TD_FAILURE;
}
if (memset_s(&list, sizeof(panel_signal_list), 0, sizeof(panel_signal_list)) != EOK) {
soc_log_err("panel_signal_list memset_s failed!\n");
return TD_FAILURE;
}
ret = ext_mpi_panel_get_spread_freq_range((ext_panel_id)panel_id, &list);
if (ret != TD_SUCCESS) {
return ret;
}
err = memcpy_s(freq_list, sizeof(uapi_panel_signal_list),
&list, sizeof(panel_signal_list));
if (err != EOK) {
soc_log_err("memcpy_s freq_list failed, err = %d\n", err);
return TD_FAILURE;
}
return TD_SUCCESS;
}
td_s32 uapi_panel_set_spread_freq(uapi_panel_id panel_id, td_u32 spread_freq)
{
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
return ext_mpi_panel_set_spread_freq((ext_panel_id)panel_id, spread_freq);
}
td_s32 uapi_panel_get_spread_freq(uapi_panel_id panel_id, td_u32 *spread_freq)
{
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (spread_freq == TD_NULL) {
soc_log_err("spread_freq is Null \n");
return TD_FAILURE;
}
return ext_mpi_panel_get_spread_freq((ext_panel_id)panel_id, spread_freq);
}
td_s32 uapi_panel_get_panel_name(uapi_panel_id panel_id, uapi_panel_name *name)
{
ext_panel_name tmp_name;
td_s32 ret;
errno_t err;
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (name == TD_NULL) {
soc_log_err("name is Null \n");
return TD_FAILURE;
}
if (memset_s(&tmp_name, sizeof(ext_panel_name), 0, sizeof(ext_panel_name)) != EOK) {
soc_log_err("ext_panel_name memset_s failed!\n");
return TD_FAILURE;
}
ret = ext_mpi_panel_get_panel_name((ext_panel_id)panel_id, &tmp_name);
if (ret != TD_SUCCESS) {
return ret;
}
name->name_size = tmp_name.size;
err = memcpy_s(name->panel_name, sizeof(name->panel_name), &tmp_name.name, sizeof(tmp_name.name));
if (err != EOK) {
soc_log_err("memcpy_s panel name failed, err = %d\n", err);
return TD_FAILURE;
}
return TD_SUCCESS;
}
td_s32 uapi_panel_set_bit_depth(uapi_panel_id panel_id, uapi_panel_bit_depth data_bit_depth)
{
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (((data_bit_depth < UAPI_PANEL_BIT_DEPTH_6BIT) ||
(data_bit_depth >= UAPI_PANEL_BIT_DEPTH_MAX))) {
soc_log_err("data_bit_depth is illegal, data_bit_depth = %d\n", data_bit_depth);
return TD_FAILURE;
}
return ext_mpi_panel_set_bit_depth((ext_panel_id)panel_id, (ext_panel_bit_depth)data_bit_depth);
}
td_s32 uapi_panel_get_bit_depth(uapi_panel_id panel_id, uapi_panel_bit_depth *data_bit_depth)
{
ext_panel_bit_depth depth = {0};
td_s32 ret;
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (data_bit_depth == TD_NULL) {
soc_log_err("data_bit_depth is Null \n");
return TD_FAILURE;
}
ret = ext_mpi_panel_get_bit_depth((ext_panel_id)panel_id, &depth);
if (ret != TD_SUCCESS) {
return ret;
}
*data_bit_depth = (uapi_panel_bit_depth)depth;
return TD_SUCCESS;
}
td_s32 uapi_panel_set_lvds_attr(uapi_panel_id panel_id, uapi_panel_lvds_attr *lvds_attr)
{
ext_panel_lvds_attr attr;
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (lvds_attr == TD_NULL) {
soc_log_err("lvds_attr is Null \n");
return TD_FAILURE;
}
if (((lvds_attr->lvds_link.link_map0 < UAPI_PANEL_LVDS_LINK_MAP_PIXEL0) ||
(lvds_attr->lvds_link.link_map0 >= UAPI_PANEL_LVDS_LINK_MAP_MAX))) {
soc_log_err("lvds_attr is illegal, lvds_attr.lvds_link.link_map0 = %d\n", lvds_attr->lvds_link.link_map0);
return TD_FAILURE;
}
if (((lvds_attr->lvds_link.link_map1 < UAPI_PANEL_LVDS_LINK_MAP_PIXEL0) ||
(lvds_attr->lvds_link.link_map1 >= UAPI_PANEL_LVDS_LINK_MAP_MAX))) {
soc_log_err("lvds_attr is illegal, lvds_attr.lvds_link.link_map1 = %d\n", lvds_attr->lvds_link.link_map1);
return TD_FAILURE;
}
if (((lvds_attr->lvds_fmt < UAPI_PANEL_LVDS_FORMAT_VESA) ||
(lvds_attr->lvds_fmt >= UAPI_PANEL_LVDS_FORMAT_MAX))) {
soc_log_err("lvds_attr is illegal, lvds_attr.lvds_fmt = %d\n", lvds_attr->lvds_fmt);
return TD_FAILURE;
}
if (memset_s(&attr, sizeof(ext_panel_lvds_attr), 0, sizeof(ext_panel_lvds_attr)) != EOK) {
soc_log_err("ext_panel_lvds_attr memset_s failed!\n");
return TD_FAILURE;
}
attr.lvds_link.link_map0 = (ext_panel_lvds_link_map)lvds_attr->lvds_link.link_map0;
attr.lvds_link.link_map1 = (ext_panel_lvds_link_map)lvds_attr->lvds_link.link_map1;
attr.lvds_fmt = (ext_panel_lvds_format)lvds_attr->lvds_fmt;
return ext_mpi_panel_set_lvds_attr((ext_panel_id)panel_id, &attr);
}
td_s32 uapi_panel_get_lvds_attr(uapi_panel_id panel_id, uapi_panel_lvds_attr *lvds_attr)
{
ext_panel_lvds_attr attr;
td_s32 ret;
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (lvds_attr == TD_NULL) {
soc_log_err("lvds_attr is Null \n");
return TD_FAILURE;
}
if (memset_s(&attr, sizeof(ext_panel_lvds_attr), 0, sizeof(ext_panel_lvds_attr)) != EOK) {
soc_log_err("ext_panel_lvds_attr memset_s failed!\n");
return TD_FAILURE;
}
ret = ext_mpi_panel_get_lvds_attr((ext_panel_id)panel_id, &attr);
if (ret != TD_SUCCESS) {
return ret;
}
lvds_attr->lvds_link.link_map0 = (uapi_panel_lvds_link_map)attr.lvds_link.link_map0;
lvds_attr->lvds_link.link_map1 = (uapi_panel_lvds_link_map)attr.lvds_link.link_map1;
lvds_attr->lvds_fmt = (uapi_panel_lvds_format)attr.lvds_fmt;
return TD_SUCCESS;
}
td_s32 uapi_panel_get_interface_type(uapi_panel_id panel_id, uapi_panel_intf_type *intf_type)
{
ext_panel_intf_type type = {0};
td_s32 ret;
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (intf_type == TD_NULL) {
soc_log_err("intf_type is Null \n");
return TD_FAILURE;
}
ret = ext_mpi_panel_get_interface_type((ext_panel_id)panel_id, &type);
if (ret != TD_SUCCESS) {
return ret;
}
*intf_type = (uapi_panel_intf_type)type;
return TD_SUCCESS;
}
td_s32 uapi_panel_get_config_info(uapi_panel_id panel_id, uapi_panel_config *config_info)
{
td_s32 ret;
ext_panel_config panel_config = {0};
/* To be further improved */
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (config_info == TD_NULL) {
soc_log_err("config_info is Null \n");
return TD_FAILURE;
}
ret = ext_mpi_panel_get_config_info((ext_panel_id)panel_id, &panel_config);
if (ret != TD_SUCCESS) {
return ret;
}
config_info->abnormal_detection.enable = panel_config.abnormal_detection.enable;
config_info->abnormal_detection.duration_time_ms = panel_config.abnormal_detection.duration_time_ms;
return TD_SUCCESS;
}
td_s32 uapi_panel_get_connect_status(uapi_panel_id panel_id, uapi_panel_connect_status *status_info)
{
td_s32 ret;
ext_panel_connect_status connect_status;
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (status_info == TD_NULL) {
soc_log_err("config_info is Null \n");
return TD_FAILURE;
}
ret = ext_mpi_panel_get_connect_status((ext_panel_id)panel_id, &connect_status);
if (ret != TD_SUCCESS) {
return ret;
}
if (connect_status == EXT_PANEL_CONNECT_STATUS_NORMAL) {
*status_info = UAPI_PANEL_CONNECT_STATUS_NORMAL;
} else if (connect_status == EXT_PANEL_CONNECT_STATUS_ABNORMAL) {
*status_info = UAPI_PANEL_CONNECT_STATUS_ABNORMAL;
}
return TD_SUCCESS;
}
td_s32 uapi_panel_enable_3d(const uapi_panel_id panel_id, const td_bool enable)
{
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
return ext_mpi_panel_enable_3d((ext_panel_id)panel_id, enable);
}
td_s32 uapi_panel_set_index(const uapi_panel_id panel_id, const td_u32 panel_index)
{
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
return ext_mpi_panel_set_index((ext_panel_id)panel_id, panel_index);
}
td_s32 uapi_panel_get_index(const uapi_panel_id panel_id, td_u32 *panel_index)
{
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
return ext_mpi_panel_get_index((ext_panel_id)panel_id, panel_index);
}
td_s32 uapi_panel_get_capability(const uapi_panel_id panel_id, uapi_panel_capability *panel_cap)
{
td_s32 ret;
ext_drv_panel_capability drv_panel_cap = {0};
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
ret = ext_mpi_panel_get_capability((ext_panel_id)panel_id, &drv_panel_cap);
if (ret != TD_SUCCESS) {
return ret;
}
ret = memcpy_s(panel_cap, sizeof(uapi_panel_capability),
&drv_panel_cap, sizeof(ext_drv_panel_capability));
if (ret != EOK) {
soc_log_err("memcpy_s capability failed, err = %d\n", ret);
return TD_FAILURE;
}
return TD_SUCCESS;
}
td_s32 uapi_panel_get_custom_param_size(const uapi_panel_id panel_id, td_u32 *param_size)
{
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (param_size == TD_NULL) {
soc_log_err("param_size is NULL!\n");
return TD_FAILURE;
}
return ext_mpi_panel_get_custom_param_size((ext_panel_id)panel_id, param_size);
}
td_s32 uapi_panel_get_custom_param(const uapi_panel_id panel_id, td_u32 param_size, td_u8 *param)
{
if (((panel_id < UAPI_PANEL_ID_0) || (panel_id >= UAPI_PANEL_ID_MAX))) {
soc_log_err("panel_id is illegal, panel_id = %d\n", panel_id);
return TD_FAILURE;
}
if (param == TD_NULL) {
soc_log_err("param is NULL!\n");
return TD_FAILURE;
}
return ext_mpi_panel_get_custom_param((ext_panel_id)panel_id, param, param_size);
}