Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4c3764d1 authored by Steven Toth's avatar Steven Toth Committed by Mauro Carvalho Chehab
Browse files

[media] cx25840 / cx23885: Fixing audio/volume regression



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: default avatarSteven Toth <stoth@kernellabs.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent c81c0060
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -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,
+1 −9
Original line number Diff line number Diff line
@@ -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,13 +495,6 @@ 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));
}