Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
9
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Switch to GitLab Next
Sign in / Register
Toggle navigation
Open sidebar
Pine64
linux
Commits
af88288d
Verified
Commit
af88288d
authored
Oct 15, 2020
by
Martijn Braam
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
WIP
parent
ac5514c6
Pipeline
#208466511
passed with stage
in 18 minutes and 7 seconds
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
55 additions
and
6 deletions
+55
-6
drivers/media/i2c/ov5640.c
drivers/media/i2c/ov5640.c
+55
-6
No files found.
drivers/media/i2c/ov5640.c
View file @
af88288d
...
...
@@ -695,6 +695,11 @@ static int ov5640_write_reg(struct ov5640_dev *sensor, u16 reg, u8 val)
return
0
;
}
static
int
ov5640_write_reg_bulk
(
struct
ov5640_dev
*
sensor
,
u16
start
,
u8
*
data
,
int
length
)
{
return
0
;
}
static
int
ov5640_read_reg
(
struct
ov5640_dev
*
sensor
,
u16
reg
,
u8
*
val
)
{
struct
i2c_client
*
client
=
sensor
->
i2c_client
;
...
...
@@ -1178,6 +1183,26 @@ static int ov5640_load_regs(struct ov5640_dev *sensor,
return
ov5640_set_timings
(
sensor
,
mode
);
}
/* read white balance */
static
int
ov5640_get_white_balance
(
struct
ov5640_dev
*
sensor
)
{
int
ret
;
u16
red_balance
,
blue_balance
;
ret
=
ov5640_read_reg16
(
sensor
,
OV5640_REG_AWB_R_GAIN
,
&
red_balance
);
if
(
ret
)
return
ret
;
ret
=
ov5640_read_reg16
(
sensor
,
OV5640_REG_AWB_B_GAIN
,
&
blue_balance
);
if
(
ret
)
return
ret
;
sensor
->
ctrls
.
red_balance
->
val
=
red_balance
;
sensor
->
ctrls
.
blue_balance
->
val
=
blue_balance
;
return
ret
;
}
static
int
ov5640_set_autoexposure
(
struct
ov5640_dev
*
sensor
,
bool
on
)
{
return
ov5640_mod_reg
(
sensor
,
OV5640_REG_AEC_PK_MANUAL
,
...
...
@@ -2022,21 +2047,38 @@ static int ov5640_copy_fw_to_device(struct ov5640_dev *sensor,
const
struct
firmware
*
fw
)
{
struct
i2c_client
*
client
=
sensor
->
i2c_client
;
const
u8
*
data
=
(
const
u8
*
)
fw
->
data
;
struct
i2c_msg
msg
;
u8
buf
[
64
];
u8
fw_status
;
unsigned
addr
;
int
i
;
int
ret
;
dev_info
(
&
client
->
dev
,
"firmware upload start
\n
"
);
// Putting MCU in reset state
ret
=
ov5640_write_reg
(
sensor
,
OV5640_REG_SYS_RESET00
,
0x20
);
if
(
ret
)
return
ret
;
// Write firmware
for
(
i
=
0
;
i
<
fw
->
size
/
sizeof
(
u8
);
i
++
)
ov5640_write_reg
(
sensor
,
OV5640_REG_FIRMWARE_BASE
+
i
,
data
[
i
]);
for
(
addr
=
0
;
addr
<
fw
->
size
;
addr
+=
sizeof
(
buf
)
-
2
)
{
memset
(
buf
,
0
,
sizeof
buf
);
buf
[
0
]
=
(
OV5640_REG_FIRMWARE_BASE
+
addr
)
>>
8
;
buf
[
1
]
=
(
OV5640_REG_FIRMWARE_BASE
+
addr
)
&
0xff
;
memcpy
(
buf
+
2
,
fw
->
data
+
addr
,
min_t
(
unsigned
,
fw
->
size
-
addr
,
sizeof
(
buf
)
-
2
));
msg
.
addr
=
client
->
addr
;
msg
.
flags
=
client
->
flags
;
msg
.
buf
=
buf
;
msg
.
len
=
sizeof
(
buf
);
ret
=
i2c_transfer
(
client
->
adapter
,
&
msg
,
1
);
if
(
ret
<
0
)
{
return
ret
;
}
}
// Reset MCU state
ov5640_write_reg
(
sensor
,
OV5640_REG_FW_CMD_MAIN
,
0x00
);
...
...
@@ -2862,6 +2904,11 @@ static int ov5640_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
return
val
;
sensor
->
ctrls
.
af_status
->
val
=
val
;
break
;
case
V4L2_CID_AUTO_WHITE_BALANCE
:
val
=
ov5640_get_white_balance
(
sensor
);
if
(
val
<
0
)
return
val
;
break
;
}
return
0
;
...
...
@@ -3020,8 +3067,10 @@ static int ov5640_init_controls(struct ov5640_dev *sensor)
ctrls
->
pixel_rate
->
flags
|=
V4L2_CTRL_FLAG_READ_ONLY
;
ctrls
->
gain
->
flags
|=
V4L2_CTRL_FLAG_VOLATILE
;
ctrls
->
exposure
->
flags
|=
V4L2_CTRL_FLAG_VOLATILE
;
ctrls
->
red_balance
->
flags
|=
V4L2_CTRL_FLAG_VOLATILE
;
ctrls
->
blue_balance
->
flags
|=
V4L2_CTRL_FLAG_VOLATILE
;
v4l2_ctrl_auto_cluster
(
3
,
&
ctrls
->
auto_wb
,
0
,
fals
e
);
v4l2_ctrl_auto_cluster
(
3
,
&
ctrls
->
auto_wb
,
0
,
tru
e
);
v4l2_ctrl_auto_cluster
(
2
,
&
ctrls
->
auto_gain
,
0
,
true
);
v4l2_ctrl_auto_cluster
(
2
,
&
ctrls
->
auto_exp
,
1
,
true
);
v4l2_ctrl_cluster
(
4
,
&
ctrls
->
focus_auto
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment