2006-01-11 02:06:59 +00:00
/***************************************************************************
* Plug - in for TAS5130D1B image sensor connected to the ET61X [ 12 ] 51 *
* PC Camera Controllers *
* *
2007-01-08 11:38:36 -03:00
* Copyright ( C ) 2006 - 2007 by Luca Risolia < luca . risolia @ studio . unibo . it > *
2006-01-11 02:06:59 +00:00
* *
* This program is free software ; you can redistribute it and / or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation ; either version 2 of the License , or *
* ( at your option ) any later version . *
* *
* This program is distributed in the hope that it will be useful , *
* but WITHOUT ANY WARRANTY ; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the *
* GNU General Public License for more details . *
* *
* You should have received a copy of the GNU General Public License *
* along with this program ; if not , write to the Free Software *
* Foundation , Inc . , 675 Mass Ave , Cambridge , MA 0213 9 , USA . *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# include "et61x251_sensor.h"
static int tas5130d1b_init ( struct et61x251_device * cam )
{
int err = 0 ;
err + = et61x251_write_reg ( cam , 0x14 , 0x01 ) ;
err + = et61x251_write_reg ( cam , 0x1b , 0x02 ) ;
err + = et61x251_write_reg ( cam , 0x02 , 0x12 ) ;
err + = et61x251_write_reg ( cam , 0x0e , 0x60 ) ;
err + = et61x251_write_reg ( cam , 0x80 , 0x61 ) ;
err + = et61x251_write_reg ( cam , 0xf0 , 0x62 ) ;
err + = et61x251_write_reg ( cam , 0x03 , 0x63 ) ;
err + = et61x251_write_reg ( cam , 0x14 , 0x64 ) ;
err + = et61x251_write_reg ( cam , 0xf4 , 0x65 ) ;
err + = et61x251_write_reg ( cam , 0x01 , 0x66 ) ;
err + = et61x251_write_reg ( cam , 0x05 , 0x67 ) ;
err + = et61x251_write_reg ( cam , 0x8f , 0x68 ) ;
err + = et61x251_write_reg ( cam , 0x0f , 0x8d ) ;
err + = et61x251_write_reg ( cam , 0x08 , 0x8e ) ;
return err ;
}
static int tas5130d1b_set_ctrl ( struct et61x251_device * cam ,
2006-03-25 09:19:53 -03:00
const struct v4l2_control * ctrl )
2006-01-11 02:06:59 +00:00
{
int err = 0 ;
switch ( ctrl - > id ) {
case V4L2_CID_GAIN :
err + = et61x251_i2c_raw_write ( cam , 2 , 0x20 ,
2006-03-25 09:19:53 -03:00
0xf6 - ctrl - > value , 0 , 0 , 0 ,
0 , 0 , 0 , 0 ) ;
2006-01-11 02:06:59 +00:00
break ;
case V4L2_CID_EXPOSURE :
err + = et61x251_i2c_raw_write ( cam , 2 , 0x40 ,
2006-03-25 09:19:53 -03:00
0x47 - ctrl - > value , 0 , 0 , 0 ,
0 , 0 , 0 , 0 ) ;
2006-01-11 02:06:59 +00:00
break ;
default :
return - EINVAL ;
}
return err ? - EIO : 0 ;
}
2007-06-13 14:52:01 -03:00
static const struct et61x251_sensor tas5130d1b = {
2006-01-11 02:06:59 +00:00
. name = " TAS5130D1B " ,
. interface = ET61X251_I2C_3WIRES ,
. rsta = ET61X251_I2C_RSTA_STOP ,
. active_pixel = {
. left = 106 ,
. top = 13 ,
} ,
. init = & tas5130d1b_init ,
. qctrl = {
{
. id = V4L2_CID_GAIN ,
. type = V4L2_CTRL_TYPE_INTEGER ,
. name = " global gain " ,
. minimum = 0x00 ,
. maximum = 0xf6 ,
. step = 0x02 ,
. default_value = 0x0d ,
. flags = 0 ,
} ,
{
. id = V4L2_CID_EXPOSURE ,
. type = V4L2_CTRL_TYPE_INTEGER ,
. name = " exposure " ,
. minimum = 0x00 ,
. maximum = 0x47 ,
. step = 0x01 ,
. default_value = 0x23 ,
. flags = 0 ,
} ,
} ,
. set_ctrl = & tas5130d1b_set_ctrl ,
. cropcap = {
. bounds = {
. left = 0 ,
. top = 0 ,
. width = 640 ,
. height = 480 ,
} ,
. defrect = {
. left = 0 ,
. top = 0 ,
. width = 640 ,
. height = 480 ,
} ,
} ,
. pix_format = {
. width = 640 ,
. height = 480 ,
. pixelformat = V4L2_PIX_FMT_SBGGR8 ,
. priv = 8 ,
} ,
} ;
int et61x251_probe_tas5130d1b ( struct et61x251_device * cam )
{
2006-02-25 06:54:18 +00:00
const struct usb_device_id tas5130d1b_id_table [ ] = {
{ USB_DEVICE ( 0x102c , 0x6251 ) , } ,
{ }
} ;
2006-01-11 02:06:59 +00:00
/* Sensor detection is based on USB pid/vid */
2006-02-25 06:54:18 +00:00
if ( ! et61x251_match_id ( cam , tas5130d1b_id_table ) )
2006-01-11 02:06:59 +00:00
return - ENODEV ;
2006-02-25 06:54:18 +00:00
et61x251_attach_sensor ( cam , & tas5130d1b ) ;
2006-01-11 02:06:59 +00:00
return 0 ;
}