Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
media
usb
sn9c102
sn9c102_tas5110d.c
Go to the documentation of this file.
1
/***************************************************************************
2
* Plug-in for TAS5110D image sensor connected to the SN9C1xx PC Camera *
3
* Controllers *
4
* *
5
* Copyright (C) 2007 by Luca Risolia <
[email protected]
> *
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 <
[email protected]
>"
,
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
}
Generated on Thu Jan 10 2013 13:52:20 for Linux Kernel by
1.8.2