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

📄 53bea_sensor.c

📁 三星照相模块驱动。linux/char下
💻 C
字号:
/* *  Copyright (C) 2004 Samsung Electronics  *             SW.LEE <hitchcar@samsung.com> *            - based on Russell King : pcf8583.c * 	      - added  smdk24a0, smdk2440 *            - added  poseidon (s3c24a0+wavecom)	 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * *  Driver for FIMC20 Camera Decoder  */#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>#ifdef CONFIG_ARCH_S3C24A0A#else#include <asm/arch/S3C2440.h>#endif//#include <arm/arch/S3C2440.h>#define SW_DEBUG#include "../camif.h"#include "sensor.h"#include "53bea_sensor.h"#include "s3c24x0_gpio_i2c.c"static const char *sensor_version =    "$Id: 53bea_sensor.c,v 1.1 2006/02/01 23:22:06 eyryu Exp $";static struct i2c_driver sensor_driver;static camif_gc_t data = {        itu_fmt:      CAMIF_ITU601,        order422:     CAMIF_YCBYCR,        camclk:       24000000,	source_x:     640,        source_y:     480,        win_hor_ofst: 112,        win_ver_ofst: 20,        polarity_pclk:0,        polarity_href:0,        reset_type:CAMIF_EX_RESET_AH, /* Ref board has inverted signal */        reset_udelay:2000,};s5x532_t s5x532_regs_mirror[S5X532_REGS];unsigned char sensor_read(struct i2c_client *client, unsigned char subaddr){	unsigned char ret;	ret = chaeum_i2c_readb(subaddr);	return ret;}static void sensor_write(struct i2c_client *client,	     unsigned char subaddr, unsigned char val){	chaeum_i2c_writeb(subaddr, val);}static void inline sensor_init(struct i2c_client *sam_client){	int i;	for (i = 0; i < S5X532_INIT_REGS; i++) {		sensor_write(sam_client,			     s5x532_reg[i].subaddr, s5x532_reg[i].value);	}#ifdef YOU_WANT_TO_CHECK_IMG_SENSOR	for (i = 0; i < S5X532_INIT_REGS; i++) {		if (s5x532_reg[i].subaddr == PAGE_ADDRESS) {			sensor_write(sam_client,				     s5x532_reg[i].subaddr,				     s5x532_reg[i].value);			printk(KERN_ERR "Page: Subaddr %02x = 0x%02x\n",			       s5x532_reg[i].subaddr,			       s5x532_reg[i].value);		} else {			s5x532_regs_mirror[i].subaddr =			    s5x532_reg[i].subaddr;			s5x532_regs_mirror[i].value =			    sensor_read(sam_client, s5x532_reg[i].subaddr);			printk(KERN_ERR "Subaddr %02x = 0x%02x\n",			       s5x532_reg[i].subaddr,			       s5x532_regs_mirror[i].value);		}	}#endif}struct i2c_client *c = NULL;static intsensor_attach(void){    printk("========== sensor_attach  \r\n");	c = kmalloc(sizeof(*c), GFP_KERNEL);	if (!c) {		panic(" Kmaloc failed \n");		return -ENOMEM;	}	c->driver = &sensor_driver;	c->data = &data;	data.sensor = c;	camif_register_decoder(c);	return 0;}static int sensor_detach(struct i2c_client *client){	if (client) kfree(client);	camif_unregister_decoder(client);	return 0;}/* Purpose:    This fucntion only for SXGA Camera    */static int change_sensor_size(struct i2c_client *client, int size){	int i;	switch (size) {	default:		panic("unexpect value \n");	}}static intsensor_command(struct i2c_client *client, unsigned int cmd, void *arg){	switch (cmd) {	case SENSOR_INIT:		sensor_init(client);		printk(KERN_INFO "External Camera initialized\n");		break;	case USER_ADD:		MOD_INC_USE_COUNT;		break;	case USER_EXIT:		MOD_DEC_USE_COUNT;		break;	case SENSOR_VGA:		change_sensor_size(client, SENSOR_VGA);		break;	case SENSOR_SXGA:		change_sensor_size(client, SENSOR_SXGA);		break;/* Todo	case SENSOR_BRIGHTNESS:		change_sensor();		break;*/	default:		panic("Unexpect Sensor Command \n");		break;	}	return 0;}/* This data structure not used in upper layer I2C */static struct i2c_driver sensor_driver = {      name:"S5K53BEA",      id:I2C_ALGO_S3C,      flags:I2C_DF_NOTIFY,      command:sensor_command};static __init int camif_sensor_init(void){    printk("======== camif_sensor_init =========\r\n ");	chaeum_init();	sensor_attach();}static __init void camif_sensor_exit(void){	sensor_detach(c);	chaeum_deinit();}module_init(camif_sensor_init)module_exit(camif_sensor_exit)MODULE_AUTHOR("SW.LEE <hitchcar@samsung.com>");MODULE_DESCRIPTION("I2C GPIO Sensor Driver For Fimc2.0 MISC Driver");MODULE_LICENSE("GPL");/* * Local variables: * c-basic-offset: 8 * End: */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -