#include <linux/delay.h>
#include <linux/video_decoder.h>
#include <media/v4l2-common.h>
-#include <media/tvp5150.h>
#include "tvp5150_reg.h"
struct i2c_client *client;
v4l2_std_id norm; /* Current set standard */
- struct v4l2_routing route;
+ int input;
int enable;
int bright;
int contrast;
/****************************************************************************
Basic functions
****************************************************************************/
+enum tvp5150_input {
+ TVP5150_ANALOG_CH0 = 0,
+ TVP5150_SVIDEO = 1,
+ TVP5150_ANALOG_CH1 = 2,
+ TVP5150_BLACK_SCREEN = 8
+};
-static inline void tvp5150_selmux(struct i2c_client *c)
+static inline void tvp5150_selmux(struct i2c_client *c,
+ enum tvp5150_input input)
{
int opmode=0;
+
struct tvp5150 *decoder = i2c_get_clientdata(c);
- int input = 0;
- if ((decoder->route.output & TVP5150_BLACK_SCREEN) || !decoder->enable)
- input = 8;
+ if (!decoder->enable)
+ input |= TVP5150_BLACK_SCREEN;
switch (input) {
- case TVP5150_COMPOSITE1:
- input |= 2;
- /* fall through */
- case TVP5150_COMPOSITE0:
+ case TVP5150_ANALOG_CH0:
+ case TVP5150_ANALOG_CH1:
opmode=0x30; /* TV Mode */
break;
- case TVP5150_SVIDEO:
default:
- input |= 1;
opmode=0; /* Auto Mode */
break;
}
tvp5150_vdp_init(c, vbi_ram_default);
/* Selects decoder input */
- tvp5150_selmux(c);
+ tvp5150_selmux(c, decoder->input);
/* Initializes TVP5150 to stream enabled values */
tvp5150_write_inittab(c, tvp5150_init_enable);
case VIDIOC_INT_RESET:
tvp5150_reset(c);
break;
- case VIDIOC_INT_G_VIDEO_ROUTING:
- {
- struct v4l2_routing *route = arg;
-
- *route = decoder->route;
- break;
- }
- case VIDIOC_INT_S_VIDEO_ROUTING:
- {
- struct v4l2_routing *route = arg;
-
- decoder->route = *route;
- tvp5150_selmux(c);
- break;
- }
case VIDIOC_S_STD:
if (decoder->norm == *(v4l2_std_id *)arg)
break;
rv = i2c_attach_client(c);
core->norm = V4L2_STD_ALL; /* Default is autodetect */
- core->route.input = TVP5150_COMPOSITE1;
+ core->input = 2;
core->enable = 1;
core->bright = 32768;
core->contrast = 32768;