⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 videopreset.c

📁 这是一个用c语言编写的摄像头驱动程序
💻 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 + -