17ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia/*************************************************************************** 27ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia * API for image sensors connected to ET61X[12]51 PC Camera Controllers * 37ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia * * 42656312724d97ebc2e267e0a9740d51ad7aa9a04Luca Risolia * Copyright (C) 2006-2007 by Luca Risolia <luca.risolia@studio.unibo.it> * 57ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia * * 67ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia * This program is free software; you can redistribute it and/or modify * 77ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia * it under the terms of the GNU General Public License as published by * 87ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia * the Free Software Foundation; either version 2 of the License, or * 97ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia * (at your option) any later version. * 107ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia * * 117ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia * This program is distributed in the hope that it will be useful, * 127ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia * but WITHOUT ANY WARRANTY; without even the implied warranty of * 137ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 147ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia * GNU General Public License for more details. * 157ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia * * 167ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia * You should have received a copy of the GNU General Public License * 177ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia * along with this program; if not, write to the Free Software * 187ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * 197ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia ***************************************************************************/ 207ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia 217ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia#ifndef _ET61X251_SENSOR_H_ 227ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia#define _ET61X251_SENSOR_H_ 237ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia 247ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia#include <linux/usb.h> 253b2ae0be9e246974db65a5bf4ccd2de328f3dedeLuca Risolia#include <linux/videodev2.h> 267ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia#include <linux/device.h> 277ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia#include <linux/stddef.h> 287ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia#include <linux/errno.h> 297ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia#include <asm/types.h> 307ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia 317ce08c93e388922e25a96a7d9895784182e4c72cLuca Risoliastruct et61x251_device; 327ce08c93e388922e25a96a7d9895784182e4c72cLuca Risoliastruct et61x251_sensor; 337ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia 347ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia/*****************************************************************************/ 357ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia 367ce08c93e388922e25a96a7d9895784182e4c72cLuca Risoliaextern int et61x251_probe_tas5130d1b(struct et61x251_device* cam); 377ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia 387ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia#define ET61X251_SENSOR_TABLE \ 397ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia/* Weak detections must go at the end of the list */ \ 407ce08c93e388922e25a96a7d9895784182e4c72cLuca Risoliastatic int (*et61x251_sensor_table[])(struct et61x251_device*) = { \ 417ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia &et61x251_probe_tas5130d1b, \ 427ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia NULL, \ 437ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia}; 447ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia 45ccad7789d5e557644d1c866b018394872af0ec5bLuca Risoliaextern struct et61x251_device* 46ccad7789d5e557644d1c866b018394872af0ec5bLuca Risoliaet61x251_match_id(struct et61x251_device* cam, const struct usb_device_id *id); 47ccad7789d5e557644d1c866b018394872af0ec5bLuca Risolia 487ce08c93e388922e25a96a7d9895784182e4c72cLuca Risoliaextern void 497ce08c93e388922e25a96a7d9895784182e4c72cLuca Risoliaet61x251_attach_sensor(struct et61x251_device* cam, 503b2ae0be9e246974db65a5bf4ccd2de328f3dedeLuca Risolia const struct et61x251_sensor* sensor); 517ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia 527ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia/*****************************************************************************/ 537ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia 547ce08c93e388922e25a96a7d9895784182e4c72cLuca Risoliaextern int et61x251_write_reg(struct et61x251_device*, u8 value, u16 index); 557ce08c93e388922e25a96a7d9895784182e4c72cLuca Risoliaextern int et61x251_i2c_raw_write(struct et61x251_device*, u8 n, u8 data1, 56d56410e0a594150c5ca06319da7bc8901c4d455eMauro Carvalho Chehab u8 data2, u8 data3, u8 data4, u8 data5, 57d56410e0a594150c5ca06319da7bc8901c4d455eMauro Carvalho Chehab u8 data6, u8 data7, u8 data8, u8 address); 587ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia 597ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia/*****************************************************************************/ 607ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia 617ce08c93e388922e25a96a7d9895784182e4c72cLuca Risoliaenum et61x251_i2c_sysfs_ops { 627ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia ET61X251_I2C_READ = 0x01, 637ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia ET61X251_I2C_WRITE = 0x02, 647ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia}; 657ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia 667ce08c93e388922e25a96a7d9895784182e4c72cLuca Risoliaenum et61x251_i2c_interface { 677ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia ET61X251_I2C_2WIRES, 687ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia ET61X251_I2C_3WIRES, 697ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia}; 707ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia 717ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia/* Repeat start condition when RSTA is high */ 727ce08c93e388922e25a96a7d9895784182e4c72cLuca Risoliaenum et61x251_i2c_rsta { 737ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia ET61X251_I2C_RSTA_STOP = 0x00, /* stop then start */ 747ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia ET61X251_I2C_RSTA_REPEAT = 0x01, /* repeat start */ 757ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia}; 767ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia 772656312724d97ebc2e267e0a9740d51ad7aa9a04Luca Risolia#define ET61X251_MAX_CTRLS (V4L2_CID_LASTP1-V4L2_CID_BASE+10) 787ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia 797ce08c93e388922e25a96a7d9895784182e4c72cLuca Risoliastruct et61x251_sensor { 807ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia char name[32]; 817ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia 827ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia enum et61x251_i2c_sysfs_ops sysfs_ops; 837ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia 847ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia enum et61x251_i2c_interface interface; 857ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia u8 i2c_slave_id; 867ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia enum et61x251_i2c_rsta rsta; 877ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia struct v4l2_rect active_pixel; /* left and top define FVSX and FVSY */ 887ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia 897ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia struct v4l2_queryctrl qctrl[ET61X251_MAX_CTRLS]; 907ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia struct v4l2_cropcap cropcap; 917ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia struct v4l2_pix_format pix_format; 927ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia 937ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia int (*init)(struct et61x251_device* cam); 947ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia int (*get_ctrl)(struct et61x251_device* cam, 95d56410e0a594150c5ca06319da7bc8901c4d455eMauro Carvalho Chehab struct v4l2_control* ctrl); 967ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia int (*set_ctrl)(struct et61x251_device* cam, 97d56410e0a594150c5ca06319da7bc8901c4d455eMauro Carvalho Chehab const struct v4l2_control* ctrl); 987ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia int (*set_crop)(struct et61x251_device* cam, 99d56410e0a594150c5ca06319da7bc8901c4d455eMauro Carvalho Chehab const struct v4l2_rect* rect); 1007ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia int (*set_pix_format)(struct et61x251_device* cam, 101d56410e0a594150c5ca06319da7bc8901c4d455eMauro Carvalho Chehab const struct v4l2_pix_format* pix); 1027ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia 1037ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia /* Private */ 1047ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia struct v4l2_queryctrl _qctrl[ET61X251_MAX_CTRLS]; 1057ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia struct v4l2_rect _rect; 1067ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia}; 1077ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia 1087ce08c93e388922e25a96a7d9895784182e4c72cLuca Risolia#endif /* _ET61X251_SENSOR_H_ */ 109