},
{
.desc = "vol+",
- .code = KEY_VOLUMEDOWN,
+ .code = KEY_VOLUMEUP,
.gpio = RK29_PIN6_PA1,
.active_low = PRESS_LEV_LOW,
},
{
.desc = "vol-",
- .code = KEY_VOLUMEUP,
+ .code = KEY_VOLUMEDOWN,
.gpio = RK29_PIN6_PA2,
.active_low = PRESS_LEV_LOW,
},
static int rk29_hdmi_enter(struct anx7150_dev_s *dev)\r
{\r
if(dev->rk29_output_status == RK29_OUTPUT_STATUS_LCD) {\r
- printk("%s, resolution = %d\n", __func__, dev->resolution_set);\r
- if(hdmi_switch_fb(dev->resolution_set, 1) < 0)\r
- return -1;\r
dev->hdmi->resolution = dev->resolution_set;\r
+ if(hdmi_switch_fb(dev->hdmi, 1) < 0)\r
+ return -1;\r
dev->rk29_output_status = RK29_OUTPUT_STATUS_HDMI;\r
}\r
return 0;\r
static int rk29_hdmi_exit(struct anx7150_dev_s *dev)\r
{\r
if(dev->rk29_output_status == RK29_OUTPUT_STATUS_HDMI) {\r
- printk("%s\n", __func__);\r
- if(hdmi_switch_fb(dev->resolution_set, 0) < 0)\r
+ dev->hdmi->resolution = dev->resolution_set;\r
+ if(hdmi_switch_fb(dev->hdmi, 0) < 0)\r
return -1;\r
dev->rk29_output_status = RK29_OUTPUT_STATUS_LCD;\r
}\r
rk29_hdmi_exit(&anx->dev);\r
if(anx->dev.HPD_status){\r
anx7150_plug(anx->client);\r
+ hdmi_changed(anx->dev.hdmi, 1);\r
state = READ_PARSE_EDID;\r
}\r
if(anx->dev.hdmi_auto_switch)\r
anx->dev.HPD_change_cnt = 0;\r
anx->dev.rk29_output_status = RK29_OUTPUT_STATUS_LCD;\r
anx->dev.hdcp_enable = ANX7150_HDCP_EN;\r
+ anx->dev.rate = 100;\r
\r
anx->init = 1;\r
\r
anx->dev.workqueue = create_singlethread_workqueue("ANX7150_WORKQUEUE");\r
INIT_DELAYED_WORK(&anx->dev.delay_work, anx7150_work_func);\r
\r
- hdmi->display_on = 0;\r
+ hdmi->display_on = anx->dev.hdmi_enable;\r
hdmi->auto_switch = anx->dev.hdmi_auto_switch;\r
hdmi->hdcp_on = anx->dev.hdcp_enable;\r
hdmi->audio_fs = anx->dev.i2s_Fs;\r
/* HDMI HDCP ENABLE */\r
#define ANX7150_HDCP_EN HDMI_DISABLE\r
\r
-/* HDMI default resolution */\r
-#define HDMI_DEFAULT_RESOLUTION HDMI_1280x720p_50Hz\r
-/* I2S Fs */\r
-#define HDMI_I2S_Fs_44100 0\r
-#define HDMI_I2S_Fs_48000 2\r
-\r
-/* I2S default sample rate */\r
-#define HDMI_I2S_DEFAULT_Fs HDMI_I2S_Fs_44100\r
-\r
/* ANX7150 state machine */\r
enum{\r
HDMI_INITIAL = 1,\r
hdmi_dbg(&client->dev, "SYSTEM_CONFIG\n");\r
break;\r
case CONFIG_VIDEO:\r
- hdmi_dbg(&client->dev, "CONFIG_VIDEO\n");\r
+ dev_info(&client->dev, "CONFIG_VIDEO\n");\r
break;\r
case CONFIG_AUDIO:\r
hdmi_dbg(&client->dev, "CONFIG_AUDIO\n");\r
break;\r
////////////////////////////////////////////////\r
case PLAY_BACK:\r
- hdmi_dbg(&client->dev, "PLAY_BACK\n");\r
+ dev_info(&client->dev, "PLAY_BACK\n");\r
break;\r
default:\r
hdmi_dbg(&client->dev, "unknown state\n");\r
{\r
int rc = 0;\r
char c;\r
- hdmi_dbg(&client->dev, "anx7150 unplug\n");\r
+ dev_info(&client->dev, "anx7150 unplug\n");\r
\r
//wen HDCP CTS\r
ANX7150_Variable_Initial(); //simon\r
int rc = 0;\r
char c;\r
\r
- hdmi_dbg(&client->dev, "anx7150 plug\n");\r
+ dev_info(&client->dev, "anx7150 plug\n");\r
\r
rc = anx7150_i2c_read_p0_reg(client, ANX7150_SYS_CTRL3_REG, &c);\r
c |= (0x01);\r
anx->dev.HPD_change_cnt = 0;\r
}\r
\r
- if(anx->dev.HPD_change_cnt > 2){\r
+ if(anx->dev.HPD_change_cnt > 1){\r
hdmi_dbg(&anx->client->dev, "hotplug_change\n");\r
\r
if(hot_plug == HDMI_RECIVER_UNPLUG){\r
rc = anx7150_i2c_write_p0_reg(client, ANX7150_HSYNC_ACT_WIDTHH_REG, &c);\r
return rc;\r
}\r
+int ANX7150_Blue_Screen(struct anx7150_pdata *anx)\r
+{\r
+ return anx7150_blue_screen_format_config(anx->client);\r
+}\r
//******************************Video Config***************************************\r
int ANX7150_Config_Video(struct i2c_client *client)\r
{\r
rc = anx7150_i2c_read_p0_reg(client, ANX7150_VID_CTRL_REG, &c);\r
c |= (ANX7150_VID_CTRL_IN_EN);\r
rc = anx7150_i2c_write_p0_reg(client, ANX7150_VID_CTRL_REG, &c);\r
- msleep(200);\r
//D("Video configure OK!\n");\r
+ msleep(60);\r
rc = anx7150_i2c_read_p0_reg(client, ANX7150_VID_STATUS_REG, &c);\r
if (!(c & ANX7150_VID_STATUS_VID_STABLE))\r
{\r
rc = anx7150_i2c_read_p0_reg(client, ANX7150_TMDS_CLKCH_CONFIG_REG, &c);\r
c |= (ANX7150_TMDS_CLKCH_MUTE);\r
rc = anx7150_i2c_write_p0_reg(client, ANX7150_TMDS_CLKCH_CONFIG_REG, &c);\r
-\r
- msleep(400); //400ms only for HDCP CTS\r
+ if(ANX7150_HDCP_enable)\r
+ msleep(400); //400ms only for HDCP CTS\r
\r
//ANX7150_i2c_read_p0_reg(ANX7150_VID_MODE_REG, &c); //zy 061110\r
return 0;\r
void HDMI_Set_Video_Format(u8 video_format);\r
void HDMI_Set_Audio_Fs( u8 audio_fs);\r
int ANX7150_PLAYBACK_Process(void);\r
+int ANX7150_Blue_Screen(struct anx7150_pdata *anx);\r
\r
\r
#endif\r
EXPORT_SYMBOL(hdmi_changed);\r
EXPORT_SYMBOL(hdmi_register);\r
EXPORT_SYMBOL(hdmi_unregister);\r
+EXPORT_SYMBOL(get_hdmi_struct);\r
\r
subsys_initcall(hdmi_class_init);\r
module_exit(hdmi_class_exit);\r
#include <linux/console.h>
#include <linux/fb.h>
#include <linux/hdmi.h>
+#include <linux/completion.h>
#include "../display/screen/screen.h"
#include "../rk29_fb.h"
screen4->standby = anx7150_standby;
}
-int hdmi_switch_fb(int resolution, int type)
+int hdmi_switch_fb(struct hdmi *hdmi, int type)
{
int rc = 0;
struct rk29fb_screen hdmi_info[4];
hdmi_set_info(&hdmi_info[0]);
- switch(resolution)
+ switch(hdmi->resolution)
{
case HDMI_1280x720p_50Hz:
rc = FB_Switch_Screen(&hdmi_info[1], type);
rc = FB_Switch_Screen(&hdmi_info[1], type);
break;
}
+ if(hdmi->wait == 1) {
+ complete(&hdmi->complete);
+ hdmi->wait = 0;
+ }
return rc;
}
-int hdmi_resolution_changed(struct hdmi *hdmi, int xres, int yres)
+int hdmi_resolution_changed(struct hdmi *hdmi, int xres, int yres, int video_on)
{
- if(xres > 1280 && hdmi->resolution != HDMI_1920x1080p_50Hz) {
+ int ret = 0;
+ if(hdmi->display_on == 0|| hdmi->plug == 0)
+ return ret;
+ if(xres > 1280 && hdmi->resolution != HDMI_1920x1080p_50Hz)
+ {
hdmi->resolution = HDMI_1920x1080p_50Hz;
hdmi->display_on = 1;
hdmi->hdmi_set_param(hdmi);
+ ret = 1;
}
- else if(xres >1024 && hdmi->resolution != HDMI_1280x720p_50Hz){
+
+
+ else if(xres >1024 && xres <= 1280 && hdmi->resolution != HDMI_1280x720p_50Hz){
hdmi->resolution = HDMI_1280x720p_50Hz;
hdmi->display_on = 1;
hdmi->hdmi_set_param(hdmi);
+ ret = 1;
}
+ /*
else {
if(hdmi->display_on == 1)
hdmi->hdmi_display_off(hdmi);
- }
- return 0;
+ }*/
+ return ret;
}
+EXPORT_SYMBOL(hdmi_resolution_changed);
\ No newline at end of file
#ifdef CONFIG_PM
#include <linux/pm.h>
#endif
+#ifdef CONFIG_HDMI
+#include <linux/completion.h>
+
+#include <linux/hdmi.h>
+#endif
#include <mach/iomux.h>
#include <mach/gpio.h>
u16 xlcd = screen->x_res; //size of panel
u16 ylcd = screen->y_res;
u16 yres = 0;
-
+#ifdef CONFIG_HDMI
+ struct hdmi *hdmi = get_hdmi_struct(0);
+#endif
xpos = (xpos * screen->x_res) / inf->panel1_info.x_res;
ypos = (ypos * screen->y_res) / inf->panel1_info.y_res;
xsize = (xsize * screen->x_res) / inf->panel1_info.x_res;
{
return -EINVAL; // multiple of scale down or scale up can't exceed 8
}
-
+#ifdef CONFIG_HDMI
+ if(inf->video_mode == 1) {
+ if(hdmi_resolution_changed(hdmi,var->xres,var->yres, 1) == 1)
+ {
+ LcdMskReg(inf, DSP_CTRL1, m_BLACK_MODE, v_BLACK_MODE(1));
+ LcdWrReg(inf, REG_CFG_DONE, 0x01);
+ init_completion(&hdmi->complete);
+ hdmi->wait = 1;
+ wait_for_completion_interruptible_timeout(&hdmi->complete,
+ msecs_to_jiffies(10000));
+ }
+ }
+#endif
return 0;
}
#include <linux/device.h>\r
#include <linux/workqueue.h>\r
#include <linux/i2c.h>\r
+#include <linux/completion.h>\r
+\r
+\r
\r
#ifdef CONFIG_HDMI_DEBUG\r
#define hdmi_dbg(dev, format, arg...) \\r
\r
#define TRUE 1\r
#define FALSE 0\r
-\r
+/* resolution */\r
#define HDMI_1280x720p_50Hz 0\r
#define HDMI_1280x720p_60Hz 1\r
#define HDMI_720x576p_50Hz 2\r
#define HDMI_1920x1080p_50Hz 3\r
+/* HDMI default resolution */\r
+#define HDMI_DEFAULT_RESOLUTION HDMI_1280x720p_50Hz\r
+/* I2S Fs */\r
+#define HDMI_I2S_Fs_44100 0\r
+#define HDMI_I2S_Fs_48000 2\r
+/* I2S default sample rate */\r
+#define HDMI_I2S_DEFAULT_Fs HDMI_I2S_Fs_44100\r
\r
\r
#define HDMI_MAX_ID 32\r
struct device *dev;\r
struct work_struct changed_work;\r
int id;\r
+ int wait;\r
BOOL display_on;\r
BOOL plug;\r
BOOL auto_switch;\r
\r
void *priv;\r
\r
+ struct completion complete;\r
+\r
int (*hdmi_display_on)(struct hdmi *);\r
int (*hdmi_display_off)(struct hdmi *);\r
int (*hdmi_set_param)(struct hdmi *);\r
extern int hdmi_codec_set_audio_fs(unsigned char audio_fs);\r
extern int hdmi_fb_set_resolution(unsigned char resolution);\r
\r
-extern int hdmi_switch_fb(int resolution, int type);\r
-extern int hdmi_resolution_changed(struct hdmi *hdmi, int xres, int yres);\r
+extern int hdmi_switch_fb(struct hdmi *hdmi, int type);\r
+extern int hdmi_resolution_changed(struct hdmi *hdmi, int xres, int yres, int video_on);\r
\r
extern struct hdmi *get_hdmi_struct(int nr);\r
\r