aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Toth <stoth@kernellabs.com>2011-10-10 11:09:55 -0300
committerMauro Carvalho Chehab <mchehab@redhat.com>2011-10-14 17:15:37 -0300
commit2ccdd9a59b3a1ff3bd1be6390c4b1989a008e61c (patch)
tree4a3f6319e7db9034cf84c9bd704b32beb75b38e0
parent[media] cx23885: Name an internal i2c part and declare a bitfield by name (diff)
downloadlinux-dev-2ccdd9a59b3a1ff3bd1be6390c4b1989a008e61c.tar.xz
linux-dev-2ccdd9a59b3a1ff3bd1be6390c4b1989a008e61c.zip
[media] cx25840: Enable support for non-tuner LR1/LR2 audio inputs
The change effects cx23885 boards only and preserves support for existing boards. Essentially, if we're using baseband audio into the cx23885 AV core then we have to patch registers. The cx23885 driver will call with either CX25840_AUDIO8 to signify tuner audio or AUDIO7 to signify baseband audio. If/When we become more comfortable with this change across a series of products then we may decide to relax the cx23885 only restriction. [liplianin@netup.ru: fix missing state declaration] Signed-off-by: Steven Toth <stoth@kernellabs.com> Signed-off-by: Igor M. Liplianin <liplianin@netup.ru> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/media/video/cx25840/cx25840-audio.c10
-rw-r--r--drivers/media/video/cx25840/cx25840-core.c11
2 files changed, 20 insertions, 1 deletions
diff --git a/drivers/media/video/cx25840/cx25840-audio.c b/drivers/media/video/cx25840/cx25840-audio.c
index 34b96c7cfd62..005f11093642 100644
--- a/drivers/media/video/cx25840/cx25840-audio.c
+++ b/drivers/media/video/cx25840/cx25840-audio.c
@@ -480,6 +480,7 @@ void cx25840_audio_set_path(struct i2c_client *client)
static void set_volume(struct i2c_client *client, int volume)
{
+ struct cx25840_state *state = to_state(i2c_get_clientdata(client));
int vol;
/* Convert the volume to msp3400 values (0-127) */
@@ -495,7 +496,14 @@ static void set_volume(struct i2c_client *client, int volume)
}
/* PATH1_VOLUME */
- cx25840_write(client, 0x8d4, 228 - (vol * 2));
+ if (is_cx2388x(state)) {
+ /* for cx23885 volume doesn't work,
+ * the calculation always results in
+ * e4 regardless.
+ */
+ cx25840_write(client, 0x8d4, volume);
+ } else
+ cx25840_write(client, 0x8d4, 228 - (vol * 2));
}
static void set_balance(struct i2c_client *client, int balance)
diff --git a/drivers/media/video/cx25840/cx25840-core.c b/drivers/media/video/cx25840/cx25840-core.c
index 8896999ea6ca..0316e41b55cd 100644
--- a/drivers/media/video/cx25840/cx25840-core.c
+++ b/drivers/media/video/cx25840/cx25840-core.c
@@ -1074,6 +1074,17 @@ static int set_input(struct i2c_client *client, enum cx25840_video_input vid_inp
cx25840_write(client, 0x919, 0x01);
}
+ if (is_cx2388x(state) && (aud_input == CX25840_AUDIO7)) {
+ /* Configure audio from LR1 or LR2 input */
+ cx25840_write4(client, 0x910, 0);
+ cx25840_write4(client, 0x8d0, 0x63073);
+ } else
+ if (is_cx2388x(state) && (aud_input == CX25840_AUDIO8)) {
+ /* Configure audio from tuner/sif input */
+ cx25840_write4(client, 0x910, 0x12b000c9);
+ cx25840_write4(client, 0x8d0, 0x1f063870);
+ }
+
return 0;
}