#include <linux/of_irq.h>
#include "rk3036_hdmi.h"
#include "rk3036_hdmi_hw.h"
-
+static unsigned int rk3036_hdmi_support_vic[] = {
+ HDMI_720X480P_60HZ_VIC,
+ HDMI_720X480I_60HZ_VIC,
+ HDMI_720X576P_50HZ_VIC,
+ HDMI_720X576I_50HZ_VIC,
+ HDMI_1280X720P_50HZ_VIC,
+ HDMI_1280X720P_60HZ_VIC,
+ HDMI_1920X1080P_50HZ_VIC,
+ HDMI_1920X1080I_50HZ_VIC,
+ HDMI_1920X1080P_60HZ_VIC,
+ HDMI_1920X1080I_60HZ_VIC
+};
static int __maybe_unused rk3036_hdmi_show_reg(struct hdmi *hdmi_drv)
{
int i = 0;
hdmi_drv->read_edid = rk3036_hdmi_read_edid;
hdmi_drv->insert = rk3036_hdmi_insert;
hdmi_drv->ops = &hdmi_drv_ops;
+ hdmi_drv->support_vic = rk3036_hdmi_support_vic;
+ hdmi_drv->support_vic_num = ARRAY_SIZE(rk3036_hdmi_support_vic);
if (!hdmi_drv->uboot_logo) {
rk3036_hdmi_reset_pclk();
#include <linux/interrupt.h>
#include "rk3288_hdmi_hw.h"
+static unsigned int rk3288_hdmi_support_vic[] = {
+ HDMI_720X480P_60HZ_VIC,
+ HDMI_720X576P_50HZ_VIC,
+ HDMI_1280X720P_50HZ_VIC,
+ HDMI_1280X720P_60HZ_VIC,
+ HDMI_1920X1080P_50HZ_VIC,
+ HDMI_1920X1080P_60HZ_VIC,
+ HDMI_3840X2160P_24HZ_VIC,
+ HDMI_3840X2160P_25HZ_VIC,
+ HDMI_3840X2160P_30HZ_VIC,
+ HDMI_3840X2160P_50HZ_VIC,
+ HDMI_3840X2160P_60HZ_VIC
+};
static const struct phy_mpll_config_tab PHY_MPLL_TABLE[] = { /* opmode: 0:HDMI1.4 1:HDMI2.0 */
/* pixclock pixrepet colordepth prepdiv tmdsmhl opmode fbdiv2 fbdiv1 ref_cntrl nctrl propctrl intctrl gmpctrl */
{27000000, 0, HDMI_COLOR_DEPTH_8BIT, 0, 0, 0, 2, 3, 0, 3, 7, 0, 3},
hdmi_drv->config_audio = rk3288_hdmi_config_audio;
hdmi_drv->detect_hotplug = rk3288_hdmi_detect_hotplug;
hdmi_drv->read_edid = rk3288_hdmi_read_edid;
+ hdmi_drv->support_vic = rk3288_hdmi_support_vic;
+ hdmi_drv->support_vic_num = ARRAY_SIZE(rk3288_hdmi_support_vic);
rk3288_hdmi_reset(hdmi_drv);
void (*cec_set_device_pa)(int);
int (*cec_enumerate)(void);
struct rk_hdmi_drv_ops *ops;
+ unsigned int *support_vic;
+ int support_vic_num;
};
#define hdmi_err(dev, format, arg...) \
}
return -1;
}
+int hdmi_check_support_videomode(int vic)
+{
+ int i, support = 0;
+ if (m_hdmi_drv->support_vic_num == 0)
+ return 1;
+
+ for (i=0; i<m_hdmi_drv->support_vic_num; i++) {
+ if (m_hdmi_drv->support_vic[i] == vic) {
+ support = 1;
+ break;
+ }
+ }
+ if(i >= m_hdmi_drv->support_vic_num)
+ support = 0;
+ return support;
+}
/**
* hdmi_add_videomode: adds videomode entry to modelist
for (i = 0; i < ARRAY_SIZE(hdmi_mode); i++) {
m = (struct fb_videomode *)&hdmi_mode[i];
if (fb_mode_is_equal(m, mode)) {
- found = 1;
+ if(hdmi_check_support_videomode(m->flag))
+ found = 1;
break;
}
}