[media] cx25840 / cx23885: Fixing audio/volume regression
authorSteven Toth <stoth@kernellabs.com>
Wed, 4 Jan 2012 13:47:57 +0000 (10:47 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Wed, 4 Jan 2012 22:47:11 +0000 (20:47 -0200)
Since the conversion to subdev in Oct 2010 the audio controls have
not functioned correctly in the cx23885 driver. Passing values of
0-3f did not translate into meaningfull register writes. I've
converted the cx23885 driver to match the cx25840 volume control
definition and now audio is working reliably again.

Signed-off-by: Steven Toth <stoth@kernellabs.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/cx23885/cx23885-video.c
drivers/media/video/cx25840/cx25840-audio.c

index 7415524..7f3b973 100644 (file)
@@ -253,9 +253,9 @@ static struct cx23885_ctrl cx23885_ctls[] = {
                        .id            = V4L2_CID_AUDIO_VOLUME,
                        .name          = "Volume",
                        .minimum       = 0,
-                       .maximum       = 0x3f,
-                       .step          = 1,
-                       .default_value = 0x3f,
+                       .maximum       = 65535,
+                       .step          = 65535 / 100,
+                       .default_value = 65535,
                        .type          = V4L2_CTRL_TYPE_INTEGER,
                },
                .reg                   = PATH1_VOL_CTL,
index 005f110..34b96c7 100644 (file)
@@ -480,7 +480,6 @@ 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) */
@@ -496,14 +495,7 @@ static void set_volume(struct i2c_client *client, int volume)
        }
 
        /* PATH1_VOLUME */
-       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));
+       cx25840_write(client, 0x8d4, 228 - (vol * 2));
 }
 
 static void set_balance(struct i2c_client *client, int balance)