Преглед на файлове

[media] rtl2832_sdr: clamp bandwidth to nearest legal value in automode

Clamp bandwidth to nearest legal value in automode in order to pass
v4l2-compliance test.

Reported-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Antti Palosaari <crope@iki.fi>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
Antti Palosaari преди 11 години
родител
ревизия
ea4d04f92c
променени са 1 файла, в които са добавени 10 реда и са изтрити 2 реда
  1. 10 2
      drivers/staging/media/rtl2832u_sdr/rtl2832_sdr.c

+ 10 - 2
drivers/staging/media/rtl2832u_sdr/rtl2832_sdr.c

@@ -1322,8 +1322,16 @@ static int rtl2832_sdr_s_ctrl(struct v4l2_ctrl *ctrl)
 	switch (ctrl->id) {
 	switch (ctrl->id) {
 	case V4L2_CID_RF_TUNER_BANDWIDTH_AUTO:
 	case V4L2_CID_RF_TUNER_BANDWIDTH_AUTO:
 	case V4L2_CID_RF_TUNER_BANDWIDTH:
 	case V4L2_CID_RF_TUNER_BANDWIDTH:
-		if (s->bandwidth_auto->val)
-			s->bandwidth->val = s->f_adc;
+		/* TODO: these controls should be moved to tuner drivers */
+		if (s->bandwidth_auto->val) {
+			/* Round towards the closest legal value */
+			s32 val = s->f_adc + s->bandwidth->step / 2;
+			u32 offset;
+			val = clamp(val, s->bandwidth->minimum, s->bandwidth->maximum);
+			offset = val - s->bandwidth->minimum;
+			offset = s->bandwidth->step * (offset / s->bandwidth->step);
+			s->bandwidth->val = s->bandwidth->minimum + offset;
+		}
 
 
 		c->bandwidth_hz = s->bandwidth->val;
 		c->bandwidth_hz = s->bandwidth->val;