diff options
Diffstat (limited to 'drivers/media/v4l2-core/tuner-core.c')
| -rw-r--r-- | drivers/media/v4l2-core/tuner-core.c | 17 | 
1 files changed, 16 insertions, 1 deletions
diff --git a/drivers/media/v4l2-core/tuner-core.c b/drivers/media/v4l2-core/tuner-core.c index b5a819af2b8..b5a8aac2e12 100644 --- a/drivers/media/v4l2-core/tuner-core.c +++ b/drivers/media/v4l2-core/tuner-core.c @@ -1013,6 +1013,11 @@ static void set_radio_freq(struct i2c_client *c, unsigned int freq)  	t->standby = false;  	analog_ops->set_params(&t->fe, ¶ms); +	/* +	 * The tuner driver might decide to change the audmode if it only +	 * supports stereo, so update t->audmode. +	 */ +	t->audmode = params.audmode;  }  /* @@ -1235,8 +1240,18 @@ static int tuner_s_tuner(struct v4l2_subdev *sd, struct v4l2_tuner *vt)  	if (set_mode(t, vt->type))  		return 0; -	if (t->mode == V4L2_TUNER_RADIO) +	if (t->mode == V4L2_TUNER_RADIO) {  		t->audmode = vt->audmode; +		/* +		 * For radio audmode can only be mono or stereo. Map any +		 * other values to stereo. The actual tuner driver that is +		 * called in set_radio_freq can decide to limit the audmode to +		 * mono if only mono is supported. +		 */ +		if (t->audmode != V4L2_TUNER_MODE_MONO && +		    t->audmode != V4L2_TUNER_MODE_STEREO) +			t->audmode = V4L2_TUNER_MODE_STEREO; +	}  	set_freq(t, 0);  	return 0;  |