mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 10:58:48 +09:00
1.hdmi: fix cat66121 driver run error 2. rkfb: fix some code error
This commit is contained in:
@@ -3,7 +3,6 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/of_gpio.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/uaccess.h>
|
||||
#if defined(CONFIG_DEBUG_FS)
|
||||
@@ -11,6 +10,8 @@
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/seq_file.h>
|
||||
#endif
|
||||
#include <linux/of_gpio.h>
|
||||
#include <linux/of_device.h>
|
||||
|
||||
#include "cat66121_hdmi.h"
|
||||
#include "cat66121_hdmi_hw.h"
|
||||
@@ -193,9 +194,6 @@ static int rk_hdmi_drv_init(struct hdmi *hdmi_drv)
|
||||
hdmi_drv->detect_hotplug = cat66121_hdmi_sys_detect_hpd;
|
||||
hdmi_drv->read_edid = cat66121_hdmi_sys_read_edid;
|
||||
|
||||
hdmi_drv->workqueue = create_singlethread_workqueue("hdmi");
|
||||
INIT_DELAYED_WORK(&(hdmi->delay_work), hdmi_work);
|
||||
|
||||
#ifdef CONFIG_HAS_EARLYSUSPEND
|
||||
hdmi_drv->early_suspend.suspend = hdmi_early_suspend;
|
||||
hdmi_drv->early_suspend.resume = hdmi_early_resume;
|
||||
@@ -216,10 +214,27 @@ static int rk_hdmi_drv_init(struct hdmi *hdmi_drv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_OF)
|
||||
static const struct of_device_id cat66121_dt_ids[] = {
|
||||
{.compatible = "ite,cat66121",},
|
||||
{}
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, cat66121_dt_ids);
|
||||
#endif
|
||||
|
||||
static int cat66121_hdmi_i2c_probe(struct i2c_client *client,const struct i2c_device_id *id)
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
printk("%s,line=%d\n", __func__,__LINE__);
|
||||
|
||||
if (client->dev.of_node) {
|
||||
if (!of_match_device(cat66121_dt_ids, &client->dev)) {
|
||||
dev_err(&client->dev,"Failed to find matching dt id\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
cat66121_hdmi = kzalloc(sizeof(struct cat66121_hdmi_pdata), GFP_KERNEL);
|
||||
if(!cat66121_hdmi)
|
||||
{
|
||||
@@ -238,6 +253,10 @@ static int cat66121_hdmi_i2c_probe(struct i2c_client *client,const struct i2c_de
|
||||
memset(hdmi, 0, sizeof(struct hdmi));
|
||||
hdmi->dev = &client->dev;
|
||||
|
||||
rk_hdmi_parse_dt(hdmi);
|
||||
//power on
|
||||
rk_hdmi_pwr_enable(hdmi);
|
||||
|
||||
if(cat66121_detect_device()!=1){
|
||||
dev_err(hdmi->dev, "can't find it66121 device \n");
|
||||
rc = -ENXIO;
|
||||
@@ -245,14 +264,40 @@ static int cat66121_hdmi_i2c_probe(struct i2c_client *client,const struct i2c_de
|
||||
}
|
||||
|
||||
cat66121_hdmi->plug_status = -1;
|
||||
|
||||
rk_hdmi_parse_dt(hdmi);
|
||||
rk_hdmi_drv_init(hdmi);
|
||||
|
||||
//power on
|
||||
rk_hdmi_pwr_enable(hdmi);
|
||||
cat66121_hdmi_sys_init(hdmi);
|
||||
|
||||
hdmi->workqueue = create_singlethread_workqueue("hdmi");
|
||||
INIT_DELAYED_WORK(&(hdmi->delay_work), hdmi_work);
|
||||
|
||||
if(gpio_is_valid(hdmi->irq)) {
|
||||
//cat66121_irq_work_func(NULL);
|
||||
if((rc = gpio_request(hdmi->irq, "hdmi gpio")) < 0)
|
||||
{
|
||||
dev_err(&client->dev, "fail to request gpio %d\n", hdmi->irq);
|
||||
goto err_request_lcdc;
|
||||
}
|
||||
|
||||
cat66121_hdmi->gpio = hdmi->irq;
|
||||
//gpio_pull_updown(hdmi->irq, GPIOPullUp); //TODO Daisen
|
||||
gpio_direction_input(hdmi->irq);
|
||||
hdmi->irq = gpio_to_irq(hdmi->irq);
|
||||
if(hdmi->irq <= 0) {
|
||||
dev_err(hdmi->dev, "failed to get hdmi irq resource (%d).\n", hdmi->irq);
|
||||
goto err_request_irq;
|
||||
}
|
||||
|
||||
if((rc = request_threaded_irq(hdmi->irq, NULL ,cat66121_thread_interrupt, IRQF_TRIGGER_LOW | IRQF_ONESHOT, dev_name(&client->dev), hdmi)) < 0)
|
||||
{
|
||||
dev_err(&client->dev, "fail to request hdmi irq\n");
|
||||
goto err_request_irq;
|
||||
}
|
||||
}else{
|
||||
cat66121_hdmi->workqueue = create_singlethread_workqueue("cat66121 irq");
|
||||
INIT_DELAYED_WORK(&(cat66121_hdmi->delay_work), cat66121_irq_work_func);
|
||||
cat66121_irq_work_func(NULL);
|
||||
}
|
||||
|
||||
#if defined(CONFIG_DEBUG_FS)
|
||||
{
|
||||
struct dentry *debugfs_dir = debugfs_create_dir("it66121", NULL);
|
||||
@@ -265,34 +310,12 @@ static int cat66121_hdmi_i2c_probe(struct i2c_client *client,const struct i2c_de
|
||||
}
|
||||
#endif
|
||||
|
||||
if(gpio_is_valid(hdmi->irq)) {
|
||||
cat66121_irq_work_func(NULL);
|
||||
if((rc = gpio_request(hdmi->irq, "hdmi gpio")) < 0)
|
||||
{
|
||||
dev_err(&client->dev, "fail to request gpio %d\n", client->irq);
|
||||
goto err_request_lcdc;
|
||||
}
|
||||
|
||||
cat66121_hdmi->gpio = hdmi->irq;
|
||||
//gpio_pull_updown(hdmi->irq, GPIOPullUp); //TODO Daisen
|
||||
gpio_direction_input(hdmi->irq);
|
||||
if((rc = request_threaded_irq(hdmi->irq, NULL ,cat66121_thread_interrupt, IRQF_TRIGGER_LOW | IRQF_ONESHOT, dev_name(&client->dev), hdmi)) < 0)
|
||||
{
|
||||
dev_err(&client->dev, "fail to request hdmi irq\n");
|
||||
goto err_request_irq;
|
||||
}
|
||||
}else{
|
||||
cat66121_hdmi->workqueue = create_singlethread_workqueue("cat66121 irq");
|
||||
INIT_DELAYED_WORK(&(cat66121_hdmi->delay_work), cat66121_irq_work_func);
|
||||
cat66121_irq_work_func(NULL);
|
||||
}
|
||||
|
||||
dev_info(&client->dev, "cat66121 hdmi i2c probe ok\n");
|
||||
|
||||
return 0;
|
||||
|
||||
err_request_irq:
|
||||
gpio_free(client->irq);
|
||||
gpio_free(hdmi->irq);
|
||||
err_request_lcdc:
|
||||
kfree(hdmi);
|
||||
hdmi = NULL;
|
||||
@@ -357,6 +380,7 @@ static struct i2c_driver cat66121_hdmi_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "cat66121_hdmi",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = of_match_ptr(cat66121_dt_ids),
|
||||
},
|
||||
.probe = cat66121_hdmi_i2c_probe,
|
||||
.remove = cat66121_hdmi_i2c_remove,
|
||||
|
||||
@@ -10,8 +10,8 @@
|
||||
*/
|
||||
int rk_hdmi_pwr_ctr_parse_dt(struct hdmi *dev_drv)
|
||||
{
|
||||
struct device_node *root = of_parse_phandle(dev_drv->dev->of_node,
|
||||
"power_ctr", 0);
|
||||
struct device_node *root = of_find_node_by_name(dev_drv->dev->of_node,
|
||||
"power_ctr");
|
||||
struct device_node *child;
|
||||
struct rk_disp_pwr_ctr_list *pwr_ctr;
|
||||
struct list_head *pos;
|
||||
@@ -94,8 +94,14 @@ int rk_hdmi_pwr_enable(struct hdmi *dev_drv)
|
||||
if (pwr_ctr->type == GPIO) {
|
||||
gpio_direction_output(pwr_ctr->gpio,pwr_ctr->atv_val);
|
||||
mdelay(pwr_ctr->delay);
|
||||
if(pwr_ctr->is_rst == 1)
|
||||
gpio_direction_output(pwr_ctr->gpio,((pwr_ctr->atv_val == 1) ? 0:1));
|
||||
if(pwr_ctr->is_rst == 1) {
|
||||
if(pwr_ctr->atv_val == 1)
|
||||
gpio_set_value(pwr_ctr->gpio, 0);
|
||||
else
|
||||
gpio_set_value(pwr_ctr->gpio, 1);
|
||||
|
||||
mdelay(pwr_ctr->delay);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -116,8 +122,12 @@ int rk_hdmi_pwr_disable(struct hdmi *dev_drv)
|
||||
pwr_ctr = &pwr_ctr_list->pwr_ctr;
|
||||
if (pwr_ctr->type == GPIO) {
|
||||
gpio_set_value(pwr_ctr->gpio,pwr_ctr->atv_val);
|
||||
if(pwr_ctr->is_rst == 1)
|
||||
gpio_direction_output(pwr_ctr->gpio,((pwr_ctr->atv_val == 1) ? 0:1));
|
||||
if(pwr_ctr->is_rst == 1) {
|
||||
if(pwr_ctr->atv_val == 1)
|
||||
gpio_set_value(pwr_ctr->gpio, 0);
|
||||
else
|
||||
gpio_set_value(pwr_ctr->gpio, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -307,7 +307,7 @@ static struct rk_lcdc_driver *rk_get_prmry_lcdc_drv(void)
|
||||
return NULL;
|
||||
|
||||
for (i = 0; i < inf->num_lcdc; i++) {
|
||||
if (inf->lcdc_dev_drv[i]->screen_ctr_info->prop == PRMRY) {
|
||||
if (inf->lcdc_dev_drv[i]->prop == PRMRY) {
|
||||
dev_drv = inf->lcdc_dev_drv[i];
|
||||
break;
|
||||
}
|
||||
@@ -349,7 +349,7 @@ static struct rk_lcdc_driver *rk_get_extend_lcdc_drv(void)
|
||||
return NULL;
|
||||
|
||||
for (i = 0; i < inf->num_lcdc; i++) {
|
||||
if (inf->lcdc_dev_drv[i]->screen_ctr_info->prop == EXTEND) {
|
||||
if (inf->lcdc_dev_drv[i]->prop == EXTEND) {
|
||||
dev_drv = inf->lcdc_dev_drv[i];
|
||||
break;
|
||||
}
|
||||
@@ -1510,7 +1510,7 @@ int rk_fb_disp_scale(u8 scale_x, u8 scale_y, u8 lcdc_id)
|
||||
dev_drv = inf->lcdc_dev_drv[0];
|
||||
#else
|
||||
for (i = 0; i < inf->num_lcdc; i++) {
|
||||
if (inf->lcdc_dev_drv[i]->screen_ctr_info->prop == EXTEND) {
|
||||
if (inf->lcdc_dev_drv[i]->prop == EXTEND) {
|
||||
dev_drv = inf->lcdc_dev_drv[i];
|
||||
break;
|
||||
}
|
||||
@@ -1661,7 +1661,7 @@ static int init_lcdc_win(struct rk_lcdc_driver *dev_drv, struct rk_lcdc_win *def
|
||||
dev_err(dev_drv->dev, "kzmalloc for win fail!");
|
||||
return -ENOMEM;
|
||||
}
|
||||
win = &def_win[i];
|
||||
|
||||
strcpy(win->name, def_win->name);
|
||||
win->id = def_win->id;
|
||||
win->support_3d = def_win->support_3d;
|
||||
|
||||
Reference in New Issue
Block a user