V4L/DVB (11542): gspca - m5602-mt9m111: Synthesize the hsync/vsync setup
Signed-off-by: Erik Andr?n <erik.andren@gmail.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
bce0d2d4ae
commit
e7ae60f73e
2 changed files with 51 additions and 14 deletions
|
@ -269,6 +269,10 @@ int mt9m111_start(struct sd *sd)
|
||||||
{
|
{
|
||||||
int i, err = 0;
|
int i, err = 0;
|
||||||
u8 data[2];
|
u8 data[2];
|
||||||
|
struct cam *cam = &sd->gspca_dev.cam;
|
||||||
|
|
||||||
|
int width = cam->cam_mode[sd->gspca_dev.curr_mode].width;
|
||||||
|
int height = cam->cam_mode[sd->gspca_dev.curr_mode].height;
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(start_mt9m111) && !err; i++) {
|
for (i = 0; i < ARRAY_SIZE(start_mt9m111) && !err; i++) {
|
||||||
if (start_mt9m111[i][0] == BRIDGE) {
|
if (start_mt9m111[i][0] == BRIDGE) {
|
||||||
|
@ -282,6 +286,53 @@ int mt9m111_start(struct sd *sd)
|
||||||
start_mt9m111[i][1], data, 2);
|
start_mt9m111[i][1], data, 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (err < 0)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
err = m5602_write_bridge(sd, M5602_XB_VSYNC_PARA, (height >> 8) & 0xff);
|
||||||
|
if (err < 0)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
err = m5602_write_bridge(sd, M5602_XB_VSYNC_PARA, (height & 0xff));
|
||||||
|
if (err < 0)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
for (i = 0; i < 2 && !err; i++)
|
||||||
|
err = m5602_write_bridge(sd, M5602_XB_VSYNC_PARA, 0);
|
||||||
|
if (err < 0)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
err = m5602_write_bridge(sd, M5602_XB_SIG_INI, 0);
|
||||||
|
if (err < 0)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
err = m5602_write_bridge(sd, M5602_XB_SIG_INI, 2);
|
||||||
|
if (err < 0)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
for (i = 0; i < 2 && !err; i++)
|
||||||
|
err = m5602_write_bridge(sd, M5602_XB_HSYNC_PARA, 0);
|
||||||
|
if (err < 0)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
err = m5602_write_bridge(sd, M5602_XB_HSYNC_PARA,
|
||||||
|
(width >> 8) & 0xff);
|
||||||
|
if (err < 0)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
err = m5602_write_bridge(sd, M5602_XB_HSYNC_PARA, width & 0xff);
|
||||||
|
if (err < 0)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
err = m5602_write_bridge(sd, M5602_XB_SIG_INI, 0);
|
||||||
|
if (err < 0)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
switch (width) {
|
||||||
|
case 640:
|
||||||
|
PDEBUG(D_V4L2, "Configuring camera for VGA mode");
|
||||||
|
break;
|
||||||
|
}
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -275,20 +275,6 @@ static const unsigned char start_mt9m111[][4] =
|
||||||
{BRIDGE, M5602_XB_VSYNC_PARA, 0x00, 0x00},
|
{BRIDGE, M5602_XB_VSYNC_PARA, 0x00, 0x00},
|
||||||
{BRIDGE, M5602_XB_VSYNC_PARA, 0x00, 0x00},
|
{BRIDGE, M5602_XB_VSYNC_PARA, 0x00, 0x00},
|
||||||
{BRIDGE, M5602_XB_VSYNC_PARA, 0x00, 0x00},
|
{BRIDGE, M5602_XB_VSYNC_PARA, 0x00, 0x00},
|
||||||
{BRIDGE, M5602_XB_VSYNC_PARA, 0x01, 0x00},
|
|
||||||
{BRIDGE, M5602_XB_VSYNC_PARA, 0xe0, 0x00}, /* 480 */
|
|
||||||
{BRIDGE, M5602_XB_VSYNC_PARA, 0x00, 0x00},
|
|
||||||
{BRIDGE, M5602_XB_VSYNC_PARA, 0x00, 0x00},
|
|
||||||
{BRIDGE, M5602_XB_SIG_INI, 0x00, 0x00},
|
|
||||||
{BRIDGE, M5602_XB_SIG_INI, 0x02, 0x00},
|
|
||||||
{BRIDGE, M5602_XB_HSYNC_PARA, 0x00, 0x00},
|
|
||||||
{BRIDGE, M5602_XB_HSYNC_PARA, 0x00, 0x00},
|
|
||||||
{BRIDGE, M5602_XB_HSYNC_PARA, 0x02, 0x00}, /* 639*/
|
|
||||||
{BRIDGE, M5602_XB_HSYNC_PARA, 0x7f, 0x00},
|
|
||||||
{BRIDGE, M5602_XB_SIG_INI, 0x00, 0x00},
|
|
||||||
{BRIDGE, M5602_XB_SEN_CLK_DIV, 0x00, 0x00},
|
|
||||||
{BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xb0, 0x00},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue