下面是我的程序,这个程序:
tatic const struct i2c_device_id Colorado_register_id[] = {
{ "Colorado_i2c", 0 },
{ }
};
MODULE_DEVICE_TABLE(i2c, Colorado_register_id);
//static struct i2c_driver Colorado_i2c_driver;
//static struct i2c_client *Colorado_i2c_client;
/*
static struct i2c_client *get_Colorado_i2c_client(void)
{
return Colorado_i2c_client;
}*/
static int Colorado_i2c_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
//int rc;
struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
struct colorado_data *data;
int err = 0;
if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE))
return -EIO;
data = kzalloc(sizeof(struct colorado_data), GFP_KERNEL);
if (!data)
return -ENOMEM;
data->client = client;
i2c_set_clientdata(client, data);
mutex_init(&data->lock);
/*
err = Colorado_System_Init();
if (err)
goto exit_kfree;
exit_kfree:
kfree(data);
return err;*/
/*
memcpy(&g_client, &client, sizeof(client));
if (!i2c_check_functionality(client->adapter,
I2C_FUNC_SMBUS_I2C_BLOCK)) {
dev_err(&client->dev, "i2c bus does not support the Colorado\n");
rc = -ENODEV;
goto exit;
}
return 0;
exit:
return rc;*/
}
static int Colorado_i2c_remove(struct i2c_client *client)
{
return 0;
}
/*
static int Colorado_suspend(struct i2c_client *client)
{
return 0;
}
static int Colorado_resume(struct i2c_client *client)
{
return 0;
}*/
static struct i2c_driver Colorado_driver = {
.driver = {
.name = "Colorado_i2c",
.owner = THIS_MODULE,
},
.probe = Colorado_i2c_probe,
.remove = Colorado_i2c_remove,
// .suspend = Colorado_suspend,
// .resume = Colorado_resume,
.id_table = Colorado_register_id,
};
void Colorado_work_func(struct work_struct * work)
{
// set_freezable();
// unsigned long interval = jiffies_to_msecs((unsigned long)((long) jiffies - last_jiffies));
// D("Colorado: Colorado_work_func() is called, intervel: %lu msec.\n", interval);
last_jiffies = (long) jiffies;
// D("Colorado_timer_handler\n");
if(timer_en_cnt > 0){
if(CoolHDModeGet() == 1)//if DP mode
{
DP_CTRL_Main_Procss();
}
bModeMonitor = CoolHDModeMonitor();
if((CoolHDModeGet())!= bModeMonitor)
{
D("switch to mode %.2x\n",(WORD)bModeMonitor);
CoolHDModeSet(bModeMonitor);
//DP_USB_Mode_Control(bModeMonitor);
}
timer_en_cnt--;
}
if(Colorado_enablef == ENABLE){
timer_en_cnt = 1;
}
queue_delayed_work(Colorado_workqueue, &Colorado_work, msecs_to_jiffies(500));
}
int Colorado_System_Init (void)
{
int ret;
ret = DP_CTRL_Chip_Detect();
if(ret<0)
{
D("Chip detect error\n");
return -1;
}
//else
//D("chip not found");
//Chip initialization
DP_CTRL_Chip_Initial();
bCoolHdMode = CoolHDModeGet();
return 0;
//DP_USB_Mode_Control(bCoolHdMode);
}
static int __init Colorado_init(void)
{
int ret;
/* step 0 init Colorado_dev */
//Colorado_dev.misc_dev.minor = MISC_DYNAMIC_MINOR;
//Colorado_dev.misc_dev.name = DEVICE_NAME;