Version:  2.0.40 2.2.26 2.4.37 2.6.39 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13 3.14 3.15

Linux/drivers/staging/media/sn9c102/sn9c102_tas5110d.c

  1 /***************************************************************************
  2  * Plug-in for TAS5110D image sensor connected to the SN9C1xx PC Camera    *
  3  * Controllers                                                             *
  4  *                                                                         *
  5  * Copyright (C) 2007 by Luca Risolia <luca.risolia@studio.unibo.it>       *
  6  *                                                                         *
  7  * This program is free software; you can redistribute it and/or modify    *
  8  * it under the terms of the GNU General Public License as published by    *
  9  * the Free Software Foundation; either version 2 of the License, or       *
 10  * (at your option) any later version.                                     *
 11  *                                                                         *
 12  * This program is distributed in the hope that it will be useful,         *
 13  * but WITHOUT ANY WARRANTY; without even the implied warranty of          *
 14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           *
 15  * GNU General Public License for more details.                            *
 16  *                                                                         *
 17  * You should have received a copy of the GNU General Public License       *
 18  * along with this program; if not, write to the Free Software             *
 19  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.               *
 20  ***************************************************************************/
 21 
 22 #include "sn9c102_sensor.h"
 23 #include "sn9c102_devtable.h"
 24 
 25 
 26 static int tas5110d_init(struct sn9c102_device* cam)
 27 {
 28         int err;
 29 
 30         err = sn9c102_write_const_regs(cam, {0x01, 0x01}, {0x04, 0x01},
 31                                        {0x0a, 0x14}, {0x60, 0x17},
 32                                        {0x06, 0x18}, {0xfb, 0x19});
 33 
 34         err += sn9c102_i2c_write(cam, 0x9a, 0xca);
 35 
 36         return err;
 37 }
 38 
 39 
 40 static int tas5110d_set_crop(struct sn9c102_device* cam,
 41                              const struct v4l2_rect* rect)
 42 {
 43         struct sn9c102_sensor* s = sn9c102_get_sensor(cam);
 44         int err = 0;
 45         u8 h_start = (u8)(rect->left - s->cropcap.bounds.left) + 69,
 46            v_start = (u8)(rect->top - s->cropcap.bounds.top) + 9;
 47 
 48         err += sn9c102_write_reg(cam, h_start, 0x12);
 49         err += sn9c102_write_reg(cam, v_start, 0x13);
 50 
 51         err += sn9c102_write_reg(cam, 0x14, 0x1a);
 52         err += sn9c102_write_reg(cam, 0x0a, 0x1b);
 53 
 54         return err;
 55 }
 56 
 57 
 58 static int tas5110d_set_pix_format(struct sn9c102_device* cam,
 59                                      const struct v4l2_pix_format* pix)
 60 {
 61         int err = 0;
 62 
 63         if (pix->pixelformat == V4L2_PIX_FMT_SN9C10X)
 64                 err += sn9c102_write_reg(cam, 0x3b, 0x19);
 65         else
 66                 err += sn9c102_write_reg(cam, 0xfb, 0x19);
 67 
 68         return err;
 69 }
 70 
 71 
 72 static const struct sn9c102_sensor tas5110d = {
 73         .name = "TAS5110D",
 74         .maintainer = "Luca Risolia <luca.risolia@studio.unibo.it>",
 75         .supported_bridge = BRIDGE_SN9C101 | BRIDGE_SN9C102,
 76         .sysfs_ops = SN9C102_I2C_WRITE,
 77         .frequency = SN9C102_I2C_100KHZ,
 78         .interface = SN9C102_I2C_2WIRES,
 79         .i2c_slave_id = 0x61,
 80         .init = &tas5110d_init,
 81         .cropcap = {
 82                 .bounds = {
 83                         .left = 0,
 84                         .top = 0,
 85                         .width = 352,
 86                         .height = 288,
 87                 },
 88                 .defrect = {
 89                         .left = 0,
 90                         .top = 0,
 91                         .width = 352,
 92                         .height = 288,
 93                 },
 94         },
 95         .set_crop = &tas5110d_set_crop,
 96         .pix_format = {
 97                 .width = 352,
 98                 .height = 288,
 99                 .pixelformat = V4L2_PIX_FMT_SBGGR8,
100                 .priv = 8,
101         },
102         .set_pix_format = &tas5110d_set_pix_format
103 };
104 
105 
106 int sn9c102_probe_tas5110d(struct sn9c102_device* cam)
107 {
108         const struct usb_device_id tas5110d_id_table[] = {
109                 { USB_DEVICE(0x0c45, 0x6007), },
110                 { }
111         };
112 
113         if (!sn9c102_match_id(cam, tas5110d_id_table))
114                 return -ENODEV;
115 
116         sn9c102_attach_sensor(cam, &tas5110d);
117 
118         return 0;
119 }
120 

This page was automatically generated by LXR 0.3.1 (source).  •  Linux is a registered trademark of Linus Torvalds  •  Contact us