V4L/DVB (3599): Implement new routing commands for wm8775 and cs53l32a.
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:
parent
a20c522498
commit
7fa033b103
4 changed files with 89 additions and 10 deletions
|
@ -59,20 +59,25 @@ static int cs53l32a_read(struct i2c_client *client, u8 reg)
|
|||
static int cs53l32a_command(struct i2c_client *client, unsigned int cmd,
|
||||
void *arg)
|
||||
{
|
||||
struct v4l2_audio *input = arg;
|
||||
struct v4l2_routing *route = arg;
|
||||
struct v4l2_control *ctrl = arg;
|
||||
|
||||
switch (cmd) {
|
||||
case VIDIOC_S_AUDIO:
|
||||
case VIDIOC_INT_G_AUDIO_ROUTING:
|
||||
route->input = (cs53l32a_read(client, 0x01) >> 4) & 3;
|
||||
route->output = 0;
|
||||
break;
|
||||
|
||||
case VIDIOC_INT_S_AUDIO_ROUTING:
|
||||
/* There are 2 physical inputs, but the second input can be
|
||||
placed in two modes, the first mode bypasses the PGA (gain),
|
||||
the second goes through the PGA. Hence there are three
|
||||
possible inputs to choose from. */
|
||||
if (input->index > 2) {
|
||||
v4l_err(client, "Invalid input %d.\n", input->index);
|
||||
if (route->input > 2) {
|
||||
v4l_err(client, "Invalid input %d.\n", route->input);
|
||||
return -EINVAL;
|
||||
}
|
||||
cs53l32a_write(client, 0x01, 0x01 + (input->index << 4));
|
||||
cs53l32a_write(client, 0x01, 0x01 + (route->input << 4));
|
||||
break;
|
||||
|
||||
case VIDIOC_G_CTRL:
|
||||
|
|
|
@ -79,21 +79,26 @@ static int wm8775_command(struct i2c_client *client, unsigned int cmd,
|
|||
void *arg)
|
||||
{
|
||||
struct wm8775_state *state = i2c_get_clientdata(client);
|
||||
struct v4l2_audio *input = arg;
|
||||
struct v4l2_routing *route = arg;
|
||||
struct v4l2_control *ctrl = arg;
|
||||
|
||||
switch (cmd) {
|
||||
case VIDIOC_S_AUDIO:
|
||||
case VIDIOC_INT_G_AUDIO_ROUTING:
|
||||
route->input = state->input;
|
||||
route->output = 0;
|
||||
break;
|
||||
|
||||
case VIDIOC_INT_S_AUDIO_ROUTING:
|
||||
/* There are 4 inputs and one output. Zero or more inputs
|
||||
are multiplexed together to the output. Hence there are
|
||||
16 combinations.
|
||||
If only one input is active (the normal case) then the
|
||||
input values 1, 2, 4 or 8 should be used. */
|
||||
if (input->index > 15) {
|
||||
v4l_err(client, "Invalid input %d.\n", input->index);
|
||||
if (route->input > 15) {
|
||||
v4l_err(client, "Invalid input %d.\n", route->input);
|
||||
return -EINVAL;
|
||||
}
|
||||
state->input = input->index;
|
||||
state->input = route->input;
|
||||
if (state->muted)
|
||||
break;
|
||||
wm8775_write(client, R21, 0x0c0);
|
||||
|
|
34
include/media/cs53l32a.h
Normal file
34
include/media/cs53l32a.h
Normal file
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
cs53l32a.h - definition for cs53l32a inputs and outputs
|
||||
|
||||
Copyright (C) 2006 Hans Verkuil (hverkuil@xs4all.nl)
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef _CS53L32A_H_
|
||||
#define _CS53L32A_H_
|
||||
|
||||
/* There are 2 physical inputs, but the second input can be
|
||||
placed in two modes, the first mode bypasses the PGA (gain),
|
||||
the second goes through the PGA. Hence there are three
|
||||
possible inputs to choose from. */
|
||||
|
||||
/* CS53L32A HW inputs */
|
||||
#define CS53L32A_IN0 0
|
||||
#define CS53L32A_IN1 1
|
||||
#define CS53L32A_IN2 2
|
||||
|
||||
#endif
|
35
include/media/wm8775.h
Normal file
35
include/media/wm8775.h
Normal file
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
wm8775.h - definition for wm8775 inputs and outputs
|
||||
|
||||
Copyright (C) 2006 Hans Verkuil (hverkuil@xs4all.nl)
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef _WM8775_H_
|
||||
#define _WM8775_H_
|
||||
|
||||
/* The WM8775 has 4 inputs and one output. Zero or more inputs
|
||||
are multiplexed together to the output. Hence there are
|
||||
16 combinations.
|
||||
If only one input is active (the normal case) then the
|
||||
input values 1, 2, 4 or 8 should be used. */
|
||||
|
||||
#define WM8775_AIN1 1
|
||||
#define WM8775_AIN2 2
|
||||
#define WM8775_AIN3 4
|
||||
#define WM8775_AIN4 8
|
||||
|
||||
#endif
|
Loading…
Reference in a new issue