Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 /*
  2     Audio/video-routing-related ivtv functions.
  3     Copyright (C) 2003-2004  Kevin Thayer <nufan_wfk at yahoo.com>
  4     Copyright (C) 2005-2007  Hans Verkuil <hverkuil@xs4all.nl>
  5 
  6     This program is free software; you can redistribute it and/or modify
  7     it under the terms of the GNU General Public License as published by
  8     the Free Software Foundation; either version 2 of the License, or
  9     (at your option) any later version.
 10 
 11     This program is distributed in the hope that it will be useful,
 12     but WITHOUT ANY WARRANTY; without even the implied warranty of
 13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 14     GNU General Public License for more details.
 15 
 16     You should have received a copy of the GNU General Public License
 17     along with this program; if not, write to the Free Software
 18     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 19  */
 20 
 21 #include "ivtv-driver.h"
 22 #include "ivtv-i2c.h"
 23 #include "ivtv-cards.h"
 24 #include "ivtv-gpio.h"
 25 #include "ivtv-routing.h"
 26 
 27 #include <media/msp3400.h>
 28 #include <media/m52790.h>
 29 #include <media/upd64031a.h>
 30 #include <media/upd64083.h>
 31 
 32 /* Selects the audio input and output according to the current
 33    settings. */
 34 void ivtv_audio_set_io(struct ivtv *itv)
 35 {
 36         const struct ivtv_card_audio_input *in;
 37         struct v4l2_routing route;
 38 
 39         /* Determine which input to use */
 40         if (test_bit(IVTV_F_I_RADIO_USER, &itv->i_flags))
 41                 in = &itv->card->radio_input;
 42         else
 43                 in = &itv->card->audio_inputs[itv->audio_input];
 44 
 45         /* handle muxer chips */
 46         route.input = in->muxer_input;
 47         route.output = 0;
 48         if (itv->card->hw_muxer & IVTV_HW_M52790)
 49                 route.output = M52790_OUT_STEREO;
 50         ivtv_i2c_hw(itv, itv->card->hw_muxer, VIDIOC_INT_S_AUDIO_ROUTING, &route);
 51 
 52         route.input = in->audio_input;
 53         route.output = 0;
 54         if (itv->card->hw_audio & IVTV_HW_MSP34XX)
 55                 route.output = MSP_OUTPUT(MSP_SC_IN_DSP_SCART1);
 56         ivtv_i2c_hw(itv, itv->card->hw_audio, VIDIOC_INT_S_AUDIO_ROUTING, &route);
 57 }
 58 
 59 /* Selects the video input and output according to the current
 60    settings. */
 61 void ivtv_video_set_io(struct ivtv *itv)
 62 {
 63         struct v4l2_routing route;
 64         int inp = itv->active_input;
 65         u32 type;
 66 
 67         route.input = itv->card->video_inputs[inp].video_input;
 68         route.output = 0;
 69         itv->video_dec_func(itv, VIDIOC_INT_S_VIDEO_ROUTING, &route);
 70 
 71         type = itv->card->video_inputs[inp].video_type;
 72 
 73         if (type == IVTV_CARD_INPUT_VID_TUNER) {
 74                 route.input = 0;  /* Tuner */
 75         } else if (type < IVTV_CARD_INPUT_COMPOSITE1) {
 76                 route.input = 2;  /* S-Video */
 77         } else {
 78                 route.input = 1;  /* Composite */
 79         }
 80 
 81         if (itv->card->hw_video & IVTV_HW_GPIO)
 82                 ivtv_gpio(itv, VIDIOC_INT_S_VIDEO_ROUTING, &route);
 83 
 84         if (itv->card->hw_video & IVTV_HW_UPD64031A) {
 85                 if (type == IVTV_CARD_INPUT_VID_TUNER ||
 86                     type >= IVTV_CARD_INPUT_COMPOSITE1) {
 87                         /* Composite: GR on, connect to 3DYCS */
 88                         route.input = UPD64031A_GR_ON | UPD64031A_3DYCS_COMPOSITE;
 89                 } else {
 90                         /* S-Video: GR bypassed, turn it off */
 91                         route.input = UPD64031A_GR_OFF | UPD64031A_3DYCS_DISABLE;
 92                 }
 93                 route.input |= itv->card->gr_config;
 94 
 95                 ivtv_upd64031a(itv, VIDIOC_INT_S_VIDEO_ROUTING, &route);
 96         }
 97 
 98         if (itv->card->hw_video & IVTV_HW_UPD6408X) {
 99                 route.input = UPD64083_YCS_MODE;
100                 if (type > IVTV_CARD_INPUT_VID_TUNER &&
101                     type < IVTV_CARD_INPUT_COMPOSITE1) {
102                         /* S-Video uses YCNR mode and internal Y-ADC, the upd64031a
103                            is not used. */
104                         route.input |= UPD64083_YCNR_MODE;
105                 }
106                 else if (itv->card->hw_video & IVTV_HW_UPD64031A) {
107                   /* Use upd64031a output for tuner and composite(CX23416GYC only) inputs */
108                   if ((type == IVTV_CARD_INPUT_VID_TUNER)||
109                       (itv->card->type == IVTV_CARD_CX23416GYC)) {
110                     route.input |= UPD64083_EXT_Y_ADC;
111                   }
112                 }
113                 ivtv_upd64083(itv, VIDIOC_INT_S_VIDEO_ROUTING, &route);
114         }
115 }
116 
  This page was automatically generated by the LXR engine.