Commit 7fa033b1 authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab

V4L/DVB (3599): Implement new routing commands for wm8775 and cs53l32a.

Signed-off-by: default avatarHans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent a20c5224
...@@ -59,20 +59,25 @@ static int cs53l32a_read(struct i2c_client *client, u8 reg) ...@@ -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, static int cs53l32a_command(struct i2c_client *client, unsigned int cmd,
void *arg) void *arg)
{ {
struct v4l2_audio *input = arg; struct v4l2_routing *route = arg;
struct v4l2_control *ctrl = arg; struct v4l2_control *ctrl = arg;
switch (cmd) { 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 /* There are 2 physical inputs, but the second input can be
placed in two modes, the first mode bypasses the PGA (gain), placed in two modes, the first mode bypasses the PGA (gain),
the second goes through the PGA. Hence there are three the second goes through the PGA. Hence there are three
possible inputs to choose from. */ possible inputs to choose from. */
if (input->index > 2) { if (route->input > 2) {
v4l_err(client, "Invalid input %d.\n", input->index); v4l_err(client, "Invalid input %d.\n", route->input);
return -EINVAL; return -EINVAL;
} }
cs53l32a_write(client, 0x01, 0x01 + (input->index << 4)); cs53l32a_write(client, 0x01, 0x01 + (route->input << 4));
break; break;
case VIDIOC_G_CTRL: case VIDIOC_G_CTRL:
......
...@@ -79,21 +79,26 @@ static int wm8775_command(struct i2c_client *client, unsigned int cmd, ...@@ -79,21 +79,26 @@ static int wm8775_command(struct i2c_client *client, unsigned int cmd,
void *arg) void *arg)
{ {
struct wm8775_state *state = i2c_get_clientdata(client); struct wm8775_state *state = i2c_get_clientdata(client);
struct v4l2_audio *input = arg; struct v4l2_routing *route = arg;
struct v4l2_control *ctrl = arg; struct v4l2_control *ctrl = arg;
switch (cmd) { 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 /* There are 4 inputs and one output. Zero or more inputs
are multiplexed together to the output. Hence there are are multiplexed together to the output. Hence there are
16 combinations. 16 combinations.
If only one input is active (the normal case) then the If only one input is active (the normal case) then the
input values 1, 2, 4 or 8 should be used. */ input values 1, 2, 4 or 8 should be used. */
if (input->index > 15) { if (route->input > 15) {
v4l_err(client, "Invalid input %d.\n", input->index); v4l_err(client, "Invalid input %d.\n", route->input);
return -EINVAL; return -EINVAL;
} }
state->input = input->index; state->input = route->input;
if (state->muted) if (state->muted)
break; break;
wm8775_write(client, R21, 0x0c0); wm8775_write(client, R21, 0x0c0);
......
/*
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
/*
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
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment