brintos

brintos / linux-shallow public Read only

0
0
Text · 2.3 KiB · 16dd3e8 Raw
88 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 *4 *  Copyright (C) 2005 Mike Isely <isely@pobox.com>5 *  Copyright (C) 2004 Aurelien Alleaume <slts@free.fr>6 */7 8/*9 10   This source file is specifically designed to interface with the11   saa711x support that is available in the v4l available starting12   with linux 2.6.15.13 14*/15 16#include "pvrusb2-video-v4l.h"17 18 19 20#include "pvrusb2-hdw-internal.h"21#include "pvrusb2-debug.h"22#include <linux/videodev2.h>23#include <media/v4l2-common.h>24#include <media/i2c/saa7115.h>25#include <linux/errno.h>26 27struct routing_scheme {28	const int *def;29	unsigned int cnt;30};31 32 33static const int routing_scheme0[] = {34	[PVR2_CVAL_INPUT_TV] = SAA7115_COMPOSITE4,35	/* In radio mode, we mute the video, but point at one36	   spot just to stay consistent */37	[PVR2_CVAL_INPUT_RADIO] = SAA7115_COMPOSITE5,38	[PVR2_CVAL_INPUT_COMPOSITE] = SAA7115_COMPOSITE5,39	[PVR2_CVAL_INPUT_SVIDEO] =  SAA7115_SVIDEO2,40};41 42static const struct routing_scheme routing_def0 = {43	.def = routing_scheme0,44	.cnt = ARRAY_SIZE(routing_scheme0),45};46 47static const int routing_scheme1[] = {48	[PVR2_CVAL_INPUT_TV] = SAA7115_COMPOSITE4,49	[PVR2_CVAL_INPUT_RADIO] = SAA7115_COMPOSITE5,50	[PVR2_CVAL_INPUT_COMPOSITE] = SAA7115_COMPOSITE3,51	[PVR2_CVAL_INPUT_SVIDEO] =  SAA7115_SVIDEO2, /* or SVIDEO0, it seems */52};53 54static const struct routing_scheme routing_def1 = {55	.def = routing_scheme1,56	.cnt = ARRAY_SIZE(routing_scheme1),57};58 59static const struct routing_scheme *routing_schemes[] = {60	[PVR2_ROUTING_SCHEME_HAUPPAUGE] = &routing_def0,61	[PVR2_ROUTING_SCHEME_ONAIR] = &routing_def1,62};63 64void pvr2_saa7115_subdev_update(struct pvr2_hdw *hdw, struct v4l2_subdev *sd)65{66	if (hdw->input_dirty || hdw->force_dirty) {67		const struct routing_scheme *sp;68		unsigned int sid = hdw->hdw_desc->signal_routing_scheme;69		u32 input;70 71		pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_input(%d)",72			   hdw->input_val);73 74		sp = (sid < ARRAY_SIZE(routing_schemes)) ?75			routing_schemes[sid] : NULL;76		if ((sp == NULL) ||77		    (hdw->input_val < 0) ||78		    (hdw->input_val >= sp->cnt)) {79			pvr2_trace(PVR2_TRACE_ERROR_LEGS,80				   "*** WARNING *** subdev v4l2 set_input: Invalid routing scheme (%u) and/or input (%d)",81				   sid, hdw->input_val);82			return;83		}84		input = sp->def[hdw->input_val];85		sd->ops->video->s_routing(sd, input, 0, 0);86	}87}88