?? 53bea_sensor.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 + -