|
@@ -2345,15 +2345,55 @@ static int adv7842_querystd(struct v4l2_subdev *sd, v4l2_std_id *std)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static void adv7842_s_sdp_io(struct v4l2_subdev *sd, struct adv7842_sdp_io_sync_adjustment *s)
|
|
|
+{
|
|
|
+ if (s && s->adjust) {
|
|
|
+ sdp_io_write(sd, 0x94, (s->hs_beg >> 8) & 0xf);
|
|
|
+ sdp_io_write(sd, 0x95, s->hs_beg & 0xff);
|
|
|
+ sdp_io_write(sd, 0x96, (s->hs_width >> 8) & 0xf);
|
|
|
+ sdp_io_write(sd, 0x97, s->hs_width & 0xff);
|
|
|
+ sdp_io_write(sd, 0x98, (s->de_beg >> 8) & 0xf);
|
|
|
+ sdp_io_write(sd, 0x99, s->de_beg & 0xff);
|
|
|
+ sdp_io_write(sd, 0x9a, (s->de_end >> 8) & 0xf);
|
|
|
+ sdp_io_write(sd, 0x9b, s->de_end & 0xff);
|
|
|
+ sdp_io_write(sd, 0xac, s->de_v_beg_o);
|
|
|
+ sdp_io_write(sd, 0xad, s->de_v_beg_e);
|
|
|
+ sdp_io_write(sd, 0xae, s->de_v_end_o);
|
|
|
+ sdp_io_write(sd, 0xaf, s->de_v_end_e);
|
|
|
+ } else {
|
|
|
+ /* set to default */
|
|
|
+ sdp_io_write(sd, 0x94, 0x00);
|
|
|
+ sdp_io_write(sd, 0x95, 0x00);
|
|
|
+ sdp_io_write(sd, 0x96, 0x00);
|
|
|
+ sdp_io_write(sd, 0x97, 0x20);
|
|
|
+ sdp_io_write(sd, 0x98, 0x00);
|
|
|
+ sdp_io_write(sd, 0x99, 0x00);
|
|
|
+ sdp_io_write(sd, 0x9a, 0x00);
|
|
|
+ sdp_io_write(sd, 0x9b, 0x00);
|
|
|
+ sdp_io_write(sd, 0xac, 0x04);
|
|
|
+ sdp_io_write(sd, 0xad, 0x04);
|
|
|
+ sdp_io_write(sd, 0xae, 0x04);
|
|
|
+ sdp_io_write(sd, 0xaf, 0x04);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
static int adv7842_s_std(struct v4l2_subdev *sd, v4l2_std_id norm)
|
|
|
{
|
|
|
struct adv7842_state *state = to_state(sd);
|
|
|
+ struct adv7842_platform_data *pdata = &state->pdata;
|
|
|
|
|
|
v4l2_dbg(1, debug, sd, "%s:\n", __func__);
|
|
|
|
|
|
if (state->mode != ADV7842_MODE_SDP)
|
|
|
return -ENODATA;
|
|
|
|
|
|
+ if (norm & V4L2_STD_625_50)
|
|
|
+ adv7842_s_sdp_io(sd, &pdata->sdp_io_sync_625);
|
|
|
+ else if (norm & V4L2_STD_525_60)
|
|
|
+ adv7842_s_sdp_io(sd, &pdata->sdp_io_sync_525);
|
|
|
+ else
|
|
|
+ adv7842_s_sdp_io(sd, NULL);
|
|
|
+
|
|
|
if (norm & V4L2_STD_ALL) {
|
|
|
state->norm = norm;
|
|
|
return 0;
|
|
@@ -2423,22 +2463,6 @@ static int adv7842_core_init(struct v4l2_subdev *sd)
|
|
|
|
|
|
sdp_csc_coeff(sd, &pdata->sdp_csc_coeff);
|
|
|
|
|
|
- if (pdata->sdp_io_sync.adjust) {
|
|
|
- const struct adv7842_sdp_io_sync_adjustment *s = &pdata->sdp_io_sync;
|
|
|
- sdp_io_write(sd, 0x94, (s->hs_beg>>8) & 0xf);
|
|
|
- sdp_io_write(sd, 0x95, s->hs_beg & 0xff);
|
|
|
- sdp_io_write(sd, 0x96, (s->hs_width>>8) & 0xf);
|
|
|
- sdp_io_write(sd, 0x97, s->hs_width & 0xff);
|
|
|
- sdp_io_write(sd, 0x98, (s->de_beg>>8) & 0xf);
|
|
|
- sdp_io_write(sd, 0x99, s->de_beg & 0xff);
|
|
|
- sdp_io_write(sd, 0x9a, (s->de_end>>8) & 0xf);
|
|
|
- sdp_io_write(sd, 0x9b, s->de_end & 0xff);
|
|
|
- sdp_io_write(sd, 0xac, s->de_v_beg_o);
|
|
|
- sdp_io_write(sd, 0xad, s->de_v_beg_e);
|
|
|
- sdp_io_write(sd, 0xae, s->de_v_end_o);
|
|
|
- sdp_io_write(sd, 0xaf, s->de_v_end_e);
|
|
|
- }
|
|
|
-
|
|
|
/* todo, improve settings for sdram */
|
|
|
if (pdata->sd_ram_size >= 128) {
|
|
|
sdp_write(sd, 0x12, 0x0d); /* Frame TBC,3D comb enabled */
|