aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/media/radio/radio-si470x.c33
1 files changed, 12 insertions, 21 deletions
diff --git a/drivers/media/radio/radio-si470x.c b/drivers/media/radio/radio-si470x.c
index 2f680268c545..31da21a38f24 100644
--- a/drivers/media/radio/radio-si470x.c
+++ b/drivers/media/radio/radio-si470x.c
@@ -1176,7 +1176,6 @@ static const struct file_operations si470x_fops = {
1176 * si470x_v4l2_queryctrl - query control 1176 * si470x_v4l2_queryctrl - query control
1177 */ 1177 */
1178static struct v4l2_queryctrl si470x_v4l2_queryctrl[] = { 1178static struct v4l2_queryctrl si470x_v4l2_queryctrl[] = {
1179/* HINT: the disabled controls are only here to satify kradio and such apps */
1180 { 1179 {
1181 .id = V4L2_CID_AUDIO_VOLUME, 1180 .id = V4L2_CID_AUDIO_VOLUME,
1182 .type = V4L2_CTRL_TYPE_INTEGER, 1181 .type = V4L2_CTRL_TYPE_INTEGER,
@@ -1187,18 +1186,6 @@ static struct v4l2_queryctrl si470x_v4l2_queryctrl[] = {
1187 .default_value = 15, 1186 .default_value = 15,
1188 }, 1187 },
1189 { 1188 {
1190 .id = V4L2_CID_AUDIO_BALANCE,
1191 .flags = V4L2_CTRL_FLAG_DISABLED,
1192 },
1193 {
1194 .id = V4L2_CID_AUDIO_BASS,
1195 .flags = V4L2_CTRL_FLAG_DISABLED,
1196 },
1197 {
1198 .id = V4L2_CID_AUDIO_TREBLE,
1199 .flags = V4L2_CTRL_FLAG_DISABLED,
1200 },
1201 {
1202 .id = V4L2_CID_AUDIO_MUTE, 1189 .id = V4L2_CID_AUDIO_MUTE,
1203 .type = V4L2_CTRL_TYPE_BOOLEAN, 1190 .type = V4L2_CTRL_TYPE_BOOLEAN,
1204 .name = "Mute", 1191 .name = "Mute",
@@ -1207,10 +1194,6 @@ static struct v4l2_queryctrl si470x_v4l2_queryctrl[] = {
1207 .step = 1, 1194 .step = 1,
1208 .default_value = 1, 1195 .default_value = 1,
1209 }, 1196 },
1210 {
1211 .id = V4L2_CID_AUDIO_LOUDNESS,
1212 .flags = V4L2_CTRL_FLAG_DISABLED,
1213 },
1214}; 1197};
1215 1198
1216 1199
@@ -1267,21 +1250,29 @@ static int si470x_vidioc_s_input(struct file *file, void *priv, unsigned int i)
1267static int si470x_vidioc_queryctrl(struct file *file, void *priv, 1250static int si470x_vidioc_queryctrl(struct file *file, void *priv,
1268 struct v4l2_queryctrl *qc) 1251 struct v4l2_queryctrl *qc)
1269{ 1252{
1270 unsigned char i; 1253 unsigned char i = 0;
1271 int retval = -EINVAL; 1254 int retval = -EINVAL;
1272 1255
1273 /* safety checks */ 1256 /* abort if qc->id is below V4L2_CID_BASE */
1274 if (!qc->id) 1257 if (qc->id < V4L2_CID_BASE)
1275 goto done; 1258 goto done;
1276 1259
1260 /* search video control */
1277 for (i = 0; i < ARRAY_SIZE(si470x_v4l2_queryctrl); i++) { 1261 for (i = 0; i < ARRAY_SIZE(si470x_v4l2_queryctrl); i++) {
1278 if (qc->id == si470x_v4l2_queryctrl[i].id) { 1262 if (qc->id == si470x_v4l2_queryctrl[i].id) {
1279 memcpy(qc, &(si470x_v4l2_queryctrl[i]), sizeof(*qc)); 1263 memcpy(qc, &(si470x_v4l2_queryctrl[i]), sizeof(*qc));
1280 retval = 0; 1264 retval = 0; /* found */
1281 break; 1265 break;
1282 } 1266 }
1283 } 1267 }
1284 1268
1269 /* disable unsupported base controls */
1270 /* to satisfy kradio and such apps */
1271 if ((retval == -EINVAL) && (qc->id < V4L2_CID_LASTP1)) {
1272 qc->flags = V4L2_CTRL_FLAG_DISABLED;
1273 retval = 0;
1274 }
1275
1285done: 1276done:
1286 if (retval < 0) 1277 if (retval < 0)
1287 printk(KERN_WARNING DRIVER_NAME 1278 printk(KERN_WARNING DRIVER_NAME