Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 113920
b: refs/heads/master
c: 6bd6dff
h: refs/heads/master
v: v3
  • Loading branch information
Hans Verkuil authored and Mauro Carvalho Chehab committed Oct 12, 2008
1 parent 68c3264 commit cba2be6
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 16 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 2796073a3d9cc4f610f1e68b3f62c197d86577ab
refs/heads/master: 6bd6dff6318397b1127dd256b65dde007306b8ea
34 changes: 29 additions & 5 deletions trunk/drivers/media/video/saa7115.c
Original file line number Diff line number Diff line change
Expand Up @@ -1309,10 +1309,13 @@ static int saa7115_command(struct i2c_client *client, unsigned int cmd, void *ar
case VIDIOC_INT_S_VIDEO_ROUTING:
{
struct v4l2_routing *route = arg;
u32 input = route->input;
u8 mask = (state->ident == V4L2_IDENT_SAA7111) ? 0xf8 : 0xf0;

v4l_dbg(1, debug, client, "decoder set input %d output %d\n", route->input, route->output);
/* saa7113 does not have these inputs */
if (state->ident == V4L2_IDENT_SAA7113 &&
/* saa7111/3 does not have these inputs */
if ((state->ident == V4L2_IDENT_SAA7113 ||
state->ident == V4L2_IDENT_SAA7111) &&
(route->input == SAA7115_COMPOSITE4 ||
route->input == SAA7115_COMPOSITE5)) {
return -EINVAL;
Expand All @@ -1327,10 +1330,23 @@ static int saa7115_command(struct i2c_client *client, unsigned int cmd, void *ar
(route->input >= SAA7115_SVIDEO0) ? "S-Video" : "Composite", (route->output == SAA7115_IPORT_ON) ? "iport on" : "iport off");
state->input = route->input;

/* saa7111 has slightly different input numbering */
if (state->ident == V4L2_IDENT_SAA7111) {
if (input >= SAA7115_COMPOSITE4)
input -= 2;
/* saa7111 specific */
saa711x_write(client, R_10_CHROMA_CNTL_2,
(saa711x_read(client, R_10_CHROMA_CNTL_2) & 0x3f) |
((route->output & 0xc0) ^ 0x40));
saa711x_write(client, R_13_RT_X_PORT_OUT_CNTL,
(saa711x_read(client, R_13_RT_X_PORT_OUT_CNTL) & 0xf0) |
((route->output & 2) ? 0x0a : 0));
}

/* select mode */
saa711x_write(client, R_02_INPUT_CNTL_1,
(saa711x_read(client, R_02_INPUT_CNTL_1) & 0xf0) |
state->input);
(saa711x_read(client, R_02_INPUT_CNTL_1) & mask) |
input);

/* bypass chrominance trap for S-Video modes */
saa711x_write(client, R_09_LUMA_CNTL,
Expand Down Expand Up @@ -1384,6 +1400,13 @@ static int saa7115_command(struct i2c_client *client, unsigned int cmd, void *ar
saa711x_writeregs(client, saa7115_cfg_reset_scaler);
break;

case VIDIOC_INT_S_GPIO:
if (state->ident != V4L2_IDENT_SAA7111)
return -EINVAL;
saa711x_write(client, 0x11, (saa711x_read(client, 0x11) & 0x7f) |
(*(u32 *)arg ? 0x80 : 0));
break;

case VIDIOC_INT_G_VBI_DATA:
{
struct v4l2_sliced_vbi_data *data = arg;
Expand Down Expand Up @@ -1539,7 +1562,8 @@ static int saa7115_probe(struct i2c_client *client,
state->crystal_freq = SAA7115_FREQ_32_11_MHZ;
saa711x_writeregs(client, saa7115_init_auto_input);
}
saa711x_writeregs(client, saa7115_init_misc);
if (state->ident != V4L2_IDENT_SAA7111)
saa711x_writeregs(client, saa7115_init_misc);
saa711x_set_v4lstd(client, V4L2_STD_NTSC);

v4l_dbg(1, debug, client, "status: (1E) 0x%02x, (1F) 0x%02x\n",
Expand Down
19 changes: 13 additions & 6 deletions trunk/include/media/saa7115.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
saa7115.h - definition for saa7113/4/5 inputs and frequency flags
saa7115.h - definition for saa7111/3/4/5 inputs and frequency flags
Copyright (C) 2006 Hans Verkuil (hverkuil@xs4all.nl)
Expand All @@ -21,13 +21,13 @@
#ifndef _SAA7115_H_
#define _SAA7115_H_

/* SAA7113/4/5 HW inputs */
/* SAA7111/3/4/5 HW inputs */
#define SAA7115_COMPOSITE0 0
#define SAA7115_COMPOSITE1 1
#define SAA7115_COMPOSITE2 2
#define SAA7115_COMPOSITE3 3
#define SAA7115_COMPOSITE4 4 /* not available for the saa7113 */
#define SAA7115_COMPOSITE5 5 /* not available for the saa7113 */
#define SAA7115_COMPOSITE4 4 /* not available for the saa7111/3 */
#define SAA7115_COMPOSITE5 5 /* not available for the saa7111/3 */
#define SAA7115_SVIDEO0 6
#define SAA7115_SVIDEO1 7
#define SAA7115_SVIDEO2 8
Expand All @@ -42,8 +42,15 @@
#define SAA7115_FREQ_FL_CGCDIV (1 << 1) /* SA 3A[6], CGCDIV, SAA7115 only */
#define SAA7115_FREQ_FL_APLL (1 << 2) /* SA 3A[3], APLL, SAA7114/5 only */

#define SAA7115_IPORT_ON 1
#define SAA7115_IPORT_OFF 0
#define SAA7115_IPORT_ON 1
#define SAA7115_IPORT_OFF 0

/* SAA7111 specific output flags */
#define SAA7111_VBI_BYPASS 2
#define SAA7111_FMT_YUV422 0x00
#define SAA7111_FMT_RGB 0x40
#define SAA7111_FMT_CCIR 0x80
#define SAA7111_FMT_YUV411 0xc0

#endif

12 changes: 8 additions & 4 deletions trunk/include/media/v4l2-common.h
Original file line number Diff line number Diff line change
Expand Up @@ -225,18 +225,22 @@ struct v4l2_crystal_freq {
An extra flags field allows device specific configuration regarding
clock frequency dividers, etc. If not used, then set flags to 0.
If the frequency is not supported, then -EINVAL is returned. */
#define VIDIOC_INT_S_CRYSTAL_FREQ _IOW ('d', 113, struct v4l2_crystal_freq)
#define VIDIOC_INT_S_CRYSTAL_FREQ _IOW('d', 113, struct v4l2_crystal_freq)

/* Initialize the sensor registors to some sort of reasonable
default values. */
#define VIDIOC_INT_INIT _IOW ('d', 114, u32)
#define VIDIOC_INT_INIT _IOW('d', 114, u32)

/* Set v4l2_std_id for video OUTPUT devices. This is ignored by
video input devices. */
#define VIDIOC_INT_S_STD_OUTPUT _IOW ('d', 115, v4l2_std_id)
#define VIDIOC_INT_S_STD_OUTPUT _IOW('d', 115, v4l2_std_id)

/* Get v4l2_std_id for video OUTPUT devices. This is ignored by
video input devices. */
#define VIDIOC_INT_G_STD_OUTPUT _IOW ('d', 116, v4l2_std_id)
#define VIDIOC_INT_G_STD_OUTPUT _IOW('d', 116, v4l2_std_id)

/* Set GPIO pins. Very simple right now, might need to be extended with
a v4l2_gpio struct if a direction is also needed. */
#define VIDIOC_INT_S_GPIO _IOW('d', 117, u32)

#endif /* V4L2_COMMON_H_ */

0 comments on commit cba2be6

Please sign in to comment.