?? videopreset.c
字號:
#define MODULE
#define __KERNEL__
#include <linux/config.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/init.h>#include <linux/i2c.h>#include <linux/slab.h>#include <linux/string.h>#include <linux/init.h>#include <linux/delay.h>#include <asm/arch/S3C2440.h>#include "7113data.h"static struct i2c_driver saa7113_driver;/*static camif_gc_t data = { itu_fmt: CAMIF_ITU601, order422: CAMIF_YCBYCR, camclk: 24000000,#ifndef SAMSUNG_SXGA_CAM source_x: 640, source_y: 480, win_hor_ofst: 112, win_ver_ofst: 20,#else source_x: 1280, source_y: 1024, win_hor_ofst: 0, win_ver_ofst: 0,#endif polarity_pclk:1, polarity_href:0,#ifdef CONFIG_ARCH_S3C24A0A reset_type:CAMIF_EX_RESET_AL, /* Active Low #else reset_type:CAMIF_EX_RESET_AH, /* Ref board has inverted signal #endif reset_udelay:2000,};*/
#define CAM_ID 0x4a //slave address W:0x4a; slave address R:0x4b
static unsigned short ignore[] = { I2C_CLIENT_END };static unsigned short normal_addr[] = { (CAM_ID>>1), I2C_CLIENT_END };static struct i2c_client_address_data addr_data = { normal_i2c: normal_addr, normal_i2c_range: ignore, probe: ignore, probe_range: ignore, ignore: ignore, ignore_range: ignore, force: ignore,};
static ssize_t saa7113_read(struct i2c_client * client, unsigned char subaddr){ int ret; unsigned char buf[1]; struct i2c_msg msg ={ client->addr, 0, 1, buf}; buf[0] = subaddr; ret = i2c_transfer(client->adapter,&msg, 1) == 1 ? 0 : -EIO; if (ret == -EIO) { printk(" I2C write Error \n"); return -EIO; } msg.flags = I2C_M_RD; //0x01
ret = i2c_transfer(client->adapter, &msg, 1) == 1 ? 0 : -EIO; return buf[0];}static int saa7113_write(struct i2c_client * client, unsigned char subaddr, unsigned char val){ unsigned char buf[2]; struct i2c_msg msg = { client->addr, 0, 2, buf}; buf[0]= subaddr; buf[1]= val; return i2c_transfer(client->adapter, &msg, 1) == 1 ? 0 : -EIO;}}void inline saa7113_init(struct i2c_client * sam_client){ int i; printk(KERN_ERR "saa7113_init \n"); for (i = 0; i < SAA7113_INIT_REGS; i++) { saa7113_write(sam_client, SAA7113_ITU656[i].subaddr, SAA7113_ITU656[i].value ); }}static intsaa7113_attach(struct i2c_adapter *adap, int addr, unsigned short flags,int kind){ struct i2c_client *c; c = kmalloc(sizeof(*c), GFP_KERNEL); if (!c) return -ENOMEM; strcpy(c->name, "SAA7113H"); c->id = saa7113_driver.id; c->flags = I2C_CLIENT_ALLOW_USE; c->addr = addr; c->adapter = adap; c->driver = &saa7113_driver; c->data = NULL; //data.sensor = c;
//camif_register_decoder(c); return i2c_attach_client(c);}static int saa7113_probe(struct i2c_adapter *adap){ return i2c_probe(adap, &addr_data, saa7113_attach);}static int saa7113_detach(struct i2c_client *client){ i2c_detach_client(client); //camif_unregister_decoder(client); return 0;}static intsaa7113_command(struct i2c_client *client, unsigned int cmd, void *arg)
{
saa7113_init(client);
printk(KERN_INFO "CAMERA: SAA7113 initialized\n");
}static struct i2c_driver saa7113_driver = { name: "SAA7113H", id: 0X500000, /* S3C24XX I2C ALGORITM */ flags: I2C_DF_NOTIFY, attach_adapter: saa7113_probe, detach_client: saa7113_detach, command: saa7113_command
};////初始化時鐘信號線和數據線
static void iic_gpio_port(void) { GPECON &= ~(0xf <<28);//clear the preset GPECON |= 0xa <<28;}int init_module(void) //can be replaced by static int __init spi_init(void){ iic_gpio_port(); i2c_add_driver(&saa7113_driver);
saa7113_driver->command;
}void cleanup_module(void) //can be replaced by static void __exit spi_exit(void) { i2c_del_driver(&saa7113_driver);} MODULE_LICENSE("GPL");
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -